AR

Sendy

Sendy is a multi-tenant delivery and e-commerce operations platform: one backend serving admin dashboards, a driver app, customer storefronts, and external systems for delivery and retail businesses operating in Iraq. Ahmed builds its backend end-to-end: the API, the database and the provider integrations, then wires the React frontends to it. Live, in active production development.

Deliverables

ASP.NET Core (.NET 8) API

PostgreSQL / EF Core

SignalR realtime (3 hubs)

Provider integration framework

AI messaging & MCP server

API powering 5 React frontends

Year

2026

Project Role

Backend Developer

Live Website

System architecture

How it is built

Client apps

Dashboard

Merchants, admins, delivery companies, call centre, promoters

React 19 · Vite 8 · TypeScript

Driver app

Drivers on the road (PWA)

React 19 · Vite 8 · PWA

Storefronts

Shoppers, on subdomains and custom domains

React 19 · Cloudflare Workers

Customer mini-app

Order tracking inside the SuperQi ecosystem

React 19 · Vite

Developer docs

External systems integrating by API key

Next.js 15

Background jobs

  • Webhook dispatch with outbox and retry
  • Payout job for wallets and cash handover
  • AI message dispatch for the store agents
  • Meta webhook intake, sweep and connection health

Realtime

  • TrackingHub — live order status and driver location
  • StoreConversationHub — the omnichannel inbox
  • WebsiteChatHub — the storefront chat widget

Sendy API — modular monolith

ASP.NET Core 8 · C# · EF Core 8 · SignalR · Hangfire · JWT + API keys

Route surfaces

/auth/admin/store/delivery-company/driver/ecommerce-platform/branch/promoter/public

Layers

  1. 01Api — 164 controllers behind per-area base controllers, 701 permission-gated actions, per-key rate limits
  2. 02Application — services, validators, the 243-key permission catalogue, AI tool orchestration
  3. 03Domain — 99 entities: stores, orders, fulfillment, catalog, finance, messaging, integrations
  4. 04Infrastructure — EF Core + Npgsql, interceptors that push orders to providers, adapters, hubs, jobs

Provider adapters

  • Delivery — Al-Waseet, Boxy, Hi-Express (order push, status sync, failover)
  • Payments — QiCard, AsiaPay, ZainCash, Wayl, SwiftPayIQ (HMAC-verified webhooks)
  • Meta Graph — WhatsApp, Instagram and Messenger channels
  • Anthropic Claude and OpenAI — store-selectable AI agents
  • Cloudflare custom hostnames — verified storefront domains
  • S3 and Azure Blob storage · distance service

Data

PostgreSQL

99 tables, 64 EF Core migrations, tenant-scoped by store

Redis

Opt-in caching and rate-limit counters

Object storage

Product media, labels, receipts, KYC documents

Tenancy
Every store isolated on one codebase and database; delivery companies, branches and platforms each get their own surface
Identity
JWT sessions for the dashboards and a parallel API-key surface for external store systems, one permission model behind both
Authorization
243 named permissions enforced on 701 controller actions, tenant-scoped, with per-key rate limiting
API
164 controllers · 1,120 HTTP endpoints · 9 route surfaces
Data model
99 domain entities mapped 1:1 to 99 PostgreSQL tables · 64 migrations
Realtime
3 SignalR hubs: tracking, store conversations, website chat; tokenized public tracking links
Integrations
3 delivery companies + 5 payment gateways behind one provider contract; Meta, AI and custom-domain adapters
Quality
812 xUnit test methods (758 facts + 54 theories); containerised deployments
Status
Live at sendyiq.com, in production development since April 2026

One request, end to end: a store hands an order to a delivery company

  1. 01The merchant creates the order in the dashboard wizard — or an external system posts it with a store API key.
  2. 02The JWT or API-key middleware resolves the store; the same permission model authorizes either caller.
  3. 03The order is written with its status history; an EF Core interceptor notices the change and enqueues the provider push.
  4. 04The store's delivery-provider adapter maps the order to Al-Waseet, Boxy or Hi-Express and sends it; failover picks the next configured provider.
  5. 05The provider's webhook arrives HMAC-verified; a replayed or out-of-order status cannot corrupt the order.
  6. 06Status changes fan out over the TrackingHub to the dashboard, the driver app and the customer's tokenized tracking link.
  7. 07Outbound webhooks to the store's own systems go through the outbox with retries on Hangfire.
  8. 08On delivery, COD and commissions settle into wallets; payouts and cash handover run as background jobs.

Apps overview

The apps

Merchant dashboard

Store owners and staff: products, orders, deliveries, payments, customers and support in one place, Arabic or English.

