
- Status
- LiveShipped and publicly available.
- Started
- Role
- Game Design, Simulation Design, Data Architecture, Product Design, Development Orchestration, QA
- Built with
Overview
Fantasy Squared is a fantasy football game built around a simple idea: fantasy football is fun, but waiting a full real-world season for the story to unfold is not required.
The player creates a league, drafts against simulated managers, manages a roster, advances through a generated NFL season, and competes for a fantasy championship. The real NFL provides the players and the statistical foundation, but every Fantasy Squared season becomes its own alternate universe.
A star can dominate one run and disappoint in another. An injury can change a roster overnight. A late-round pick can become a league winner.
The intended loop is fast enough to replay: draft a roster, manage the season, survive the playoffs, see how the league unfolded, and immediately start another universe.
Fantasy Football as the Game
Most fantasy football products are utilities for a real league. Fantasy Squared treats fantasy football itself as the game.
The draft is not a mock exercise whose usefulness ends once the last player is selected. It is the opening decision in a complete simulated season.
That changes what matters. A draft pick has to produce believable weekly outcomes. Positional depth has to matter. Injuries need consequences. CPU teams need coherent rosters. A team falling out of contention should eventually behave differently from a championship favorite.
The goal is not to perfectly predict the real NFL. It is to generate football outcomes that consistently feel plausible enough that the player cares about what happens next.
Rank as the Anchor
The player-projection system deliberately avoids treating either historical production or rankings as absolute truth.
2026 fantasy rank is the center of gravity because it contains forward-looking information that previous-season statistics cannot: new roles, new teams, expected depth-chart changes, rookies, and changing market expectations. Historical NFL production then shapes that baseline rather than replacing it.
For each player the pipeline preserves explicit fields — rankBaselinePpg, actualsPpg, actualsAdjustment, projectionAdjustment, finalPpg and sampleGames — so a player’s final expectation can be traced back to the inputs that moved it rather than disappearing into an opaque model.
Positional scarcity is derived the same way. Rather than hand-writing decay curves, Fantasy Squared pools real NFL fantasy output from 2023 through 2025 and smooths it by positional rank. The resulting curves reveal the structure fantasy players already experience intuitively: running back production falls sharply as the position gets deeper, wide receiver stays comparatively flat, tight end thins quickly after the elite options, and quarterback changes dramatically once a second one can start.
Identity Before Statistics
Joining ranking data to historical NFL records produced one of the project’s most important engineering lessons: a believable match can be worse than no match at all.
An early fuzzy matcher confidently proposed A.J. Brown as the statistical match for “Hollywood Brown.” The correct player was Marquise Brown. Silently accepting the suggestion would have assigned an elite receiver’s production to an unrelated player and contaminated projections, draft value, and future trade value downstream.
The matching system was therefore redesigned around structural exclusion rather than increasingly clever fuzzy matching. The original nflverse universe contained more than 25,000 player records; filtering to fantasy-relevant positions and recently active players reduced that pool to roughly 1,500 candidates and eliminated current name collisions entirely. Retired and defensive players no longer lose a tiebreaker — they are never admitted into the candidate pool. Anything still ambiguous is routed into a permanent review artifact rather than resolved silently.
A related offseason bug exposed a second data-boundary rule. Historical records correctly showed players on their previous teams while the 2026 ranking files reflected trades and free agency, and roughly one in seven of the top fantasy-relevant skill players had changed teams. The current rankings are now authoritative for team, bye week and strength-of-schedule context; historical team fields exist only to interpret historical statistics.
Historical production belongs to the player. Current context belongs to the current season.
Building CPU Drafters
The CPU draft engine is deterministic, seeded TypeScript with no UI dependency. Managers evaluate board value, positional demand, open starter requirements, depth, scarcity, tier cliffs, recent positional runs, roster limits, and personality biases.
The first version exposed an important distinction between expert consensus rank and an actual draft board. Ranking twenty-eight quarterbacks highly does not mean a one-QB twelve-team league should draft twenty-eight quarterbacks early — the CPU logic was behaving rationally against an irrational board. The board was redesigned around expected positional demand, so talent order stays meaningful within a position while the overall draft reflects how many players at that position a league actually consumes.
Managers are also not meant to make identical decisions with different seeds. Fantasy Squared includes behavioral archetypes — zero-RB, robust-RB, late-QB, early-TE, safe-floor, upside seekers, reachers and positional speculators — whose tendencies alter probabilities rather than overriding the board. A zero-RB manager still takes an extraordinary falling value. The UI does not expose these labels: a manager’s tendencies should be felt through their decisions, not read from developer metadata.
Thousands of Drafts
The draft engine was validated statistically rather than by playing a few favorable seeds. Thousands of simulated drafts are condensed into aggregate reports covering roster composition, position share by round, large reaches and slides, lineup validity, personality behavior, positional runs, and top-of-draft distributions.
At one checkpoint, average simulated twelve-team rosters landed near typical real-world construction: roughly 1.5 quarterbacks, 5 running backs, 6 wide receivers, 1.5 tight ends, 1 kicker and 1 defense. Across tens of thousands of generated teams, invalid finished lineups reached zero.
Simulation at that scale also surfaced bugs ordinary manual testing had missed — fractional flex needs treated as mandatory positions, second tight ends receiving a need bonus, kicker and defense board positions corrupting reach statistics, and demand logic overvaluing whichever position had the most starting slots.
Superflex Without a Second Engine
League settings were designed as configuration from the beginning, so Superflex did not become a second draft implementation. A superflex position is simply a configurable flex slot that also accepts quarterbacks, and positional demand is derived from league configuration.
That choice let the same engine support dramatically different quarterback markets. In Superflex testing, quarterbacks moved naturally toward the top of the board, teams commonly carried two or three, and roster validity held without a format-specific code path.
The browser draft room runs the same pure engine modules as the simulation harness rather than a second copy of the draft logic — so the behavior validated across thousands of automated drafts is the behavior the player actually encounters.
Current State
Fantasy Squared is live as a working v1. It has a normalized 2026 player foundation, historical scoring models, positional scarcity curves, injury and confidence priors, a deterministic CPU draft engine, configurable league formats, Superflex support, large-scale draft validation, post-draft grading, and a full simulated season in the browser.
The last problem to fall was not simulation correctness. It was presentation. Early versions exposed outcomes efficiently but felt like a statistical dashboard: a week could be simulated instantly, scores would change, and the player then had to go hunting to discover whether anything interesting had happened.
Fantasy football derives much of its weight from people, rivalries, records, injuries and close losses. So v1 replaces anonymous labels like “CPU 4” with persistent manager and team identity, and presents a simulated week as an event — the matchup, both records, key performers, trades, league news and injury reports.
The engine always created the drama. v1 pushes it toward the player.
Milestones
Fantasy Squared concept defined
Defined the core loop as a complete simulated fantasy football season rather than a standalone mock-draft tool.
Simulation engine built
Built the deterministic seeded draft and season engine on a normalized 2026 player pool, with rank-anchored projections, real positional scarcity curves, and league format as configuration rather than a second code path.
Validated and tuned at scale
Condensed thousands of deterministic drafts into aggregate reports to tune positional demand, roster construction, personalities, runs, reaches and slides — surfacing bugs manual testing had missed.
Game brought to life
Turned the simulation into a game with trades, league news, injury reports, persistent manager and team identity, and weekly matchups presented as events.





