A tense, meta social deduction game. You are the lone human in a simulation, facing a panel of advanced AIs. Your goal: pass as a machine.
Five AI players, powered by Gemini, answer the same questions you do and look for linguistic anomalies. Each cycle, subjects can accuse someone or skip, accused subjects can defend themselves or stay silent, and every active subject votes. The subject with the most votes is purged.
Survive until only one AI remains alongside you. Then you win.
- React 19 + TypeScript
- Three.js - 3D interrogation chamber (roundtable, atmospheric lighting, 6 avatar sprites)
- Gemini 2.0 Flash - AI player responses, suspicion, defenses, and voting logic
- ElevenLabs - narrator voice and generated animal cue sounds
- Vite 8
- Node.js >= 18 - check with
node -v - A Gemini API key - get one free at aistudio.google.com/apikey
- An ElevenLabs API key - used by the local Vite audio proxy for narration and animal cues
# 1. Clone and install
git clone <repo-url>
cd turing-blend-game
npm install
# 2. Add your API keys
cp .env.example .env.local
# Edit .env.local and add your Gemini and ElevenLabs keys
# 3. Run
npm run devOpen http://localhost:5173.
Without
.env.local: the game will prompt for your API key on the intro screen instead. It saves it to localStorage so you only enter it once per browser.
| Variable | Required | Description |
|---|---|---|
VITE_GEMINI_API_KEY |
No | Your Gemini API key. Leave blank to use offline random mode. |
ELEVENLABS_API_KEY |
No | Server-side ElevenLabs key for generated narration and animal sounds. Without it, voice features quietly disable. |
ELEVENLABS_NARRATOR_VOICE_ID |
No | Optional narrator voice ID. Defaults to the ElevenLabs quickstart sample voice. |
VITE_ELEVENLABS_NARRATOR_MODEL_ID |
No | Optional narrator model. Defaults to eleven_v3 for more expressive horror-style delivery tags. |
.env.local is gitignored - never commit your actual key.
The ElevenLabs key is intentionally not prefixed with VITE_, so it stays in the local Vite server and is never bundled into the browser.
- Briefing - Read the mission. Click anywhere to start.
- Question - A question appears. You have about 45 words to answer. Sound like a machine, not a human.
- Review - Hover each subject to inspect their answer in a speech bubble.
- Accuse - Each subject gets a turn to accuse or skip. Your turn has a 30-second timer.
- Defend - If accused, you can submit a defense or skip. The defense timer is also 30 seconds.
- Vote - You and all AI subjects vote. The subject with the most votes is eliminated.
- Repeat - Cycles continue with fewer subjects. Reach the final 2 (you + 1 AI) to win.
You lose if the AI majority votes you out.
npm run dev # dev server with HMR
npm run build # type-check + production build
npm run preview # preview the production build