A chaotic, real-time multiplayer party game powered by React, FastAPI, WebSockets, and a Savage Gemini AI Judge.
Gather your friends in a lobby, deceive each other, and see who survives the Vibe Check.
- The Catch: Everyone gets the same secret word... except for one player (The Spy), who gets a slightly different but related word. (Powered by a randomized Gemini seed to ensure words never repeat!)
- The Play: Take turns giving one-word clues about your word.
- The Goal: The normal players must find and vote out the Spy. The Spy must figure out what the normal word is and blend in.
- The Catch: 2 random players in the room are thrown into the arena. The others spectate.
- The Play: The battlers get 3 continuous rounds to type out their most brutal roasts against each other.
- The Goal: Destroy your opponent. At the end of round 3, the Gemini AI Judge processes the transcript, declares a specific winner, provides a savagery percentage (e.g., 80% vs 20%), and adds a savage commentary of its own.
The Lobby has a hidden 60% chance to wipe either your Alias or Room Code the very first time you try to join, giving you a fake error. Only the real ones make it through on the second try.
- Frontend: React + Vite, raw CSS (Neon cyberpunk aesthetics)
- Backend: Python + FastAPI + Uvicorn
- Communication: Raw WebSockets (
asyncioevent loop) - AI Integration: Google Gemini API (
google.generativeai) - Validation: Pydantic
- Node.js (v18+)
- Python (3.10+)
- A Gemini API Key from Google AI Studio
cd src/vibeplay/server
python -m venv venv
source venv/Scripts/activate # (Or venv/bin/activate on Mac/Linux)
pip install -r requirements.txtCreate a .env file in src/vibeplay/server:
GEMINI_API_KEY=your_api_key_here
GEMINI_MODEL=gemini-2.5-flash
HOST=0.0.0.0
PORT=8000
DEBUG=false
MAX_PLAYERS=8
ROUNDS_PER_GAME=3Run the backend:
python main.pycd src/frontend
npm install
npm run devOpen your browser to http://localhost:5175 (or whatever port Vite gives you). Open a second tab to act as Player 2. Enter the same room code and let the chaos begin!
