Prerequisites
- Convex account (convex.dev)
- Node.js 18+ installed
Environment Variables
Installation
Database Schema
Ticket Hub uses four main tables:convex/schema.ts
Tables Overview
events
events
Stores event information created by organizers.Fields:
name: Event namedescription: Event descriptionlocation: Venue or addresseventDate: Unix timestampprice: Ticket price in GBPtotalTickets: Maximum capacityuserId: Event organizer’s Clerk IDimageStorageId: Optional event imageis_cancelled: Cancellation flag
tickets
tickets
Purchased tickets with payment information.Fields:
eventId: Reference to eventuserId: Ticket owner’s Clerk IDpurchasedAt: Purchase timestampstatus:valid,used,refunded, orcancelledpaymentIntentId: Stripe payment intentamount: Amount paid in pence
by_event: Find all tickets for an eventby_user: Find user’s ticketsby_user_event: Check if user has ticket for eventby_payment_intent: Find ticket by payment ID
waitingList
waitingList
Queue management for ticket availability.Fields:
eventId: Reference to eventuserId: User’s Clerk IDstatus:waiting,offered,purchased, orexpiredofferExpiresAt: When offer expires (30 min)
by_event_status: Process queue by event and statusby_user_event: Check user’s position for eventby_user: Find all user’s waiting list entries
users
users
User profiles synced from Clerk.Fields:
name: Display nameemail: Primary emailuserId: Clerk user IDphone: Optional phone numberstripeConnectId: For event organizers
by_user_id: Primary lookup by Clerk IDby_email: Email-based queries
Key Queries
Get Event with Availability
convex/events.ts
Get Queue Position
convex/waiting_list.ts
Key Mutations
Join Waiting List
convex/events.ts
Purchase Ticket
convex/events.ts
Cron Jobs
Automatic cleanup of expired ticket offers:convex/crons.ts
Cleanup Implementation
convex/waiting_list.ts
Real-time Subscriptions
Convex automatically handles real-time updates:Rate Limiting
Protect against abuse with Convex Rate Limiter:convex/events.ts
Constants
Centralize timing and status values:convex/constant.ts
Deployment
Deploy your schema and functions:Next Steps
Stripe Payments
Set up payment processing
Clerk Auth
Configure authentication