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.
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
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
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
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
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.
2Idle 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
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
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
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
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.
3The 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
Total 27:30
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
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
3.3RestIndigo, matching the mat.
TimerCasting to mat
No-Gi · Fundamentals
Round 3 of 5 · time
0:00
Buzz · stopped at zero
RestartPlayStop
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.