A visitor walks up. Ninety seconds later they've had a real conversation, seen the product demo their exact problem, and walked away with a shareable badge — while the team gets a scored lead and a ready-to-send follow-up.
BoothPilot is a live conference-booth concierge for a (fictional) SaaS, Quill — an AI customer-support agent. It captures the visitor conversation by voice, enriches the lead in real time, drives an on-screen product demo tailored to what they actually said, scores the opportunity, mints a shareable Booth Badge, and drafts a human-reviewed follow-up email. It runs on an iPad in a fully 3D-printed stand — the iPad is a kiosk shell around the deployed web booth, so it behaves exactly like the live site.
Built for the sponsor stack: OpenAI · Convex · Cursor · fiber.ai · ElevenLabs.
| 1 · Walk up | The booth greets the visitor by voice (OpenAI Realtime). |
| 2 · Identify | Scan a LinkedIn QR or just say your name + company → fiber.ai enriches you into a live CRM card (firmographics, role, work email). |
| 3 · Demo | The agent drives the Quill product to the visitor's exact use case — shared-state, not browser automation, so it never breaks. |
| 4 · Score | Confidence + urgency are computed in the background, with reasons — never shown to the visitor. |
| 5 · Badge | The visitor gets a shareable, collectible Booth Badge — an archetype, a grounded compliment, stat bars, and a discount, via QR. |
| 6 · Follow-up | The team gets a drafted email in a review queue. Nothing is ever auto-sent. |
flowchart LR
subgraph Booth["The Booth"]
iPad["iPad kiosk<br/>(WKWebView)"] --> Web
end
Web["Web booth<br/>Next.js · OpenAI Realtime"] <-->|reactive| Convex
subgraph Cloud["Convex — the spine"]
Convex[("sessions · demoState<br/>scoring · badge · email")]
end
Convex <-->|enrich| Fiber["fiber.ai"]
Convex -->|queue llmJobs| Worker["Codex worker<br/>(local, strict JSON)"]
Worker -->|score · badge · email| Convex
Convex --> Dash["Dashboard<br/>lead cards · /review queue"]
convex/— the realtime spine: sessions (the CRM card), transcript, demo state, fiber enrichment, lead scoring, badges, the email review queue, and thellmJobsqueue.dashboard/— Next.js app: the web booth (/booth), the live demo (/demo), shareable badges (/badge+ Open Graph image), and the review queue (/review).llm-worker/— a local pull-worker (OpenAI Codex SDK) that claimsllmJobs, returns strict JSON, and writes the final score / badge / email back through Convex.finalizenever sends email — if the worker is offline, Convex finishes the card with a deterministic safety fallback after ~25s.ios/— the SwiftUI kiosk that loads the web booth in a full-screen WebView and grants it mic + camera natively.hardware/— the parametric, fully 3D-printed iPad stand.
Three terminals from the repo root:
# 1 — Convex spine
npx convex dev
# 2 — dashboard + web booth
cd dashboard && npm install && npm run dev
# 3 — local Codex worker (scoring / badge / email)
cd llm-worker && npm install && npm startThe dashboard reads dashboard/.env.local:
NEXT_PUBLIC_CONVEX_URL=https://<your-deployment>.convex.cloudHandy:
npx convex run seed:run # seed demo data
npx convex run sessions:list '{}' # inspect the CRM cards
node scripts/simulate-visitor.mjs # drive a fake visitor end-to-endEmail stays human-in-the-loop: review a draft in
/review, approve or edit, then send. Real sends requireRESEND_API_KEY+ a verified sender.
BoothPilot/
├─ convex/ # realtime spine — sessions, scoring, fiber, badge, email, llmJobs
├─ dashboard/ # Next.js — /booth /demo /badge /review + editorial UI
├─ llm-worker/ # local Codex worker — strict-JSON score/badge/email
├─ ios/ # SwiftUI kiosk wrapping the web booth
├─ hardware/ # parametric 3D-printed iPad stand (STL/STEP/3MF + renders)
└─ docs/ # design + runbook notes
Built in 24 hours at the YC AI Growth Hackathon by Orange Slice.
OpenAI · Convex · Cursor · fiber.ai · ElevenLabs
