{
  "schemaVersion": 1,
  "comment": "Hand-authored sidecar listing every walkthrough on the docs site. Source of truth for the Recent-updates strip on /docs/index.html and (eventually) a client-side search. Sort newest-first by `shipped`.",
  "walkthroughs": [
    {
      "slug": "w3-2-awards-exports",
      "title": "Awards exports — Avery 5163 / 5167 + per-team CSV",
      "category": "Awards",
      "status": "shipped",
      "shipped": "2026-05-19",
      "hero": "/docs/w3-2-awards-exports/03-export-menu-expanded.png",
      "summary": "Follow-up to W3's exports menu. Adds Avery 5163 (10/sheet, certificate-sized) + 5167 (80/sheet, youth-ribbon density) PDF formats, plus a per-team CSV split that writes one file per team into an operator-picked folder. All six formats read the same MeetAwardsLedger."
    },
    {
      "slug": "c1-coach-review",
      "title": "Coach Review — annotate captured video + replay strokes",
      "category": "Coach Review",
      "status": "shipped",
      "shipped": "2026-05-19",
      "hero": "/docs/c1-coach-review/06-drawing-strokes.png",
      "summary": "Annotate toolbar button on ArchiveDetailView wraps the video player in a stroke-capture canvas. 4-swatch pen palette + width slider; strokes commit on mouse-up to a JSON sidecar (coach-notes.json) next to the .mov; strokes re-render on reopen at the same normalized canvas coordinates. C1.3 adds the AnnotationPlaybackOverlay — read-only sibling view that renders strokes as the clip plays, each fading out 4 s after its authored timestamp."
    },
    {
      "slug": "w3-awards-exports",
      "title": "Awards exports (Avery 5160 + Summary PDF + CSV)",
      "category": "Awards",
      "status": "shipped",
      "shipped": "2026-05-19",
      "hero": "/docs/w3-awards-exports/04-export-menu-open.png",
      "summary": "Export menu on the Awards window emits three artifacts off the W2 ledger: a Summary PDF formatted for the announcer's binder, an Avery 5160 labels PDF sized to peel-and-stick onto medals (30 labels per sheet, 1\" × 2-5/8\"), and a CSV grouped by event for parent share-outs. All three read the same on-disk ledger via AwardsExporter."
    },
    {
      "slug": "e2e-full-path",
      "title": "Full operator journey (E2E)",
      "category": "Featured",
      "status": "shipped",
      "shipped": "2026-05-19",
      "hero": "/docs/e2e-full-path/15-seed-wizard-commit.png",
      "summary": "End-to-end click-path covering the full operator journey: add an athlete to the roster, create a meet from scratch with the auto-chained EditMeetSheet, seed 17 athletes into 12 heats across 6 events via the Seed Meet Wizard, then generate the Sample Invitational awards ledger with IAAF inclusive tie handling. Generated by an XCUITest that drives every step from one app.launch()."
    },
    {
      "slug": "m3-athlete-suggestion",
      "title": "Per-athlete event suggestion",
      "category": "Meet auto-seed",
      "status": "shipped",
      "shipped": "2026-05-18",
      "hero": "/docs/m3-athlete-suggestion/03-athlete-picker.png",
      "summary": "Athlete Detail page gains a Suggested events section ranking each event the athlete has 2+ appearances in against teammates who've also raced it. \"Add to Seed Wizard\" hands the (athlete, event) pair off to the M2 wizard pre-populated."
    },
    {
      "slug": "field-events",
      "title": "Field events (jumps, throws, vertical)",
      "category": "Field events",
      "status": "shipped",
      "shipped": "2026-05-18",
      "hero": "/docs/field-events/05-field-marks-sheet.png",
      "summary": "Mac's Edit Field Marks button opens the per-athlete mark-entry sheet for long jump / triple jump / shot put / discus / javelin / hammer (jumpsThrows) — three attempts each with Foul/Pass toggles. High jump + pole vault use bar-by-bar progression. IAAF tie-aware places via countback."
    },
    {
      "slug": "w1-awards-policy",
      "title": "Awards policy editor",
      "category": "Awards",
      "status": "shipped",
      "shipped": "2026-05-18",
      "hero": "/docs/w1-awards-policy/05-edit-meet-awards-section.png",
      "summary": "Awards section on EditMeetSheet: meet-level defaults (recipient count, label, kind, relay sub-policy) + per-event-group overrides. Round-trips through Meet.awardsPolicyData + MeetStructureSnapshot.awardsPolicy; feeds W2's ledger generator + W3's exports."
    },
    {
      "slug": "r1-role-chip",
      "title": "Device-role chip",
      "category": "Role fluidity",
      "status": "shipped",
      "shipped": "2026-05-18",
      "hero": "/docs/r1-role-chip/05-capabilities-popover.png",
      "summary": "Small toolbar chip showing each device's role (Primary / Standby / Satellite / Operator). Click to open the capabilities popover listing every connected device + its capability flags + last-seen timestamp."
    },
    {
      "slug": "m1-seed-engine",
      "title": "Single-event seeder (wand button)",
      "category": "Meet auto-seed",
      "status": "shipped",
      "shipped": "2026-05-18",
      "hero": "/docs/m1-seed-engine/04-seed-preview-sheet.png",
      "summary": "Wand button in the Heat Editor footer opens a preview sheet that runs MeetSeedEngine over the roster + this heat's event. Per-heat Apply button writes lane assignments via the existing submitLaneAssignment wire. The smaller sibling of the M2 wizard — one heat at a time."
    },
    {
      "slug": "m2-seed-wizard",
      "title": "Seed Meet Wizard (5 steps)",
      "category": "Meet auto-seed",
      "status": "shipped",
      "shipped": "2026-05-18",
      "hero": "/docs/m2-seed-wizard/09-wizard-step4-review.png",
      "summary": "Roster picker → 4-source event picker (archive / template / current iPad meet / free-form) → lane-count + distribution + data-window policy → drag-to-tweak review with re-seed → commit into a new OR existing meet. Cmd+Shift+J opens the wizard."
    },
    {
      "slug": "w2-awards",
      "title": "Awards Ledger + Awards Window",
      "category": "Awards",
      "status": "shipped",
      "shipped": "2026-05-18",
      "hero": "/docs/w2-awards/04-awards-window-populated.png",
      "summary": "One click generates the meet's awards from current standings + the policy. Top-N per event with IAAF inclusive tie handling. Color-coded medals, search filter, relay-aware label counts."
    }
  ]
}