React 19 · Vite 8 · TypeScript · role-based navigation · one SPA also serving admins, delivery companies, call centre and promoters

  • Home with the order lifecycle funnel and daily revenue
  • Orders list with bulk actions, import, QR and print; a create-order wizard with map picker and variants
  • Omnichannel inbox (WhatsApp, Instagram, Messenger, website chat) and the AI agent setup
  • Cashier / POS sessions, inventory, warehouses, suppliers, expenses and the storefront studio

Admin and delivery-company consoles

Sendy's own operators, and the delivery companies with their fleets, control tower and wallets.

Same SPA, separate route surfaces and permission sets per role

  • Platform overview: merchants, delivery companies, subscriptions, AI usage, audit logs
  • Delivery company control tower with live map, fleet drivers and warehouses
  • Wallets, ledgers, cash handovers and payouts
  • Provider links, API keys, webhooks and MCP access per tenant

Driver app and customer mini-app

Drivers scanning and delivering on the road; customers tracking an order from inside the SuperQi ecosystem.

React 19 PWAs · QR scanning · live location over SignalR

  • Driver home on a live map with the active order card and navigation hand-off
  • Order queue, status updates with tracking panel, wallet and handovers
  • Customer search and tracking by order number or QR, with the journey timeline
  • Support requests with photos from the mini-app

Storefronts, landing and developer docs

Shoppers on each store's own domain, prospects on sendyiq.com, and developers integrating by API key.

React 19 storefront templates on Cloudflare Workers subdomains and verified custom domains · Next.js 15 docs

  • Storefront templates with cart, checkout and the website chat widget
  • Slug subdomains and Cloudflare-verified custom domains with TLS
  • Marketing site with solutions, pricing and delivery-company pages
  • Store API reference with a try-it console and Postman collection

What it does

Modules

01

Orders & fulfillment

  • Create-order wizard, bulk actions, import, QR and print
  • Status history with tokenized public tracking links
  • Driver assignment, scan flows and live location
  • Returns, ratings and order-payment links
02

Catalog & inventory

  • Products with variants, images, categories and bulk import
  • Warehouses, stock movements, suppliers and purchase orders
  • Package sizes and print templates
  • Store product limits per subscription plan
03

Storefronts & domains

  • Storefront studio with templates and live preview
  • Slug subdomains on Cloudflare Workers
  • Custom domains verified through Cloudflare with TLS
  • Website chat widget wired into the inbox
04

Delivery providers

  • Al-Waseet, Boxy and Hi-Express behind one contract
  • Automatic order push and status sync via EF Core interceptors
  • Failover across configured providers
  • Per-store credentials and provider links
05

Payments & finance

  • QiCard, AsiaPay, ZainCash, Wayl and SwiftPayIQ gateways
  • Wallets, commissions, cash handover and payouts
  • Invoices, subscription billing and coupons
  • Expenses and store analytics
06

Cashier / POS

  • Cashier sessions with open, close and bulk import
  • Thermal label and receipt printing
  • Pinned products and quick sale
  • Printers and print templates per store
07

Messaging & AI

  • WhatsApp, Instagram, Messenger and website chat in one conversation model
  • Store-selectable AI agent (Claude or GPT) with tool access to store operations
  • AI usage metered per store for billing
  • MCP server with OAuth and dynamic client registration
08

Integrations

  • Store API keys mirroring the dashboard surface
  • Outbound webhooks with outbox, retry and delivery log
  • E-commerce platform portal for multi-store operators
  • Developer docs with try-it console
09

Platform operations

  • Merchants, delivery companies, drivers and KYC verification
  • Support tickets, ratings and demo requests
  • Audit logs, login activity and order status history
  • Access management and subscriptions

Engineering stories

The problems worth telling

The problem

Each store on Sendy needs its own delivery partners, payment methods, staff roles, and public storefront, fully isolated from every other store's data, on one shared codebase.

Store capabilities have to be reachable two ways: from Sendy's own dashboards (JWT sessions) and from external systems integrating directly with a store (API keys), both guarded by the same permission model.

Three delivery companies and five payment gateways expose their own APIs and webhook formats, and have to be normalized behind one internal contract without a provider outage or a replayed webhook corrupting order state.

Customers expect real-time order status and support across WhatsApp, Instagram, Messenger, and web chat, routed to whichever AI agent a store has configured, and billed back to that store.

Role & responsibilities

Backend architecture across a 164-controller, 1,120-endpoint ASP.NET Core API, with 64 EF Core migrations for 99 domain entities.

The JWT and API-key authentication surfaces, plus the permission model guarding both: 243 permissions enforced across 701 endpoint checks.

The delivery-provider and payment-gateway integration layer: webhook verification, order sync, and retry handling.

