Live-show platform in the linkall monorepo: one Next.js + Convex codebase serving four branded show sites (Battle Loco, Wrestle Loco, Comedy Loco, HeadCase) with a shared performance console, show designer, and all-screens preview.
Liveredwave extracted to own repo (2026-09-03)
| Repo | microspaces/linkall (pnpm + Turborepo; also hosts surroundshow-web and mobile) |
|---|---|
| Local | C:/Users/AI/Repos/linkall |
| Owner agent | funfirstdev |
| Backend | Convex, multi-deployment β funfirst (trustworthy-lemming-377, this platform), surroundshow (upbeat-capybara-284, Bar Loco holidays + Wedding), redwave (fabulous-eel-831, moved to microspaces/redwave) |
| Sibling app | apps/surroundshow-web serves weddingloco.com (Ceremony/Reception) + Bar Loco holiday shows on the surroundshow deployment |
| Brand | Domain | Vercel project | Route |
|---|---|---|---|
| Battle Loco | battleloco.com | funfirst-web | /battle-loco |
| Wrestle Loco | wrestleloco.com | funfirst-web | /wrestle-loco |
| Comedy Loco | comedyloco.com | funfirst-web | /comedy-loco |
| HeadCase | headcaseai.com | funfirst-web | /head-case |
middleware.ts + vercel.json map each branded domain to its route, with clean URLs (battleloco.com/performance?id=β¦) and 308 redirects from legacy slug routes.overlays.tsx renders Game Instructions (round/game/now-playing), Vote (team vs team), Winner, Score variants, Introductions β composited in the player and on the preview wall alike./preview wall of every screen plus a scene strip; paints only live shows, infers overlay cues from scene titles, with a text-scene fallback card for text-only scenes.sourceKey (battlelocoLuxor, wrestlelocoLuxor, comedylocoLuxor, weddingShows, headcaseBits) β re-runs insert 0.public/<brand>/effects/.vercel.json host rewrite (/ β /battle-loco etc.); middleware handles the rest per host.game.get, designer.getShowScenes, designer.getSceneEffects, designer.getLayout).Vercel git integration: push to main β funfirst-web auto-deploys (root apps/funfirst-web, build cd ../.. && pnpm --filter funfirst-web build). Same pattern for surroundshow-web and the separate redwave repo. Convex functions deploy manually per deployment: npx convex deploy --env-file packages/backend/.env.<deployment> β funfirst and surroundshow each have their own data.
seeder module (e.g. comedylocoLuxor.ts) β SCENES / EFFECTS specs + FX assets
β match by sourceKey (cl-luxor:scene:NN, wed-cer:effect:β¦)
βΌ
upsert shows (status live) Β· scenes Β· effects Β· displayProfiles
β
βΌ
performance row bound to show β console + preview + phones
status: "live" β a draft show renders "Go live or tap a scene" even with effects fully seeded.| Monorepo | pnpm 9.15.0 workspaces + Turbo. Root package linkall-platform. |
|---|---|
| Apps | apps/funfirst-web (this), apps/surroundshow-web, apps/mobile (Expo) |
| Shared | @linkall/backend (Convex schema + all functions), @linkall/ui (performance console, preview, designer, shells), @linkall/brands (brand registry) |
| Stack | Next.js 15 + React 19 + Tailwind 4 + Convex 1.24 + @convex-dev/auth |
| Vercel | Projects funfirst-web / surroundshow-web; all brand domains attached with SSL |
| CI / flow | GitHub PRs from agent/* branches β review β merge to main β Vercel auto-deploy; convex deploys are manual and per-deployment |
apps/funfirst-web/
app/battle-loco Β· wrestle-loco Β· comedy-loco Β· head-case # brand routes
app/preview Β· screens Β· designer Β· player Β· venue Β· camera # engine routes
middleware.ts Β· vercel.json # host mapping
packages/backend/convex/
schema.ts Β· game.ts Β· designer.ts Β· shows.ts # engine
battlelocoLuxor.ts Β· wrestlelocoLuxor.ts Β· comedylocoLuxor.ts
weddingShows.ts Β· headcaseBits.ts Β· seed.ts # seeders
.env.funfirst Β· .env.surroundshow # deploy keys (gitignored)
Live roadmap, managed as GitHub issues (linkall issues). Add or close items on GitHub β β = done, close as βnot plannedβ to remove.
2026-09-04 β preview + data fixes
overlays.tsx, player call sites unchanged).funfirst-web build green.2026-09-03 β cleanup + extraction
crazyball renamed to Comedy Loco everywhere (PRs #37/#38; full-text scan: 0 crazyball hits across 23 tables).Seeded shows (verified live) β Battle Loco Luxor Oct 17 (22 scenes), Wrestle Loco Luxor Night 1 (28), Comedy Loco Luxor Night 1 (28), Wedding Ceremony (22) / Reception (26), HeadCase Bits Night.
Loco pair test plans β projects/funfirst-test-plan.html (index: shared protocol, brand matrix, cross-brand isolation) with one plan per brand: Battle Β· Wrestle Β· Comedy Β· Bar Β· Wedding β the live two-tester walkthroughs we execute together: Show Designer (shows, scenes, effects, screens, profiles), the performance console (rounds, scoring, cues, setlist segments), the preview wall and players, brand isolation, and hardening probes β with the results-and-issue log filled in as we go.