Digital Ground Game
Stream overlay · TBAT

Kick or Keep

A donation tug-of-war for the stream. Kick money fills the pot; keep money pushes the goal further away. The rope moves live while people give, and the KICKED card holds on screen until the operator starts the next guest.

No account, no install, no network. It runs off a USB stick. Every release is frozen — the version you download today stays downloadable.

Running it

Two things happen on the operator's machine: the relay runs in a terminal, and the control room is a page you keep open.

  1. 1
    Unzip the kit and start the relay

    Node is the only requirement. Leave this window open for the whole stream.

    node relay.js
  2. 2
    Open control-room.html

    This is the operator's screen — the buttons, the pot, the guest timer. It explains itself on the page, so there is nothing to memorise.

  3. 3
    Add overlay.html to OBS as a Browser Source

    It is transparent by design. On its own it looks like nothing — that is correct; it only draws once the control room sends it something.

What is in the box

FileWhat it is
overlay.htmlThe graphic OBS shows.
control-room.htmlThe operator's buttons.
relay.jsConnects the two. Node, no dependencies.
README.mdSetup, the query parameters, and what to do when nothing is happening.
EVENTS.mdFor a developer wiring real donations in.
manifest.jsonThe version, and a checksum for every file above.

When nothing is happening

The control room says which of these it is, in the status line under the buttons. This is the part worth reading before the stream, not during it.

DISCONNECTEDOBS is not following the buttons

The relay stopped, or was never started. Start it again — the page reconnects on its own.

NOT SENTThat press did not reach OBS

The click was real but the connection was not. Wait a moment and press it again.

KICKED, stuckThat is on purpose

The card holds until you press play, so nothing moves on before the next guest sits down.

Sending real donations

The overlay does not read your donation platform directly; something sends it an event. There are three ways to do that, and EVENTS.md opens with a runnable example rather than a specification.

If you report a problem, quote the version — it is on the control room and in manifest.json. It tells us exactly which bytes you are running.