Featured · Shipped 2026-05-19 · Full operator journey

Athletes → meet → seeded heats → awards, in one sitting.

The other walkthroughs on this site each cover a single slice — the seed wizard, the awards ledger, the role chip. This one stitches them together end-to-end so you can see the full operator journey: add an athlete to the roster, create a meet from scratch, auto-seed athletes into events from training PRs, and generate the awards ledger after the races run. 17 screenshots, one click-path, generated by an XCUITest that drives every step from launch to medal printout.

SETUP

What the fixture provides

This walkthrough launches against the same synthetic Sample Invitational fixture as the M2 and W2 walkthroughs, plus the M-series 16-athlete roster across 3 teams. Two things change in this run:

The Live Meet window just after launch with the Sample Invitational fixture meet loaded.

Launch state. Live Meet shows the Sample Invitational; no other windows open. The Seed Wizard window from any prior session is closed automatically before the journey starts so it doesn't mask the first navigation.

PHASE A · ATHLETES

Open the Archive window and land on Athletes

The Athletes page lives inside the DM Track Archive window (Window menu → DM Track Archive, then click Athletes in the LIBRARY sidebar). The fixture preloads 16 athletes across 3 teams; you can see them all in the inspector pane on the right.

Archive window open on the Athletes page showing the 16 fixture athletes in the inspector pane.

LIBRARY → Athletes selected. Center pane shows the anchor list across every meet; right pane is the roster grid with one card per athlete.

PHASE A · STEP 2

Add a new athlete via the toolbar

The Athletes page's toolbar binds ⌘N to the New Athlete sheet — the same sheet a coach uses when walking a kid in mid-meet. Identity fields up top, an optional headshot picker, and a Group dropdown that prevents the typed-team-name fragmentation that plagues most roster tools (a coach typing "Branson" three different ways shouldn't fragment the roster into three groups).

New Athlete sheet open with empty First name, Last name, Bib number fields, plus Group picker, Headshot section, and Legacy team field.

New Athlete sheet, fresh open. Create button is disabled until at least one of First/Last name has content.

PHASE A · STEP 3

Fill in the name, hit Create

Type a first and last name. The Create button activates as soon as either field has non-whitespace content. The wire op submitAthleteRegistration queues through deferOrSend so this works whether or not the iPad's online — the new athlete ships on reconnect.

New Athlete sheet with First name 'Test' and Last name 'Athlete' filled in; Create button now enabled in blue.

Both name fields populated; Create button enabled.

Group, not free-text team: the Group picker shows existing groups only — "+ New" creates one explicitly. This deliberate constraint stops the same school from being typed three different ways into three orphaned roster nodes.
PHASE A · STEP 4

The new athlete appears in the roster

After the sheet dismisses, the roster's inspector pane gains a new card. The "Sunset — waiting for first race" badge marks the athlete as having no analytics index entries yet; they'll get a real bib and full profile once they appear in a heat's finishes.

Roster inspector now showing Test Athlete at the top with a Sunset badge, alongside Alex Williams, Sam Chen, Morgan Patel, Devon Park, Reese Howard.

Test Athlete appears with the Sunset badge. The wire op shipped to the iPad (or queued for it); the analytics index picks them up on next refresh.

PHASE B · BUILD A MEET

Open the New Meet sheet from Live Meet

Switch back to the Live Meet window. The fixture meet is active, so the empty-state hero buttons aren't visible — but the ⋯ menu next to the meet name surfaces New meet… regardless of state. The whole point of Phase 1 of the Mac-as-co-author plan is that meet authoring is reachable from anywhere.

Live Meet's meet menu open showing Edit meet and New meet items, with New meet highlighted in blue.

Meet menu open · New meet… highlighted.

PHASE B · STEP 2

Fill the New Meet sheet

