Host Epic Quiz Nights 🎉

A free, open-source, self-hosted Jeopardy-style quiz game built with ASP.NET Core and React. Real-time buzzers, rich media questions, and a beautiful display view – all running in a single Docker container.

Custom Quiz Host game board showing categories and point values

Everything you need for a great quiz night

Real-Time Gameplay

Powered by SignalR for instant synchronisation across all connected devices – no refreshing required.

🖥️

Four Dedicated Views

Display – beautiful game board on the projector.
Remote – host control panel.
Buzzer – player buzzer on any phone.
Planner – offline editor for preparing boards.

🏆

Buzzer System

Tracks buzz-in order with precise millisecond timestamps so there are never any arguments about who buzzed first.

⏱️

Question Timer

Start an animated countdown (1–999 seconds) for any question. The timer sits in the corner of the Display so it never covers the question, and the buzzer is automatically deactivated when time runs out.

📂

Five Question Types

Standard text, image, image mozaik (progressive reveal), audio, and video questions – all supported out of the box.

🎨

Fully Customisable

Create your own categories, set point values (200–1000), upload media files, and tailor every question to your event.

📊

Live Score Tracking

Scores update automatically when the host awards or deducts points. Players see their standing update instantly.

🟧

Category Selector Highlight

The player whose turn it is to pick the next category is highlighted with a glowing orange border – no more arguments about whose turn it is. Hosts can manually hand over selection or hide the highlight entirely from the Setup screen.

🥇

Persistent Highscore Board

A hall of fame that survives container restarts. It's displayed alongside the winner screen after every game.

🎡

Random Player Wheel

Spin a wheel of all players, complete with names and avatars, to randomly pick someone for the next question, challenge, or tiebreaker. The wheel decelerates with a satisfying ease-out and reveals the chosen player on the Display.

💾

Import / Export

Save and restore full game state in JSON. Reuse question packs across sessions or share them with friends.

📝

Offline Quiz Planner

Prepare entire quiz boards at /plan without touching a running game. Categories, questions, and uploaded media live in your browser (localStorage + IndexedDB) and export to a ZIP that imports straight into the Remote Control.

🐳

Single Docker Container

Deploy anywhere with one docker compose up command. Media uploads and highscores are stored in named volumes.

See it in action

Game board showing all categories (History, Science, Pop Culture) with point values 200–1000
Point Board – select a category and value to reveal the question.
Question screen showing the current question text and point value on the display
Question Screen – the question is revealed on the projector display.
Display showing Emily buzzed in first with the buzz order visible
Buzz-In – the display shows who buzzed in first with millisecond precision.
Winner podium screen showing Emily, Tom, Suzy, Michael, Ashley, and Andrew with their final scores
Winner Podium – shown at the end of every game alongside the all-time highscore board.
Display showing submitted player answers from Tom, Suzy, and Michael visible to everyone
Player Answers – the host can reveal all submitted answers on the projector at once.
Remote control setup tab showing player and category management
Remote – Setup tab for managing players, categories, and questions.
Remote control host tab showing scoring controls while a question is active
Remote – Host tab with point award/deduct buttons during an active question.
Buzzer page on mobile showing the player selection screen
Buzzer – players pick their name on their phone.
Buzzer page showing the active BUZZ IN button ready to press
Buzzer – the big button lights up when the host activates the buzzer.
Buzzer page showing Tom typing an answer into the answer input field
Buzzer – players can type in their answer which the host sees on screen.

How it works

1

Set up your game

Open the Remote Control (/remote), add players, create categories, and write your questions. Choose a type for each question and upload any media files.

2

Connect everyone

Display the Display View (/display) on a TV or projector. Each player opens the Buzzer (/buzzer) on their phone and selects their name.

3

Play!

Select a category and value from the board, reveal the question, and watch the buzzers light up. Award points, move on, and let the quiz engine handle the rest.

4

Crown the winner

When all questions are answered the display shows the podium and updates the all-time highscore board automatically.

Quick Start

The fastest way to run Custom Quiz Host is with Docker Compose.

1 Create a docker-compose.yml

services:
  custom-quiz-host:
    image: ghcr.io/michamican/custom-quiz-host:latest
    ports:
      - "8080:8080"
    volumes:
      - uploads:/app/uploads
      - highscores:/app/highscores
    restart: unless-stopped

volumes:
  uploads:
  highscores:

2 Start the application

docker compose up -d

3 Open in your browser

Display (projector) http://localhost:8080/display
Remote Control (host) http://localhost:8080/remote
Buzzer (players) http://localhost:8080/buzzer
Planner (offline editor) http://localhost:8080/plan

Development Setup

Want to hack on the code? You'll need .NET SDK 10.0+ and Node.js 20+.

git clone https://github.com/MichaMican/custom-quiz-host.git
cd custom-quiz-host/customquizhost.client
npm install
cd ../CustomQuizHost.Server
dotnet run

Tech Stack

Backend
  • ASP.NET Core 10.0
  • SignalR
  • C#
  • Docker
Frontend
  • React 19
  • TypeScript
  • Vite
  • @microsoft/signalr

Love it? Give it a ⭐

Custom Quiz Host is free and open-source. Star the repo to show your support and help others discover it.