Case study · Events

Vendor & raffle operations platform for an outdoor expo

An outdoor industry expo was running 200+ vendors, a live charity raffle, and event-day check-in off spreadsheets, a Dropbox folder, and a Google Form. Booth assignments were tracked by hand, raffle winners were drawn and contacted manually, and every show meant another 15+ hours rebuilding state with the coordinator as the single point of failure.

202614 weeksRead3 min
Next.jsNeon PostgresDrizzleMagic-link authShopify Admin APIVercel CronResend
12–15Coordinator hours saved / week
100%Vendors self-serving
AutomatedRaffle close + ticket draft
→ near zeroManual booth swaps
Back to Our Work

The problem

The show ran on a stack of disconnected artifacts: a Google Sheet that was the canonical booth roster, a Dropbox folder of floor-plan PDFs, a Google Form for vendor intake, and a charity raffle administered by hand — winners drawn from a list, contacted one at a time, prizes tracked in someone's head. On event day, attendance and badge check-in were a clipboard.

Every booth was a manual placement; every tier rule (corner premiums, traffic-zone tiers, exhibitor-class restrictions) was applied by judgment. When the show grew past 200 vendors, the coordinator was working 60-hour weeks for two months ahead of each show, and a single missed booth swap or an un-closed raffle could cascade into a dozen phone calls.

The approach

We replaced the artifacts with one authoritative system, built in deliberate layers over several months.

Self-serve vendor portal. Email-only magic-link auth — vendors don't want passwords and the coordinator doesn't want to manage accounts. Vendors handle their own packet uploads, contact details, and documents.

Interactive SVG venue map. The floor plan renders from the same booth records that drive the database. Hovering a booth shows its tier, status, and assigned vendor; tier-match rules are enforced in code at assignment time and flag conflicts immediately instead of three weeks later.

Raffle engine. Winners are drawn against eligibility predicates (no prior win, decline-aware re-pooling, ship-vs-pickup fulfillment rules) instead of by hand. A Vercel Cron job closes each raffle at its deadline — zeroing the Shopify ticket inventory, drafting the product so sales actually stop, and alerting the coordinator if anything is misconfigured. A public proceeds endpoint feeds a live "dollars raised" section straight onto the storefront.

Event-day check-in. QR scanning ties attendance back to the same data model, so the operator dashboard reflects who's actually on the floor.

Stack: Next.js App Router for the operator and vendor surfaces, Neon Postgres + Drizzle for canonical state, magic-link auth via signed tokens, the Shopify Admin API for ticket inventory, Vercel Cron for the time-driven automations, and Resend for delivery.

The outcome

The first show after launch was the coordinator's first under-40-hour week in years. Vendors handle 100% of their own onboarding; raffles draw and close themselves on schedule, with Shopify ticket sales stopping the moment a raffle ends instead of an hour later; and the week-of-show changelog that used to live in the coordinator's head now lives in an audit trail.

The coordinator's paraphrased quote was "I forgot what it felt like to not be the system."

Outcome

A single operations platform: self-serve vendor portal with an interactive venue map, a raffle engine that draws winners and closes ticket sales on Shopify automatically, and QR check-in. The coordinator stops being the system the show runs on.

Lets build your first one.

Describe whats eating your teams time. Our AI will scope the automation in seconds — completely free.

Or book a call directly