Real-time, multi-tenant karaoke show management platform. Next.js + Apollo GraphQL with kiosk request flow, live DJ panel, songbook browsing, and bidirectional sync with NexaDeck.

Active since 2024
Live karaoke shows are chaotic — singers sign up on paper lists, DJs juggle requests scribbled on napkins, and there is no shared state between the kiosk at the front door, the DJ booth, and the singer waiting in line. Most karaoke software stops at the DJ station and ignores everything else happening in the venue.
Sole developer. Designed the multi-tenant data model, built the Apollo Server 4 GraphQL API (queries, mutations, WebSocket subscriptions), the Next.js front-end (DJ control panel, kiosk request flow, songbook browser, venue hub), the PostgreSQL schema with tenant isolation, and the bidirectional integration with NexaDeck for show state sync.
Multi-tenant from day one — each DJ or venue needs isolated data on shared infrastructure. Kiosks run on attendee phones over spotty venue Wi-Fi, so the UX has to degrade gracefully. Real-time updates across kiosks, DJ panel, and NexaDeck must stay well under a second to feel live. Zero install for singers — scan a QR code, you are in.
Next.js App Router with server components and streaming. Apollo Server 4 with a programmatic GraphQL schema (not SDL) for tighter TypeScript integration. Real-time updates via graphql-ws subscriptions backed by a PubSub layer. Prisma with tenant scoping on every query and composite unique constraints for per-tenant uniqueness. JWT auth with tenant membership claims — kiosks are identified by a short code that resolves to show then tenant. OAuth2 (PKCE) against Abydonian so DJs have a single identity across the ecosystem.
Production multi-tenant platform with kiosks, songbooks, and DJ panels running live shows. Sub-second request-to-DJ-panel propagation. Integrated with NexaDeck for bidirectional show state sync via cross-system JWTs. Clean tenant isolation on a single-database deployment that scales horizontally per tenant.