Production-grade football stadium display control system. Desktop-app (Electron) — draait volledig offline; geen LAN-webserver meer nodig voor bediening.
- Electron main process — SQLite-database in de gebruikersmap (
userData/data/stadium.db), IPC-bridge voor veilige/api-achtige calls, twee vensters (control + display). /control— operatorpanel (laptop / tablet)./display— fullscreen-output voor het grote scherm (canvas 1920×1080, schaalt naar 16:9).- Renderer — React UI uit
app/wordt met esbuild naarrenderer-dist/gebundeld (geen klassieke Next.js-devserver in productie). - Prisma + SQLite — lokaal bestand, geen externe database vereist.
Electron · React · TypeScript · Tailwind · shadcn/ui · Framer Motion · Prisma · Zod · Zustand · esbuild
npm install
npm run db:push # databasepad wordt bij eerste start door Electron gezet (zie logs)
npm run db:seed # optioneel: default playlists + demo match
npm run dev # Electron development buildDaarna opent de app het control- en displayvenster lokaal.
npm run buildProduceert Windows-artifacts onder dist/ (o.a. portable / NSIS via electron-builder).
Richtlijn voor clubs en operators: typisch 4–6 uur continue gebruik met timer, regie en video (sponsorrotatie, clips). Zie de publieke pagina arenacue.be/vereisten voor minimale vs. aanbevolen hardware (Windows 64-bit, RAM, SSD, GPU/drivers, tweede scherm). Kort samengevat:
- Minimum: Windows 10/11 64-bit, 8 GB RAM, quad-core CPU, SSD, GPU met hardware videodecode, drivers up-to-date; bediening min. 1920×1080 + videouitgang voor het stadionscherm.
- Aanbevolen voor zware video: 16 GB RAM, 6+ cores of recente mid-range CPU, dedicated GPU of sterke iGPU, NVMe SSD, wedstrijddag zonder energiebesparing/achtergrondstress.
Test altijd op de werkelijke wedstrijd-PC vóór de eerste live inzet.
- Cloud control viewer-sessies vereisen een venue-scoped pair token (geen anonieme read-only tokens).
- Gevoelige secrets (licentie/cloud keys) worden in
userDataversleuteld opgeslagen wanneer Windows encryptie beschikbaar is. - Openbare website endpoints hebben basis rate limiting (anti-spam / anti-abuse).
- Excel export gebruikt SheetJS write-only (geen import). Als je ooit XLSX import toevoegt: upgrade SheetJS naar een versie die CVE-2023-30533 expliciet fixt.
- Phase 1 — scaffold + timer sync backbone
- Phase 2 — teams, players, match setup
- Phase 3 — score, goals, subs, cards, event log with undo
- Phase 4 — media library + playlists (drag-to-reorder, play now)
- Phase 5 — team intro + player intro (manual / auto-advance)
- Phase 6 — framer motion transitions, keyboard shortcuts, crash recovery banner, display watchdog, blackout
- Phase 7 — match summary export (JSON + printable HTML)
electron/ Electron main process, preload, IPC
scripts/ dev server, renderer bundle, build helpers
app/ React routes (control + display)
components/ UI (ScaleContainer, shadcn, …)
lib/ prisma client usage, schemas, sponsor/timer helpers
prisma/ schema.prisma + seed.ts
renderer-dist/ build output (gitignored)
public/uploads/ user media (gitignored)
Space— start / pause timer
- Commands validated with Zod before mutating state
- IPC handlers guarded — een foutmelding crash’t de app niet volledig
- Mutaties naar SQLite; timer server-side / authoritative waar van toepassing
Desktop kan optioneel cloud-gestuurd draaien (mobiel hoeft dan niet op hetzelfde netwerk):
- Auto-provisioned via licentie-activatie (aanbevolen; geen handmatige desktop-config per klant).
- Optioneel overriden met env:
CONTROL_CLOUD_BASE_URL(bijv.https://arenacue.be)CONTROL_DESKTOP_KEYCONTROL_VENUE_ID
De desktop-agent pusht state naar de cloud en voert gequeue’de commando’s uit.
Er staat ook een Website/-submap (ArenaCue-site). De levende marketingbron staat in de aparte repo Arenacue; houd releases synchroon of verwijder een van de twee om drift te voorkomen.