GS.Let's talk
New

Questionair

Live trivia built around videos. Questions pop up mid-clip.

QuestionairInteractive demo · sample data

What it is

Questionair is a live trivia game built around video, in the spirit of Kahoot. A host uploads a clip, trims it and drops question markers on its timeline. When playback reaches a marker the video pauses, the question appears on the big screen, and everyone answers from their own phone using a game code. Steal rounds let the fastest correct players take all of someone else's points.

Why I built it

I built Questionair for group events where a video is already part of the program. Instead of a separate quiz at the end, the questions live inside the clip, so people watch more closely and everyone in the room plays along on their own phone.

500–1000points per correct answer, based on speed
4 sHLS video segments
10 sto pick a steal victim
6answer colours, each with its own shape

How it works

Uploads become streamable video

Every upload is converted with ffmpeg into HLS: 720p H.264 capped at 1.5 Mbps, a keyframe every 96 frames, cut into 4-second segments. The segments are MPEG-TS rather than fragmented MP4 on purpose: ffmpeg sometimes wrote a broken audio header into fMP4, which made Chrome's audio renderer give up, while AAC inside TS plays reliably. Small segments that load one at a time also hold up better on shaky Wi-Fi and with iPhone .MOV files.

Markers turn a clip into steps

When a game starts, each clip and its markers are flattened into an ordered list of steps: play 0 to 11 s, ask a question, play 11 to 22 s, ask again, and so on. The server walks through the steps. The host screen reports when a segment reaches its marker, and a backup timer (segment length plus 8 s) moves the game on if a video ever gets stuck.

One room, two kinds of screens

A single Socket.io server has two namespaces: /host for the big screen and /play for phones. The server owns the clock, the answers and the scores, and every screen just draws the snapshot it receives. Each player gets a 24-character reconnect token saved on their phone, so a refresh or a dropped connection puts them back in the same seat with the same score.

Faster answers score more

Each question opens with a 3-second "Get ready" countdown, then a 20-second answer window. A correct answer is worth 500 + round(time left / time limit x 500), so between 500 and 1000 points; a wrong or missing answer gets 0. The question closes early once every connected player has answered.

The steal queue

On a steal question, everyone who answered correctly is lined up fastest first. Each person in line gets 10 seconds to pick a victim and takes all of that player's points, then the next person goes. A stealer can be robbed by someone later in the same line, which is what makes the end of a game so loud.

Built with

Next.js 16React 19TypeScriptSocket.ioPrismaNextAuthhls.jsffmpegTailwind CSS 4