01 · Consumer web app · Live since 2026
KaraoQ
Free YouTube karaoke for any room. A host opens a room, guests join from their phones with a 5-character code, and the queue runs itself — no apps, no accounts, no DJ software. Nearly every night, somewhere in the world, someone is singing on it.
| Country | Share |
|---|---|
| United States | 24% |
| Mexico | 15% |
| China | 10% |
| Australia | 5% |
| Canada | 5% |
| Everywhere else | 41% |
69% of sessions are on phones. Top referrers: Google, Bing — and ChatGPT. On Google Search the site earned 2K impressions from 99 countries in its first ten weeks, with the translated guides ranking in Indonesian, Portuguese and Spanish.
The hard problem: YouTube caps search at 100 calls a day
Almost every evening the room fills up faster than Google's search quota allows. Instead of letting the app go dark at dinner time, I built a degradation ladder so singers almost never notice:
- Normalize & share. Unicode-folded queries hit one global cache served fresh for 14 days, so "Shallow karaoke" is bought once for every room on Earth.
- Coalesce. Identical searches in flight share a single API call.
- Buy songs at 1% of the price. A nightly cron walks 37 verified karaoke channels at 1 quota unit per 50 videos and pre-stocks the songs rooms actually asked for.
- Fail soft. When search does run out: aged cache → curated corpus → paste-a-link (a separate quota) → a friendly countdown to reset, plus a push alert to me.
Built for a living room, a bar, or a smart TV
Hosts run the night from a phone or laptop; a separate display mode turns any TV browser into the stage with a big QR code, up-next sidebar and three themes. Fair mode rotates singers round-robin, duets split credit, and wait-time estimates keep the room honest. Co-hosts get their own remote, and a printable QR poster goes on the wall.
Under the hood
- Next.js 14 + TypeScript on Vercel Fluid Compute, MongoDB Atlas with TTL indexes on 16 collections, zero recurring cost on free tiers.
- Realtime via visibility-aware HTTP polling with server-clock skew correction — deliberately no WebSockets, so it scales on serverless.
- 10 locales with sub-path routing and hreflang, country-aware song packs via Vercel geo, 527 curated suggestions plus 7 regional packs.
- 28 rate-limit buckets, admin analytics dashboard, in-app feedback, privacy & terms written to pass a real YouTube API compliance review.
- 1,318 tests across unit, real-API and a Chromium smart-TV harness; 50 API routes; 452 commits.
Stack
- Next.js
- TypeScript
- MongoDB Atlas
- YouTube Data API
- Vercel Cron
- Vitest
- i18n ×10