HomeServicesPortfolioBlogContactBook a call
Back to portfolio
Web App 2026 SymfonyPHPAstroSvelteKitPostgreSQLRedisMercureDocker

Ogbay — E-Commerce & Order Management Platform

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.

Architecture

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.

Symfony 7.4 API

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:

  • Order — full state machine: create → confirm → prepare → deliver → cancel/refund
  • User — multiple roles: customer, admin, driver, POS staff
  • DeliveryAssignment — driver assignment and status tracking
  • PosTicket / PosSession — till module for in-store orders
  • LoyaltyTransaction — points-based loyalty programme
  • StockMovement — inventory movements per product and store
  • PromoCode — discount codes with validity rules

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.

Real-Time with Mercure

Order state changes are published to the Mercure hub. The admin dashboard and driver app receive live updates via EventSource, with no polling.

Storefront (Astro 6)

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.

Admin Dashboard (SvelteKit 2)

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.

Quality

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

Web App · 2026

Altitude.Music — Recording Studio & Label Site

Trilingual marketing site for a Louvain-la-Neuve recording studio: island architecture, sticky now-playing player, integrated booking calendar, and full SEO with MusicRecordingStudio structured data.

Web App · 2025

Carder — NFC Business Card Platform

Multi-tenant SaaS for NFC business cards: per-client customised pages, 20+ link types, badge system, installable PWA, and cookieless analytics.

Web App · 2025

Eco-BBQ — Disposable Eco-BBQ Marketing Site

Trilingual marketing and lead-generation site for a zero-waste disposable BBQ kit: Astro + Svelte islands, Swiper carousels, OpenLayers retailer map, and a B2B distributor partnership flow.

← All projects Discuss this project →