{
  "schemaVersion": "1.0.0",
  "updatedAt": "2026-10-21T21:27:24Z",
  "users": [
    {
      "id": "usr-fabian",
      "email": "fabian@camenzind.dev",
      "name": "Fabian Camenzind",
      "avatarUrl": "https://api.dicebear.com/7.x/bottts/svg?seed=Fabian",
      "googleSub": "google-fabian-001",
      "provider": "google",
      "role": "owner",
      "createdAt": "2026-10-07T20:32:17Z",
      "lastLoginAt": "2026-10-21T21:26:42Z"
    },
    {
      "id": "usr-elena",
      "email": "elena@shpeely.ch",
      "name": "Elena Rostova",
      "avatarUrl": "https://api.dicebear.com/7.x/bottts/svg?seed=Elena",
      "googleSub": "google-elena-002",
      "provider": "google",
      "role": "member",
      "createdAt": "2026-10-07T20:32:17Z",
      "lastLoginAt": "2026-10-21T20:32:17Z"
    },
    {
      "id": "usr-lukas",
      "email": "lukas@boardgame.ch",
      "name": "Lukas Weber",
      "avatarUrl": "https://api.dicebear.com/7.x/bottts/svg?seed=Lukas",
      "googleSub": "google-lukas-003",
      "provider": "google",
      "role": "member",
      "createdAt": "2026-10-07T20:32:17Z",
      "lastLoginAt": "2026-10-21T20:32:17Z"
    },
    {
      "id": "usr-a4526389048c",
      "email": "f.camenzind@mail.com",
      "name": "Fäbe",
      "avatarUrl": "",
      "googleSub": "google-ca4711f3e4400329",
      "provider": "google",
      "role": "owner",
      "createdAt": "2026-10-21T21:26:57Z",
      "lastLoginAt": "2026-10-21T21:27:01Z"
    },
    {
      "id": "usr-645f01e3256e",
      "email": "fcamenzind@gmail.com",
      "name": "Fäbe",
      "avatarUrl": "",
      "googleSub": "google-d312c8aff6238f39",
      "provider": "google",
      "role": "owner",
      "createdAt": "2026-10-21T21:27:24Z",
      "lastLoginAt": "2026-10-21T21:27:24Z"
    }
  ],
  "games": [
    {
      "id": "bgg-163412",
      "bggId": 163412,
      "name": "Patchwork",
      "yearPublished": 2014,
      "minPlayers": 2,
      "maxPlayers": 2,
      "playingTimeMin": 30,
      "bggWeight": 1.61,
      "normalizingFactor": 28,
      "category": "2-Player Polyomino Puzzle",
      "thumbnailUrl": "",
      "bggUrl": "https://boardgamegeek.com/boardgame/163412",
      "importedFromBgg": true,
      "updatedAt": "2026-10-21T21:20:31Z"
    },
    {
      "id": "bgg-392460",
      "bggId": 392460,
      "name": "Rat race",
      "yearPublished": 2024,
      "minPlayers": 2,
      "maxPlayers": 5,
      "playingTimeMin": 75,
      "bggWeight": 2.65,
      "normalizingFactor": 80,
      "category": "Strategy / Tabletop",
      "thumbnailUrl": "",
      "bggUrl": "https://boardgamegeek.com/boardgame/392460",
      "importedFromBgg": true,
      "updatedAt": "2026-10-21T21:16:12Z"
    },
    {
      "id": "bgg-224517",
      "bggId": 224517,
      "name": "Brass: Birmingham",
      "yearPublished": 2018,
      "minPlayers": 2,
      "maxPlayers": 4,
      "playingTimeMin": 120,
      "bggWeight": 3.89,
      "normalizingFactor": 140,
      "category": "Economic / Industrial Strategy",
      "thumbnailUrl": "",
      "bggUrl": "https://boardgamegeek.com/boardgame/224517",
      "importedFromBgg": true,
      "updatedAt": "2026-10-21T20:32:17Z"
    },
    {
      "id": "bgg-167791",
      "bggId": 167791,
      "name": "Terraforming Mars",
      "yearPublished": 2016,
      "minPlayers": 1,
      "maxPlayers": 5,
      "playingTimeMin": 120,
      "bggWeight": 3.26,
      "normalizingFactor": 95,
      "category": "Sci-Fi Engine Building",
      "thumbnailUrl": "",
      "bggUrl": "https://boardgamegeek.com/boardgame/167791",
      "importedFromBgg": true,
      "updatedAt": "2026-10-21T20:32:17Z"
    },
    {
      "id": "bgg-342942",
      "bggId": 342942,
      "name": "Ark Nova",
      "yearPublished": 2021,
      "minPlayers": 1,
      "maxPlayers": 4,
      "playingTimeMin": 150,
      "bggWeight": 3.78,
      "normalizingFactor": 115,
      "category": "Card Drafting / Conservation",
      "thumbnailUrl": "",
      "bggUrl": "https://boardgamegeek.com/boardgame/342942",
      "importedFromBgg": true,
      "updatedAt": "2026-10-21T21:16:17Z"
    },
    {
      "id": "bgg-13",
      "bggId": 13,
      "name": "Catan",
      "yearPublished": 1995,
      "minPlayers": 3,
      "maxPlayers": 4,
      "playingTimeMin": 90,
      "bggWeight": 2.29,
      "normalizingFactor": 10,
      "category": "Trading \u0026 Route Building",
      "thumbnailUrl": "",
      "bggUrl": "https://boardgamegeek.com/boardgame/13",
      "importedFromBgg": true,
      "updatedAt": "2026-10-21T20:32:17Z"
    },
    {
      "id": "bgg-266192",
      "bggId": 266192,
      "name": "Wingspan",
      "yearPublished": 2019,
      "minPlayers": 1,
      "maxPlayers": 5,
      "playingTimeMin": 70,
      "bggWeight": 2.47,
      "normalizingFactor": 85,
      "category": "Engine Building / Avian",
      "thumbnailUrl": "",
      "bggUrl": "https://boardgamegeek.com/boardgame/266192",
      "importedFromBgg": true,
      "updatedAt": "2026-10-21T20:32:17Z"
    },
    {
      "id": "bgg-316554",
      "bggId": 316554,
      "name": "Dune: Imperium",
      "yearPublished": 2020,
      "minPlayers": 1,
      "maxPlayers": 4,
      "playingTimeMin": 120,
      "bggWeight": 3.05,
      "normalizingFactor": 10,
      "category": "Deck-Building \u0026 Worker Placement",
      "thumbnailUrl": "",
      "bggUrl": "https://boardgamegeek.com/boardgame/316554",
      "importedFromBgg": true,
      "updatedAt": "2026-10-21T20:32:17Z"
    },
    {
      "id": "bgg-68448",
      "bggId": 68448,
      "name": "7 Wonders",
      "yearPublished": 2010,
      "minPlayers": 2,
      "maxPlayers": 7,
      "playingTimeMin": 30,
      "bggWeight": 2.32,
      "normalizingFactor": 60,
      "category": "Card Drafting / Civilization",
      "thumbnailUrl": "",
      "bggUrl": "https://boardgamegeek.com/boardgame/68448",
      "importedFromBgg": true,
      "updatedAt": "2026-10-21T20:32:17Z"
    },
    {
      "id": "bgg-230802",
      "bggId": 230802,
      "name": "Azul",
      "yearPublished": 2017,
      "minPlayers": 2,
      "maxPlayers": 4,
      "playingTimeMin": 40,
      "bggWeight": 1.77,
      "normalizingFactor": 75,
      "category": "Abstract Tile Placement",
      "thumbnailUrl": "",
      "bggUrl": "https://boardgamegeek.com/boardgame/230802",
      "importedFromBgg": true,
      "updatedAt": "2026-10-21T20:32:17Z"
    },
    {
      "id": "bgg-822",
      "bggId": 822,
      "name": "Carcassonne",
      "yearPublished": 2000,
      "minPlayers": 2,
      "maxPlayers": 5,
      "playingTimeMin": 45,
      "bggWeight": 1.89,
      "normalizingFactor": 100,
      "category": "Tile Placement / Territory",
      "thumbnailUrl": "",
      "bggUrl": "https://boardgamegeek.com/boardgame/822",
      "importedFromBgg": true,
      "updatedAt": "2026-10-21T20:32:17Z"
    },
    {
      "id": "bgg-169786",
      "bggId": 169786,
      "name": "Scythe",
      "yearPublished": 2016,
      "minPlayers": 1,
      "maxPlayers": 5,
      "playingTimeMin": 115,
      "bggWeight": 3.44,
      "normalizingFactor": 75,
      "category": "4X / Area Control",
      "thumbnailUrl": "",
      "bggUrl": "https://boardgamegeek.com/boardgame/169786",
      "importedFromBgg": true,
      "updatedAt": "2026-10-21T20:32:17Z"
    }
  ],
  "groups": [
    {
      "id": "grp-58634108",
      "name": "Haldenrain 2",
      "description": "",
      "mode": "group",
      "season": "Season 2026",
      "ownerUserId": "usr-fabian",
      "ownerName": "Fabian Camenzind",
      "players": [
        {
          "id": "plr-grp-58634108-1",
          "name": "Fabian",
          "avatarColor": "#06b6d4",
          "currentRating": 1240.7,
          "peakRating": 1240.7,
          "gamesPlayed": 2,
          "wins": 2,
          "podiums": 2,
          "normalizedScoreSum": 192.4,
          "avgNormalizedScore": 96.2,
          "lastDelta": 21.3
        },
        {
          "id": "plr-grp-58634108-2",
          "name": "Laura",
          "avatarColor": "#ec4899",
          "currentRating": 1159.3,
          "peakRating": 1200,
          "gamesPlayed": 2,
          "wins": 0,
          "podiums": 2,
          "normalizedScoreSum": 174.6,
          "avgNormalizedScore": 87.3,
          "lastDelta": -21.3
        }
      ],
      "createdAt": "2026-10-21T21:04:58Z",
      "updatedAt": "2026-10-21T21:24:27Z"
    },
    {
      "id": "grp-34204748",
      "name": "Dehei",
      "description": "",
      "mode": "group",
      "season": "Season 2026",
      "ownerUserId": "usr-fabian",
      "ownerName": "Fabian Camenzind",
      "players": [
        {
          "id": "plr-grp-34204748-1",
          "name": "Fabian",
          "avatarColor": "#06b6d4",
          "currentRating": 1200,
          "peakRating": 1200,
          "gamesPlayed": 0,
          "wins": 0,
          "podiums": 0,
          "normalizedScoreSum": 0,
          "avgNormalizedScore": 0,
          "lastDelta": 0
        },
        {
          "id": "plr-grp-34204748-2",
          "name": "Elena",
          "avatarColor": "#ec4899",
          "currentRating": 1200,
          "peakRating": 1200,
          "gamesPlayed": 0,
          "wins": 0,
          "podiums": 0,
          "normalizedScoreSum": 0,
          "avgNormalizedScore": 0,
          "lastDelta": 0
        },
        {
          "id": "plr-grp-34204748-3",
          "name": "Lukas",
          "avatarColor": "#a855f7",
          "currentRating": 1200,
          "peakRating": 1200,
          "gamesPlayed": 0,
          "wins": 0,
          "podiums": 0,
          "normalizedScoreSum": 0,
          "avgNormalizedScore": 0,
          "lastDelta": 0
        },
        {
          "id": "plr-grp-34204748-4",
          "name": "Marco",
          "avatarColor": "#10b981",
          "currentRating": 1200,
          "peakRating": 1200,
          "gamesPlayed": 0,
          "wins": 0,
          "podiums": 0,
          "normalizedScoreSum": 0,
          "avgNormalizedScore": 0,
          "lastDelta": 0
        }
      ],
      "createdAt": "2026-10-21T20:54:16Z",
      "updatedAt": "2026-10-21T20:54:16Z"
    },
    {
      "id": "grp-zurich-league",
      "name": "Zurich Eurogame Champions League",
      "description": "Weekly heavy \u0026 medium strategy tournament with BGG difficulty-weighted ratings.",
      "mode": "tournament",
      "season": "Season 2026 // Autumn Split",
      "ownerUserId": "usr-fabian",
      "ownerName": "Fabian Camenzind",
      "players": [
        {
          "id": "plr-fabian",
          "name": "Fabian",
          "email": "fabian@camenzind.dev",
          "avatarColor": "#06b6d4",
          "currentRating": 1274.6,
          "peakRating": 1274.6,
          "gamesPlayed": 6,
          "wins": 3,
          "podiums": 6,
          "normalizedScoreSum": 628.4,
          "avgNormalizedScore": 104.7,
          "lastDelta": 18.1
        },
        {
          "id": "plr-elena",
          "name": "Elena",
          "email": "elena@shpeely.ch",
          "avatarColor": "#ec4899",
          "currentRating": 1229.3,
          "peakRating": 1230,
          "gamesPlayed": 6,
          "wins": 2,
          "podiums": 5,
          "normalizedScoreSum": 596.6,
          "avgNormalizedScore": 99.4,
          "lastDelta": 5.7
        },
        {
          "id": "plr-lukas",
          "name": "Lukas",
          "email": "lukas@boardgame.ch",
          "avatarColor": "#a855f7",
          "currentRating": 1171,
          "peakRating": 1202,
          "gamesPlayed": 6,
          "wins": 1,
          "podiums": 4,
          "normalizedScoreSum": 540.4,
          "avgNormalizedScore": 90.1,
          "lastDelta": -5.7
        },
        {
          "id": "plr-marco",
          "name": "Marco",
          "email": "marco@tabletop.ch",
          "avatarColor": "#10b981",
          "currentRating": 1125.1,
          "peakRating": 1200,
          "gamesPlayed": 6,
          "wins": 0,
          "podiums": 3,
          "normalizedScoreSum": 504.7,
          "avgNormalizedScore": 84.1,
          "lastDelta": -18.1
        }
      ],
      "createdAt": "2026-10-07T20:32:17Z",
      "updatedAt": "2026-10-20T20:32:17Z"
    },
    {
      "id": "grp-friday-club",
      "name": "Friday Night Boardgame Club",
      "description": "Casual Friday tabletop nights tracking Catan, Wingspan, 7 Wonders, and Azul.",
      "mode": "group",
      "season": "All-Time Club Ledger",
      "ownerUserId": "usr-fabian",
      "ownerName": "Fabian Camenzind",
      "players": [
        {
          "id": "plr-fc-fabian",
          "name": "Fabian",
          "email": "fabian@camenzind.dev",
          "avatarColor": "#06b6d4",
          "currentRating": 1219,
          "peakRating": 1219,
          "gamesPlayed": 2,
          "wins": 1,
          "podiums": 2,
          "normalizedScoreSum": 217.3,
          "avgNormalizedScore": 108.7,
          "lastDelta": 18.7
        },
        {
          "id": "plr-fc-sarah",
          "name": "Sarah",
          "email": "sarah@cyberjam.ch",
          "avatarColor": "#f59e0b",
          "currentRating": 1196.8,
          "peakRating": 1216.6,
          "gamesPlayed": 2,
          "wins": 1,
          "podiums": 2,
          "normalizedScoreSum": 207,
          "avgNormalizedScore": 103.5,
          "lastDelta": -19.8
        },
        {
          "id": "plr-fc-noah",
          "name": "Noah",
          "email": "noah@cyberjam.ch",
          "avatarColor": "#3b82f6",
          "currentRating": 1184.2,
          "peakRating": 1200,
          "gamesPlayed": 2,
          "wins": 0,
          "podiums": 2,
          "normalizedScoreSum": 188.4,
          "avgNormalizedScore": 94.2,
          "lastDelta": 1.1
        }
      ],
      "createdAt": "2026-10-07T20:32:17Z",
      "updatedAt": "2026-10-19T20:32:17Z"
    }
  ],
  "matches": [
    {
      "id": "mch-seed-01",
      "groupId": "grp-zurich-league",
      "gameId": "bgg-13",
      "gameName": "Catan",
      "bggId": 13,
      "bggWeight": 2.29,
      "normalizingFactor": 10,
      "weightMultiplier": 1.24,
      "playedAt": "2026-10-09T20:32:17Z",
      "recordedBy": "Fabian Camenzind",
      "notes": "Opening night Catan — Fabian secured Longest Road for 10 VP.",
      "results": [
        {
          "playerId": "plr-fabian",
          "playerName": "Fabian",
          "avatarColor": "#06b6d4",
          "rawScore": 10,
          "normalizedScore": 100,
          "placement": 1,
          "placementScore": 1,
          "expectedScore": 0.5,
          "ratingBefore": 1200,
          "ratingDelta": 19.8,
          "ratingAfter": 1219.8,
          "isWinner": true
        },
        {
          "playerId": "plr-elena",
          "playerName": "Elena",
          "avatarColor": "#ec4899",
          "rawScore": 9,
          "normalizedScore": 90,
          "placement": 2,
          "placementScore": 0.667,
          "expectedScore": 0.5,
          "ratingBefore": 1200,
          "ratingDelta": 7,
          "ratingAfter": 1207,
          "isWinner": false
        },
        {
          "playerId": "plr-lukas",
          "playerName": "Lukas",
          "avatarColor": "#a855f7",
          "rawScore": 7,
          "normalizedScore": 70,
          "placement": 3,
          "placementScore": 0.333,
          "expectedScore": 0.5,
          "ratingBefore": 1200,
          "ratingDelta": -7,
          "ratingAfter": 1193,
          "isWinner": false
        },
        {
          "playerId": "plr-marco",
          "playerName": "Marco",
          "avatarColor": "#10b981",
          "rawScore": 6,
          "normalizedScore": 60,
          "placement": 4,
          "placementScore": 0,
          "expectedScore": 0.5,
          "ratingBefore": 1200,
          "ratingDelta": -19.8,
          "ratingAfter": 1180.2,
          "isWinner": false
        }
      ]
    },
    {
      "id": "mch-seed-02",
      "groupId": "grp-zurich-league",
      "gameId": "bgg-167791",
      "gameName": "Terraforming Mars",
      "bggId": 167791,
      "bggWeight": 3.26,
      "normalizingFactor": 95,
      "weightMultiplier": 1.51,
      "playedAt": "2026-10-11T20:32:17Z",
      "recordedBy": "Fabian Camenzind",
      "notes": "Terraforming Mars — Elena dominated greenery + milestones (108 pts vs 95 normalizer).",
      "results": [
        {
          "playerId": "plr-elena",
          "playerName": "Elena",
          "avatarColor": "#ec4899",
          "rawScore": 108,
          "normalizedScore": 113.7,
          "placement": 1,
          "placementScore": 1,
          "expectedScore": 0.513,
          "ratingBefore": 1207,
          "ratingDelta": 23,
          "ratingAfter": 1230,
          "isWinner": true
        },
        {
          "playerId": "plr-fabian",
          "playerName": "Fabian",
          "avatarColor": "#06b6d4",
          "rawScore": 96,
          "normalizedScore": 101.1,
          "placement": 2,
          "placementScore": 0.667,
          "expectedScore": 0.538,
          "ratingBefore": 1219.8,
          "ratingDelta": 6,
          "ratingAfter": 1225.8,
          "isWinner": false
        },
        {
          "playerId": "plr-marco",
          "playerName": "Marco",
          "avatarColor": "#10b981",
          "rawScore": 88,
          "normalizedScore": 92.6,
          "placement": 3,
          "placementScore": 0.333,
          "expectedScore": 0.462,
          "ratingBefore": 1180.2,
          "ratingDelta": -6.2,
          "ratingAfter": 1174,
          "isWinner": false
        },
        {
          "playerId": "plr-lukas",
          "playerName": "Lukas",
          "avatarColor": "#a855f7",
          "rawScore": 79,
          "normalizedScore": 83.2,
          "placement": 4,
          "placementScore": 0,
          "expectedScore": 0.487,
          "ratingBefore": 1193,
          "ratingDelta": -22.8,
          "ratingAfter": 1170.2,
          "isWinner": false
        }
      ]
    },
    {
      "id": "mch-seed-03",
      "groupId": "grp-zurich-league",
      "gameId": "bgg-224517",
      "gameName": "Brass: Birmingham",
      "bggId": 224517,
      "bggWeight": 3.89,
      "normalizingFactor": 140,
      "weightMultiplier": 1.69,
      "playedAt": "2026-10-14T20:32:17Z",
      "recordedBy": "Fabian Camenzind",
      "notes": "Brass: Birmingham (BGG Weight 3.89!) — Heavy rail-era victory by Fabian (156 pts).",
      "results": [
        {
          "playerId": "plr-fabian",
          "playerName": "Fabian",
          "avatarColor": "#06b6d4",
          "rawScore": 156,
          "normalizedScore": 111.4,
          "placement": 1,
          "placementScore": 1,
          "expectedScore": 0.549,
          "ratingBefore": 1225.8,
          "ratingDelta": 23.5,
          "ratingAfter": 1249.3,
          "isWinner": true
        },
        {
          "playerId": "plr-lukas",
          "playerName": "Lukas",
          "avatarColor": "#a855f7",
          "rawScore": 142,
          "normalizedScore": 101.4,
          "placement": 2,
          "placementScore": 0.667,
          "expectedScore": 0.443,
          "ratingBefore": 1170.2,
          "ratingDelta": 11.1,
          "ratingAfter": 1181.3,
          "isWinner": false
        },
        {
          "playerId": "plr-elena",
          "playerName": "Elena",
          "avatarColor": "#ec4899",
          "rawScore": 134,
          "normalizedScore": 95.7,
          "placement": 3,
          "placementScore": 0.333,
          "expectedScore": 0.557,
          "ratingBefore": 1230,
          "ratingDelta": -11,
          "ratingAfter": 1219,
          "isWinner": false
        },
        {
          "playerId": "plr-marco",
          "playerName": "Marco",
          "avatarColor": "#10b981",
          "rawScore": 118,
          "normalizedScore": 84.3,
          "placement": 4,
          "placementScore": 0,
          "expectedScore": 0.451,
          "ratingBefore": 1174,
          "ratingDelta": -23.6,
          "ratingAfter": 1150.4,
          "isWinner": false
        }
      ]
    },
    {
      "id": "mch-seed-04",
      "groupId": "grp-zurich-league",
      "gameId": "bgg-266192",
      "gameName": "Wingspan",
      "bggId": 266192,
      "bggWeight": 2.47,
      "normalizingFactor": 85,
      "weightMultiplier": 1.29,
      "playedAt": "2026-10-16T20:32:17Z",
      "recordedBy": "Fabian Camenzind",
      "notes": "Wingspan — Lukas pulled off a massive tucked-bird engine (94 pts).",
      "results": [
        {
          "playerId": "plr-lukas",
          "playerName": "Lukas",
          "avatarColor": "#a855f7",
          "rawScore": 94,
          "normalizedScore": 110.6,
          "placement": 1,
          "placementScore": 1,
          "expectedScore": 0.465,
          "ratingBefore": 1181.3,
          "ratingDelta": 20.7,
          "ratingAfter": 1202,
          "isWinner": true
        },
        {
          "playerId": "plr-fabian",
          "playerName": "Fabian",
          "avatarColor": "#06b6d4",
          "rawScore": 87,
          "normalizedScore": 102.4,
          "placement": 2,
          "placementScore": 0.667,
          "expectedScore": 0.593,
          "ratingBefore": 1249.3,
          "ratingDelta": 3,
          "ratingAfter": 1252.3,
          "isWinner": false
        },
        {
          "playerId": "plr-marco",
          "playerName": "Marco",
          "avatarColor": "#10b981",
          "rawScore": 82,
          "normalizedScore": 96.5,
          "placement": 3,
          "placementScore": 0.333,
          "expectedScore": 0.407,
          "ratingBefore": 1150.4,
          "ratingDelta": -3.1,
          "ratingAfter": 1147.3,
          "isWinner": false
        },
        {
          "playerId": "plr-elena",
          "playerName": "Elena",
          "avatarColor": "#ec4899",
          "rawScore": 76,
          "normalizedScore": 89.4,
          "placement": 4,
          "placementScore": 0,
          "expectedScore": 0.536,
          "ratingBefore": 1219,
          "ratingDelta": -20.6,
          "ratingAfter": 1198.4,
          "isWinner": false
        }
      ]
    },
    {
      "id": "mch-seed-05",
      "groupId": "grp-zurich-league",
      "gameId": "bgg-342942",
      "gameName": "Ark Nova",
      "bggId": 342942,
      "bggWeight": 3.78,
      "normalizingFactor": 115,
      "weightMultiplier": 1.66,
      "playedAt": "2026-10-18T20:32:17Z",
      "recordedBy": "Fabian Camenzind",
      "notes": "Ark Nova (BGG Weight 3.78) — Elena \u0026 Fabian photo-finish conservation race.",
      "results": [
        {
          "playerId": "plr-elena",
          "playerName": "Elena",
          "avatarColor": "#ec4899",
          "rawScore": 124,
          "normalizedScore": 107.8,
          "placement": 1,
          "placementScore": 1,
          "expectedScore": 0.497,
          "ratingBefore": 1198.4,
          "ratingDelta": 25.2,
          "ratingAfter": 1223.6,
          "isWinner": true
        },
        {
          "playerId": "plr-fabian",
          "playerName": "Fabian",
          "avatarColor": "#06b6d4",
          "rawScore": 119,
          "normalizedScore": 103.5,
          "placement": 2,
          "placementScore": 0.667,
          "expectedScore": 0.599,
          "ratingBefore": 1252.3,
          "ratingDelta": 4.2,
          "ratingAfter": 1256.5,
          "isWinner": false
        },
        {
          "playerId": "plr-marco",
          "playerName": "Marco",
          "avatarColor": "#10b981",
          "rawScore": 105,
          "normalizedScore": 91.3,
          "placement": 3,
          "placementScore": 0.333,
          "expectedScore": 0.401,
          "ratingBefore": 1147.3,
          "ratingDelta": -4.1,
          "ratingAfter": 1143.2,
          "isWinner": false
        },
        {
          "playerId": "plr-lukas",
          "playerName": "Lukas",
          "avatarColor": "#a855f7",
          "rawScore": 98,
          "normalizedScore": 85.2,
          "placement": 4,
          "placementScore": 0,
          "expectedScore": 0.504,
          "ratingBefore": 1202,
          "ratingDelta": -25.3,
          "ratingAfter": 1176.7,
          "isWinner": false
        }
      ]
    },
    {
      "id": "mch-seed-06",
      "groupId": "grp-zurich-league",
      "gameId": "bgg-316554",
      "gameName": "Dune: Imperium",
      "bggId": 316554,
      "bggWeight": 3.05,
      "normalizingFactor": 10,
      "weightMultiplier": 1.45,
      "playedAt": "2026-10-20T20:32:17Z",
      "recordedBy": "Fabian Camenzind",
      "notes": "Dune: Imperium — Fabian clinched 11 VP in the final Garrison conflict.",
      "results": [
        {
          "playerId": "plr-fabian",
          "playerName": "Fabian",
          "avatarColor": "#06b6d4",
          "rawScore": 11,
          "normalizedScore": 110,
          "placement": 1,
          "placementScore": 1,
          "expectedScore": 0.606,
          "ratingBefore": 1256.5,
          "ratingDelta": 18.1,
          "ratingAfter": 1274.6,
          "isWinner": true
        },
        {
          "playerId": "plr-elena",
          "playerName": "Elena",
          "avatarColor": "#ec4899",
          "rawScore": 10,
          "normalizedScore": 100,
          "placement": 2,
          "placementScore": 0.667,
          "expectedScore": 0.545,
          "ratingBefore": 1223.6,
          "ratingDelta": 5.7,
          "ratingAfter": 1229.3,
          "isWinner": false
        },
        {
          "playerId": "plr-lukas",
          "playerName": "Lukas",
          "avatarColor": "#a855f7",
          "rawScore": 9,
          "normalizedScore": 90,
          "placement": 3,
          "placementScore": 0.333,
          "expectedScore": 0.456,
          "ratingBefore": 1176.7,
          "ratingDelta": -5.7,
          "ratingAfter": 1171,
          "isWinner": false
        },
        {
          "playerId": "plr-marco",
          "playerName": "Marco",
          "avatarColor": "#10b981",
          "rawScore": 8,
          "normalizedScore": 80,
          "placement": 4,
          "placementScore": 0,
          "expectedScore": 0.394,
          "ratingBefore": 1143.2,
          "ratingDelta": -18.1,
          "ratingAfter": 1125.1,
          "isWinner": false
        }
      ]
    },
    {
      "id": "mch-seed-07",
      "groupId": "grp-friday-club",
      "gameId": "bgg-230802",
      "gameName": "Azul",
      "bggId": 230802,
      "bggWeight": 1.77,
      "normalizingFactor": 75,
      "weightMultiplier": 1.1,
      "playedAt": "2026-10-15T20:32:17Z",
      "recordedBy": "Fabian Camenzind",
      "notes": "Azul tile-drafting opener.",
      "results": [
        {
          "playerId": "plr-fc-sarah",
          "playerName": "Sarah",
          "avatarColor": "#f59e0b",
          "rawScore": 84,
          "normalizedScore": 112,
          "placement": 1,
          "placementScore": 1,
          "expectedScore": 0.5,
          "ratingBefore": 1200,
          "ratingDelta": 16.6,
          "ratingAfter": 1216.6,
          "isWinner": true
        },
        {
          "playerId": "plr-fc-fabian",
          "playerName": "Fabian",
          "avatarColor": "#06b6d4",
          "rawScore": 78,
          "normalizedScore": 104,
          "placement": 2,
          "placementScore": 0.5,
          "expectedScore": 0.5,
          "ratingBefore": 1200,
          "ratingDelta": 0.3,
          "ratingAfter": 1200.3,
          "isWinner": false
        },
        {
          "playerId": "plr-fc-noah",
          "playerName": "Noah",
          "avatarColor": "#3b82f6",
          "rawScore": 65,
          "normalizedScore": 86.7,
          "placement": 3,
          "placementScore": 0,
          "expectedScore": 0.5,
          "ratingBefore": 1200,
          "ratingDelta": -16.9,
          "ratingAfter": 1183.1,
          "isWinner": false
        }
      ]
    },
    {
      "id": "mch-seed-08",
      "groupId": "grp-friday-club",
      "gameId": "bgg-68448",
      "gameName": "7 Wonders",
      "bggId": 68448,
      "bggWeight": 2.32,
      "normalizingFactor": 60,
      "weightMultiplier": 1.25,
      "playedAt": "2026-10-19T20:32:17Z",
      "recordedBy": "Fabian Camenzind",
      "notes": "7 Wonders science + military combo by Fabian.",
      "results": [
        {
          "playerId": "plr-fc-fabian",
          "playerName": "Fabian",
          "avatarColor": "#06b6d4",
          "rawScore": 68,
          "normalizedScore": 113.3,
          "placement": 1,
          "placementScore": 1,
          "expectedScore": 0.501,
          "ratingBefore": 1200.3,
          "ratingDelta": 18.7,
          "ratingAfter": 1219,
          "isWinner": true
        },
        {
          "playerId": "plr-fc-noah",
          "playerName": "Noah",
          "avatarColor": "#3b82f6",
          "rawScore": 61,
          "normalizedScore": 101.7,
          "placement": 2,
          "placementScore": 0.5,
          "expectedScore": 0.464,
          "ratingBefore": 1183.1,
          "ratingDelta": 1.1,
          "ratingAfter": 1184.2,
          "isWinner": false
        },
        {
          "playerId": "plr-fc-sarah",
          "playerName": "Sarah",
          "avatarColor": "#f59e0b",
          "rawScore": 57,
          "normalizedScore": 95,
          "placement": 3,
          "placementScore": 0,
          "expectedScore": 0.536,
          "ratingBefore": 1216.6,
          "ratingDelta": -19.8,
          "ratingAfter": 1196.8,
          "isWinner": false
        }
      ]
    },
    {
      "id": "mch-267681769",
      "groupId": "grp-58634108",
      "gameId": "bgg-392460",
      "gameName": "Rat race",
      "bggId": 392460,
      "bggWeight": 2.65,
      "normalizingFactor": 80,
      "weightMultiplier": 1.34,
      "playedAt": "2026-10-21T21:16:47Z",
      "recordedBy": "Fabian Camenzind",
      "notes": "",
      "results": [
        {
          "playerId": "plr-grp-58634108-1",
          "playerName": "Fabian",
          "avatarColor": "#06b6d4",
          "rawScore": 69,
          "normalizedScore": 86.3,
          "placement": 1,
          "placementScore": 1,
          "expectedScore": 0.5,
          "ratingBefore": 1200,
          "ratingDelta": 19.4,
          "ratingAfter": 1219.4,
          "isWinner": true
        },
        {
          "playerId": "plr-grp-58634108-2",
          "playerName": "Laura",
          "avatarColor": "#ec4899",
          "rawScore": 61,
          "normalizedScore": 76.3,
          "placement": 2,
          "placementScore": 0,
          "expectedScore": 0.5,
          "ratingBefore": 1200,
          "ratingDelta": -19.4,
          "ratingAfter": 1180.6,
          "isWinner": false
        }
      ]
    },
    {
      "id": "mch-864799279",
      "groupId": "grp-58634108",
      "gameId": "bgg-342942",
      "gameName": "Ark Nova",
      "bggId": 342942,
      "bggWeight": 3.78,
      "normalizingFactor": 115,
      "weightMultiplier": 1.66,
      "playedAt": "2026-10-21T21:24:27Z",
      "recordedBy": "Fabian Camenzind",
      "notes": "",
      "results": [
        {
          "playerId": "plr-grp-58634108-1",
          "playerName": "Fabian",
          "avatarColor": "#06b6d4",
          "rawScore": 122,
          "normalizedScore": 106.1,
          "placement": 1,
          "placementScore": 1,
          "expectedScore": 0.556,
          "ratingBefore": 1219.4,
          "ratingDelta": 21.3,
          "ratingAfter": 1240.7,
          "isWinner": true
        },
        {
          "playerId": "plr-grp-58634108-2",
          "playerName": "Laura",
          "avatarColor": "#ec4899",
          "rawScore": 113,
          "normalizedScore": 98.3,
          "placement": 2,
          "placementScore": 0,
          "expectedScore": 0.444,
          "ratingBefore": 1180.6,
          "ratingDelta": -21.3,
          "ratingAfter": 1159.3,
          "isWinner": false
        }
      ]
    }
  ],
  "backups": [
    {
      "id": "bkp-20261021-212427-869",
      "filename": "bkp-20261021-212427-869.json",
      "createdAt": "2026-10-21T21:24:27Z",
      "sizeBytes": 32027,
      "reason": "auto-post-match-mch-864799279",
      "usersCount": 3,
      "groupsCount": 4,
      "gamesCount": 12,
      "matchesCount": 10,
      "sha256": "31b925967c4c8efd135c111a9b80b9a0035456b7fa3195abfdbc61ab3f44969c"
    },
    {
      "id": "bkp-20261021-211647-272",
      "filename": "bkp-20261021-211647-272.json",
      "createdAt": "2026-10-21T21:16:47Z",
      "sizeBytes": 29968,
      "reason": "auto-post-match-mch-267681769",
      "usersCount": 3,
      "groupsCount": 4,
      "gamesCount": 11,
      "matchesCount": 9,
      "sha256": "5fbb1a0b634ea55c9e078c5f6f0c97d5364d39bf79bfbfefbbbd8dfa20dad612"
    },
    {
      "id": "bkp-20261021-203217-715",
      "filename": "bkp-20261021-203217-715.json",
      "createdAt": "2026-10-21T20:32:17Z",
      "sizeBytes": 25124,
      "reason": "initial-seed-checkpoint",
      "usersCount": 3,
      "groupsCount": 2,
      "gamesCount": 10,
      "matchesCount": 8,
      "sha256": "f6569bff8eeba86dc4ba3aa3d38ce11a6b2f02fae294410006f7b5ee0d5387d5"
    }
  ]
}