{
  "meta": {
    "description": "FitBuddy mock seed. Single source of truth for wireframes AND the later PWA. 'today' is fixed so flows are reproducible.",
    "today": "2026-08-06",
    "currentWeekStart": "2026-08-03",
    "viewerId": "m-alex",
    "note": "Presence has three states: booked, in the building (gym clock-in scan), in the room (instructor register). 'attended' is the register.",
    "storyline": "Flows 1E.3 and 1F are set the week after 'today': Bill returns Tue 11 Aug, and Ada's spin on Thu 13 Aug is where the re-entry and instructor paths meet.",
    "buddyModel": "Availability first, not a deck of people. You state windows, what you are actually doing (descriptive, never a rank) and whether you want a spot. Candidates stay anonymous until both sides say yes, so nobody is ever visibly turned down. Matches run three sessions, then both decide, so ending needs no rejection."
  },
  "members": [
    {
      "id": "m-alex",
      "name": "Alex Mensah",
      "role": "viewer",
      "persona": "The user. Regular class-goer, three weeks in a row. Loves group energy, the class-path persona.",
      "status": "active",
      "joined": "2025-11-12",
      "weeksInARow": 3,
      "usualClasses": [
        "c-spin-thu",
        "c-hiit-mon"
      ],
      "gymPeople": [
        "m-sarah",
        "m-maya",
        "m-tunde"
      ],
      "history": [
        {
          "date": "2025-12-29",
          "min": 45
        },
        {
          "date": "2026-01-01",
          "min": 45
        },
        {
          "date": "2026-01-19",
          "min": 45
        },
        {
          "date": "2026-01-22",
          "min": 45
        },
        {
          "date": "2026-01-26",
          "min": 45
        },
        {
          "date": "2026-01-29",
          "min": 45
        },
        {
          "date": "2026-02-09",
          "min": 45
        },
        {
          "date": "2026-02-12",
          "min": 45
        },
        {
          "date": "2026-02-16",
          "min": 45
        },
        {
          "date": "2026-02-19",
          "min": 45
        },
        {
          "date": "2026-03-02",
          "min": 45
        },
        {
          "date": "2026-03-05",
          "min": 45
        },
        {
          "date": "2026-03-09",
          "min": 45
        },
        {
          "date": "2026-03-12",
          "min": 45
        },
        {
          "date": "2026-03-30",
          "min": 45
        },
        {
          "date": "2026-04-02",
          "min": 45
        },
        {
          "date": "2026-04-06",
          "min": 45
        },
        {
          "date": "2026-04-09",
          "min": 45
        },
        {
          "date": "2026-04-20",
          "min": 45
        },
        {
          "date": "2026-04-23",
          "min": 45
        },
        {
          "date": "2026-04-27",
          "min": 45
        },
        {
          "date": "2026-04-30",
          "min": 45
        },
        {
          "date": "2026-05-11",
          "min": 45
        },
        {
          "date": "2026-05-14",
          "min": 45
        },
        {
          "date": "2026-05-18",
          "min": 45
        },
        {
          "date": "2026-05-21",
          "min": 45
        },
        {
          "date": "2026-06-08",
          "min": 45
        },
        {
          "date": "2026-06-11",
          "min": 45
        },
        {
          "date": "2026-06-15",
          "min": 45
        },
        {
          "date": "2026-06-18",
          "min": 45
        },
        {
          "date": "2026-06-29",
          "min": 45
        },
        {
          "date": "2026-07-02",
          "min": 45
        },
        {
          "date": "2026-07-06",
          "min": 45
        },
        {
          "date": "2026-07-09",
          "min": 45
        },
        {
          "date": "2026-07-20",
          "min": 45
        },
        {
          "date": "2026-07-23",
          "min": 45
        },
        {
          "date": "2026-07-27",
          "min": 45
        },
        {
          "date": "2026-07-30",
          "min": 45
        },
        {
          "date": "2026-08-03",
          "min": 45
        },
        {
          "date": "2026-08-06",
          "min": 45
        }
      ]
    },
    {
      "id": "m-sarah",
      "name": "Sarah Okafor",
      "persona": "The reliable friend from the voice example, 'Sarah's in your 6pm class Thursday.' Never misses spin.",
      "status": "active",
      "joined": "2025-03-02",
      "weeksInARow": 11,
      "usualClasses": [
        "c-spin-thu",
        "c-ride-sat"
      ],
      "gymPeople": [
        "m-alex",
        "m-maya",
        "m-elena"
      ],
      "sharedSessionsWithViewer": 12,
      "history": [
        {
          "date": "2026-01-01",
          "min": 45
        },
        {
          "date": "2026-01-03",
          "min": 60
        },
        {
          "date": "2026-01-15",
          "min": 45
        },
        {
          "date": "2026-01-17",
          "min": 60
        },
        {
          "date": "2026-01-22",
          "min": 45
        },
        {
          "date": "2026-01-24",
          "min": 60
        },
        {
          "date": "2026-02-12",
          "min": 45
        },
        {
          "date": "2026-02-14",
          "min": 60
        },
        {
          "date": "2026-02-19",
          "min": 45
        },
        {
          "date": "2026-02-21",
          "min": 60
        },
        {
          "date": "2026-03-05",
          "min": 45
        },
        {
          "date": "2026-03-07",
          "min": 60
        },
        {
          "date": "2026-03-12",
          "min": 45
        },
        {
          "date": "2026-03-14",
          "min": 60
        },
        {
          "date": "2026-03-26",
          "min": 45
        },
        {
          "date": "2026-03-28",
          "min": 60
        },
        {
          "date": "2026-04-02",
          "min": 45
        },
        {
          "date": "2026-04-04",
          "min": 60
        },
        {
          "date": "2026-04-23",
          "min": 45
        },
        {
          "date": "2026-04-25",
          "min": 60
        },
        {
          "date": "2026-04-30",
          "min": 45
        },
        {
          "date": "2026-05-02",
          "min": 60
        },
        {
          "date": "2026-05-14",
          "min": 45
        },
        {
          "date": "2026-05-16",
          "min": 60
        },
        {
          "date": "2026-05-28",
          "min": 45
        },
        {
          "date": "2026-05-30",
          "min": 60
        },
        {
          "date": "2026-06-04",
          "min": 45
        },
        {
          "date": "2026-06-06",
          "min": 60
        },
        {
          "date": "2026-06-11",
          "min": 45
        },
        {
          "date": "2026-06-13",
          "min": 60
        },
        {
          "date": "2026-06-18",
          "min": 45
        },
        {
          "date": "2026-06-20",
          "min": 60
        },
        {
          "date": "2026-06-25",
          "min": 45
        },
        {
          "date": "2026-06-27",
          "min": 60
        },
        {
          "date": "2026-07-02",
          "min": 45
        },
        {
          "date": "2026-07-04",
          "min": 60
        },
        {
          "date": "2026-07-09",
          "min": 45
        },
        {
          "date": "2026-07-11",
          "min": 60
        },
        {
          "date": "2026-07-16",
          "min": 45
        },
        {
          "date": "2026-07-18",
          "min": 60
        },
        {
          "date": "2026-07-23",
          "min": 45
        },
        {
          "date": "2026-07-25",
          "min": 60
        },
        {
          "date": "2026-07-30",
          "min": 45
        },
        {
          "date": "2026-08-01",
          "min": 60
        },
        {
          "date": "2026-08-06",
          "min": 45
        }
      ]
    },
    {
      "id": "m-maya",
      "name": "Maya Chen",
      "persona": "Early-morning yoga person. The one who notices when you were out, warm nudger.",
      "status": "active",
      "joined": "2024-09-18",
      "weeksInARow": 6,
      "usualClasses": [
        "c-yoga-mon",
        "c-yoga-wed"
      ],
      "gymPeople": [
        "m-alex",
        "m-sarah",
        "m-priya"
      ],
      "sharedSessionsWithViewer": 3,
      "history": [
        {
          "date": "2026-01-12",
          "min": 60
        },
        {
          "date": "2026-01-14",
          "min": 60
        },
        {
          "date": "2026-01-21",
          "min": 60
        },
        {
          "date": "2026-02-02",
          "min": 60
        },
        {
          "date": "2026-02-04",
          "min": 60
        },
        {
          "date": "2026-02-11",
          "min": 60
        },
        {
          "date": "2026-02-23",
          "min": 60
        },
        {
          "date": "2026-02-25",
          "min": 60
        },
        {
          "date": "2026-03-04",
          "min": 60
        },
        {
          "date": "2026-03-25",
          "min": 60
        },
        {
          "date": "2026-03-30",
          "min": 60
        },
        {
          "date": "2026-04-01",
          "min": 60
        },
        {
          "date": "2026-04-15",
          "min": 60
        },
        {
          "date": "2026-04-20",
          "min": 60
        },
        {
          "date": "2026-04-22",
          "min": 60
        },
        {
          "date": "2026-05-06",
          "min": 60
        },
        {
          "date": "2026-05-11",
          "min": 60
        },
        {
          "date": "2026-05-13",
          "min": 60
        },
        {
          "date": "2026-06-01",
          "min": 60
        },
        {
          "date": "2026-06-03",
          "min": 60
        },
        {
          "date": "2026-06-08",
          "min": 60
        },
        {
          "date": "2026-06-10",
          "min": 60
        },
        {
          "date": "2026-06-29",
          "min": 60
        },
        {
          "date": "2026-07-01",
          "min": 60
        },
        {
          "date": "2026-07-08",
          "min": 60
        },
        {
          "date": "2026-07-13",
          "min": 60
        },
        {
          "date": "2026-07-15",
          "min": 60
        },
        {
          "date": "2026-07-20",
          "min": 60
        },
        {
          "date": "2026-07-22",
          "min": 60
        },
        {
          "date": "2026-07-29",
          "min": 60
        },
        {
          "date": "2026-08-03",
          "min": 60
        },
        {
          "date": "2026-08-05",
          "min": 60
        }
      ]
    },
    {
      "id": "m-bill",
      "name": "Bill Hartman",
      "persona": "The lapsed member, GymMaster's cold expiry email went to him. Last seen four months ago. Re-entry path persona; keeps every flow honest about shame.",
      "status": "lapsed",
      "joined": "2024-01-20",
      "lastVisit": "2026-04-02",
      "weeksInARow": 0,
      "usualClasses": [
        "c-strength-tue"
      ],
      "gymPeople": [
        "m-tunde",
        "m-deji"
      ],
      "sharedSessionsWithViewer": 0,
      "history": [
        {
          "date": "2025-12-30",
          "min": 60
        },
        {
          "date": "2026-01-06",
          "min": 60
        },
        {
          "date": "2026-01-27",
          "min": 60
        },
        {
          "date": "2026-02-03",
          "min": 60
        },
        {
          "date": "2026-02-17",
          "min": 60
        },
        {
          "date": "2026-02-24",
          "min": 60
        },
        {
          "date": "2026-03-10",
          "min": 60
        },
        {
          "date": "2026-03-17",
          "min": 60
        },
        {
          "date": "2026-04-02",
          "min": 60
        }
      ]
    },
    {
      "id": "m-deji",
      "name": "Deji Adeleke",
      "persona": "Serious lifter, trains alone, rarely books classes. The buddy-matching path persona for Phase 4.",
      "status": "active",
      "joined": "2023-06-05",
      "weeksInARow": 19,
      "usualClasses": [],
      "gymPeople": [
        "m-bill",
        "m-tunde",
        "m-marcus"
      ],
      "sharedSessionsWithViewer": 0,
      "lifts": {
        "windows": [
          "tue-eve",
          "thu-eve",
          "sat-am"
        ],
        "style": "heavy-compounds",
        "spot": "yes"
      },
      "history": [
        {
          "date": "2025-12-29",
          "min": 30
        },
        {
          "date": "2025-12-31",
          "min": 45
        },
        {
          "date": "2026-01-12",
          "min": 30
        },
        {
          "date": "2026-01-14",
          "min": 45
        },
        {
          "date": "2026-01-19",
          "min": 30
        },
        {
          "date": "2026-01-21",
          "min": 45
        },
        {
          "date": "2026-02-02",
          "min": 30
        },
        {
          "date": "2026-02-04",
          "min": 45
        },
        {
          "date": "2026-02-09",
          "min": 30
        },
        {
          "date": "2026-02-11",
          "min": 45
        },
        {
          "date": "2026-03-02",
          "min": 30
        },
        {
          "date": "2026-03-04",
          "min": 45
        },
        {
          "date": "2026-03-09",
          "min": 30
        },
        {
          "date": "2026-03-30",
          "min": 30
        },
        {
          "date": "2026-04-06",
          "min": 30
        },
        {
          "date": "2026-04-08",
          "min": 45
        },
        {
          "date": "2026-04-13",
          "min": 30
        },
        {
          "date": "2026-04-15",
          "min": 45
        },
        {
          "date": "2026-04-20",
          "min": 30
        },
        {
          "date": "2026-04-27",
          "min": 30
        },
        {
          "date": "2026-04-29",
          "min": 45
        },
        {
          "date": "2026-05-04",
          "min": 30
        },
        {
          "date": "2026-05-06",
          "min": 45
        },
        {
          "date": "2026-05-11",
          "min": 30
        },
        {
          "date": "2026-05-18",
          "min": 30
        },
        {
          "date": "2026-05-20",
          "min": 45
        },
        {
          "date": "2026-05-25",
          "min": 30
        },
        {
          "date": "2026-05-27",
          "min": 45
        },
        {
          "date": "2026-06-01",
          "min": 30
        },
        {
          "date": "2026-06-08",
          "min": 30
        },
        {
          "date": "2026-06-10",
          "min": 45
        },
        {
          "date": "2026-06-15",
          "min": 30
        },
        {
          "date": "2026-06-17",
          "min": 45
        },
        {
          "date": "2026-06-22",
          "min": 30
        },
        {
          "date": "2026-06-29",
          "min": 30
        },
        {
          "date": "2026-07-01",
          "min": 45
        },
        {
          "date": "2026-07-06",
          "min": 30
        },
        {
          "date": "2026-07-08",
          "min": 45
        },
        {
          "date": "2026-07-13",
          "min": 30
        },
        {
          "date": "2026-07-20",
          "min": 30
        },
        {
          "date": "2026-07-22",
          "min": 45
        },
        {
          "date": "2026-07-27",
          "min": 30
        },
        {
          "date": "2026-07-29",
          "min": 45
        },
        {
          "date": "2026-08-03",
          "min": 30
        }
      ]
    },
    {
      "id": "m-priya",
      "name": "Priya Nair",
      "persona": "Joined this week. Hasn't picked anything yet, trainer-pairing path persona, and the cold-start case for social features.",
      "status": "active",
      "joined": "2026-08-03",
      "weeksInARow": 0,
      "usualClasses": [],
      "gymPeople": [
        "m-maya"
      ],
      "sharedSessionsWithViewer": 0,
      "history": []
    },
    {
      "id": "m-marcus",
      "name": "Marcus Reid",
      "persona": "The walk-in. Almost never books ahead, often shows up anyway. Tests every assumption that booking = attending.",
      "status": "active",
      "joined": "2025-01-30",
      "weeksInARow": 2,
      "usualClasses": [
        "c-boxing-wed"
      ],
      "gymPeople": [
        "m-deji",
        "m-elena"
      ],
      "sharedSessionsWithViewer": 1,
      "history": [
        {
          "date": "2025-12-31",
          "min": 60
        },
        {
          "date": "2026-01-07",
          "min": 60
        },
        {
          "date": "2026-01-28",
          "min": 60
        },
        {
          "date": "2026-02-04",
          "min": 60
        },
        {
          "date": "2026-02-18",
          "min": 60
        },
        {
          "date": "2026-02-25",
          "min": 60
        },
        {
          "date": "2026-03-11",
          "min": 60
        },
        {
          "date": "2026-03-18",
          "min": 60
        },
        {
          "date": "2026-04-08",
          "min": 60
        },
        {
          "date": "2026-04-15",
          "min": 60
        },
        {
          "date": "2026-04-29",
          "min": 60
        },
        {
          "date": "2026-05-06",
          "min": 60
        },
        {
          "date": "2026-05-20",
          "min": 60
        },
        {
          "date": "2026-05-27",
          "min": 60
        },
        {
          "date": "2026-06-17",
          "min": 60
        },
        {
          "date": "2026-06-24",
          "min": 60
        },
        {
          "date": "2026-07-08",
          "min": 60
        },
        {
          "date": "2026-07-15",
          "min": 60
        },
        {
          "date": "2026-07-29",
          "min": 60
        },
        {
          "date": "2026-08-05",
          "min": 60
        }
      ]
    },
    {
      "id": "m-tunde",
      "name": "Tunde Bakare",
      "persona": "Quiet long-tenure regular. Five years in, says little, always there. Proof that consistency isn't loud.",
      "status": "active",
      "joined": "2021-04-11",
      "weeksInARow": 24,
      "usualClasses": [
        "c-strength-tue",
        "c-hiit-mon"
      ],
      "gymPeople": [
        "m-alex",
        "m-bill",
        "m-deji"
      ],
      "sharedSessionsWithViewer": 9,
      "lifts": {
        "windows": [
          "tue-eve"
        ],
        "style": "mixed",
        "spot": "sometimes"
      },
      "history": [
        {
          "date": "2025-12-29",
          "min": 45
        },
        {
          "date": "2025-12-30",
          "min": 60
        },
        {
          "date": "2026-01-12",
          "min": 45
        },
        {
          "date": "2026-01-13",
          "min": 60
        },
        {
          "date": "2026-01-19",
          "min": 45
        },
        {
          "date": "2026-01-20",
          "min": 60
        },
        {
          "date": "2026-02-02",
          "min": 45
        },
        {
          "date": "2026-02-03",
          "min": 60
        },
        {
          "date": "2026-02-09",
          "min": 45
        },
        {
          "date": "2026-02-10",
          "min": 60
        },
        {
          "date": "2026-02-23",
          "min": 45
        },
        {
          "date": "2026-02-24",
          "min": 60
        },
        {
          "date": "2026-03-02",
          "min": 45
        },
        {
          "date": "2026-03-03",
          "min": 60
        },
        {
          "date": "2026-03-09",
          "min": 45
        },
        {
          "date": "2026-03-10",
          "min": 60
        },
        {
          "date": "2026-03-16",
          "min": 45
        },
        {
          "date": "2026-03-17",
          "min": 60
        },
        {
          "date": "2026-03-23",
          "min": 45
        },
        {
          "date": "2026-03-24",
          "min": 60
        },
        {
          "date": "2026-03-30",
          "min": 45
        },
        {
          "date": "2026-03-31",
          "min": 60
        },
        {
          "date": "2026-04-06",
          "min": 45
        },
        {
          "date": "2026-04-07",
          "min": 60
        },
        {
          "date": "2026-04-13",
          "min": 45
        },
        {
          "date": "2026-04-14",
          "min": 60
        },
        {
          "date": "2026-04-20",
          "min": 45
        },
        {
          "date": "2026-04-21",
          "min": 60
        },
        {
          "date": "2026-04-27",
          "min": 45
        },
        {
          "date": "2026-04-28",
          "min": 60
        },
        {
          "date": "2026-05-04",
          "min": 45
        },
        {
          "date": "2026-05-05",
          "min": 60
        },
        {
          "date": "2026-05-11",
          "min": 45
        },
        {
          "date": "2026-05-12",
          "min": 60
        },
        {
          "date": "2026-05-18",
          "min": 45
        },
        {
          "date": "2026-05-19",
          "min": 60
        },
        {
          "date": "2026-05-25",
          "min": 45
        },
        {
          "date": "2026-05-26",
          "min": 60
        },
        {
          "date": "2026-06-01",
          "min": 45
        },
        {
          "date": "2026-06-02",
          "min": 60
        },
        {
          "date": "2026-06-08",
          "min": 45
        },
        {
          "date": "2026-06-09",
          "min": 60
        },
        {
          "date": "2026-06-15",
          "min": 45
        },
        {
          "date": "2026-06-16",
          "min": 60
        },
        {
          "date": "2026-06-22",
          "min": 45
        },
        {
          "date": "2026-06-23",
          "min": 60
        },
        {
          "date": "2026-06-29",
          "min": 45
        },
        {
          "date": "2026-06-30",
          "min": 60
        },
        {
          "date": "2026-07-06",
          "min": 45
        },
        {
          "date": "2026-07-07",
          "min": 60
        },
        {
          "date": "2026-07-13",
          "min": 45
        },
        {
          "date": "2026-07-14",
          "min": 60
        },
        {
          "date": "2026-07-20",
          "min": 45
        },
        {
          "date": "2026-07-21",
          "min": 60
        },
        {
          "date": "2026-07-27",
          "min": 45
        },
        {
          "date": "2026-07-28",
          "min": 60
        },
        {
          "date": "2026-08-03",
          "min": 45
        },
        {
          "date": "2026-08-04",
          "min": 60
        }
      ]
    },
    {
      "id": "m-elena",
      "name": "Elena Sokolova",
      "persona": "Does everything, spin, boxing, yoga. Knows the whole gym. The connector node in the social graph.",
      "status": "active",
      "joined": "2024-05-22",
      "weeksInARow": 8,
      "usualClasses": [
        "c-spin-thu",
        "c-boxing-wed",
        "c-yoga-mon"
      ],
      "gymPeople": [
        "m-sarah",
        "m-marcus"
      ],
      "sharedSessionsWithViewer": 6,
      "history": [
        {
          "date": "2026-01-05",
          "min": 60
        },
        {
          "date": "2026-01-07",
          "min": 60
        },
        {
          "date": "2026-01-08",
          "min": 45
        },
        {
          "date": "2026-01-12",
          "min": 60
        },
        {
          "date": "2026-01-15",
          "min": 45
        },
        {
          "date": "2026-01-26",
          "min": 60
        },
        {
          "date": "2026-01-28",
          "min": 60
        },
        {
          "date": "2026-01-29",
          "min": 45
        },
        {
          "date": "2026-02-02",
          "min": 60
        },
        {
          "date": "2026-02-05",
          "min": 45
        },
        {
          "date": "2026-02-16",
          "min": 60
        },
        {
          "date": "2026-02-18",
          "min": 60
        },
        {
          "date": "2026-02-19",
          "min": 45
        },
        {
          "date": "2026-02-23",
          "min": 60
        },
        {
          "date": "2026-02-26",
          "min": 45
        },
        {
          "date": "2026-03-16",
          "min": 60
        },
        {
          "date": "2026-03-19",
          "min": 45
        },
        {
          "date": "2026-03-23",
          "min": 60
        },
        {
          "date": "2026-03-25",
          "min": 60
        },
        {
          "date": "2026-03-26",
          "min": 45
        },
        {
          "date": "2026-04-06",
          "min": 60
        },
        {
          "date": "2026-04-09",
          "min": 45
        },
        {
          "date": "2026-04-13",
          "min": 60
        },
        {
          "date": "2026-04-15",
          "min": 60
        },
        {
          "date": "2026-04-16",
          "min": 45
        },
        {
          "date": "2026-04-27",
          "min": 60
        },
        {
          "date": "2026-04-30",
          "min": 45
        },
        {
          "date": "2026-05-04",
          "min": 60
        },
        {
          "date": "2026-05-06",
          "min": 60
        },
        {
          "date": "2026-05-07",
          "min": 45
        },
        {
          "date": "2026-05-25",
          "min": 60
        },
        {
          "date": "2026-05-27",
          "min": 60
        },
        {
          "date": "2026-05-28",
          "min": 45
        },
        {
          "date": "2026-06-01",
          "min": 60
        },
        {
          "date": "2026-06-03",
          "min": 60
        },
        {
          "date": "2026-06-04",
          "min": 45
        },
        {
          "date": "2026-06-15",
          "min": 60
        },
        {
          "date": "2026-06-17",
          "min": 60
        },
        {
          "date": "2026-06-18",
          "min": 45
        },
        {
          "date": "2026-06-22",
          "min": 60
        },
        {
          "date": "2026-06-24",
          "min": 60
        },
        {
          "date": "2026-06-25",
          "min": 45
        },
        {
          "date": "2026-06-29",
          "min": 60
        },
        {
          "date": "2026-07-02",
          "min": 45
        },
        {
          "date": "2026-07-06",
          "min": 60
        },
        {
          "date": "2026-07-08",
          "min": 60
        },
        {
          "date": "2026-07-09",
          "min": 45
        },
        {
          "date": "2026-07-13",
          "min": 60
        },
        {
          "date": "2026-07-15",
          "min": 60
        },
        {
          "date": "2026-07-16",
          "min": 45
        },
        {
          "date": "2026-07-20",
          "min": 60
        },
        {
          "date": "2026-07-23",
          "min": 45
        },
        {
          "date": "2026-07-27",
          "min": 60
        },
        {
          "date": "2026-07-29",
          "min": 60
        },
        {
          "date": "2026-07-30",
          "min": 45
        },
        {
          "date": "2026-08-03",
          "min": 60
        },
        {
          "date": "2026-08-05",
          "min": 60
        },
        {
          "date": "2026-08-06",
          "min": 45
        }
      ]
    },
    {
      "id": "m-hana",
      "name": "Hana Sato",
      "persona": "Saturday Ride regular Alex has ridden beside for months without ever learning her name. The recognition-not-relationship case.",
      "status": "active",
      "joined": "2025-05-14",
      "weeksInARow": 5,
      "usualClasses": [
        "c-ride-sat"
      ],
      "gymPeople": [],
      "sharedSessionsWithViewer": 4,
      "history": [
        {
          "date": "2026-01-03",
          "min": 60
        },
        {
          "date": "2026-01-17",
          "min": 60
        },
        {
          "date": "2026-01-24",
          "min": 60
        },
        {
          "date": "2026-02-07",
          "min": 60
        },
        {
          "date": "2026-02-14",
          "min": 60
        },
        {
          "date": "2026-03-07",
          "min": 60
        },
        {
          "date": "2026-03-14",
          "min": 60
        },
        {
          "date": "2026-03-28",
          "min": 60
        },
        {
          "date": "2026-04-04",
          "min": 60
        },
        {
          "date": "2026-04-18",
          "min": 60
        },
        {
          "date": "2026-04-25",
          "min": 60
        },
        {
          "date": "2026-05-16",
          "min": 60
        },
        {
          "date": "2026-05-23",
          "min": 60
        },
        {
          "date": "2026-06-06",
          "min": 60
        },
        {
          "date": "2026-06-13",
          "min": 60
        },
        {
          "date": "2026-07-04",
          "min": 60
        },
        {
          "date": "2026-07-11",
          "min": 60
        },
        {
          "date": "2026-07-18",
          "min": 60
        },
        {
          "date": "2026-07-25",
          "min": 60
        },
        {
          "date": "2026-08-01",
          "min": 60
        }
      ]
    },
    {
      "id": "m-yemi",
      "name": "Yemi Adeyemi",
      "persona": "Trying Saturday Ride for the first time. Pairs with Priya as the newcomer-to-newcomer case.",
      "status": "active",
      "joined": "2025-05-14",
      "weeksInARow": 5,
      "usualClasses": [
        "c-ride-sat"
      ],
      "gymPeople": [],
      "sharedSessionsWithViewer": 0,
      "history": [
        {
          "date": "2026-01-03",
          "min": 60
        },
        {
          "date": "2026-01-10",
          "min": 60
        },
        {
          "date": "2026-01-31",
          "min": 60
        },
        {
          "date": "2026-02-07",
          "min": 60
        },
        {
          "date": "2026-02-21",
          "min": 60
        },
        {
          "date": "2026-02-28",
          "min": 60
        },
        {
          "date": "2026-03-14",
          "min": 60
        },
        {
          "date": "2026-03-21",
          "min": 60
        },
        {
          "date": "2026-04-11",
          "min": 60
        },
        {
          "date": "2026-04-18",
          "min": 60
        },
        {
          "date": "2026-05-02",
          "min": 60
        },
        {
          "date": "2026-05-09",
          "min": 60
        },
        {
          "date": "2026-05-23",
          "min": 60
        },
        {
          "date": "2026-05-30",
          "min": 60
        },
        {
          "date": "2026-06-20",
          "min": 60
        },
        {
          "date": "2026-07-04",
          "min": 60
        },
        {
          "date": "2026-07-11",
          "min": 60
        },
        {
          "date": "2026-07-18",
          "min": 60
        },
        {
          "date": "2026-07-25",
          "min": 60
        },
        {
          "date": "2026-08-01",
          "min": 60
        }
      ]
    },
    {
      "id": "m-ruth",
      "name": "Ruth Mbeki",
      "persona": "Quiet Saturday regular. Exists so the room is never a faceless aggregate.",
      "status": "active",
      "joined": "2025-05-14",
      "weeksInARow": 5,
      "usualClasses": [
        "c-ride-sat"
      ],
      "gymPeople": [],
      "sharedSessionsWithViewer": 2,
      "history": [
        {
          "date": "2026-01-03",
          "min": 60
        },
        {
          "date": "2026-01-17",
          "min": 60
        },
        {
          "date": "2026-01-24",
          "min": 60
        },
        {
          "date": "2026-02-07",
          "min": 60
        },
        {
          "date": "2026-02-14",
          "min": 60
        },
        {
          "date": "2026-03-07",
          "min": 60
        },
        {
          "date": "2026-03-14",
          "min": 60
        },
        {
          "date": "2026-03-28",
          "min": 60
        },
        {
          "date": "2026-04-04",
          "min": 60
        },
        {
          "date": "2026-04-18",
          "min": 60
        },
        {
          "date": "2026-04-25",
          "min": 60
        },
        {
          "date": "2026-05-16",
          "min": 60
        },
        {
          "date": "2026-05-23",
          "min": 60
        },
        {
          "date": "2026-06-06",
          "min": 60
        },
        {
          "date": "2026-06-13",
          "min": 60
        },
        {
          "date": "2026-07-04",
          "min": 60
        },
        {
          "date": "2026-07-11",
          "min": 60
        },
        {
          "date": "2026-07-18",
          "min": 60
        },
        {
          "date": "2026-07-25",
          "min": 60
        },
        {
          "date": "2026-08-01",
          "min": 60
        }
      ]
    },
    {
      "id": "m-ify",
      "name": "Ify Nwosu",
      "persona": "Lifts Tue and Thu evenings, heavy compounds, wants a spot. The buddy-path match for Deji, and deliberately not in his graph.",
      "status": "active",
      "joined": "2025-09-08",
      "weeksInARow": 7,
      "usualClasses": [],
      "gymPeople": [],
      "sharedSessionsWithViewer": 0,
      "lifts": {
        "windows": [
          "tue-eve",
          "thu-eve",
          "sat-am"
        ],
        "style": "heavy-compounds",
        "spot": "yes"
      },
      "history": [
        {
          "date": "2025-12-30",
          "min": 30
        },
        {
          "date": "2026-01-01",
          "min": 45
        },
        {
          "date": "2026-01-06",
          "min": 30
        },
        {
          "date": "2026-01-08",
          "min": 45
        },
        {
          "date": "2026-01-20",
          "min": 30
        },
        {
          "date": "2026-01-22",
          "min": 45
        },
        {
          "date": "2026-01-27",
          "min": 30
        },
        {
          "date": "2026-01-29",
          "min": 45
        },
        {
          "date": "2026-02-17",
          "min": 30
        },
        {
          "date": "2026-02-19",
          "min": 45
        },
        {
          "date": "2026-02-24",
          "min": 30
        },
        {
          "date": "2026-03-10",
          "min": 30
        },
        {
          "date": "2026-03-12",
          "min": 45
        },
        {
          "date": "2026-03-17",
          "min": 30
        },
        {
          "date": "2026-03-31",
          "min": 30
        },
        {
          "date": "2026-04-02",
          "min": 45
        },
        {
          "date": "2026-04-07",
          "min": 30
        },
        {
          "date": "2026-04-28",
          "min": 30
        },
        {
          "date": "2026-05-05",
          "min": 30
        },
        {
          "date": "2026-05-07",
          "min": 45
        },
        {
          "date": "2026-05-19",
          "min": 30
        },
        {
          "date": "2026-05-26",
          "min": 30
        },
        {
          "date": "2026-05-28",
          "min": 45
        },
        {
          "date": "2026-06-09",
          "min": 30
        },
        {
          "date": "2026-06-23",
          "min": 30
        },
        {
          "date": "2026-06-25",
          "min": 45
        },
        {
          "date": "2026-06-30",
          "min": 30
        },
        {
          "date": "2026-07-07",
          "min": 30
        },
        {
          "date": "2026-07-09",
          "min": 45
        },
        {
          "date": "2026-07-14",
          "min": 30
        },
        {
          "date": "2026-07-16",
          "min": 45
        },
        {
          "date": "2026-07-21",
          "min": 30
        },
        {
          "date": "2026-07-28",
          "min": 30
        },
        {
          "date": "2026-07-30",
          "min": 45
        },
        {
          "date": "2026-08-04",
          "min": 30
        },
        {
          "date": "2026-08-06",
          "min": 45
        }
      ]
    },
    {
      "id": "m-tomas",
      "name": "Tomas Vidal",
      "persona": "Same evenings as Deji but higher reps and no spot needed. The near-miss case, so the pool visibly discriminates.",
      "status": "active",
      "joined": "2025-09-08",
      "weeksInARow": 7,
      "usualClasses": [],
      "gymPeople": [],
      "sharedSessionsWithViewer": 0,
      "lifts": {
        "windows": [
          "tue-eve",
          "thu-eve"
        ],
        "style": "higher-reps",
        "spot": "no"
      },
      "history": [
        {
          "date": "2025-12-29",
          "min": 45
        },
        {
          "date": "2026-01-01",
          "min": 30
        },
        {
          "date": "2026-01-19",
          "min": 45
        },
        {
          "date": "2026-01-22",
          "min": 30
        },
        {
          "date": "2026-01-26",
          "min": 45
        },
        {
          "date": "2026-01-29",
          "min": 30
        },
        {
          "date": "2026-02-09",
          "min": 45
        },
        {
          "date": "2026-02-12",
          "min": 30
        },
        {
          "date": "2026-02-16",
          "min": 45
        },
        {
          "date": "2026-02-19",
          "min": 30
        },
        {
          "date": "2026-03-02",
          "min": 45
        },
        {
          "date": "2026-03-05",
          "min": 30
        },
        {
          "date": "2026-03-09",
          "min": 45
        },
        {
          "date": "2026-03-12",
          "min": 30
        },
        {
          "date": "2026-03-30",
          "min": 45
        },
        {
          "date": "2026-04-02",
          "min": 30
        },
        {
          "date": "2026-04-06",
          "min": 45
        },
        {
          "date": "2026-04-20",
          "min": 45
        },
        {
          "date": "2026-04-23",
          "min": 30
        },
        {
          "date": "2026-04-27",
          "min": 45
        },
        {
          "date": "2026-05-11",
          "min": 45
        },
        {
          "date": "2026-05-14",
          "min": 30
        },
        {
          "date": "2026-05-18",
          "min": 45
        },
        {
          "date": "2026-06-08",
          "min": 45
        },
        {
          "date": "2026-06-22",
          "min": 45
        },
        {
          "date": "2026-06-25",
          "min": 30
        },
        {
          "date": "2026-06-29",
          "min": 45
        },
        {
          "date": "2026-07-06",
          "min": 45
        },
        {
          "date": "2026-07-09",
          "min": 30
        },
        {
          "date": "2026-07-13",
          "min": 45
        },
        {
          "date": "2026-07-16",
          "min": 30
        },
        {
          "date": "2026-07-20",
          "min": 45
        },
        {
          "date": "2026-07-27",
          "min": 45
        },
        {
          "date": "2026-07-30",
          "min": 30
        },
        {
          "date": "2026-08-03",
          "min": 45
        },
        {
          "date": "2026-08-06",
          "min": 30
        }
      ]
    }
  ],
  "instructors": [
    {
      "id": "i-ada",
      "name": "Ada Eze",
      "teaches": [
        "c-spin-thu",
        "c-ride-sat",
        "c-hiit-mon"
      ]
    },
    {
      "id": "i-jonas",
      "name": "Jonas Meyer",
      "teaches": [
        "c-strength-tue",
        "c-boxing-wed"
      ]
    },
    {
      "id": "i-lena",
      "name": "Lena Park",
      "teaches": [
        "c-yoga-mon",
        "c-yoga-wed"
      ]
    }
  ],
  "classes": [
    {
      "id": "c-hiit-mon",
      "name": "HIIT Circuit",
      "day": "Mon",
      "time": "18:00",
      "durationMin": 45,
      "room": "Studio 1",
      "instructorId": "i-ada",
      "capacity": 20,
      "image": "studio-bands-reach.jpg"
    },
    {
      "id": "c-yoga-mon",
      "name": "Morning Yoga",
      "day": "Mon",
      "time": "07:00",
      "durationMin": 60,
      "room": "Studio 2",
      "instructorId": "i-lena",
      "capacity": 16,
      "image": "studio-mats-fold.jpg"
    },
    {
      "id": "c-strength-tue",
      "name": "Strength Basics",
      "day": "Tue",
      "time": "18:30",
      "durationMin": 60,
      "room": "Weights Floor",
      "instructorId": "i-jonas",
      "capacity": 12,
      "image": "floor-plates-load.jpg"
    },
    {
      "id": "c-yoga-wed",
      "name": "Morning Yoga",
      "day": "Wed",
      "time": "07:00",
      "durationMin": 60,
      "room": "Studio 2",
      "instructorId": "i-lena",
      "capacity": 16,
      "image": "studio-mats-fold.jpg"
    },
    {
      "id": "c-boxing-wed",
      "name": "Boxing Fundamentals",
      "day": "Wed",
      "time": "19:00",
      "durationMin": 60,
      "room": "Studio 1",
      "instructorId": "i-jonas",
      "capacity": 14,
      "image": "ring-pads-partner.jpg"
    },
    {
      "id": "c-spin-thu",
      "name": "Spin",
      "day": "Thu",
      "time": "18:00",
      "durationMin": 45,
      "room": "Cycle Room",
      "instructorId": "i-ada",
      "capacity": 18,
      "image": "spin-class-sage.jpg"
    },
    {
      "id": "c-ride-sat",
      "name": "Saturday Ride",
      "day": "Sat",
      "time": "09:00",
      "durationMin": 60,
      "room": "Cycle Room",
      "instructorId": "i-ada",
      "capacity": 18,
      "image": "road-forest-pack.jpg"
    }
  ],
  "instances": [
    {
      "id": "x-0727-yoga",
      "classId": "c-yoga-mon",
      "date": "2026-07-27",
      "past": true
    },
    {
      "id": "x-0727-hiit",
      "classId": "c-hiit-mon",
      "date": "2026-07-27",
      "past": true
    },
    {
      "id": "x-0728-strength",
      "classId": "c-strength-tue",
      "date": "2026-07-28",
      "past": true
    },
    {
      "id": "x-0729-yoga",
      "classId": "c-yoga-wed",
      "date": "2026-07-29",
      "past": true
    },
    {
      "id": "x-0729-boxing",
      "classId": "c-boxing-wed",
      "date": "2026-07-29",
      "past": true
    },
    {
      "id": "x-0730-spin",
      "classId": "c-spin-thu",
      "date": "2026-07-30",
      "past": true
    },
    {
      "id": "x-0801-ride",
      "classId": "c-ride-sat",
      "date": "2026-08-01",
      "past": true
    },
    {
      "id": "x-0803-yoga",
      "classId": "c-yoga-mon",
      "date": "2026-08-03",
      "past": true
    },
    {
      "id": "x-0803-hiit",
      "classId": "c-hiit-mon",
      "date": "2026-08-03",
      "past": true
    },
    {
      "id": "x-0804-strength",
      "classId": "c-strength-tue",
      "date": "2026-08-04",
      "past": true
    },
    {
      "id": "x-0805-yoga",
      "classId": "c-yoga-wed",
      "date": "2026-08-05",
      "past": true
    },
    {
      "id": "x-0805-boxing",
      "classId": "c-boxing-wed",
      "date": "2026-08-05",
      "past": true
    },
    {
      "id": "x-0806-spin",
      "classId": "c-spin-thu",
      "date": "2026-08-06",
      "past": true,
      "isToday": true
    },
    {
      "id": "x-0808-ride",
      "classId": "c-ride-sat",
      "date": "2026-08-08",
      "past": false
    },
    {
      "id": "x-0813-spin",
      "classId": "c-spin-thu",
      "date": "2026-08-13",
      "past": false
    }
  ],
  "bookings": [
    {
      "instanceId": "x-0727-hiit",
      "memberId": "m-alex",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0727-hiit",
      "memberId": "m-tunde",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0727-yoga",
      "memberId": "m-maya",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0727-yoga",
      "memberId": "m-elena",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0728-strength",
      "memberId": "m-tunde",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0729-yoga",
      "memberId": "m-maya",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0729-boxing",
      "memberId": "m-marcus",
      "kind": "walk-in",
      "attended": true
    },
    {
      "instanceId": "x-0729-boxing",
      "memberId": "m-elena",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0730-spin",
      "memberId": "m-alex",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0730-spin",
      "memberId": "m-sarah",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0730-spin",
      "memberId": "m-elena",
      "kind": "booked",
      "attended": false
    },
    {
      "instanceId": "x-0801-ride",
      "memberId": "m-sarah",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0803-hiit",
      "memberId": "m-alex",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0803-hiit",
      "memberId": "m-tunde",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0803-yoga",
      "memberId": "m-maya",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0803-yoga",
      "memberId": "m-elena",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0804-strength",
      "memberId": "m-tunde",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0805-yoga",
      "memberId": "m-maya",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0805-yoga",
      "memberId": "m-priya",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0805-boxing",
      "memberId": "m-marcus",
      "kind": "walk-in",
      "attended": true
    },
    {
      "instanceId": "x-0806-spin",
      "memberId": "m-sarah",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0806-spin",
      "memberId": "m-elena",
      "kind": "booked",
      "attended": false
    },
    {
      "instanceId": "x-0806-spin",
      "memberId": "m-alex",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0808-ride",
      "memberId": "m-sarah",
      "kind": "booked",
      "attended": null
    },
    {
      "instanceId": "x-0808-ride",
      "memberId": "m-elena",
      "kind": "booked",
      "attended": null
    },
    {
      "instanceId": "x-0808-ride",
      "memberId": "m-hana",
      "kind": "booked",
      "attended": null
    },
    {
      "instanceId": "x-0808-ride",
      "memberId": "m-yemi",
      "kind": "booked",
      "attended": null
    },
    {
      "instanceId": "x-0808-ride",
      "memberId": "m-ruth",
      "kind": "booked",
      "attended": null
    },
    {
      "instanceId": "x-0808-ride",
      "memberId": "m-priya",
      "kind": "booked",
      "attended": null
    },
    {
      "instanceId": "x-0806-spin",
      "memberId": "m-hana",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0806-spin",
      "memberId": "m-priya",
      "kind": "booked",
      "attended": true
    },
    {
      "instanceId": "x-0806-spin",
      "memberId": "m-marcus",
      "kind": "walk-in",
      "attended": true
    },
    {
      "instanceId": "x-0813-spin",
      "memberId": "m-sarah",
      "kind": "booked",
      "attended": null
    },
    {
      "instanceId": "x-0813-spin",
      "memberId": "m-alex",
      "kind": "booked",
      "attended": null
    },
    {
      "instanceId": "x-0813-spin",
      "memberId": "m-hana",
      "kind": "booked",
      "attended": null
    },
    {
      "instanceId": "x-0813-spin",
      "memberId": "m-priya",
      "kind": "booked",
      "attended": null
    },
    {
      "instanceId": "x-0813-spin",
      "memberId": "m-elena",
      "kind": "booked",
      "attended": null
    },
    {
      "instanceId": "x-0813-spin",
      "memberId": "m-bill",
      "kind": "booked",
      "attended": null
    }
  ],
  "crews": [
    {
      "id": "cr-cycle",
      "name": "Cycle Club",
      "image": "road-dusk-pair.jpg",
      "classes": [
        "c-spin-thu",
        "c-ride-sat"
      ],
      "lead": "i-ada",
      "about": "Thursday spin and the Saturday long ride. Loud music, no talking on the climbs."
    },
    {
      "id": "cr-iron",
      "name": "Iron Hour",
      "image": "rack-warm-empty.jpg",
      "classes": [
        "c-strength-tue"
      ],
      "also": [
        "m-deji",
        "m-ify",
        "m-tomas"
      ],
      "lead": "i-jonas",
      "about": "Tuesday strength, plus whoever is on the floor at 6. Spotters always available."
    },
    {
      "id": "cr-sunrise",
      "name": "Sunrise Crew",
      "image": "studio-dawn-mats.jpg",
      "classes": [
        "c-yoga-mon",
        "c-yoga-wed"
      ],
      "lead": "i-lena",
      "about": "7am on the mat, twice a week. Coffee after, every time."
    },
    {
      "id": "cr-ring",
      "name": "Ring Work",
      "image": "ring-bag-focus.jpg",
      "classes": [
        "c-boxing-wed"
      ],
      "lead": "i-jonas",
      "about": "Wednesday boxing. Pads, bags, and a lot of laughing at ourselves."
    }
  ],
  "challenges": [
    {
      "id": "ch-aug",
      "name": "August 12",
      "image": "outdoor-huddle-fisheye.jpg",
      "target": 12,
      "unit": "days",
      "ends": "2026-08-31",
      "blurb": "Twelve days moved in August. Any class, any floor, any length."
    },
    {
      "id": "ch-dawn",
      "name": "Five before seven",
      "image": "park-dawn-pair.jpg",
      "target": 5,
      "unit": "early sessions",
      "ends": "2026-08-31",
      "blurb": "Five sessions that start before 7am. The hardest part is the alarm."
    }
  ],
  "copy": {
    "note": "Voice reference for generated social content. Read the voice rules in docs/product-plan.md before adding lines.",
    "captions": [
      "Legs are gone. Worth it.",
      "Best session in weeks.",
      "Turned up not wanting to. Glad I did.",
      "New personal best on the last climb.",
      "Full house tonight.",
      "Quiet one. Needed that.",
      "Someone tell Ada to ease off.",
      "Back at it."
    ],
    "postPhotos": [
      "gym-golden-highfive.jpg",
      "outdoor-huddle-fisheye.jpg",
      "studio-laugh-floor.jpg",
      "loft-rower-joy.jpg"
    ],
    "commentLines": [
      "Strong work.",
      "That pace though.",
      "Same again Thursday?",
      "Save me a bike next time.",
      "You made that look easy.",
      "Coffee after the next one.",
      "Front row energy.",
      "Needed to see this today."
    ],
    "threadOpeners": [
      "You in Thursday?",
      "Good session tonight.",
      "I am running five minutes late, save me a bike.",
      "Are you doing the August challenge?"
    ],
    "threadReplies": [
      "No rush, we will keep one for you.",
      "Same time next week?",
      "Bring Priya if she is up for it.",
      "First round of coffee is on me."
    ]
  }
}
