The problem
The show ran on a stack of artifacts: a Google Sheet that was the canonical booth roster, a Dropbox folder with PDFs of the floor plan, a Google Form for vendor intake, and a long-lived email thread with the show coordinator at the center of every decision. Every booth was a manual placement; every tier rule (corner premiums, traffic-zone tiers, exhibitor-class restrictions) was applied by judgment, not policy. When a vendor wanted to swap, the coordinator changed the sheet, exported a new floor plan, and emailed everyone affected.
The breaking point was the year the show grew past 200 vendors. The coordinator was working 60-hour weeks for two months ahead of every show, and a single missed swap would cascade into ten phone calls.
The approach
We built a single authoritative system that turned each artifact into a piece of structured state.
Magic-link auth. Vendors don't want passwords; the coordinator doesn't want to manage accounts. Email-only magic links matched the actual workflow — a vendor receives an invite, clicks once, and is in their portal.
Interactive SVG venue map. The floor plan is rendered from the same booth records that drive the database. Hovering a booth shows its tier, status, and assigned vendor. Clicking lets the coordinator (or a vendor with permission) initiate a swap.
Tier-based assignment in code, not in heads. Each vendor record carries a tier (sponsor, corner, standard) and an exhibitor class. Each booth carries a tier. The portal enforces match rules at assignment time and flags conflicts immediately, instead of three weeks later.
Stack: Next.js App Router for the operator and vendor surfaces, Postgres for the canonical state, magic-link auth via signed tokens emailed through Resend, an SVG map component reading from the booth table, and Vercel for deploys.
The outcome
The first show after launch was the coordinator's first under 40-hour week in years. Vendors handled 100% of their own packet uploads, contact updates, and (with permission gates) booth-swap requests. The week-of-show changelog that used to live in the coordinator's head now lives in the audit trail.
The coordinator's actual quote — paraphrased — was "I forgot what it felt like to not be the system."
A self-serve vendor portal with magic-link auth, an interactive venue map, and tier-based booth assignment that enforces the show's rules in code. Vendors confirm their own placements; the coordinator stops being the bottleneck.