Skip to content

Projects · Platform

EventFlow

Venues, seating, inventory, CRM, operations and finance, each with its own service and database.

An empty concert hall with a single light on the stage

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

  1. 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.

  2. 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.

  3. 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.

  4. 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