Pop! is a real-time, interactive quiz game web app built with Next.js and Firebase.
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
- 14 unique question types
- Role-based gameplay β organizers control the game, players answer, spectators watch
- Scoring & leaderboards β round scores, global scores, and dynamic charts
- Question database β submit, review, and reuse community questions
- OAuth2 authentication β sign in with Google or Discord
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 |
| Forms | Formik, Yup |
| 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.developmentconnects 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
β βββ about/ # About page
β βββ api/ # API routes (NextAuth)
β βββ edit/ # Game editor
β βββ join/ # Join game flow
β βββ submit/ # Question submission forms
βββ assets/ # App assets (images, audio)
βββ 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
β βββ contexts/ # React contexts
β βββ helpers/ # Client utilities
β βββ hooks/ # Custom React hooks
βββ i18n/ # Internationalization (EN/FR)
