Two-sided marketplace with Stripe ticketing and QR door-scanning. 4 weeks.
Canada's independent live music industry had no dedicated marketplace. Venues and artists connected over Instagram DMs. Ticketing went through Eventbrite at 15–20% commission. On a $10,000 event, that's $1,500–$2,000 in fees. The founder needed a two-sided marketplace and direct ticketing platform — fast and at a realistic budget.
WiKD LiVE has the most complex architecture of any project we've built on Base44 — two completely distinct user types (artist and venue) with separate dashboards, different entity permissions, and different feature sets. We used Base44's role-based access control to enforce separation: artist accounts can't access venue booking management, and venue accounts can't access artist application management.
The ticketing system is architecturally separate from the marketplace. An event is created by a venue, tickets are sold through Stripe Checkout, QR codes are generated per ticket and stored on the Ticket entity, and the door-scanning flow is a public route that validates a QR code against the Ticket entity without requiring a login. This separation kept the public-facing ticket validation fast and simple.
The Ticket entity was the most design-sensitive. Each ticket gets a unique QR code value generated at checkout success — a UUID stored as a string. The QR code image is generated client-side from this UUID using a QR library and embedded in the confirmation email. Door scanning passes the UUID from the QR scan to a backend function that validates it against the Ticket entity and marks it scanned. We deliberately didn't encrypt the QR payload — the UUID is only meaningful against our database, making forgery pointless.
WiKD LiVE has lighter AI usage than Rent Detective or Auto Detective — the core product value is the marketplace infrastructure, not AI analysis. We added an AI booking assistant that helps venues write their booking needs posts (prompts for genre, draw requirement, pay rate) and helps artists write their profile bios from bullet points they provide. Both use GPT-4o via InvokeLLM with simple prompts. The assistant is optional — experienced users skip it.
WiKD LiVE has two Stripe flows: ticket sales and subscription billing. Ticket sales use Stripe Checkout — the backend function creates a Checkout session with ticket quantity, event name, and buyer metadata. On webhook success, a Ticket record is created with a UUID, the QR code generation email is triggered via Resend, and the Event's tickets_sold count increments.
Subscription billing uses Stripe's Subscription API. Artists and venues choose their plan on signup and are redirected to a Stripe Checkout with a subscription price ID. On subscription.created webhook, the Subscription entity is created and the user's role is updated to include their plan tier. Subscription downgrades and cancellations go through a customer portal link generated by a backend function. The biggest implementation challenge was handling the webhook event ordering — subscription.created and checkout.session.completed can arrive in either order. We implemented idempotency checks on both.
Artist and venue dashboards share one Base44 app but need completely different navigation, data access, and feature sets. We solved this with a conditional layout component that reads the user's role on login and renders the appropriate dashboard. A user who is both an artist and a venue owner can toggle between modes.
QR tickets that can be screenshotted and shared need a scan-once enforcement. We added a scanned boolean and scanned_at timestamp to each Ticket. The door-scanning endpoint checks scanned === true and returns a 'already scanned' warning with the original scan timestamp, allowing door staff to spot duplicates.
Checkout session completion and subscription creation events from Stripe can arrive in any order. We added idempotency checks — if the Subscription entity already exists when subscription.created arrives, we update rather than create. This made webhook handling robust to race conditions.
The full case study covers results, metrics, and what the client said.
Free 30-minute call with Ryan. Fixed quote before we hang up.
$100/hr CAD all-inclusive. 2–6 week delivery on Base44.
Book Free Discovery Call