Bangkok Fight Lab · ForgeLog

Class board + round timer

Mockup only. Rebuilt against docs/DESIGN_LANGUAGE.md and CONVENTIONS.md — the previous pass violated three locked rules, listed below.

Refer by number. Every section and card carries a badge — say "1.2 is right, 2.1 needs work".

What was wrong, and what the conventions actually say

  1. Wrong font. I used Space Grotesk on the TV. CONVENTIONS.md carries an explicit exception: the gym-TV board render uses --fl-font-board = Montserrat, BASE's pick for across-the-room legibility. Every TV frame here is now Montserrat.
  2. Wrong colour for live. Locked 2026-06-25: a live surface flips to EVENT MODE — near-black #0A0B0F canvas, twin radial glow, and neon green #22F59B reserved for the LIVE/running state. I had a red running clock. Red is wrong twice over, because —
  3. Red means ZERO, not running. The timers convention: "at zero: turn red + buzz + stop". Red is the terminal state only. Rest now uses --ev-indigo (transition / not-yet-earned), matching glow-C.
  4. Too much unreadable text. Your call, and correct — the header lockup and the whole bottom chip row are illegible past a few metres. Live frames now carry the clock, the round count, and nothing else.
1
Live round — refactored

Everything that can't be read from the far mat is gone. What's left is sized to be read from anywhere in the room.

Old — wrong font, wrong colour, unreadable chrome
BANGKOK FIGHT LAB
No-Gi · Fundamentals — Coach Morgan
Round 3 of 5
2:38
Rolling — 5 min rounds
Warm-upTechniquePositionalRollingStretch
1.1aLive round — house treatmentNeon green running · BFL red in the brand glow
2:38
ROUND 3/5
Digits go from ~11vw to ~27vw — about 6× the glyph area. Gym name, class name, coach name, drill name and the agenda strip are all removed: none were readable at mat distance, and none change during a round. BFL red enters as the brand glow on the canvas, which is where a tenant colour belongs; the clock stays the locked event-mode neon.
1.1bLive round — BFL-forwardInk clock · red round marker · green stays earned
2:38
ROUND 3/5
The clock goes white — the slate/neutral role, and the most legible thing possible on near-black at 12 metres. BFL red marks the live round (the current pip and the round number), green marks rounds already earned (the completed pips), red still owns zero. Every colour keeps its meaning and the gym's brand carries the screen.
1.1a or 1.1b — your call. 1.1a is faithful to the locked event-mode treatment every other live ForgeLog surface uses, with BFL colour in the glow. 1.1b puts BFL red on the state that matters and moves the clock to neutral white. Neither breaks a rule: in 1.1b green still means earned, red still means terminal, and the tenant colour marks the tenant's own thing.
1.2RestIndigo — transition, not earned
0:18
REST · ROUND 4 NEXT
Indigo rather than green, per glow-C: green is earned, and a rest period hasn't earned anything. Indigo is the interface/transition accent. The colour change alone tells the room the state flipped — no text needed.
1.3Last 3 seconds → zeroRed is the terminal state only
0:00
ROUND 3/5 · TIME
Per the timers convention: at zero, turn red and stop — freeze at 0:00, never count up. This is the only frame that is ever red. Beeps come from Morgan's phone through the PA, as today; the screen change is the visual half of the same signal.
2
Idle states — the only frames that carry words

When no timer is running nobody is mid-drill, so text earns its place. Reworked after surveying GymScreen, GymBoard and CastHub — the incumbents all keep a schedule permanently on screen, and all pair by code rather than URL.

2.0First run — pairingSolves the type-a-URL-on-a-remote problem
Bangkok Fight Lab
Enter this code in the ForgeLog app
492 715
forgelog.com/pair · this screen updates automatically
Lifted from GymBoard, who solved this properly: the TV shows a 6-digit code and you type it into the app. That kills the problem I flagged earlier — nobody types a long board URL on a d-pad. Pair once on install day; the TV then follows whatever Morgan's phone is running, forever.
2.1Between classes — today's scheduleThe job the screen does most hours of the day
Bangkok Fight Lab
Today
17:00Muay Thai · PadsAri
19:00No-Gi · FundamentalsLive
20:00MMA · SparringMorgan
21:00Open Mat
The gap my earlier pass had. Both GymScreen and GymBoard keep a persistent schedule on screen — GymScreen as a "Next Class" panel under the timer, GymBoard as a live schedule with instructor names and a live indicator. A mat TV is a schedule board for most of the day and a timer for minutes at a time. Times and class names are the only things big enough to matter; coach names sit one step down.
2.2Coach is teachingWhat's happening · what's next
Bangkok Fight Lab
Technique
Knee-cut pass
→ back take
Next Positional · 10 min
Three lines, all readable across the room. The five-block agenda is gone — it was a table nobody could read. What matters standing on the mat is what we're doing and what's next.
2.3Class finishedThe QR takes half the screen
Bangkok Fight Lab
5 rounds
done.
Scan to post
The screen that earns the TV. The card a member scans is already branded Bangkok Fight Lab, so the gym is credited even by people who post without tagging.
3
The timer — Morgan's Android phone

Play, pause, restart, stop. No ±30s. Event-mode skin so phone and mat read as one surface. Installs to the home screen from a link — no app store, no fee.

TimerCasting to mat
No-Gi · Fundamentals
Set up
BJJ rollsMuay ThaiMMADrill
Rounds
5+
Round
5:00+
Rest
0:30+
Start
Total 27:30
Sound
3.1Set upTap a preset or dial three numbers. Presets exist because BJJ rolls 5 min, MMA 5 with 1 min rest, Muay Thai 3 with a 2 min rest.
TimerCasting to mat
No-Gi · Fundamentals
Round 3 of 5
2:38
Working
RestartPauseStop
Round 3 / 512:38 left
3.2RunningNeon green matches the mat screen exactly, so a glance at either tells the same story.
TimerCasting to mat
No-Gi · Fundamentals
Rest — round 4 next
0:18
Resting
RestartPauseStop
Rest11:48 left
3.3RestIndigo, matching the mat.
TimerCasting to mat
No-Gi · Fundamentals
Round 3 of 5 · time
0:00
Buzz · stopped at zero
RestartPlayStop
Time12:00 left
3.4At zeroRed, buzz, freeze — never counts up. The one convention every ForgeLog timer already shares.
The build reuses the existing canonical timer code rather than a second implementation — remainingRestSeconds for wall-clock accuracy that survives screen-lock, and use-wake-lock.ts to hold the screen awake while running. CONVENTIONS.md forbids hand-rolling a setInterval countdown.
Round conventions — Gymdesk open mat · HKT Muay Thai · Evolve MMA
Mockup — Bangkok Fight Lab class board + round timer · ForgeLog event-mode tokens + Montserrat board font · nothing shipped.