Product architecture
Plan the assistant, then wire the world
Homefield Fantasy is one brain for two jobs, on every American sport. Season-long and DFS share a player graph, a slate environment, and an explanation layer. They split on the objective: beat your league vs beat a field of 100,000 duplicate lineups.
Thursday night: set the season-long lineup before a questionably-active starter ruins the week. Sunday morning — or tip-off, or first pitch — turn a GPP take into unique lineups that still look like that take.
The assistant fails if it hallucinates news, silently double-starts a player, or optimizes DFS as if cash and tournaments were the same contest.
Season-long: maximize expected scoring among players you actually roster, with a penalty for injury and weather. Waivers are replacement-level math against your worst bench seat.
DFS: maximize contest-aware utility under salary, roster construction, correlation, uniqueness, and exposure. GPP utility is ceiling × leverage. Cash utility is floor.
System layers
- ▸ Identity: player, team, game, slate
- ▸ Environment: Vegas, weather, injury
- ▸ Market: salary, ownership, ADP
- ▸ Projections: floor / median / ceiling
- ▸ Season ranker (start/sit, compare, FAAB)
- ▸ Analyst questions hit that compare engine
- ▸ Pass / game / team stacks
- ▸ DFS greedy, uniqueness, exposure
- ▸ Tool-calling only, no free stats
- ▸ Contest-aware copy
- ▸ Explicit uncertainty (Q tags)
- ▸ Dead session: show reconnect, don't loop
- ▸ Weekly desk + league sync (this /season)
- ▸ Start/sit compare + trade fairness
- ▸ Draft · Keeper/Dynasty · Best Ball (/season/draft|dynasty|best-ball)
- ▸ DFS studio (this /dfs)
Official DFS salaries and contest entry belong to the site. Plan for CSV upload or a licensed feed. League rosters belong to Sleeper/ESPN/Yahoo APIs with the user's token — never a shared password.
News needs a timestamped source. If the feed is late, the UI must say the injury file is stale rather than sounding confident.
Sport-native DraftKings construction, $50k cap, injury haircuts, cash vs GPP utility, optional stacks (QB, game, hitter, line), NFL bring-backs, min unique players, max exposure, and a swap search that will not rerun a locked player.
It is intentionally a fast heuristic, not a full MIP. Slice 2 can swap the engine without changing the UI if the lineup object stays stable.
Build sequence
00
01
02
03
LLM hallucinated injuries will lose leagues. Tool-gating is not optional.
Site ToS usually forbids bots that enter contests. Export CSV; humans submit.
Projection vendors disagree. Ensemble + show the range, do not pick a cult source.
This is analysis software, not gambling advice. Keep that line in the product copy.