Real-time features over SignalR (order tracking and customer chat) across three hubs.

The AI/MCP surface: omnichannel messaging routed to Claude or OpenAI, and an OAuth-secured MCP server exposing store operations to agents.

812 xUnit test methods backing the API.

Two authentication surfaces, one permission model

Every store capability had to be reachable both from Sendy's own session-based dashboards and from external systems calling in with an API key, without maintaining two separate authorization codepaths that could drift apart. A single permission model (231 named permissions enforced across 679 endpoint checks) is evaluated for both JWT and API-key requests, with API keys additionally scoped and rate-limited per store, so a permission change only has to be made once.

Normalizing delivery and payment providers

Three delivery companies (Al-Waseet, Boxy, Hi-Express) and five payment gateways (QiCard, AsiaPay, ZainCash, Wayl, SwiftPayIQ) each expose different APIs and webhook shapes, and a store can plug in more than one at a time. A pluggable provider framework sits behind one internal contract, with HMAC-verified webhooks, per-store credentials, and EF Core interceptors driving automatic order push and status sync, backed by outbox/retry delivery tracking on Hangfire. Adding or swapping a provider is a configuration and adapter change, not a rewrite of order logic, and webhook failures retry instead of silently dropping order updates.

Omnichannel messaging and AI agents

WhatsApp, Instagram, Messenger, and website chat are normalized into a single conversation model, with each store choosing which AI agent (Anthropic Claude or OpenAI GPT) answers on its behalf, metered per store for billing.

An OAuth-secured MCP server with dynamic client registration exposes a scoped set of store operations as MCP tools rather than the full API surface, so AI agents integrate against a narrow, auditable tool surface instead of broad platform access.

Order tracking in real time

A customer places an order on a storefront or via an integrated channel; it lands in the store's data through the permission-checked API.

EF Core interceptors push the order to the store's chosen delivery provider; provider status changes arrive as HMAC-verified webhooks processed through outbox/retry on Hangfire.

Status updates broadcast over SignalR hubs to the dashboards and to a tokenized public tracking link, so customers see live status without an account and store staff see it on the admin dashboard and driver app.

Outcome

Five React 19 + TypeScript frontends: admin dashboard, driver app, storefront, customer mini-app, and a Next.js developer-docs site, all Arabic/English, running live production operations for delivery and retail businesses in Iraq. The platform spans 164 controllers, 99 domain entities, and 64 migrations, backed by 812 xUnit test methods, with public storefronts on slug subdomains and Cloudflare-verified custom domains.

What I learned

Provider abstraction pays for itself the moment a second provider needs the same capability.

A permission model shared across auth schemes is worth the extra complexity: it's the only way two very different client types don't end up with divergent authorization bugs.

Webhook reliability is a design problem, not an edge case: outbox/retry needs to be there from the start.

Selected Work

Work

that shipped

to production.

Sendy landing page — run every order from first click to final delivery

Sendy

Multi-tenant delivery and e-commerce operations platform: one ASP.NET Core API, five React frontends, real-time tracking and AI-powered store tooling.

Web Platform • Logistics & E-Commerce • 2026

IMMAR — landing page hero

IMMAR

Multi-teacher e-learning platform for Iraq: one ASP.NET Core API, a React dashboard and a Flutter student app, with protected video, exams and settlements.

E-Learning Platform • Education • 2026

Nawa project card

Nawa

Multi-tenant AI call-center and service operations platform: real-time voice and chat over WebRTC and Twilio, policy-driven tool orchestration, billable usage.

AI Operations Platform • Voice & Chat • 2025

Madhmoon project card

Madhmoon

Fintech innovation project for digital inclusion in Iraq, designed, validated and pitched by a multidisciplinary team. First place at the Fintech Hackathon.

Fintech Concept • Fintech Hackathon • 1st Place

NANO project card

NANO

AI-powered OCR web app that extracts and digitizes text from images in real time. First place at the First ITS Hackathon.

AI OCR Web App • First ITS Hackathon • 1st Place

Core Banking project card

Core Banking

Core banking system concept covering transactional flows and consistency requirements. Second place at the Second ITS Hackathon.

Fintech Concept • Second ITS Hackathon • 2nd Place

Form Builder project card

Form Builder

A form builder built for usability and rapid, collaborative delivery under hackathon time pressure. Second place at Entrepreneurship Week.

Web App • Entrepreneurship Week • 2nd Place

Experience

Where I learned it.

Ahmed Imad Tarq at the Fintech Hackathon final ceremony

Want the full story?

The CV has the details: roles, stack, hackathons and education.

Download My CVPDF, One Page

Or just email, no pressure

ahmed.emadtarq@gmail.com