Real‑time, two‑player AI rap battles where you choose a beat, spit a verse, and let an intelligent panel of AI judges decide who really brought the bars. Think of it as versus mode for the future of hip‑hop.
🏆 The Team: Tawhid Zaman (GitHub / LinkedIn) • Yazn Alzeghaibi (GitHub / LinkedIn) • Maheen Rassell (GitHub / LinkedIn) • Mohammed Miyajan (GitHub / LinkedIn)
Raise The Bar is an experimental web game built with React, TypeScript, and Vite. Two players compete in short, timed rap rounds; their audio is transcribed and scored by multiple AI judges that evaluate flow, wordplay, and delivery. Results are stored for replay and analytics.
This project took home the top prize at DevFest 2026 and is designed to be both a showcase of real‑time audio processing and a fun proof‑of‑concept for AI judging.
- Live, turn‑based battle loop with momentum and instant scoring
- Two game modes: Street Battle (aggressive) and Kill ’Em with Kindness (positive vibes)
- Three beat styles: New Gen, Old School, and Underground
- Browser microphone capture + speech‑to‑text pipeline
- Multi‑judge AI panel with weighted verdicts and coaching feedback
- Optional coaching model powered by K2
- Persistent battle history via Supabase
- Modular architecture for easy extension
- Select a game mode and beat.
- Player 1 records a verse and has to say the words on the screen.
- Player 2 records a verse and has to say the words on the screen.
- Verses are transcribed and analyzed for rhymes, cadence, and word choice.
- AI judges return scores, breakdowns, and advice.
- Winner screen displays results, transcripts, and judge comments.
| Area | Tools / Services |
|---|---|
| Frontend | React 19, TypeScript, Vite, Tailwind (CDN), lucide‑react |
| Speech‑to‑Text | ElevenLabs (with browser fallback) |
| AI Judging | Featherless (primary), K2 (coach/advisor) |
| Database | Supabase (PostgreSQL) |
| Hosting | Any static host (Vercel, Netlify, etc.) |
- Node.js 18+
- npm (or yarn)
- A working microphone and browser permission
git clone <repo-url>
cd DevFest-2026
npm installCreate a .env.local file in the project root with the following variables:
VITE_ELEVEN_LABS_API_KEY=your_elevenlabs_key
VITE_FEATHERLESS_API_KEY=your_featherless_key
VITE_SUPABASE_URL=https://<your-project>.supabase.co
VITE_SUPABASE_ANON_KEY=<anon-key>
# Optional: K2 coaching model
VITE_K2_API_KEY=your_key
VITE_K2_BASE_URL=https://api.yourprovider.com
VITE_K2_MODEL=k2-think-v2🔒 Security note: In production, move all external API calls to a secure backend proxy. The current setup is for rapid prototyping.
npm run devOpen http://localhost:5173 (or port printed by Vite) in your browser.
npm run build
npm run previewDeploy the contents of the dist/ directory to your preferred static hosting provider.
create table transcripts (
id serial primary key,
text text not null,
created_at timestamp with time zone default now(),
grade text,
feedback text
);Additional tables (users, battles, etc.) can be added for extended features.
.
├─ beats/ # Audio files for beats
├─ components/ # React screens & UI components
├─ services/ # API clients and business logic
├─ App.tsx # Top‑level state and routing
├─ constants.ts # Mode/beat configuration, rhyme groups
├─ types.ts # Shared TypeScript types
├─ BACKEND.md # Notes on backend architecture
├─ README.md # ← you are here
- AI keys: Keep them private and do not commit
.env.local. - Adding beats: Drop new
.mp3files intobeats/and updateconstants.ts. - Judges: Modify
services/scoringService.tsto adjust scoring logic.
See package.json for the full list. Notable packages:
vite/react/typescript@supabase/supabase-jslucide-react(icons)
Contributions are welcome! Fork the repo and open a pull request. Please:
- Create a feature branch from
main. - Commit with clear messages.
- Run
npm run lintandnpm run buildbefore submitting. - Describe your changes in the PR.
Thanks to Columbia University DevFest organizers for the platform and encouragement.
Raise The Bar: where every verse is judged, every rhyme counts, and every coder can spit bars.