Projects · Platform
EventFlow

EventFlow is the back office of an event company that has more than one desk. The client never talks to ten ports. It talks to a gateway. Behind that, auth, venues, inventory, CRM, operations, seating, finance, notifications, integrations and files are separate Express services, each with its own Postgres database.
Solutions
One gateway, ten domains
Calls go to /api/auth, /api/venues, /api/inventory, /api/crm, /api/operations, /api/seating, /api/finance, /api/notifications, /api/integrations and /api/files. The gateway routes them. A seating change does not deploy the finance service.
Three panels, not one admin
The admin UI, the customer portal and the supplier portal are separate front ends. Staff, ticket buyers and vendors do not share a navigation.
A database per service
Inventory cannot casually join seating. If two domains need to hear about each other, that goes through the bus, not through a shared table.
Process
01
Sign in at the edge
The browser hits the admin, the customer portal or the supplier portal. Those apps proxy /api to the gateway. JWT_SECRET is required before the dev processes will start.
02
The gateway picks a service
The path prefix selects Auth, Venue, Inventory, CRM, Operations, Seating, Finance, Notification, Integration or File. Each listens on its own port in development.
03
State stays in that service
Postgres is per service. Redis, RabbitMQ and MinIO are the shared infrastructure: cache, messages, and files. A file upload does not land in the seating database.
04
Ship one domain
Turbo can run a subset, for example the gateway, auth and the admin, without booting the other eight services.
Technology
A Turborepo of services and panels
Node 22. React panels on Vite. Express services. The admin proxies /api to port 8080. The customer portal and the supplier portal run beside it.
Docker for the infrastructure only
Compose brings up Postgres, Redis, RabbitMQ and MinIO. Postgres is published on 5434 so it does not collide with a local install on 5432. A production compose file adds an optional Nginx profile.
Why the split is the product
An event company already has a venue desk, a seating desk and a finance desk. The software follows that boundary instead of hiding it inside one schema and one deploy.
- React
- Vite
- Express
- PostgreSQL
- Redis
- RabbitMQ
- MinIO
- Turbo