Multi-tenant order management platform: Symfony 7 API, Astro storefront, SvelteKit dashboard, order state machine, real-time Mercure updates, POS module, and loyalty programme.
Ogbay is a multi-tenant order and product catalogue management platform made up of three independent applications behind a shared Nginx reverse proxy.
Nginx
│
├── /api/* → Symfony 7.4 via FastCGI (PHP-FPM :9000)
├── /.well-known/mercure → Mercure hub (real-time WebSocket)
├── app.{domain} → SvelteKit 2 dashboard
└── / → Astro 6 storefront
All three applications are orchestrated by Docker Compose with per-environment overrides (dev, test, staging, prod). A Makefile centralises all common operations to avoid calling docker compose directly.
The REST API is organised by business domain under src/Controller/: Auth, Admin, Catalogue, Orders, Delivery, POS, Loyalty, Stock, Promo, Public. The same split applies to the Service/ and Repository/ layers.
The 29 Doctrine entities use UUIDs as primary keys. The main ones:
Authentication is handled by LexikJWT (RSA keypair) with refresh tokens. Transactional emails (confirmation, password reset) are sent via the Brevo API. PDFs (tickets, invoices) are generated by forwarding HTML to the Gotenberg sidecar.
Order state changes are published to the Mercure hub. The admin dashboard and driver app receive live updates via EventSource, with no polling.
The public storefront is built with Astro 6 SSR and Svelte 5 islands for interactivity. i18n routing covers French and Dutch. The UI uses Tailwind 4 + DaisyUI 5.
The admin dashboard is a full-SSR SvelteKit 2 application served on a dedicated subdomain. Nested routes, form actions, JWT-protected. It covers catalogue management, real-time order tracking, delivery slot configuration, reports, and user administration.
The PHPUnit test suite runs in an isolated Docker environment (docker-compose.test.yml) with a separate database. Doctrine migrations run automatically on dev container startup. PHP-CS-Fixer and PHPStan are integrated into the pipeline.
Related work