A modern, real-time multiplayer word guessing game built with Next.js, Socket.IO, and TypeScript. Players compete in teams to guess words while the describer avoids using "taboo" words.
- Room-based gameplay: Create or join rooms with unique codes
- WebSocket communication: Real-time game synchronization via Socket.IO
- Team-based competition: 2 teams competing simultaneously
- Live player tracking: See who's online and on which team
- Instant updates: All game state changes sync immediately
- Typing-based guessing: Players type words to guess them (no clicking!)
- Auto-recognition: Instant word validation as you type
- Massive word database: 3,259 words across all difficulty levels!
- Dynamic word pool: Words auto-expand as teams progress
- Smart scoring system:
- Easy words: 8-11 points (green)
- Medium words: 15-28 points (yellow)
- Hard words: 20-30 points (red)
- Rare words: Special badges (🔥)
- 60-second turns with animated countdown
- Skip penalty: -1 point for skipped words
- Next.js 14 with App Router
- Tailwind CSS for stunning responsive design
- Framer Motion animations for smooth transitions
- Glass morphism effects with gradient backgrounds
- Dark theme with blue/red team colors
- Lucide icons for crisp, modern iconography
- Fully responsive: Optimized for desktop, tablet, and mobile
- Next.js 14 - React framework with App Router
- TypeScript - Type-safe development
- Tailwind CSS - Utility-first styling
- Framer Motion - Smooth animations
- Lucide React - Beautiful icons
- Socket.IO Client - Real-time communication
- Node.js - JavaScript runtime
- Express - Web server framework
- Socket.IO - WebSocket server for real-time multiplayer
- CORS - Cross-origin resource sharing
- Node.js v18 or higher
- npm or yarn
-
Clone the repository
git clone <your-repo-url> cd taboo
-
Install backend dependencies
npm install
-
Install frontend dependencies
cd frontend npm install -
Start the backend server (Terminal 1)
# From the root directory node server.jsServer will run on
http://localhost:3000 -
Start the Next.js frontend (Terminal 2)
cd frontend npm run devFrontend will run on
http://localhost:3001 -
Open your browser
http://localhost:3001 -
Play with friends
- Open multiple browser tabs/windows
- Or share your local network IP (e.g.,
http://192.168.1.x:3001) - Each player can join with the room code!
- Push code to GitHub
- Go to Render
- Create New Web Service
- Connect your GitHub repository
- Configure:
- Build Command:
npm install - Start Command:
node server.js - Environment: Node
- Build Command:
- Deploy!
- Copy your Render URL (e.g.,
https://your-app.onrender.com)
- Go to Railway
- Create New Project → Deploy from GitHub
- Select your repository
- Railway will auto-detect and deploy
- Copy your Railway URL
heroku create your-taboo-backend
git push heroku main
heroku open- Push code to GitHub
- Go to Vercel
- Import your repository
- Set Root Directory:
frontend - Add Environment Variable:
NEXT_PUBLIC_SERVER_URL= Your backend URL from above
- Deploy!
cd frontend
npm run build
netlify deploy --prodSet environment variable in Netlify dashboard:
NEXT_PUBLIC_SERVER_URL= Your backend URL
- Backend needs WebSocket support (Render, Railway, Heroku)
- Frontend can be on Vercel or Netlify
- Update
NEXT_PUBLIC_SERVER_URLto point to your backend
Create or join a room with a unique 6-character code.
Players join Team 1 (Blue) or Team 2 (Red) before the game starts.
- Timer countdown with visual warnings
- Word grid with taboo words clearly marked
- Real-time scoring and live updates
- Type-to-guess input field
- Team scores prominently displayed
- Winner announcement with trophy animation
- Final scores for both teams
- Top contributors leaderboard
- Individual statistics per player
- Create Room: Enter your name and create a new room
- Join Room: Enter your name and the 6-character room code
- Share the room code with friends
- Join either Team 1 (Blue) or Team 2 (Red)
- Wait for at least 1 player per team
- Host starts the game when ready
- Describer's turn: One player describes words
- Team guesses: Other team members type their guesses
- Avoid taboo words: Describer can't use the forbidden words
- Score points: Correct guesses add points based on difficulty
- 60 seconds per turn
- Play 6 rounds (3 turns per team)
- Team with highest score wins
- Individual contributions are tracked
-
Describing:
- Describe the target word without saying it
- Avoid all 5 taboo words shown
- No rhyming or "sounds like" clues
-
Guessing:
- Type words in the input field
- Case-insensitive matching
- Unlimited guesses
-
Scoring:
- Correct guess: +10 to +30 points (based on difficulty)
- Skipped word: -1 point
taboo/
├── frontend/ # Next.js Frontend
│ ├── app/ # Next.js App Router
│ │ ├── layout.tsx # Root layout
│ │ ├── page.tsx # Home page
│ │ └── globals.css # Global styles
│ ├── components/ # React Components
│ │ ├── GameContext.tsx # Game state & Socket.IO
│ │ ├── RoomScreen.tsx # Create/Join room
│ │ ├── LobbyScreen.tsx # Team selection
│ │ ├── GameScreen.tsx # Active gameplay
│ │ └── GameOverScreen.tsx # Final scores
│ ├── public/ # Static assets
│ ├── package.json # Frontend dependencies
│ ├── tsconfig.json # TypeScript config
│ ├── tailwind.config.ts # Tailwind config
│ ├── next.config.js # Next.js config
│ └── .env.local # Environment variables
├── public/ # Old vanilla JS version
├── server.js # Socket.IO backend server
├── package.json # Backend dependencies
└── README.md # Documentation
Create frontend/.env.local:
NEXT_PUBLIC_SERVER_URL=http://localhost:3000For production, update to your production backend URL:
NEXT_PUBLIC_SERVER_URL=https://your-backend-server.comEdit frontend/components/GameContext.tsx:
maxRounds: 6, // Number of rounds
turnTime: 60, // Seconds per turnThe game includes 3,259 words from wordlist.txt!
To customize, edit frontend/lib/wordDatabase.ts:
const relatedWords: Record<string, string[]> = {
'YOUR_WORD': ['TABOO1', 'TABOO2', 'TABOO3', 'TABOO4', 'TABOO5'],
// Add custom taboo words for better gameplay!
}See WORDS.md for complete word database documentation.
- Edit
frontend/tailwind.config.tsfor theme colors - Edit
frontend/app/globals.cssfor global styles - Modify component styles inline with Tailwind classes
- Gradient backgrounds: Smooth blue-to-purple gradients
- Glass morphism: Frosted glass effect on cards
- Smooth animations: Framer Motion for silky transitions
- Hover effects: Interactive button states
- Pulse animations: Timer warnings and celebrations
- Badge system: Rare word indicators
- Team colors: Clear visual distinction (Blue vs Red)
- Mobile-first: Optimized for small screens
- Tablet support: Grid layouts adapt beautifully
- Desktop: Full-width experience with optimal spacing
- Touch-friendly: Large tap targets for mobile
cd frontend
rm -rf node_modules package-lock.json
npm install
npm run dev- Ensure
server.jsis running on port 3000 - Check
frontend/.env.localhas correct server URL - Verify CORS is enabled in
server.js
- Backend server must be running (
node server.js) - Check browser console for Socket.IO errors
- Verify firewall isn't blocking port 3000
- Ensure room code is correct (6 characters)
- Room is deleted when all players leave
- Create a new room if expired
- Need at least 1 player per team
- Only the host (room creator) can start
- All players must join a team first
cd frontend
npm run buildThis will show any type errors before deploying
- ✅ Real-time multiplayer - Play with friends anywhere
- ✅ Type-based guessing - No clicking, just type!
- ✅ Smart word matching - Instant validation
- ✅ Dynamic difficulty - Easy, Medium, Hard, Rare words
- ✅ Team-based scoring - Compete for glory
- ✅ 60-second rounds - Fast-paced action
- ✅ Skip penalties - Strategic decisions matter
- ✅ Beautiful animations - Smooth Framer Motion transitions
- ✅ Glass morphism design - Modern frosted glass effects
- ✅ Gradient backgrounds - Eye-catching color schemes
- ✅ Responsive layout - Perfect on any device
- ✅ Dark theme - Easy on the eyes
- ✅ Interactive elements - Hover effects and feedback
- ✅ Team color coding - Clear visual distinction
- ✅ Next.js 14 - Latest React framework
- ✅ TypeScript - Type-safe code
- ✅ Tailwind CSS - Rapid styling
- ✅ Socket.IO - Reliable real-time sync
- ✅ Room-based architecture - Scalable multiplayer
- ✅ Zero-config deployment - Easy to host
- Teams: 2 teams competing
- Players: Unlimited per team
- Rounds: 6 rounds (3 per team)
- Turn Time: 60 seconds
- Scoring: Points based on word difficulty
- Winner: Highest score after all rounds
- 🔜 Quick Play: 3 rounds, 30-second turns
- 🔜 Marathon: 12 rounds, 90-second turns
- 🔜 Solo Practice: Practice describing alone
- � Custom Rules: Adjustable settings per room
Want to improve the game? Here's how:
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Commit your changes
git commit -m 'Add amazing feature' - Push to the branch
git push origin feature/amazing-feature
- Open a Pull Request
- 📝 Add more words to the database
- 🎨 Create new themes or color schemes
- 🌍 Add internationalization (i18n)
- 🎵 Add sound effects
- 💬 Add in-game chat
- 📊 Add player statistics tracking
- 🏅 Add achievements system
- 🎯 Add difficulty levels for rooms
MIT License - Feel free to use this project for learning or your own games!
- Socket.IO - For reliable real-time communication
- Next.js Team - For the amazing React framework
- Vercel - For excellent hosting platform
- Tailwind CSS - For making styling enjoyable
- Framer Motion - For beautiful animations
- Lucide - For beautiful open-source icons
Having issues? Here's how to get help:
- Check the Troubleshooting section above
- Open an issue on GitHub with:
- What you were trying to do
- What happened instead
- Browser console errors (F12 → Console)
- Screenshots if relevant
Ready to play? 🎮
-
Make sure both servers are running:
- Backend:
node server.js(port 3000) - Frontend:
cd frontend && npm run dev(port 3001)
- Backend:
-
Open
http://localhost:3001in your browser -
Create a room and share the code with friends!
Enjoy the game! 🎉🎯