PvP karaoke on Solana. Two players stake SOL, sing against each other, and the better pitch wins the pot — settled on-chain by a smart contract, roasted by an AI host.
Built for Quack Hacks 3 · Tracks: Solana · Snowflake · Google Gemini · ElevenLabs
- Host opens the game on a laptop, connects a Phantom wallet, and sets a SOL wager
- A 6-character room code and QR code appear on screen
- Two players scan the QR on their phones, connect their wallets, and join
- Both players stake SOL into an on-chain escrow — no trust required
- Players take turns singing into the laptop mic; pitch accuracy is scored in real time
- The smart contract pays the winner automatically. The loser gets roasted by an AI MC powered by Gemini + ElevenLabs
| Layer | Tech |
|---|---|
| Blockchain | Solana devnet · Anchor (Rust) escrow program |
| Frontend | React + Vite (TypeScript) · Web Audio API |
| Wallet | @solana/wallet-adapter · Phantom |
| Session | Node.js · Express · Socket.io |
| AI Host | Google Gemini (roast commentary) · ElevenLabs (TTS) |
| Data | Snowflake (match history · leaderboard) |
| Deploy | Vercel (frontend) · Render (session server) |
Program deployed on Solana Devnet:
2eMwChdNVoxeoWjdaiTuBGasDiHCKN3jbw7dL5eSyuZf
The escrow program handles:
create_match— P1 initialises the match with stake amount, P2 pubkey, and oraclestake— both players deposit SOL into a PDA vaultsettle— oracle-only; pays winnerpot - fee, sends 1% to the developer treasuryrefund— oracle-only; returns full stakes on a tie
Scoring is computed server-side from the recorded audio and submitted by a trusted oracle keypair — the laptop never settles money directly.
/contracts # Shared TypeScript types + JSON Schema (source of truth)
/program # Anchor escrow program (Rust)
/client-solana # EscrowClient — mock + devnet implementations
/server # Session server — Express + Socket.io room management
/frontend # React app — /host (laptop) · /play (phone controller)
/backend # FastAPI — pitch scoring · Gemini commentary · ElevenLabs · Snowflake
/assets/songs # Prepped song assets (instrumental · pitch contour · metadata)
/tasks # Per-stream task files for parallel development
- Node.js 18+
- Python 3.11+ (backend)
- Anchor CLI 0.31 (smart contract)
- Phantom wallet browser extension (set to devnet)
cd server
npm install
npm run dev # starts on :3001cd frontend
npm install
cp .env.example .env.local # set VITE_SERVER_URL=http://localhost:3001
npm run dev # starts on :5173Then open:
http://localhost:5173/host— laptop host viewhttp://localhost:5173/play— phone player view
cd program
anchor build
anchor test # requires Solana CLI + local validator
anchor deploy --provider.cluster devnet| URL | Purpose |
|---|---|
| micdrop-five.vercel.app/host | Host a game (laptop) |
| micdrop-five.vercel.app/play | Join a game (phone) |
Built in 24 hours at Quack Hacks 3.
MIT — see LICENSE