Witch Please
A Twitch chat mini-game with an OBS overlay: chat accuses a viewer of witchcraft, votes guilty or innocent, the streamer judges, and a dramatic reveal shows whether they really were a witch.
Streamers sign in with Twitch, add the overlay to OBS as a browser source, and run trials from a dashboard. There are game settings for timings, scoring and limits, overlay test screens, a mock chat mode for playing without a Twitch connection, and an admin area for searching and suspending channels.
Case Study
The Challenge
A chat-driven game has to stay fair and consistent while hundreds of messages may be arriving at once. Each viewer can vote once, a channel can only have one trial running, trials must move through their stages in order without racing or being skipped, and Twitch may deliver the same event more than once. The game also depends on a secret: whether the accused is a witch has to stay hidden from everyone, including the streamer, until the reveal, and a trial must never get stuck if the streamer walks away.
The Solution
I built it with Laravel 13, using Twitch EventSub webhooks (with HMAC signature checks and a replay window) feeding a queued message processor, and a single TrialEngine as the only code allowed to change a trial's state. Trials follow an explicit state machine from pending through accused, trial, verdict and reveal to complete, with transitions guarded by a row lock. The database enforces the rules where it can: unique indexes give one active trial per channel and one vote per user, processed Twitch events are recorded in the same transaction as the work so redeliveries are ignored, and scoring happens once inside the transition into the reveal. A presenter class is the single gate on the hidden identity in anything sent to the browser. Live updates go out over Laravel Reverb WebSockets to a Vue 3 dashboard built with PrimeVue and a lightweight SVG and GSAP overlay, with phase timers and a scheduled sweep so no trial hangs.
The Outcome
The MVP is built and covered by Pest, Vitest and Playwright end-to-end tests that play a full trial in real browsers. The Twitch and OBS integrations are written against Twitch's documented API and tested with simulated requests, but have not yet run against live Twitch or a real OBS, and the app has not been deployed yet. It is an early-stage project in active development.
Technologies Used
More Projects You Might Like
Jetboost.tech
An all-in-one platform for UK tradespeople, sole traders, small businesses and clubs: customers, quotes, jobs, invoicing, payments and bookings in one app, with VAT, CIS and the domestic reverse charge built in.
The Peters Collection
An archive management and image licensing platform for a collection of vintage photographs by John Peters, spanning the 1960s to the early 2000s, with a searchable public gallery, protected images and online licence sales.
Nowvella
A web-based manuscript editor for long-form fiction, built as a modern, more detailed take on the desktop tool Manuskript, with an outline, story bible, revisions, export and an MCP server for AI assistants.