Pop! is a real-time, interactive quiz game web app built with Next.js and Firebase, hosted on Vercel.
Create, organize, play, and spectate quiz games with friends β covering video games, movies, anime/manga, music, literature, Internet culture, and more.
Note: The game is designed to be played while chatting in-person or on a VoIP app such as Discord or Zoom.
- Real-time multiplayer β play with friends in teams or solo
- 12 unique round types β Progressive Clues, Image, Emoji, Blindtest, Quote, Labelling, Enumeration, Odd One Out, Matching, Reordering, MCQ, and Nagui
- Role-based gameplay β organizers control the game, players answer, spectators watch
- Buzzer system β race to answer first in buzzer-based rounds
- Scoring & leaderboards β round scores, global scores, and dynamic charts
- Sound effects & soundboard β immersive audio feedback
- Question database β submit, review, and reuse community questions
- OAuth2 authentication β sign in with Google or Discord
- Internationalization β English and French
For detailed gameplay rules, round type descriptions, scoring mechanics, and more, visit the Wiki.
| Layer | Technology |
|---|---|
| Framework | Next.js |
| UI | React, Material UI, Tailwind CSS |
| Auth | NextAuth.js (Google, Discord) |
| Database | Firestore |
| Storage | Firebase Storage |
| Hosting | Vercel |
| Forms | Formik, Yup |
# Clone the repository
git clone https://github.com/jmettler27/Pop.git
cd Pop
# Install dependencies
npm install
# Set up environment variables
# Copy process.env and fill in your Firebase + OAuth credentials
# Start the development server
npm run devThe app will be available at http://localhost:3000.
| Command | Description |
|---|---|
npm run dev |
Start the development server (uses production Firebase) |
npm run dev:emulators |
Start emulators + dev server together (local data) |
npm run emulators |
Start Firebase Emulator Suite only |
npm run seed |
Seed the running emulators with sample data |
npm run build |
Build for production |
npm run start |
Start the production server |
npm run lint |
Run ESLint |
You can develop entirely offline using the Firebase Emulator Suite, which emulates Firestore, Realtime Database, and Storage locally.
# Install dependencies
npm install
# Start the emulators + Next.js dev server
npm run dev:emulators
# In another terminal, seed the emulators with sample data (first time only)
npm run seed- App: http://localhost:3000
- Emulator UI: http://localhost:4000 (browse Firestore data, Storage files, etc.)
.env.developmentsetsNEXT_PUBLIC_USE_EMULATORS=trueand uses a demo project (demo-pop)- When this flag is set, the app connects to local emulators instead of production Firebase
- Running
npm run devwithout.env.developmentstill connects to your real Firebase project - Emulator data is persisted in
emulator-data/(git-ignored) via--export-on-exit
| Service | Port |
|---|---|
| Firestore | 8080 |
| Realtime Database | 9000 |
| Storage | 9199 |
| Emulator UI | 4000 |
src/
βββ app/ # Next.js App Router pages & layouts
β βββ (game)/ # Game pages
β βββ api/ # API routes (NextAuth)
β βββ edit/ # Game editor
β βββ join/ # Join game flow
β βββ submit/ # Question submission forms
βββ backend/ # Server-side logic
β βββ firebase/ # Firebase configuration
β βββ models/ # Data models
β βββ repositories/ # Data access layer
β βββ services/ # Business logic
βββ frontend/ # Client-side components & utilities
β βββ components/ # React components
β βββ hooks/ # Custom React hooks
β βββ helpers/ # Client utilities
βββ i18n/ # Internationalization (EN/FR)
