πŸŽͺ FunFirst

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.

Overview Features Flow Tech Roadmap Test results Pair test plan

Overview

Liveredwave extracted to own repo (2026-09-03)

Repomicrospaces/linkall (pnpm + Turborepo; also hosts surroundshow-web and mobile)
LocalC:/Users/AI/Repos/linkall
Owner agentfunfirstdev
BackendConvex, 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 appapps/surroundshow-web serves weddingloco.com (Ceremony/Reception) + Bar Loco holiday shows on the surroundshow deployment
BrandDomainVercel projectRoute
Battle Locobattleloco.comfunfirst-web/battle-loco
Wrestle Locowrestleloco.comfunfirst-web/wrestle-loco
Comedy Lococomedyloco.comfunfirst-web/comedy-loco
HeadCaseheadcaseai.comfunfirst-web/head-case

App features

Flow

Request

  1. Browser hits a brand domain β†’ Vercel vercel.json host rewrite (/ β†’ /battle-loco etc.); middleware handles the rest per host.
  2. Marketing pages are static-ish routes; console/preview/player are client components over Convex React queries (game.get, designer.getShowScenes, designer.getSceneEffects, designer.getLayout).
  3. Cueing a scene mutates the live show; the wall, player, and phone overlays react via Convex subscriptions.

Deploy

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.

Seeding

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
Preview gating: the all-screens wall only paints scenes for shows with status: "live" β€” a draft show renders "Go live or tap a scene" even with effects fully seeded.

Tech

Monorepopnpm 9.15.0 workspaces + Turbo. Root package linkall-platform.
Appsapps/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)
StackNext.js 15 + React 19 + Tailwind 4 + Convex 1.24 + @convex-dev/auth
VercelProjects funfirst-web / surroundshow-web; all brand domains attached with SSL
CI / flowGitHub 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)

πŸ—‚οΈ Roadmap

Live roadmap, managed as GitHub issues (linkall issues). Add or close items on GitHub β€” β˜‘ = done, close as β€œnot planned” to remove.

Test results

2026-09-04 β€” preview + data fixes

2026-09-03 β€” cleanup + extraction

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.

πŸ§ͺ Pair test plan

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.