OnDelivery: the architecture behind the platform
How I structured OnDelivery: a monorepo, several NestJS and Express.js services, messaging with BullMQ and RabbitMQ and container-based delivery.

1. Context & Engineering Challenge
OnDelivery is the platform I build for restaurants and delivery businesses: orders, point of sale, deliveries, catalog, inventory, cash register, coupons, loyalty and an online store for customers, plus apps for waiters, couriers, the kitchen (KDS), kiosks and QR menus. I organized the code as a monorepo with several services. The backend uses NestJS and Express.js on PostgreSQL, with BullMQ and RabbitMQ for asynchronous processing; the front-ends are built with Next.js and React. Everything runs in containers, with tests and CI on GitHub Actions.
What demands the most attention in a platform like this: • Keeping clear boundaries between monorepo packages that share one repository and pipeline. • Coordinating contracts, configuration and data consistency across independent services. • Ensuring delivery, idempotency and traceability of messages between services. • Keeping container images lean, secure and reproducible.
2. Decisions
The architecture rests on four choices: • Monorepo: every package in one repository, with workspaces. • Several services: each service with its own code and container, orchestrated with Docker Compose. • Asynchronous messaging: BullMQ and RabbitMQ between services. • Containers: Dockerfiles and Docker Compose to build and run everything.