Eventing Broadcast Console — Build Plan
Started: 2026-05-13 Forcing function: Bromont 2026-06-04 → 06-07 (22 days out) North star: build the feature-complete console for the perfect broadcast of eventing. Bromont is the first show that uses it, not the boundary of what gets built.
Ground rule: no Tryon code carries over by default. Old shows inform design, not code. ([[feedback_bromont_ground_up_rebuild]])
Section 1 — Vision: what is the perfect broadcast of eventing?
The console exists to serve four audiences. Each section captures, in Mike's words, what "perfect" feels like for that audience — drawn from concrete moments in Ocala and Tryon (what worked, what should have worked, what's still missing).
Schedule shape (applies across all phases)
An average show day plays out like this:
- Day 1: 2–3 divisions of dressage in the morning/early afternoon → large gap → show jumping → end of day.
- Day 2: Cross-country. Finale for Short divisions. Middle for Long divisions.
- Day 3: Show jumping for Long divisions only.
- Every division concludes with an awards ceremony.
Implications:
- The day-1 dressage-to-SJ gap is a real broadcast object (not just dead time).
- Day-2 XC carries two narratives sequentially — Short finale first, then Long middle. Divisions never run concurrently on course.
- Day-3 broadcast is Long-only, smaller field, narrower story.
- Awards ceremonies repeat per division — that's a templated graphic set, not a one-off.
1.1 Viewer experience
What does the viewer at home see, hear, and feel? What makes them stay vs. tab away?
Dressage, SJ, and XC have very different viewer experiences — captured per phase below.
1.1.1 Dressage
Day open — sequence (locked 2026-05-14).
The broadcast opens to a fixed sequence, scoped to land the first rider's video package as the rider circles the dressage ring:
- 5-minute countdown video — slate with countdown numerals.
- At 0:00: RNS Videomedia logo stinger.
- ClipMyHorse.tv logo stinger.
- Bromont CCI opener — event-branded show open.
- Pre-recorded B-roll package with commentators talking over. Commentary covers, in order: the overall event → the upcoming phase → the upcoming division → the first rider. The last beat cues the rider's video package.
- First rider's video package (the 30s or 60s rider intro). Timed so it concludes as the first rider is circling the dressage ring.
- First ride begins.
Per-division opener — same structural sequence above, but each division opener should feel "appropriate for that division." How exactly each differs (music? pacing? B-roll cuts? rider mix?) is TBD via discussion and experimentation. Phase 3 default: same template, swappable assets per division.
Per-phase opener — each phase (Dressage / SJ / XC) gets a slightly different opener tone. The structure above is the Dressage variant; SJ and XC variants will diverge in feel. (TBD when we get to those phases.)
Between rides — the unknown-length gap.
The cadence between dressage rides is unpredictable, so the console must be ready to cover any duration. The break is not dead air — it's a chance to tell stories and build the event.
Inventory of between-ride content:
- Rider intro package (template, all rides): the jog cut to music, with basic rider info + basic horse info. Required deliverable: 30-second and 60-second versions so we can fit them to the actual gap. Same asset used at day open (#6 in the open sequence) and between every subsequent ride.
- Scores from earlier rides — running results from today's class.
- Upcoming rides — who's next, on-deck order.
- Leaderboard — current standing in the class.
- 15-second XC fence spots — short package on a single XC fence, used as a hype-the-next-day filler. Commentators can talk over them about what to expect cross-country. Premise: "eventers care about XC and not dressage," so dressage breaks are an opportunity to point at what they actually came for.
- Other "next-day hype" formats — creative space, not yet enumerated.
Persistent on-air elements (during a ride).
Two persistent elements stay on screen during dressage rides:
- Event/division bug — small corner element showing event name + current division. Always on.
- Rider identifier — rider name, horse name, country, pinney number. Exists in two form factors: a lower-third and a corner panel / bug. The director decides which is showing.
Both are small, out of the way, unobtrusive. They reinforce identity without competing with the test.
During the ride.
The dressage ride itself stays clean — the test is the show, not the graphics. Concrete decisions:
- NO live scoring. Dressage is judge-scored after the ride; we don't fake a running total.
- NO test-progress indicator (no "movement 7 of 33," no time bar). The viewer watches the test, not a UI.
- NO comparative context during the ride (no score-to-beat, no head-to-head bug).
- NO sponsor presence during the ride. Sponsor placement lives in the between-ride packages and elsewhere, not on top of the test.
Persistent identifier. Rider name, horse name, country/club, ride number — delivered as:
- Lower thirds — small, out of the way, unobtrusive.
- Corner cards — same data in a corner form factor.
Identifier cards are not always the same. Topic-specific variants exist so when the commentator pivots to talk about the rider's career or the horse's breeding, the on-screen card reinforces what's being said.
Commentator-topic card variants — locked 2026-05-13.
The card variants follow the most common subjects commentators land on. Form factor (which variants render as lower-third vs. corner card vs. both) is a design-time decision — deferred to the design pass for these graphics.
Rider variants (~4–5):
- Career headline — major results: Olympics / WEG / 5* placings, championship medals.
- Recent form — results this season at this level or above; what they're carrying in.
- Nation + program — country, team, training base, coach, current squad status.
- Partnership — how long this rider–horse pair has been together; their record together.
- Story — comeback, debut, return-from-injury, hometown crowd, generational link.
Horse variants (~4–5):
- Pedigree — sire / dam / damsire / breeder.
- Vitals — age, gender, color, breed registry, height.
- Career record — level progression, biggest results, MERs, win/placing record.
- Connections — owner / syndicate / breeder of record.
- Quirks — barn name, personality, signature behavior, prior rider if relevant.
Each variant = same brand chassis (lower-third or corner-card), different content payload. Triggered by the operator (Mike) on commentator cue. Data sourced from the rider/horse dossier — see Section 2 feature surface (TBD).
Story of the Short — same-day SJ, next-day XC. (deferred — open in F-series gaps if we come back to it.)
1.1.2 Show Jumping
The SJ viewer experience is structured as a ride cycle that repeats per rider. The cycle has 5 scenes; transitions between them are scripted but allow operator-time flexibility on the final beat.
Scene 1 — During the ride.
On screen for the entire round:
- Live clock tracking the round (drivable from the operator's SJ-scorer tool — see
sj-timer/). - Persistent rider identity: rider name, horse name, pinney number, country, division, show name. Form factor TBD — could be one combined bug, could be a clock+strip composite, could be multiple smaller elements. Try variations.
- No other graphics. Nothing else on top of the round.
Scene 2 — Replay (move transition in).
Triggered when the rider crosses the finish line. Score is deliberately not flashed at the finish — it's not yet official, and the goal is to tell a story before delivering the verdict.
- 7–10 seconds of ride highlights — the "anything special" from this round. Requires a replay/capture/highlight ability (see F-series open question, deferred).
- PiP of live camera showing the rider in cooldown — slowing the horse down, patting them on the back. Closeup shot.
- Scene transitions in with a move transition (not a cut).
Scene 3 — Score reveal.
When the replay highlights finish:
- Transition back to the rider on camera.
- Display final score for the round.
- This is the official-feeling beat — verdict delivered with the rider visible, not over highlights.
Scene 4 — Leaderboard.
After score reveal:
- Full-screen updated leaderboard reflecting the round just scored.
- This scene also clears the camera operator so they can reposition for the next rider.
Scene 5 — Next-rider handoff (operator-chosen by available time).
The next rider may already be in the ring; the buzzer/bell may or may not have signaled. The leaderboard can exit two ways — both must be supported:
- Path A — overlay: leaderboard fades to an overlay over the next rider's live feed (less time, faster handoff).
- Path B — cut: leaderboard cuts directly to the next rider's live feed (more time available, or the buzzer hasn't gone yet).
Operator picks live based on whether the buzzer has gone.
Variations — tabled for the design session (2026-05-14).
Mike wants to see actual mockups of each variant before deciding. Variant selection is out of scope for this build plan — it's a separate design/build session. The build plan's job here is to enumerate that some during-ride chassis exists with the locked constants (rider name + horse name + pinney + country + division + show name + live clock + no other graphics).
Candidates to mock up in that session: stacked corner, combined strip, anchored composite, minimal-with-action-reveal. Plus whatever else falls out of the design pass. (rail fall, refusal)
Between rounds (locked 2026-05-14).
Not a real content category for SJ — the ride cycle's leaderboard + handoff (scenes 4 + 5) covers rider-to-rider transitions. No additional content lives between rounds under normal flow.
Locked rules that apply to both Short and Long SJ blocks:
- No course preview or walk-through before the block.
- No sponsor presence during SJ rides (parallels the dressage rule).
Short vs. Long — story is different. The SJ block plays differently depending on whether it's mid-event (Short — SJ before XC tomorrow) or finale (Long — SJ after XC, the soundness test). Concrete differences locked 2026-05-14:
Openers — locked 2026-05-14.
Both Short and Long SJ openers keep the dressage structural skeleton (countdown → RNS sting → CMH sting → Bromont opener → B-roll over-package → first-rider package → first ride). What changes is the B-roll content and the first-rider package length.
Short SJ opener (Friday afternoon, post dressage→SJ gap):
- B-roll over-package splits into two beats: recap of the day's dressage → transition into the live feed of the SJ arena.
- First-rider package — starts when the rider enters the ring. No more than 10–15 seconds. Shorter than the dressage 30s/60s — the rider is already in the arena, not in a holding paddock.
Long SJ opener (Sunday, final day):
Same structural template, parallel content swap:
- B-roll over-package splits into two beats: recap of yesterday's cross-country → transition into the live feed of the SJ arena. XC is the freshest and most dramatic phase; using it as the recap source positions the finale correctly.
- First-rider package — same shape as Short: starts when the rider enters the ring, 10–15s max.
Open / flag: the "Bromont opener" element (slot #4) — is it a single Bromont-SJ asset reused by both Short and Long openers, or do Short SJ and Long SJ each want their own variant of the Bromont opener? Defaulting to one shared Bromont-SJ opener for now; revisit if the finale wants a distinctive title.
Day-1 dressage → SJ gap (locked 2026-05-14).
- Length: variable, 30 minutes to 2 hours.
- Broadcast behavior: we sign off (commentary stops) but the stream stays live, displaying when we'll be back.
- No filler content, no sponsor packages, no athlete features during the gap — just the return-time slate. (Revisit if needed; "keep it at that for now.")
Asset required:
- Return-time slate — branded slate that displays a configurable "back at HH:MM" time. Operator-set or schedule-driven. Lives over the live stream.
Cumulative penalty visibility (Long only).
- Going into a Long SJ round: a pre-round graphic shows the rider's cumulative penalties from dressage + XC. This transitions out when the clock starts.
- Short SJ does not show cumulative penalties pre-round (XC hasn't happened yet; only dressage penalties exist, and that's not the story).
Leaderboards — Short and Long both show current standings only. No projections, no path-to-podium math, no "X clear to win" overlay.
Replay scene content (scene 2) — same for Short and Long: plays the SJ round just completed. No XC/dressage flashback inside the post-ride replay.
Highlight capture for every rider. Plan to capture per-rider highlights from dressage and cross-country for every entry. These power the Long-SJ pre-round handoff (below). Capture pipeline TBD.
Scene 5 — handoff, Long-SJ override. For Long SJ the handoff after the leaderboard swaps the "up next overlay" path for a 10-second dressage + XC highlight of the upcoming rider, which then leads into the rider's live feed. Cut-direct-to-rider path remains available for time pressure. Short SJ keeps the original Path A / Path B as originally defined.
Short SJ block close (Day 1 / Friday evening).
A 3-beat sequence that hands off to Saturday's XC:
- Highlight of the day — recap of day 1 (dressage + SJ).
- Current standings going into Saturday.
- Final preview of cross-country.
Long SJ block close (Day 3 / Sunday). (TBD — event close, leads into awards. Awards handling deferred.)
Awards — deferred to a later session.
1.1.3 Cross-country
(locked 2026-05-15 / 2026-05-16, this session)
Concurrency model. Up to three riders on course at once (not four — explicit correction). One rider in the start box counting down. One rider approaching the finish line. The director must track all five states in parallel without losing the primary.
Per-rider stopwatch model (locked). Each rider has their own stopwatch, triggered when they leave the start box. Stopwatches run continuously in the background for every live rider. When the director transitions PROGRAM to a different rider, the graphics package (rider chassis + clock) atomically swaps to follow — no orphan clocks, no leftover identity from the previous rider.
Primary slot mechanic (locked). "Primary" is a graphic concept, not a camera selection. It names which rider's chassis is bound to the active layout's primary pane. Switching primary updates graphics; the director picks the camera in OBS. No automated coupling.
Operator-driven coupling (locked 2026-05-16, supersedes earlier TPS-fed lock). Bromont has no TPS / timing feed integration ([[project_bromont_no_tps]]). Every state transition is an explicit operator action — promoting a rider to primary, starting / swapping per-rider stopwatches, firing finish-line reveals, marking replays. There is no auto-camera-recommendation, no auto-stopwatch-start, no auto-finish-detect. Console UX is designed around fast, grandma-test-clear operator presses (shuttle bindings + on-screen buttons). CV-based substitution via the Mac Mini Claude rig is a post-Bromont stretch — not in scope for V1.
Layout palette (locked, 5 layouts).
| # | Layout | When |
|---|---|---|
| 1 | HERO — single rider full screen | Default. One rider owns the moment. |
| 2 | HERO + ROSTER STRIP — primary + 2 mini PiPs of the others | Quick glance at the two other riders on course. |
| 3 | HERO + COURSE MAP — primary + small inset map with their dot | Spatial context at named landmark fences. |
| 4 | DUAL SPLIT — two riders 50/50 | Two riders approaching simultaneous critical moments. |
| 5 | HERO + START BOX PiP — primary + corner PiP of rider in box with countdown | Seconds before a new rider leaves the box. |
Additional layouts approved (built into the explainer artifact; promote to live layouts when console build begins):
| # | Layout | When |
|---|---|---|
| 6 | HERO + FINISH LINE PiP — primary + corner PiP of rider crossing | Mirror of start-box; symmetric beat. |
| 7 | REPLAY + LIVE PiP — replay package primary + live action in corner | Replay while preserving situational awareness. |
| 8 | LEADERBOARD + LIVE INSET — standings dominate, live in inset | Standings updates after a major finish or hold. |
Layouts that did NOT make the cut:
- QUAD / MOSAIC — rejected. Max 3 riders on course, never 4.
- WATER HERO — rejected. Hank's water-complex role is crew context, not a permanent broadcast layout. See [[feedback_context_not_directive]].
Variations to mock up in design session (deferred): during-ride chassis options — stacked corner, combined strip, anchored composite, minimal-with-action-reveal.
Block open / close — deferred to follow-on session. Likely parallels dressage / SJ block-open skeleton (countdown → stings → opener → B-roll → first-rider). Saturday XC carries two narratives back-to-back (Short divisions finale runs first, then Long divisions middle — never concurrent on course) and needs its own treatment.
Replay capture pipeline — deferred. Operator-marked clips with a rolling 8s buffer; pre-arm + queue + fire pattern visible in the prototype. Pipeline integration (sources-ingest, OBS replay buffer, file system) is downstream of the console build.
Topic lower-thirds — inherit from dressage (5 rider variants + 5 horse variants). No XC-specific additions. The console exposes them by plain-English label, not codename.
1.2 Operator experience — Mike, solo, remote
What's at Mike's fingertips? What does he never have to think about? What information surfaces unprompted vs. on demand?
The console is orchestration + situational awareness, NOT a video mixer. OBS handles PGM/PVW, scene switching, transitions, multi-view (via projectors to any monitor). The console handles what OBS can't: course-wide rider state, domain-specific orchestration (fire graphics, queue replays, promote riders), state coordination across systems (graphics chassis follows primary slot), system health glance, pre-staged actions. See [[project_console_role]] in memory.
Operator-driven everywhere (locked 2026-05-16). Every console state transition is a button press. No automation. No timing-feed dependencies. The Now Playing UX still holds, but the cognitive load on the solo remote operator is real — button placement and shuttle bindings need to keep up with three riders on course at staggered intervals. See [[project_bromont_no_tps]].
Grandma-test usability bar (locked). The console must be operable by someone with zero broadcast training under show-day pressure. Plain language only — no TPS, no Chassis, no PiP, no DSK, no CCI4*-L codes. Big buttons. One decision at a time. Buttons look like buttons. Feedback after every action. Always-visible CLEAR ALL escape. Keyboard shortcuts are bonus, never primary. See [[feedback_console_grandma_usable]].
Direction A — "Now Playing" — picked 2026-05-15.
The operator picks the story rider; the system handles the math. Console structure:
- Now Playing banner (always visible) — "On screen now · TIM PRICE · 5:23 on course · at the Water Jump." Plain English.
- Active graphics tray — chips showing what's currently overlaid on top of the camera (with × to remove each). "No extra graphics on screen. Just the camera." when empty.
- Three rider cards — name (display serif, large), country spelled out ("New Zealand," not "NZL"), course time, plain-English location ("at the Water Jump," "just left the start box"). Tap to promote to primary. Active rider has a teal ring + ▶ marker.
- "Up next" note — start-box rider with live countdown to GO.
- Two big primary actions — "Tell viewers a story about [rider]" (opens story sheet with 10 plain-English options) and "Show that again — Last 8 seconds" (replay).
- "More options ▾" — leaderboard / course map / split / fence counter / hold notice / score reveal. Hidden by default.
- "Clear all graphics" — always visible, red-bordered, plain English.
- Confirmation toast after every action with an Undo button.
Working prototype at streaming-setup/shows/bromont-2026-06/xc-director-now-playing/index.html and live at https://bromont.schifftacular.com/console/mobile/.
1.3 Venue crew experience — RNS Videomedia + Hank + hired XC ops
What does the crew see / hear / get from Mike? What's the contract between remote director and on-the-ground crew?
(to fill in next session)
Section 1 — Open items remaining
Locked: dressage (1.1.1) · show jumping (1.1.2) · cross-country viewer experience (1.1.3) · operator experience direction (1.2) · sponsor experience (1.4).
Still open:
- 1.3 Venue crew experience — parked pending Lou Ann's POC vendor test results ([[project_bromont_comms_state]]). Not blocking other sections.
- Schedule shape reconciliation — BUILD-PLAN currently assumes 3-day shape (D+SJ / XC / SJ-Long). OC's published shape suggests 4-day (Thu jog + Fri D + Sat XC + Sun SJ+awards). Resolve when 2026 omnibus drops.
- XC block open and block close — Saturday carries Short finale and Long middle sequentially (Short runs first, then Long; divisions never concurrent on course).
- Story-of-the-Short — killed 2026-05-16. Won't be built for Bromont. Revisit post-Bromont if narrative arc has real legs.
1.4 Sponsor experience (locked 2026-05-16)
What does a sponsor get for their money? Logo time, integrated moments, data, downstream content? How does the broadcast prove value to them in real time?
Blended model — three tiers. Sponsors are not all treated the same. The on-air surface is split deliberately:
- Tier 1 — time-slot owners. A small set of top sponsors get scheduled, recurring on-air real estate: corner bug rotation slot, predictable bumper plays, and named graphic surfaces. They show up on the broadcast on a clock, not on a commentator's whim.
- Tier 2 — content-attached. Mid-tier sponsors are bound to specific content moments: the marquee fence bumpers, story-package presenting lines, EOD wrap presenting lines. They show up when the content they're attached to plays.
- Tier 3 — long-tail menu. Remaining official partners are surfaced via the operator menu — sponsor lower-thirds and sponsor corner rotations Mike can fire as the show calls for them. Variety-over-commitment ([[feedback_menu_over_commit]]).
Logo-only disclosure. Sponsor presence is logo + clean lockup. No commentator scripts ("brought to you by…"), no sponsor talent reads, no sponsor data overlays. The viewer sees the mark; nothing more is asserted on-air.
Marquee fence bumpers — three only. Pre-rendered fence bumpers exist for water complex, sunken road, brush+drop only. Not every fence gets a bumper. Other fences get neutral broadcast treatment. This keeps the bumper surface scarce enough to feel premium, cheap enough to build in 19 days, and resilient enough to drop one without breaking the show.
No on-ride sponsor presence. Sponsor placement stays off during dressage tests, SJ rounds, and XC rides on the same rule as graphics: the discipline is the show, sponsors live in the surrounding content.
Deferred items (carry into post-Bromont):
- Proof-of-value reporting format. What the sponsor receives after the show — exposure counts, screenshot reels, time-on-screen totals, social cutdowns. Pending Bromont OC alignment; not built for V1.
- Phase-presenting structure. Whether each phase (D / SJ / XC) carries a dedicated presenting sponsor in the title block. Pending Bromont OC alignment; not built for V1.
Section 2 — Feature surface (derived from Section 1)
(populated incrementally as Section 1 fleshes out. Each feature traces back to a vision line — no orphan features. Phase-scoped subsections below.)
2.1 Dressage — graphics surface (started 2026-05-14)
Comprehensive list of distinct graphic assets needed for the dressage phase. Grouped by where they appear in the broadcast. Each item is one asset class — variants and divisions are noted inline.
A. Day-open sequence
| # | Asset | Notes |
|---|---|---|
| A1 | 5-minute countdown video | Slate with countdown numerals; brand identity; presumably music bed. Single asset, reused every broadcast day. |
| A2 | RNS Videomedia logo stinger | Plays at countdown 0:00. ~2–4s sting. |
| A3 | ClipMyHorse.tv logo stinger | Follows RNS stinger. ~2–4s sting. |
| A4 | Bromont CCI Opener | Event-branded show open. Reusable across all four days, but specifically the Dressage variant tone-wise. |
| A5 | B-roll over-package (dressage) | Pre-recorded silent B-roll, commentators talk over. ~60–90s, length TBD. Covers event → phase → division → first rider in order. |
| A6 | Division opener (Dressage variant) | Same template per division at first; division-specific tone TBD via experimentation. Used between divisions during the dressage block. |
| A7 | Rider intro video package — 30s | Template: jog cut to music + basic rider info + basic horse info. Per-rider asset, one per entry. |
| A8 | Rider intro video package — 60s | Same template, longer cut, for longer gaps. Per-rider asset. |
B. Persistent on-air elements
| # | Asset | Notes |
|---|---|---|
| B1 | Event/division bug | Persistent corner bug: event name + current division. On for entire ride. |
| B2 | Rider identifier — lower third | Rider name + horse name + country + pinney number. Lower-third form. Always available; director decides when to show. |
| B3 | Rider identifier — corner panel/bug | Same data as B2, corner form factor. Alternative to B2; director picks form. |
C. Topic-specific lower-thirds (commentator-triggered)
Operator-fired when commentary pivots. Each variant = same brand chassis, different content payload. Triggered manually from console.
Rider variants:
| # | Asset | Content |
|---|---|---|
| C-R1 | Rider — Career headline | Olympics / WEG / 5* placings, medals |
| C-R2 | Rider — Recent form | Season results at this level or above |
| C-R3 | Rider — Nation + program | Country, team, training base, coach |
| C-R4 | Rider — Partnership | History with this horse, record together |
| C-R5 | Rider — Story | Comeback, debut, hometown angle |
Horse variants:
| # | Asset | Content |
|---|---|---|
| C-H1 | Horse — Pedigree | Sire, dam, damsire, breeder |
| C-H2 | Horse — Vitals | Age, gender, color, breed, height |
| C-H3 | Horse — Career record | Level progression, biggest results, MERs |
| C-H4 | Horse — Connections | Owner, syndicate, breeder of record |
| C-H5 | Horse — Quirks | Barn name, personality, prior rider |
D. Between-ride content
| # | Asset | Notes |
|---|---|---|
| D1 | Rider intro video package | A7 + A8 reused between every ride. Director picks 30s or 60s based on gap length. |
| D2 | Earlier-rides scoreboard | Today's completed rides, ordered by score. |
| D3 | Upcoming-rides list | On-deck order; who's coming up. |
| D4 | Division leaderboard | Current standings in the active division. |
| D5 | 15-second XC fence spot | One per featured fence; commentary fills with XC hype. Per-fence asset. |
| D6 | Next-day hype filler (format TBD) | Creative space for additional content beyond D5. To be enumerated. |
E. Division close — awards ceremony
| # | Asset | Notes |
|---|---|---|
| E1 | Awards ceremony graphics (detail TBD) | Templated set used at the end of every division. Specifics not yet designed — separate discussion. |
F. Known gaps — open questions for dressage
These came up in the discussion above or in the schedule shape but haven't been designed yet:
- F1 Score-reveal beat. FEI dressage scores post minutes after the test, not live. UX for the gap is undefined: hold camera, swing to scoreboard graphic, sting + lower-third update, none?
- F2 Mid-day re-anchor. Between dressage divisions (2–3 per day) and across drag/lunch breaks: do we re-open or just transition?
- F3 Dressage-to-SJ hand-off. Day 1 has a "large gap" between dressage end and SJ start. What's the broadcast doing in that gap?
- F4 Day close (dressage block end). Wrap graphic, top scores, hand-off to SJ?
- F5 Sponsor placement strategy. No sponsor during the ride is locked. Where DO sponsors live across day-open, between-ride, division-close, day-close, awards? Affects revenue ceiling.
- F6 Per-division opener differentiation. Same template for now; what specifically should vary by division (CCI4*-L vs 4*-S vs 3*-L U25 vs 2*-L U25 vs Bromont Rising)?
2.2 Show Jumping — graphics surface (started 2026-05-14)
Same structure as 2.1. Many assets shared with dressage (countdown, stings, persistent bug, topic lower-thirds, return slate) — noted inline. Per-phase variants where they exist.
A. Block-open sequence
| # | Asset | Notes |
|---|---|---|
| A-S1 | 5-minute countdown video | Shared with dressage (A1 in 2.1). Single asset, reused. |
| A-S2 | RNS Videomedia logo stinger | Shared with dressage (A2). |
| A-S3 | ClipMyHorse.tv logo stinger | Shared with dressage (A3). |
| A-S4 | Bromont SJ Opener | SJ-phase variant of the Bromont opener. Open flag: one shared asset reused by Short + Long openers, or two variants. |
| A-S5a | Short SJ B-roll over-package | Two beats: dressage recap → transition into live feed of SJ arena. Commentators talk over. |
| A-S5b | Long SJ B-roll over-package | Two beats: cross-country recap → transition into live feed of SJ arena. Commentators talk over. |
| A-S6 | First-rider package — SJ variant | Triggered when rider enters the ring. 10–15 seconds max. Distinct from the dressage 30s/60s rider intro (shorter; arena-entry timed). Per-rider asset. |
B. Persistent on-air elements (during a ride)
Locked constants on screen for the whole round: live clock, rider name, horse name, pinney number, country, division, show name. No other graphics during the ride.
| # | Asset | Notes |
|---|---|---|
| B-S1 | Live SJ clock graphic | On-air clock tracking the round. Drivable from the operator scorer at sj-timer/. |
| B-S2 | During-ride identity chassis (variant TBD) | Holds rider + horse + pinney + country + division + show. Multiple variants to mock up in design session. NOT decided here. |
C. Topic-specific lower-thirds (commentator-triggered)
Inherits the dressage set (C-R1…C-R5 rider variants + C-H1…C-H5 horse variants from 2.1). Same chassis, same payloads. No SJ-specific topic lower-thirds beyond the inherited set. (Sponsor presence remains off for SJ rides per the dressage rule.)
D. Ride-cycle scene assets
Per Section 1.1.2 scenes 1–5. Many of these are transitions and overlays, not standalone cards.
| # | Asset | Notes |
|---|---|---|
| D-S1 | Move transition: ride → replay | Triggered when rider crosses finish line. Move transition (not a cut) into the replay scene. |
| D-S2 | Post-ride replay scene chassis | 7–10s ride highlights + PiP of live closeup (rider cooldown, patting horse). Same for Short and Long. PiP source = live closeup camera. |
| D-S3 | Move transition: replay → score reveal | Returns to the rider on camera. |
| D-S4 | Score-reveal graphic | Final score for the round, displayed over the rider on camera. Form factor TBD in design session. |
| D-S5 | Full-screen leaderboard (current standings) | Updates with the just-scored ride. Used by both Short and Long. No projections / path-to-podium. |
| D-S6 | Handoff: leaderboard → next rider, "up next" overlay | Short SJ default Path A. Operator-picked vs. cut. |
| D-S7 | Handoff: leaderboard → next rider, cut | Short SJ default Path B (cut-direct). Operator-picked when time is tight. |
| D-S8 | Long SJ: 10s pre-round D+XC highlight package | Per-rider asset. Replaces "up next overlay" in Long SJ scene 5. Drawn from the per-rider dressage + XC highlight capture pipeline (see open items). |
E. Pre-round / cumulative-penalty (Long SJ only)
| # | Asset | Notes |
|---|---|---|
| E-S1 | Long SJ pre-round cumulative penalty graphic | Shows rider's running D + XC penalty total entering the SJ round. Transitions out when the clock starts. Per-rider data; common chassis. Not used for Short SJ. |
F. Day-1 dressage → SJ gap
| # | Asset | Notes |
|---|---|---|
| F-S1 | Return-time slate | Sign-off slate displayed over the live stream during the 30min–2hr gap. Shows when commentary returns. Operator-set or schedule-driven. May be reusable for any sign-off period. |
G. Block close
| # | Asset | Notes |
|---|---|---|
| G-S1 | Short SJ "Highlight of the day" package | Day-1 recap (dressage + SJ) at Friday close. Composed of captured highlights from the day. |
| G-S2 | Short SJ "Standings going into Saturday" graphic | Full-screen standings overlay used as part of the 3-beat Friday close. Likely reuses D-S5 chassis with a different label. |
| G-S3 | Short SJ "XC preview" package | Closes the day pointing to Saturday's XC. Content TBD. |
| G-S4 | Long SJ block close | Sunday event close. TBD — tied to awards handling, which is deferred. |
H. Known gaps / open items for SJ
- H1 Highlight-capture pipeline. Per-rider highlights for dressage + cross-country (powering D-S8 and G-S1) require a capture/storage/recall ability. Pipeline TBD. (This is the same capability that powers D-S2 — the post-ride SJ replay — for which we'll need at least same-round capture.)
- H2 During-ride chassis design. Variants tabled for design session.
- H3 Bromont SJ Opener (A-S4) — one shared asset or one per Short / Long? Defaulted to one shared; revisit if the finale wants a distinctive title.
- H4 Score-reveal form factor (D-S4). Lower-third? Full card? Bug update? Defer to design session.
- H5 Sponsor presence in any SJ surface. Locked off rides; gap slate is just return time; revisit if revenue model needs it.
- H6 Long SJ block close + awards. Bundled, both deferred.
- H7 Block-level visible Short vs Long differentiator. Today the only on-screen difference is "division" text + the Long-only cumulative-penalty pre-roll + the Long-only 10s D+XC handoff package. Whether more is needed is a design-session question.
2.3 Cross-country — graphics surface (started 2026-05-16)
A. Persistent on-air (during a ride)
| # | Asset | Notes |
|---|---|---|
| A-X1 | Rider chassis | Rider name, horse, country, pinney, division, show name. Locked-inherits from SJ chassis. Bound to the layout's primary slot. Data sourced from Postgres (rider roster on the VPS); chassis swap fires from operator action, not from any timing feed. |
| A-X2 | XC stopwatch | Per-rider, started by manual operator press when a rider leaves the start box (button on console / shuttle). Continuous in background for every live rider. No TPS / timing-feed start trigger — Bromont has no TPS integration ([[project_bromont_no_tps]]). |
B. Layout palette (OBS scenes)
| # | Layout | Notes |
|---|---|---|
| B-X1 | HERO | Single rider full screen — default state. |
| B-X2 | HERO + ROSTER STRIP | Primary + 2 mini PiPs of the others on course. |
| B-X3 | HERO + COURSE MAP | Primary + inset map with all 3 riders' positions. |
| B-X4 | DUAL SPLIT | Two riders 50/50. |
| B-X5 | HERO + START BOX PiP | Primary + countdown PiP for next rider. |
| B-X6 | HERO + FINISH LINE PiP | Primary + approaching/crossing rider PiP. |
| B-X7 | REPLAY + LIVE PiP | Replay primary + live action corner. |
| B-X8 | LEADERBOARD + LIVE INSET | Standings dominate, live action inset. |
C. Topic-specific lower-thirds
Inherits the dressage set (10 variants — 5 rider + 5 horse). No XC-specific additions.
D. Ride-cycle assets
Similar to SJ: post-ride replay (rolling buffer from the Mac Mini segment ring + scrub UI), score-reveal transition, leaderboard update. All transitions fire from operator action — no auto-fire on TPS events. Replay marks come from (a) Shuttle Pro manual press, (b) Claude experimental candidates that require human promotion. No TPS-event mark source ([[project_bromont_no_tps]]).
E. Open / deferred
- Block open / close (Saturday opener; Short-finale + Long-middle dual close)
- Per-fence beats — fence-name tag, fence-judge stats, combination diagrams
- Refusal / elim event handling — does a refusal mid-course get instant replay or a holding pattern?
- Hold-on-course handling — visible operator state when XC Control halts the course
- Helmet cam / body cam usage — requires TD signoff per FEI Art. 540.2
- Optimum-time pressure visualization — numeric vs color-shifting clock vs side-by-side leader split
Section 3 — Bromont slice (locked 2026-05-16)
What ships for Bromont, in tiers. Forcing functions: solo remote director, hired XC ops we've never worked with, YouTube destination, ≥2 days solo with real gear before go-live, 19-day window. Tier 0 is the floor below which we don't go live. Tier 1 is the target ship. Tier 2 is stretch. "Slipped" items are explicitly deferred to a post-Bromont show.
Tier 0 — Floor (cannot go live without)
If any of these isn't operator-ready and rehearsed by 2026-06-03, we have a real "should we go live?" conversation.
- OBS broadcast rig on the iMac, scene tree generated from
shows/bromont-2026-06/obs/scene_config.yaml, LiveU returns validated end-to-end. - YouTube Live RTMP push from OBS — outbound stream, key provisioned on the Bromont Eventing channel, stream-health monitoring on the operator dashboard. (Added late to Tier 0 — distribution is the deliverable; everything else is in service of it.)
- NewBlue Captivate running open on the iMac as the live redundancy layer (NOT a primary path — see GRAPHICS-BUILD-PLAN). Captivate twins exist for the redundancy roster.
- SPX-GC on the VPS, serving live-rundown lower-thirds, scoreboard, and leaderboard as browser sources into OBS over the public internet.
- Now Playing console (operator surface) — phone-and-laptop usable, plain-English buttons, grandma-test pass.
- Per-rider stopwatch chassis (manual start / manual swap, no TPS).
- Lower-third + leaderboard chassis for Dressage and SJ minimum.
- Day-open / phase-open structural skeleton — countdown → RNS sting → CMH sting → Bromont opener → B-roll → first-rider package → first ride. Assets per the schedule below.
- POC radio comms functional between Mike, Mark, Hank, and the XC ops (specifics open, [[project_bromont_comms_state]]).
Tier 1 — Target ship
Everything we believe is achievable in 19 days and want on-air for Bromont.
- Replay pipeline, full-stack. Mac Mini segment ring + scrub UI, Shuttle Pro mark input, OBS replay scene paired with replay bumper. Plus Claude (Mac Mini NDI rig per [[project_claude_production_role]]) producing experimental replay candidates Mike can promote.
- AE template authoring + batch render pipeline. ~180 per-rider intro cards (data-merge driven), 3 marquee fence bumpers (water complex / sunken road / brush+drop), EOD wrap, replay bumper in/out stinger, story package template, Bromont opener. AE runs on the Mac Mini pre-show, ships as MP4s into OBS media pool.
- XC layout palette — all 8 layouts built as OBS scenes, switchable from the console.
- Primary-slot mechanic in SPX-GC — chassis atomically follows the operator's "primary rider" selection.
- Sponsor surface — corner bug rotation, sponsor lower-third, 3 marquee fence bumpers, blended tier model per § 1.4. Logo-only.
- SJ Timer re-skinned to Bromont brand, scorebug + fault/refusal indicator.
- Topic lower-thirds — 5 rider + 5 horse variants, operator-fired on commentator cue, inherited across all three phases.
- Day-1 dressage→SJ gap slate — return-time slate over the live stream.
- Short SJ block-close 3-beat sequence (highlight of the day → standings → XC preview).
- Claude Design build-out of the console — frontend authored in Claude Design (claude.ai) per [[project_bromont_build_decisions]], backend wired to OBS WebSocket + Postgres on VPS.
- Mac Mini Claude NDI rig — per-ride auto-cut + rider tracking, output via console banner only (read-only). Failure mode is no-broadcast-impact.
Tier 2 — Stretch (only if Tier 1 hits a clean checkpoint by 2026-05-30)
- Course-map graphic with live position dots — depends on having any sortable rider-position data, which without TPS means manual operator scrubbing or Claude CV detection. Likely slips.
- Sponsor fire-count tracker — counts bumper plays per sponsor across the show for the proof-of-value reporting that's been deferred.
- Long SJ pre-round D+XC highlight package (D-S8) — depends on having highlight capture for every rider across two phases, which is heavy.
Slipped — explicitly deferred to post-Bromont
- TPS / timing-feed integration. No path for Bromont. Real engineering project post-Bromont ([[project_bromont_no_tps]]).
- Auto camera recommendation via fence-range map. Requires TPS.
- CMH compatibility, H&C compatibility, broadcaster graphics standards. Bromont is YouTube-only, Bromont brand only. No CMH constraints.
- Awards ceremony graphics package. Deferred to a later session and a later show.
- Long SJ block close (Sunday event close). Tied to awards handling.
- Story-of-the-Short narrative arc. Killed for Bromont.
- Proof-of-value sponsor reporting format. Deferred pending OC alignment.
- Phase-presenting sponsor structure. Deferred pending OC alignment.
- 3D camera flythrough of the XC course. Parked idea.
- CV-as-TPS-substitute on the Mac Mini Claude rig. Post-Bromont V2.
Section 4 — Build order (locked 2026-05-16)
Definition of done = operator-ready + rehearsed, not code-complete. Every Tier 1 item must clear a cold-start operator drill before it counts as done.
Build force: solo (Mike) + Claude Code (this assistant) + Claude Design (claude.ai frontend authoring) + AE-MCP (After Effects automation). No second engineer, no second operator, no second AE artist. Parallelism is achieved by running these four agents on different tracks of the same week.
19-day window: 2026-05-17 → 2026-06-04 (Day 1). Plus 3 days show-week (06-04 → 06-07).
Phase 1 — Foundation (May 17 – May 22)
Goal: every Tier 0 element exists in a recognizable form and the build force can iterate without rebuilding plumbing.
Parallel tracks:
- Track A — Console frontend (Claude Design). Author the Now Playing console UI in Claude Design. Handoff bundle similar to the SJ Timer flow. Frontend complete by end of Phase 1.
- Track B — Console backend + data plane (Claude Code). Postgres schema on the VPS for rider roster, scores, schedule, marks, sponsor inventory. WebSocket plumbing console ↔ OBS. Wire SPX-GC on the VPS — SPX as a service Mike doesn't restart by hand.
- Track C — OBS + scene config (Claude Code + Mike).
scene_config.yamlfor Bromont. 8 XC layouts authored as scenes. Camera buses configured. YouTube Live RTMP push validated end-to-end. iMac OBS + NewBlue Captivate co-running validated. - Track D — AE template scaffolding (AE-MCP). Intro card template (data-merge driven), Bromont opener, replay bumper, marquee fence bumper template — all templates with placeholder data, no batch render yet. AE on the Mac Mini.
- Track E — Asset gathering. Logos, portraits, fonts, dossier text. Per the GRAPHICS-BUILD-PLAN asset checklist.
Checkpoint 2026-05-22: every Tier 0 surface answers "yes" to "can the operator see and press it cold?"
Phase 2 — Heavy build (May 23 – May 31)
Goal: Tier 1 features land. AE templates batch-render. Replay pipeline stands up. Tier 1 surfaces clear cold-start operator drills as they finish.
Parallel tracks:
- Track A — Console iteration (Claude Code). Direction A "Now Playing" UX hardened against grandma-test feedback. Shuttle bindings. Operator menu surface for the long-tail sponsor + content menu pattern.
- Track B — AE batch render (AE-MCP + Mike). Per-rider intro cards across ~6 divisions × ~30 riders. Mac Mini render queue. Final batch reserved for 2026-06-02 EOD.
- Track C — Replay pipeline full-stack. Mac Mini segment ring + scrub UI + Shuttle Pro mark input + OBS replay scene + replay bumper integration. Claude NDI rig producing replay candidates.
- Track D — SPX-GC rundown templates. Lower-thirds, leaderboards, phase indicator, score-reveal, finish-line reveal. Topic lower-thirds (5 rider + 5 horse). Captivate twins built in parallel for the redundancy roster.
- Track E — Sponsor surface. Tier 1 / Tier 2 / Tier 3 menu surfaces wired. Corner bug rotation. Marquee fence bumpers rendered (water complex, sunken road, brush+drop).
Checkpoint 2026-05-30: Tier 1 is feature-complete (not necessarily rehearsed). Tier 2 / 1 cutoff decision made — anything Tier 1 not done means Tier 2 is dropped without negotiation.
Phase 3 — Integration + rehearsal (June 1 – June 3)
Goal: Mike operates the system cold under realistic pressure. Anything that fails the rehearsal gets fixed or cut, not papered over.
- June 1: Full integration test — console fires every Tier 1 graphic through OBS, every SPX template, every AE clip. Captivate fallback drill — primary rig "dead," operator runs a mock segment on Captivate alone.
- June 2: Mac Mini load test — continuous multi-cam recording + replay scrub + Claude analysis running simultaneously. Final AE batch render. Pre-show dress rehearsal with synthetic feeds (recorded Ocala/Tryon source captures, no live venue yet).
- June 3: On-site team activates at Bromont — Mark + Hank + hired XC ops + LiveU bonded. Cross-venue live test. Day-1 dress rehearsal end-to-end at full chain.
Show week (June 4 – June 7)
Day-by-day operator delivery. No new features land during show week — only fixes for things broken in Phase 3 rehearsal. Mac Mini stays running post-show each night to close recordings cleanly and uploaded to the cloud for post.
Parked ideas
Captured here so we don't lose them; revisited later in the build plan.
- 3D camera flythrough of the XC course. Used between dressage rides or as a hype piece. Open questions: capture method (drone + photogrammetry? game-engine recreation? scan?), reusability across shows, production cost. — 2026-05-13, raised under 1.1.1 dressage between-rides