AI-powered music platform
Singlio
Hosted YouTube karaoke queue — guests scan a QR code to request songs from their phones.
ReactNode.jsExpressPostgreSQLSocket.ioYouTube Data APIDocker
- Challenge
- Running group karaoke requires juggling song queues, guest requests, and TV display without friction.
- My Role
- Designed and built the full-stack app: auth with email verification and lockout, event/session management, real-time host/guest sync over websockets, YouTube search integration, photo slideshows with screen messages, favorites, and Postgres persistence with dump/restore tooling.
- Architecture
- Express + Socket.io server (core/auth/karaoke/routes layers), Postgres pool with boot-time schema creation, Vite React client; QR join links built proxy-aware via HOST_URL/X-Forwarded headers.
- Interesting decisions
- Server-enforced guest permissions (not just hidden buttons); per-address sign-in throttling that does not leak account existence; DATABASE_URL override for managed Postgres with local compose for dev.
- Result
- Working self-hostable product; same-network LAN mode without dev server; portable data/ directory for migration.
- What I Learned
- Real-time state ownership (single host player drives playback) simplifies sync more than any client framework choice.