The New Meet sheet asks the bare minimum to bootstrap a meet: name, date, optional location, lanes per heat. Team scoring and field-event display unit have sensible defaults that the operator can change here or later in EditMeetSheet. The "iPad not connected — meet will queue and ship on reconnect" chip at the bottom is informational, not a gate — sendCreateMeet queues via deferOrSend so Save works offline.

New Meet sheet open with empty Name field, today's date, default lane count of 8, and offline status chip at the bottom.

New Meet sheet, fresh open. Create Meet button stays disabled until Name has content.

New Meet sheet with Name 'E2E Smoke Meet' typed in; Create Meet button now enabled in blue.

Name populated. Create Meet button enabled.

PHASE B · STEP 3

EditMeetSheet auto-presents on the new meet

Operators almost always want to tweak metadata or add events right after creating a meet, so the New Meet sheet's Save handler chains straight into EditMeetSheet on the just-created meet. No extra clicks. The Name + scoring + awards fields are pre-populated from what you just entered; you can leave defaults or dial in scheme, max events per athlete, awards policy, etc., before moving on.

EditMeetSheet auto-presented on E2E Smoke Meet showing Name field, Date, Location, Lanes per heat, Team scoring, Max events per athlete, Field-event display, and Awards section with Recipients per event picker.

Edit Meet sheet auto-chained on the just-created E2E Smoke Meet. Awards policy, scoring scheme, and per-athlete max all editable in one place before the meet's first event ships.

Same offline posture: EditMeetSheet's Save routes through sendUpdateMeetdeferOrSend. The "iPad not connected" chip is informational; changes queue alongside the parent createMeet op and drain together on reconnect.
PHASE B · STEP 4

Live Meet shows the new pending meet

After dismissing the EditMeetSheet, Live Meet renders the new E2E Smoke Meet as PENDING (orange chip) with the synthesized empty event list from the pending-ops queue. The action row's purple Auto-Seed Athletes… button is the gateway into the Seed Meet Wizard — same window the ⌘⇧J shortcut opens.

Live Meet header showing E2E Smoke Meet with PENDING badge, empty event list, and the purple Auto-Seed Athletes button visible in the action row.

E2E Smoke Meet PENDING. Auto-Seed Athletes button (purple, wand icon) is the discoverable entry into the Seed Wizard.

PHASE C · SEED WIZARD

Step 1 — Roster

The wizard opens on the Roster step. All 17 athletes (the 16 fixture athletes plus the Test Athlete we just added) are pickable; Select all visible takes them all in one click. SceneStorage round-trips the selection so closing and reopening the wizard preserves your pick.

Seed Meet Wizard step 1 showing the roster picker with athlete names, team chips, and the Select all visible button.

Roster step on first open. The dedicated M2 walkthrough covers this step in depth.

PHASE C · STEP 2

Step 2 — Events

Step 2 sources events from four places simultaneously: the archive's analytics-index vocabulary, the curated MacMeetTemplates.all presets, the iPad's currently-broadcast meet, and a free-form name+category row. All four push rows into the same selection set; the picker dedupes via Set semantics.

Seed Meet Wizard step 2 showing event picker with archive vocabulary and Add from template / Add from current meet / Add manually controls along the bottom.

Event picker with the four sources stacked at the bottom. This walkthrough applies the Sprints & Relays template — 6 events that fit a smoke-test meet cleanly.

PHASE C · STEP 3

Step 3 — Policy

Three sub-pickers govern engine behavior: Lane count (4 / 6 / 8 standard / 9 / Custom), Distribution (similar skill — slow heat first, fast heat last; or mixed-skill tertile + team round-robin), and Data window (All-time / Last 6 months / Last 8 weeks / Last 2 weeks). The Summary block computes the implied heat count live as you change pickers.

Seed Meet Wizard step 3 policy step showing Lane count, Distribution, Data window pickers with a live summary at the bottom.

8-lane similar-skill, all-time data window. The summary at the bottom reads 17 athletes · 8-lane heats · 3 track events → 4 heats each = 12 heats total · ≈ 96 lane assignments to commit.

PHASE C · STEP 4

