A cross-platform live quiz application similar to Kahoot/Menti, built with Expo (iOS/Android) and Next.js (web). Create engaging quizzes with multiple question types, live reactions, real-time leaderboards, and exciting prize modes!
- 🎯 Multiple Question Types: Multiple choice, polls, scale ratings, and numeric guesses
- 📱 Cross-Platform: Web (Next.js), iOS & Android (Expo)
- 🔗 Easy Join: Join via memorable word-pair codes (e.g., "happy-tiger") or QR codes
- 👥 Named Players: Players can set their display names
- 👍 Live Reactions: Send thumbs up reactions in real-time
- 🏆 Leaderboards: Real-time scoring and rankings
- 🎁 Prize Modes: Top score, random raffle, and spin wheel
- ⚡ Real-Time: WebSocket-powered live updates
- 📊 Analytics: Detailed session analytics and insights
- 🎨 Custom Branding: Logo, colors, and custom domains
- 📝 Session History: Store and review past sessions
- 🚀 Higher Limits: More players, questions, and sessions
- 🆓 Free Tier Trial: Hook users to register and upgrade
yell/
├── apps/
│ ├── web/ # Next.js web application
│ └── mobile/ # Expo mobile application
└── packages/
└── shared/ # Shared types and utilities
- Frontend (Web): Next.js 16, React 19, TypeScript, Tailwind CSS
- Frontend (Mobile): Expo, React Native, TypeScript
- Backend: Next.js API Routes, Socket.IO for real-time communication
- Database: In-memory storage (can be extended to PostgreSQL/MongoDB)
- Node.js 24+
- bun
- For mobile development: Expo CLI
- Clone the repository:
git clone https://github.com/echohello-dev/yell.git
cd yell- Install dependencies:
bun install- Build the shared package:
cd packages/shared
bun install
bun run build
cd ../..bun run dev:webThe web app will be available at http://localhost:3000
bun run dev:mobileThen:
- Press
ifor iOS simulator - Press
afor Android emulator - Scan QR code with Expo Go app on your device
- Navigate to the home page
- Click "Host a Quiz"
- Enter a quiz title and select a prize mode
- Add questions with different types:
- Multiple Choice: Add options and select the correct answer
- Poll: Add options (no correct answer)
- Scale: Set min/max values for rating scales
- Numeric Guess: Set the correct numeric answer
- Configure time limits and points for each question
- Click "Start Quiz" to begin
- Go to the home page
- Click "Join a Quiz"
- Enter the join code (e.g., "happy-tiger")
- Enter your name
- Click "Join Quiz"
- Open the Yell app
- Choose "Join with Code" or "Scan QR Code"
- Enter the join code or scan the QR code
- Enter your name
- Start playing!
Host View:
- See all connected players
- Start/end questions
- View real-time answers
- Show leaderboards after each question
- Award prizes at the end
Player View:
- Answer questions as they appear
- See immediate feedback (correct/incorrect)
- Send live reactions
- View your rank and score
- Celebrate if you win!
- Top Score: Top 3 players win based on points
- Random Raffle: Random winner selected from all players
- Spin Wheel: Random winner with visual spin animation
- None: No prizes, just for fun!
Create a new quiz
{
"title": "Quiz Title",
"description": "Optional description",
"questions": [...]
}Create a new session
{
"quizId": "quiz-id",
"prizeMode": "top_score"
}Get session by join code
join:session- Join a session as host or playersession:start- Start the sessionquestion:start- Start a questionquestion:end- End a questionanswer:submit- Submit an answerreaction:send- Send a reactionsession:end- End the session
session:joined- Confirmation of joiningplayer:joined- New player joinedsession:started- Session startedquestion:started- Question startedanswer:submitted- Answer confirmedquestion:ended- Question ended with resultsreaction:sent- Reaction broadcastsession:ended- Session ended with final results
- Up to 50 players per session
- Up to 10 questions per quiz
- 5 sessions per month
- 7-day session history
- Basic features
- Up to 500 players per session
- Up to 100 questions per quiz
- Unlimited sessions
- 1-year session history
- Analytics dashboard
- Custom branding
- Unlimited players
- Unlimited questions
- Unlimited sessions
- Unlimited history
- Advanced analytics
- White-label support
- Priority support
apps/web/
├── app/
│ ├── api/ # API routes
│ ├── host/ # Quiz creation page
│ ├── join/ # Join page
│ ├── play/[id]/ # Player view
│ └── session/[id]/ # Host control panel
├── hooks/ # React hooks
└── server.js # Custom Next.js server with Socket.IO
apps/mobile/
└── App.tsx # Main mobile app
packages/shared/
└── src/
├── types.ts # TypeScript types
└── utils.ts # Shared utilities
- Update types in
packages/shared/src/types.ts - Rebuild shared package:
cd packages/shared && npm run build - Implement backend logic in
apps/web/server.jsor API routes - Update frontend components in web and/or mobile apps
cd apps/web
npm run buildcd apps/mobile
expo build:ios
expo build:androidWe welcome contributions! Please follow these guidelines:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
MIT License - see LICENSE file for details
For questions and support:
- GitHub Issues: https://github.com/echohello-dev/yell/issues
- Documentation: See this README
- Database integration (PostgreSQL/MongoDB)
- User authentication (OAuth, email/password)
- Premium subscription management
- Advanced analytics dashboard
- Custom branding UI
- Session history and replay
- Export results to CSV/PDF
- Team/organization management
- Question bank and templates
- Integration with LMS platforms
Created by the Yell team. Inspired by Kahoot and Mentimeter.