Product Architecture
How Gelatin works under the hood
A two-sided marketplace built around three pillars: discovery, booking, and payouts. Below is the high-level system, the booking flow, and the rules that drive matches.
System overview
Web Client
Responsive React UI for DJs, venues, and admins.
API Layer
REST + Webhooks. Auth, gigs, bookings, messaging.
Database
Postgres with row-level security per role.
Matching Engine
Scores DJs against open gigs in real-time.
Payments
Escrow at booking, release on completion.
Notifications
Email + push on every booking state change.
Booking flow
Step 1
Venue posts gig
Date, budget, genres
Step 2
Engine matches
Top DJs ranked
Step 3
DJ proposes
Quote + intro
Step 4
Venue confirms
Funds escrowed
Step 5
Show & payout
Review released
Matching rules engine
Genre match
weight 0.35
DJ genres ∩ gig genres / total gig genres
Geo proximity
weight 0.25
Same city = 1.0, same country = 0.6, else 0.2
Budget fit
weight 0.2
Gig budget within ±20% of DJ rate × hours
Availability
weight 0.1
DJ has no overlapping confirmed booking
Reputation
weight 0.1
Average rating, weighted by completed gigs
Data model
User ──┬── DJ Profile (genres, rate, rating)
├── Venue Profile (capacity, address)
└── Admin
Gig ───── posted by Venue
│ (date, budget, genres, city, status)
↓
Booking ── DJ ↔ Venue ↔ Gig
│ (status, amount, contract)
↓
Payout ─── escrow → DJ wallet
Notification ── triggered on every state changeState machine — Gig lifecycle
Open
Proposed
Confirmed
In Progress
Completed
Reviewed
Cancellations from any state route to the disputes queue and notify both sides. Cancellation fees apply within 48h of the gig date.