North Hub
Warehouse operations, last-mile delivery, and COD settlement across a store network — web, customer app, picker, driver, admin, and one GraphQL API.
System
Customers shop by store and slot. The warehouse picks into baskets. Till verifies. Drivers collect cash and return assets. One catalog, one order, every screen.
Web storefront and mobile app share the same journeys — store, home modules, catalog, cart, checkout, tracking.
Picker sessions, till verification, ready-to-dispatch, and driver collection — with physical baskets and paid bags.
Admin runs catalog, page composer, geo zones, slots, staff, vouchers, vehicles, and driver settlement.
How it works
Customers place an order for a delivery slot. Pickers fill baskets, till verifies, drivers collect COD and return assets.
Surfaces
Customers shop on web and mobile. The store runs admin, picker, till, and driver. The platform is one GraphQL API and a media CDN.
Desktop shop — same journeys as the app
Browse, cart, checkout, orders
Catalog, composer, till, dispatch
Session, baskets, substitutes
Collect, COD, wallet, return
Hapi + Apollo — one contract
Uploads and WebP thumbs
Types, brands, categories, tags
BOGO, tiered, min spend
Home, category, collection pages
FCM topics and device tokens
Polygons, copy-week slots
Zone assign, area lock, live track
Capacity, zones, drivers
COD, card, online checkout
Store promotions on the shop
Scan, bags, print, dispatch
Technology
One GraphQL API. Docker Compose. Mongo and Redis. Sage and forest greens for the UI — not a consumer brand palette.
App Router, Apollo 4, Redux, Final Form.
Customer, picker, and driver apps.
Same GraphQL journeys as the app.
Merged schema and resolvers per domain.
Mongoose 8. Sessions in Redis. JWT.
Auth and session event stream.
Topics for client, driver, picker.
Zones, addresses, on-the-way coords.
Uploads, WebP thumbs, object buckets.
Login, register, device tokens, roles.
Checkout methods plus driver collection.
API, admin, assets, nginx, Prometheus.
Architecture
Every client talks GraphQL. Media is a separate Express service. Orders move through locks and stages — not a separate warehouse system.
Business logic
Each warehouse / store is its own fulfillment location — stock, staff, and storefront routing — on one GraphQL API.
One shop. Address and slot route the cart to the right warehouse / store.
Catalog, stores, composer, users, vouchers
GraphQL · MongoDB · Redis
Per-store stock, price, and flags
Business logic
One order stays on one warehouse / store — from checkout through till, the rider, and COD settlement.
Cart + original order
Zone + store on cart
Baskets + session lock
Lines, bags, print
Ready to dispatch
On the way → door
Driver wallet
Settle at the store
Picking
Till
Delivery + CODAyesha Khan picks into baskets. Sara Malik verifies at till and bags the order. Ali Raza collects, delivers, and takes cash.
Cash sits on the driver wallet until the store manager settles it and the baskets come back.
Fulfillment
Every order carries a current stage. On the way is a live sub-status while the driver is delivering.
Created from cart
Locked to picker
Till queue
Scan, bags, print
Await driver
Optional on_the_way
COD + signature
Baskets + wallet
Picker selection, picking session, till, and driver — with expiry so work does not stall.
Normal, fridge, and freezer lines, plus items marked unfit for a standard basket.
Picking lock
Baskets
Fridge / freezerAdmin
Today’s orders, till queue, drivers on the road, and the catalog — one console for managers and till staff.
Store dashboard — orders, revenue, till queue, and recent tickets in one view.
Catalog
Variations, barcodes, brands, per-store quantity and price, gallery, tax, and service fee on the order.
Dairy
Produce
Bakery
PantryCategory tree, brands, manufacturers, types, attributes, tags, and extra fields.
Status and stock per store — the same SKU, different aisle reality.
CMS
The same modules paint the customer app and the web shop. Page types: home, category, store, brand, product, collection, blank.
Till
Open a shift, start from the barcode, verify each line, assign baskets, add bags, print the receipt, send it to dispatch.
Customer app
React Native. Composer home, categories, product, cart drawer, slot checkout, live tracking.
Picker & driver
The picker finishes at picking-complete. The driver works a geofenced area, locks the order, and the wallet tracks COD against the office deposit.
Last mile
Each driver is assigned through a vehicle to delivery polygons. An order locks to one rider. On the way streams location and ETA to the customer.
Dispatch map — polygons, assigned rider, live route, ETA.
Customer web
The web storefront is the customer app laid out for a browser — header, rails, cart drawer, two-column checkout, account sidebar. One GraphQL contract.
Home
Catalog
Cart| Journey | App | Web |
|---|---|---|
| Store | Store picker before browse | Header “Deliver to …” picker |
| Home | Composer home page | Header + hero + rails / grid |
| Catalog / product | Category and product screens | Category and product grid |
| Cart | Right-drawer cart | Cart badge + right drawer + cart page |
| Checkout | Address + slot + voucher + pay | Two-column checkout, same steps |
| Orders | Orders tab + serial detail | Account sidebar + tracking stepper |
Customer web
Composer home on a wide canvas. Category sidebar, product grid, and Add — the aisle on a laptop.
Homepage — header, search, store, hero, category cards, product rail.
Catalog — sidebar categories, filters, product grid, Add.
Customer web
Qty steppers in the drawer. Checkout collects address, slot, voucher, and payment, then places the order.
Right cart drawer — lines, subtotal, go to checkout.
Two-column checkout — address, slot, voucher, payment, invoice.
Customer web
The account sidebar holds profile, orders, and addresses. Tracking follows the same stages the warehouse uses.
Payments
Checkout captures the method. Drivers collect cash on the doorstep. The wallet settles with the office.
App checkout
Web checkout
COD at the doorThe default path. Driver records the amount, notes, and hands it into the COD wallet.
On-site card at the door, or card on checkout — stored on the order with a transaction id.
Online checkout for wallets and card — webhook-confirmed before the picker starts.
Platform
One schema for shop, admin, picker, and driver. Domain modules, not a separate REST catalog.
login, staff, device tokens
zones, point-in-polygon
client + admin queries
one cart per customer
create, cancel, revert
copy day, zone limits
picker till driver sessions
physical assets
BOGO + tiered
Composer
system configs
topic broadcasts
Integrations
Maps for zones and the last mile. Push for every role. Files for the catalog. Events for auth sessions.
Store center, delivery addresses, geo polygons, driver on-the-way coordinates.
Device tokens and topics for customer, driver, and picker — plus admin broadcasts.
Sharp WebP thumbs on upload, CDN object URLs on the product and composer pages.
Catalog, orders, and carts in Mongo. JWT sessions in Redis.
Auth and session events so login and logout stay observable.
COD wallet, card, and online checkout with webhook confirmation.
Merchandising
A pin on the map decides the store and the delivery polygon. A slot only appears if that zone still has capacity. Drivers are assigned to the same polygons.
Polygons around each store. Point-in-polygon decides the warehouse, the slot, and which drivers may take the drop.
Copy a week, cap orders per zone, and show the customer only what is still open.
Percent, fixed, BOGO, and tiered rules — min spend, applies-to, and excludes.
The loop
The customer never sees a different product than the picker, the till, or the driver. The original order is frozen at checkout.
Picks a store, fills a cart, books a slot, pays, and watches the same stages on web or app.
Picker, till, and dispatcher move the same lines through baskets, bags, and the print receipt.
Driver collects, marks on the way, delivers, takes COD, returns baskets, and settles the wallet.
Project showcase
Web and app for the customer. Admin, picker, till, and driver for the store. One catalog. One order. One doorstep.