Platform map
Internal engineering docs for EventLinx. This site is a platform map and a record of ticketing behavior verified against staging. It is not a customer handbook, not an OpenAPI dump, and not a security/compliance manual.
Security and compliance material lives on client docs, not here.
Product repos
| Layer | Repo | Role |
|---|---|---|
| Patron UI | eventlinx-patron | Vite patron site. Auth: Supabase JWT. |
| Promoter UI | eventlinx-promoter | Vite promoter site. Auth: Supabase JWT. |
| Staff UI | eventlinx-go | Expo staff app. Auth: Supabase JWT. |
| System of record | eventlinx-api-event | Cloudflare Worker. Events, performances, inventory, carts/holds, seat maps, scan/redeem/refund/transfer/exchange records, checkout orchestration. |
| Patron BFF | eventlinx-api-patron | Get Tickets, cart, checkout secret via Event. $0 / cash via eventlinx-api-stripe. Transfers live. Exchange routes exist; patron UI flag is off. |
| Promoter BFF | eventlinx-api-promoter | Proxies Event for events/tickets/maps. Owns promoter org, collaborators, GO users, images, custom domains. Seat-map predict goes to seating-detect, not Event. |
| Staff BFF | eventlinx-api-go | Cloudflare Worker BFF for the Expo app — not a Go-language service. Scan/POS/cart via Event; cash via Stripe API; Terminal PaymentIntent via Event. |
| Payments | eventlinx-api-stripe | Payments, cash, Terminal completion. |
| Identity | eventlinx-api-authentication | Identity service. |
| Seat detect | api-seating-detect | Image → detect JSON (POST /upload). Detect JSON is not the Event persist schema. |
End-user UIs talk to BFFs. Event is the system of record for ticketing state. BFFs do not replace Event as SoR.
Staging topology
Same map in table form:
| From | To | Why |
|---|---|---|
| Patron / Promoter / GO UIs | Supabase | End-user session (JWT). |
| Patron UI | patron-api | Get Tickets, cart, checkout. |
| Promoter UI | promoter-api | Events, tickets, maps, org, GO users. |
| GO app | api-go | Scan, POS, cart. |
| patron-api, promoter-api, api-go | Event | Ticketing reads/writes. Service key, not the user JWT. |
| patron-api, api-go | api-stripe | $0 / cash (and Stripe money movement). Terminal completion is Stripe; Terminal PI create from GO is via Event. |
| promoter-api | api-seating-detect | Predict only (/upload). Persist/sell/hold stay on Event. |
What Event owns vs what it does not
Owns: events, performances, GA quantity inventory, reserved seats (seatIds required), carts/holds, seat-map persist, scan/redeem/refund/transfer/exchange records, checkout orchestration.
Does not: end-user login (UIs use Supabase), promoter org/collaborators/custom domains (promoter-api), card capture / cash completion (api-stripe), seat-map predict (promoter-api → seating-detect). Event’s own seat-map predict is 501 / not mounted.
Patron exchange is not a shipped patron product
Patron-api has exchange routes. The patron UI flag is off (self-serve exchange is shelved). Do not document or demo it as a live patron feature. Transfers are live on patron. GO blocks exchange into reserved seating.
Accuracy
Prefer a link to Event OpenAPI (GET /doc, generated from src/routes.ts in eventlinx-api-event) over copying route tables here. Do not invent schemas or migrations. Behavior only.
Staging Event hosts: api-event.eventlinx.com, api-event-staging.eventlinx.com, api-event-dev.eventlinx.com. Other BFF hostnames are not listed here until they are confirmed in each repo’s wrangler config.