House of the Fantasy is a free football draft game built by one person as a side project. This page explains exactly where the numbers come from and what the simulation does with them, because a result is only interesting if you know what produced it.
The game holds 23,583 player-seasons across 1,072 club-seasons, covering the top five European leagues — the Premier League, La Liga, Serie A, the Bundesliga and Ligue 1 — over eleven seasons, from 2014-15 to 2025-26.
| Source | Seasons covered |
|---|---|
| FIFA 15 – FIFA 24 databases | 2014-15 to 2023-24 |
| EA Sports FC 26 database | 2025-26 |
2024-25 is currently missing, because no freely downloadable copy of that edition's database was available when the game was built.
Ratings were chosen over real-world statistics for one specific reason: EA rates every league on a single 0–99 scale, which makes a Bundesliga midfielder and a La Liga midfielder directly comparable without inventing a league-strength coefficient. Each club's squad is trimmed to its best 22 players, since the tail of a real squad is third-choice keepers and academy prospects nobody would draft.
It is not uniform randomness. Five steps:
A player cannot be drafted twice even across different seasons: identity is tracked per career, not per club-season, so you cannot field two versions of the same man.
Each eleven is reduced to an attack and a defence rating, built from the players' position-relevant attributes, the number of bodies in each line of the formation, any cost from playing out of position, and the chemistry bonus.
For a match, each side's expected goals are derived from its attack against the opponent's defence, on an exponential curve, with a home advantage applied. The actual scoreline is then drawn from a Poisson distribution around that expectation — which is the standard model for goals in football, and the reason a weak side can still win on the day.
When a team scores, a scorer is drawn from the eleven weighted by position and shooting ability; strikers score most, midfielders less, defenders occasionally, and goalkeepers almost never. About 74% of goals also produce an assist, drawn from a different player and weighted by position and passing. Clean sheets are credited to the goalkeeper and the defenders.
The attribution conserves goals exactly — every goal in the league table belongs to a named player. Over a season this produces a golden boot in the mid-twenties and a leading goalkeeper on around fourteen clean sheets, which is roughly where a real top-five league lands.
Every AI club fields its own real squad. Real Madrid plays Real Madrid's players; a newly promoted side plays theirs. Your drafted eleven is the outsider trying to gatecrash a genuine league.
An earlier version had every club draft from the same shared pool, which was fairer in the abstract but made club identity meaningless — tables came out with mid-table clubs as champions and the giants in tenth. Realism won that argument.
The result is that champions finish on roughly 84 to 90 points, the five strongest squads in a league average a top-four finish, and the five weakest average bottom five. Winning the league with a drafted eleven is genuinely hard; a top-four finish is a good season.
Every run is generated from a short seed. The same seed and the same choices produce a byte-identical outcome: the same wheel, the same shortlists, the same AI squads, and the same 1,900-odd match results across all five leagues. That is what makes a shared result verifiable rather than a claim, and what makes a challenge link a fair contest.
A static site — React and TypeScript, with the entire simulation running in your browser. There is no backend, no database and no account system; the player dataset is a single compressed file the browser downloads once. It is hosted on Cloudflare.
Play a run