FindYourVibe
Event discovery and ticketing platform for Raipur, Delhi NCR, and beyond — browse by category, city, and vibe, then book tickets with zero convenience fee.

- Role
- Full-stack Developer
- Focus
- Checkout & ticket inventory
- Year
- 2026
- Status
- Production
Overview
FindYourVibe is an event discovery and ticketing platform covering Raipur, Delhi NCR, and other cities. Visitors browse events by category, city, and vibe — parties, standup, workshops, concerts — and book tickets with zero convenience fee, from limited-capacity meetups to large ticketed shows.
My role
I worked as a full-stack developer on FindYourVibe, building the event catalog and explore/search experience, the city and category browsing pages, and the checkout flow from ticket selection through payment confirmation. The harder half of the work was underneath the UI: making sure a limited-capacity event can't sell more tickets than it has, even when multiple people check out at once.
The complexity
Problem — A limited-capacity event can be oversold if two people check out the last available ticket at the same moment — a naive read-then-write on the ticket count races, and a plain optimistic retry starts thrashing once a popular event's last few tickets get hit by a burst of checkouts.
Approach — Ticket rows are decremented inside a short transaction holding a pessimistic row lock, so the second buyer's write blocks for milliseconds behind the first instead of retrying blind — worth the small latency here because the alternative (optimistic compare-and-swap) means the losing buyer's client has to retry the whole checkout, not just a write. That decision reserves a slot in Redis with a TTL, so a buyer who abandons checkout releases the ticket back to inventory automatically instead of holding it hostage.
Problem — Explore and city pages filter a growing catalog of events by city, category, and date — a full scan gets slower as more events go live.
Approach — Compound indexes on city, category, and date back the explore and city pages, so filtering stays fast as the event catalog grows instead of degrading with it.
Problem — Payment webhooks can arrive more than once for the same order — retries, network blips — which would issue duplicate tickets if the handler just acted on every delivery, and doing ticket generation + email inline in the webhook handler makes the gateway wait on work it doesn't care about.
Approach — The webhook handler is idempotent, keyed on order ID, and its only job is to publish a "payment confirmed" event to RabbitMQ — a downstream consumer generates the ticket and sends the confirmation. A retried webhook delivery publishes once (the second is a no-op), and checkout stays correct under 300+ concurrent buyers on a single event drop without overselling a ticket.
Architecture
What shipped
- Explore/search by category, city, and vibe across multiple cities.
- Checkout flow with a reservation hold that prevents overselling limited-capacity events.
- Idempotent payment webhook handling and ticket issuance.
- Upcoming-events and recommended-events rails driven by the same catalog API.
What I owned
- API & data model
- Event catalog with compound city/category/date indexes, and the pessimistic-lock ticket decrement behind checkout.
- Infrastructure
- Redis-backed reservation holds (TTL) and a RabbitMQ queue decoupling ticket issuance from the payment webhook response.
- Integrations
- Payment gateway checkout and an idempotent webhook handler keyed on order ID.
- Frontend
- Explore/search, city and category pages, and the checkout flow from ticket selection to confirmation.
Engineering properties
- Pessimistic row lock on the last few tickets of an event
- Redis reservation hold with TTL, no overselling
- RabbitMQ decouples ticket issuance from the webhook
- Idempotent payment webhook, keyed on order ID