Origin Light Tour · Ticketing and door control
End-to-end event ticketing: bilingual storefront, back office, door-scanning app, mobile-money and card payments, QR-coded PDF tickets.

Each edition of the Origin Light Tour ran on disconnected tools: form-based sales, manual collection, guest lists in spreadsheets, paper checks at the door. Nothing linked a payment to a ticket, or a ticket to its holder at the door, which makes double entry undetectable and headcount unreliable.
A Turborepo monorepo with an AdonisJS 6 API exposing three distinct surfaces over one Postgres model: public storefront, admin back office, agent application. Checkout is passwordless: the customer authenticates with a one-time code sent by email. Payment goes through Moneroo, covering mobile money and card, with a server-side transaction-monitoring service. The ticket is generated as a PDF with a QR code, then scanned at the door from a browser, which records which agent validated which ticket. The Next.js 15 storefront is bilingual and the locale is carried on the transaction, so emails and the ticket come out in the buyer’s language.
Two business rules shaped the model. First, a ticket type can cap purchases per customer, to curb scalping on tight categories. Second, a free ticket follows exactly the same path as a paid one, with no parallel code branch: same transaction, same PDF generation, same door scan, only the amount differs.
Agent access control is explicit: a team member is attached to the events they are cleared for, not to the whole catalogue. An agent hired for one night cannot scan the next one.


- Application surfaces
- 3
- Data models
- 11
- Domain services
- 9
- Locales
- FR + EN
- Tailwind CSS
- Vite
- S3
- AdonisJS
- GSAP
- Postgres
- React
- Next.js
- TypeScript




