Staging a Different Lineup for a Single Match

Until now Goal Legends only ever knew about one lineup per team. Whatever you last set on the Lineup page was the XI that took the pitch every time your club played, whether that was a league match at noon or a cup tie thirty minutes later. If you wanted to rest a player for one of those two games specifically, there was no way to do it without logging back in between kickoffs and swapping the lineup by hand.

One lineup, many kinds of match

The Lineup page now has a fixture picker. Leave it on "Default" and everything works exactly as before, you're editing the same live roster fields every match has always read from. Pick a specific upcoming fixture instead and you're editing a staged plan for that match only: the live lineup underneath is untouched, and every other fixture keeps using it. The staged plan is validated and consumed right before that match actually simulates, all eleven starters have to still be on the roster and fit to play, and if anything about it has gone stale by kickoff, the match quietly falls back to the live lineup instead of failing.

Cup matches don't live where you'd expect

The part that made this more than a UI feature: league matches, Elite Champions Cup matches, and Domestic Cup matches turned out to live in three completely separate database tables with three separate id spaces. A staged lineup can't just point at "match 4821", because match 4821 could be a different fixture in each competition. Every staged plan is keyed on a competition type and a match id together, and gets wired into all three simulation paths, plus friendlies, so a stacked league-and-cup afternoon is fully covered, not just the case that inspired it.

Reusing a shape that already existed

Simulating a match from a staged lineup instead of the live roster needed a different entry point into the match engine, one that takes an explicit set of players rather than reading a player's saved lineup position off the database. That already existed, built earlier for national-team matches, which have exactly the same "bypass the live club lineup" requirement. Reusing it meant the whole feature is one more caller into a path the engine already trusted, not a new one to test from scratch.

← Back to the devlog

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.