A self-hosted, single-tenant poker tournament tool. One device, one admin password, one tournament running at a time. Includes a full-screen tournament timer with theme/layout editor, blind-structure presets, payout structures, and a check-in dashboard with table assignment, rebuys, addons, eliminations, and walk-up QR registration.
Forked from Isorgcom/GameNight at v0.19249 — same timer code, stripped of the multi-user social platform (no events, no leagues, no email/SMS, no invitations, no posts, no contacts).
- Tournament timer — full-screen blinds/level/clock display with a positionable theme editor, smart-alignment snap guides, multi-select drag, font controls, NoSleep wake-lock fallback, streaming-video panel (YouTube/Twitch/Vimeo/Kick), and per-alarm stream auto-mute.
- Check-in dashboard — add players, assign tables/seats, manage buy-ins, rebuys, addons, eliminations, finish positions, payouts.
- Walk-up QR registration — print a QR code; players scan and add themselves to the active tournament.
- Themes — save / load / import / export
.gnt.jsontheme files (compatible with GameNight themes). - Blind-structure presets — save your favourites; ships with a sensible default.
- Payout structures — preset percentage splits (50/30/20 default).
- Cast / TV display mode — open the timer fullscreen on a separate device via a QR-coded remote URL.
Pre-alpha v1.0.0. The fork is structurally in place — db layer, auth shell, login/logout, tournaments page, settings page, and the timer page's PHP head all run cleanly against the new schema. Not yet wired: the check-in dashboard and walk-up flow still carry references to upstream's events and event_invites tables; those queries will fail until the helper paths are rewritten. The timer remote-key viewer and theme system work. See CHANGELOG.md for what's done and what isn't.
git clone https://github.com/Isorgcom/GameNight-TournamentTimer.git
cd GameNight-TournamentTimer
cp config/config.example.php config/config.php
mkdir -p db uploads && sudo chown -R 33:33 db uploads # 33 = www-data in the container
docker compose up -d --buildOpen http://localhost:8081/login.php. On the first visit it prompts you to set an admin password; the hash is saved to the SQLite database and you're signed in immediately.
There's one shared admin password, hashed and stored in the SQLite site_settings table (admin_password_hash). Set it on first run, change it any time from /settings.php. Anyone with the password can configure the tournament. Tournament participants don't need to sign in — the timer (/timer.php), the walk-up display (/walkin.php?key=…), and the cast receiver (/cast_receiver.php) are public.
www/
├── timer.php full-screen tournament timer
├── timer_dl.php timer AJAX endpoints
├── checkin.php check-in dashboard
├── checkin_dl.php check-in AJAX endpoints
├── walkin.php walk-up player self-registration
├── walkin_display.php QR code display page
├── cast_receiver.php cast/TV display mode
├── tournaments.php tournament CRUD (admin)
├── settings.php admin settings (site name, timezone, password change)
├── index.php router
├── login.php single-password sign-in
├── logout.php
├── auth.php session + CSRF + admin gate
├── db.php schema + helpers (10 tables)
├── _poker_helpers.php calc_pool + table-management
├── _timer_theme.php theme defaults + CSS-var emitter
├── _nav.php _footer.php
└── version.php
MIT — see LICENSE.
The timer rendering, layout editor, theme system, streaming-video panel, NoSleep wake-lock fallback, and snap/multi-select drag all come straight from GameNight. This repo strips out the social/multi-user pieces; everything timer-related is upstream's work.