Step 4 — Review

The wizard runs MeetSeedEngine.seed(...) once per selected event with the chosen policy and renders per-event sections with heat cards inside. Drag a lane onto another lane in the same event to swap athletes; both swapped lanes pick up an "edited" pill that survives step navigation. Cross-event drags are blocked at the drop site.

Seed Meet Wizard step 4 review showing per-event heat cards with lane assignments — Heat 1 slowest, Heat 2 fastest — across 100m and 200m events.

Review pane with per-event sections. Every lane shows seed: none because our just-created meet has no race history; in a real archive each lane would carry the athlete's PR-derived seed time.

PHASE C · STEP 5

Step 5 — Commit

The commit step asks where (add to current meet vs create a new meet) and shows a Will create tally. Because we're committing into the just-created E2E Smoke Meet, the destination defaults to "Add to current meet"; one click on Commit to iPad fans out createMeet → createEventGroup → createDivision → createHeat → submitLaneAssignment for every lane in the draft.

Seed Meet Wizard step 5 commit showing destination radio buttons, Will create summary listing 6 new event groups × 1 division each, 12 heats, 96 lane assignments, and the prominent Commit to iPad button in the center.

Commit pane on the brand-new E2E Smoke Meet. 6 new event groups × 1 division each, 12 heats, 96 lane assignments. Re-committing the same draft is a no-op on the iPad side; lane assignments overwrite by (heatID, laneNumber).

PHASE D · AWARDS

Open the Winners window

The actual race timing happens on the iPad; that's not driven from this walkthrough's automation (XCUITest can't reach the iPad's clock). The fixture preloads the Sample Invitational meet with completed finishes so the awards step has real data to work with — same shape as a meet you've actually run.

The Winners window (⌘⇧W) aggregates the meet's standings into a per-event podium view. From here, one click generates the awards ledger.

Winners window open showing per-event podiums for the Sample Invitational with top-3 athletes per event.

Winners window. Top-3 podium per event; click Generate Awards to fan out into the W2 ledger.

PHASE D · STEP 2

Awards ledger with IAAF tie handling

The Awards window opens on the just-generated ledger. Top-3 per event with the meet's awards policy applied (default Top 3 · Medal). IAAF inclusive ties are handled — see the 100m · Boys event where Emma Davis and Sam Chen both tied for 3rd; both get a 3rd-place medal label. The header counters tally 10 awards / 22 labels / 3 events — 22 labels because the relay's 4-athlete medals count once per athlete, per the default relay sub-policy.

Awards window for Sample Invitational showing 10 awards / 22 labels / 3 events / Top 3 · Medal policy, with the 100m · Boys event expanded showing 1st Alex Williams, 2nd Jordan Park, tied 3rds Emma Davis and Sam Chen, all marked Medal.

Sample Invitational · Awards. 10 Awards · 22 Labels · 3 Events · Top 3 · Medal policy. The two tied 3rds at 100m each get a medal label per IAAF inclusive ties.

Export ready: the Export… button in the Awards window's toolbar produces Avery-label PDF for podium handouts and per-team CSV for parent share-outs. The W2 walkthrough covers the ledger generator in more depth.
UNDER THE HOOD

What "end-to-end" actually means here

RELATED

Drill into any phase

M2 — Seed Meet Wizard takes Phase C standalone, end-to-end, with the wizard's drag-to-tweak review pane covered in depth.

M1 — single-event seeder is the wand button inside the Heat Editor footer — same engine, one heat at a time, for when you've already built the meet shape manually.

M3 — per-athlete event suggestion ranks each athlete's events vs their team and hands them off to the wizard pre-populated.

W1 — Awards policy editor is the same Awards section visible in Phase B's auto-chained EditMeetSheet; this walkthrough covers meet-level defaults + per-event-group overrides.

W2 — Awards ledger generator covers Phase D's ledger in depth, including the IAAF inclusive tie handling, color-coded medals, and search/filter affordances.

← All walkthroughs Home