TicketAdda
A high-traffic event ticketing platform that sold 15,000+ tickets over a single 5-day live event, re-platformed in 2026 as containerised services on Kubernetes (AWS).
- 15,000+
- tickets sold in a single 5-day live event
- 01Payment confirmed (verified, idempotent callback)
- 02Ticket issuance fails or is delayed
- 03Job persisted to Amazon SQS
- 04Retry / reconciliation worker
- 05Ticket issued once → status updated
— Problem
Booking and availability had to hold up under many simultaneous purchases during one live event, with the frontend never able to control ticket status directly.
— What I built
For the 15,000-ticket event I built the booking and availability logic server-side, plus a cron job that caught one nasty failure mode: payment succeeds, but a network blip stops the ticket from generating. It found paid orders with a pending ticket and retried them, flipping the status once sent so nothing duplicated, with an admin override for the rare leftovers. In 2026 I re-platformed it on AWS as containerised services: a Booking Service (reservations and booking state), a Payment Integration Service (provider requests, verified callbacks and webhooks, idempotent payment-state updates) and a Ticket Issuance Service (ticket and QR generation after payment confirmation, with duplicate-issuance protection). A separate retry/reconciliation worker now takes failed or delayed work from Amazon SQS, so recovery never blocks booking requests.
— My role
I built this solo, end to end: frontend, backend, database, booking flow, payment integration, ticket generation and deployment. I monitored and supported it in real time during the event, and later carried out the 2026 re-platform onto AWS and Kubernetes.
— Architecture
AWS (ap-south-1, Mumbai). Amazon EKS runs the production services, Amazon RDS holds relational data, Amazon SQS carries durable asynchronous work and Amazon S3 stores generated ticket artefacts where needed. The booking API, payment integration, ticket issuance and retry workers deploy and scale independently, with health probes, resource requests and limits, and controlled rollout and rollback. Worker capacity can change without touching the public booking service.
— The hard part
Keeping the booking → payment confirmation → ticket issuance lifecycle correct when callbacks arrive late or more than once, or when ticket generation fails after payment has succeeded. Idempotent state transitions, persisted job status and retry/reconciliation handling let repeated requests resume safely, with no duplicate tickets and no lost confirmed bookings.
— Under real load
After the migration the deployment was exercised on a live event: booking traffic, payment callbacks and ticket issuance. It validated the asynchronous recovery path and showed worker capacity scaling independently as the queue changed. Load tests also covered duplicate callbacks, delayed ticket generation and recovery after a worker failure.
→ Result
Handled 15,000+ sales across the event. The retry system recovered ticket-generation failures after successful payments automatically, so temporary network issues didn’t mean generating every affected ticket by hand.
- React
- Node.js
- Express.js
- Docker
- Kubernetes
- Amazon EKS
- Amazon RDS
- Amazon SQS
- Amazon S3
- Microservices
- Payment gateway



























