Fantasy football for League of Legends fans - draft 173 champions onto a 22-man American football roster, then play it out in a daily challenge, a 17-game season, or a live snake draft with friends.

Fantasy football for League of Legends fans. Every pick rolls a region and a role - Demacia × Top, say - and deals the champions who match. Choose one, put them anywhere on a football field, and fill all 22 spots. Then the season is played out drive by drive, with highlight plays acted out on the field and a final record at the end. The question the game asks is the one League players already argue about: who would actually be good at this?
22CHAMPS is a browser game I designed and built, and launched at 22champs.com on October 20, 2026. It has three ways to play: a Daily Challenge with the same rolls for everyone and one try a day, a Solo Draft that ends in a 17-game season, and Draft with Friends, a live multiplayer snake draft that ends in a 17-week league with standings and box scores.
Under the art is a game-design problem and a systems problem. The design problem is turning 173 champions from a fantasy MOBA into football players whose ratings feel right to people who know those champions well. The systems problem is a real-time draft room for up to seven players with pick timers, chat, autodraft and CPU teams, running on serverless functions with nothing in the background.
It took ten days and 144 commits, from the first solo draft on October 11 to launch on October 20, including the launch trailer, the patch notes, the link previews and the balance tooling. It is an unofficial fan project, made under Riot Games' "Legal Jibber Jabber" policy for community creations.

Fantasy football is a drafting game first and a sports game second. The fun is in the draft room: knowing something the other managers don't, and being proven right on Sunday. League of Legends has the same culture around its champions - 173 of them, each with a kit, a lore region and a class that players know by heart. 22CHAMPS puts the two together.
So the product had a few commitments from the start:
src/lib (ratings, formation, chemistry, items, units, season, league, the daily, the draft room), shared by the browser and the server.sharp for champion art, crests and the field.next/og for link previews (the site, each day's challenge, each draft room, each shared team) and the 1080 × 1350 season share card.obscenity for chat and team names, plus per-player chat limits and per-address rate limits on rooms.Twenty-two picks. Each one rolls a region and a role and deals the champions who match; you get one reroll for the region and one for the role per draft. Choose a champion, then tap their spot on the field. Before the first pick you choose a 3-4 or 4-3 defense and a fullback or slot-receiver offense, which decides the shape of the field you are filling.
When the roster is full, the team plays a 17-game season against the league's 17 NPC teams - the Bandle City Yordles' gadget passing game, the Shadow Isles Wraiths' ball-hawk secondary, the Ixtal Elementals' option run. Win them all for a Perfect Season.


One puzzle a day, the same for everyone. A CPU team has put one side on the field - its offense or its defense - with a score already up. You draft the other side in 11 picks, then play 11 drives against it: outscore them on an offense day, hold them under your score on a defense day.
Fairness was the design constraint. The CPU squad, every roll and the game's dice all come from the day's number, and the rolls are seeded by the picks made so far, so the same picks deal the same next roll. The dice are drawn per drive up front, so a better unit never does worse on the same dice: when friends compare results, the difference is how they drafted, not luck. The day turns over at midnight US Eastern for everyone, and a link to a day that hasn't come yet shows nothing, so nobody can preview tomorrow's team.
The result shares as a spoiler-free grid, one square per drive - Wordle's trick, applied to football.


A snake draft from the whole pool, like a fantasy site's draft room. Private rooms are joined by code or invite link, and the host sets the league's formation, the number of teams (2 to 7), the draft order (random, set by the host, or players pick their seats), items, and a pick timer. CPU teams fill any open seats; a friend who joins later takes a CPU's place.
There are public drafts too, and they run themselves. One of each kind is always open - a 4-team Quick Draft with 30-second picks and a 7-team Full League with one-minute picks. Nobody hosts: players take any open seat, the draft starts two minutes after the first one sits down (ten seconds once every seat is taken), and the next room opens the moment one fills.
The draft room is a full fantasy draft board: a sortable, filterable table of every champion still available, a pick ticker across the top, a queue you build by starring champions, league chat, and your field filling in on the right. When the draft ends, the teams play a 17-week league against each other and a champion is crowned, with standings, game logs and box scores.




Every champion has six stats, shown on their card from 35 to 99: Power drives through contact, Toughness holds its ground, Speed plays the edges, Size plays the trenches, Hands catches and Range throws. The first two started life as Attack and Defense and were renamed on day three, so nobody would read them as offense and defense.
The numbers come from Riot's data rather than my opinion. Each stat leans on the 1-3 style ratings in the League client (Damage, Toughness, Control, Mobility, Utility), refined by base stats, body size and class. Riot's bars are coarse - 95 champions share Toughness 1 - so Riot's official subclasses split the ties the way League players think about them: a Battlemage stands and fights, Artillery stays far back. Kit perks such as Juke, Big Hit, Ball Hawk and Lockdown add to the stat each maps to.
Two passes keep the roster playable. A stat budget pulls every champion's total part of the way toward the average, lifting mostly their strongest stats and trimming mostly their weakest - so a weak mage gets a better arm, never surprising speed. Size and Range are physical facts and never move. Then a Pokémon-style curve gives each stat its own bend so the roster's median lands around 60 and the best sit at 99; without it, Riot's coarse bars sent half the roster to the bottom together.
Each football position values a different blend of stats: a quarterback needs Range, a lineman needs Size. Some positions have more than one style - a pocket passer or a mobile quarterback, a speed back or a power back, a deep threat, a big target or a possession receiver, a receiving or a blocking tight end, a run-stopping or a zone linebacker - and a champion plays whichever suits them. A glaring weakness in a key stat costs extra. Styles are also how the roster stays usable: the zone linebacker, added just before launch, gives mages a defensive spot where their reach counts.
Neighbouring spots on the field are linked, FIFA Ultimate Team style. A link scores when the two champions share a region or a role, and there are 39 bonds from League lore - Garen and Lux, Nasus and Renekton, Xayah and Rakan - that fill two diamonds on their own. Each player earns up to three diamonds, and each diamond raises the stats that matter most at their spot. It turns the draft from "take the best player" into "take the best player for this hole", which is where drafting gets interesting.
An optional setting deals some champions a real, fully built League item - Infinity Edge, Rapid Firecannon, Arena's Prismatic items. Each item is worth 15 stat points (20 for a Prismatic), shared out by Riot's own gold value of the item's stats: damage is Power, health is Size, armor and resists are Toughness, attack speed and crit are Hands. Only the three items that stretch basic-attack range add Range. The Daily Challenge always has items on.

A team's offense and defense ratings are slot-weighted averages - the quarterback, edge rushers and corners matter most. But games aren't played rating against rating. The same slot ratings also make up five units - Passing, Running, Pass Rush, Run Defense and Coverage - and each game is simulated drive by drive, unit against unit: a passing drive is your Passing unit against their pass rush and coverage, a running drive is your Running unit against their run defense.
Every offense leans toward its better matchup: ten points of advantage in the run game shifts about a third of the drives toward running. So an elite run game against a soft run defense runs all day and wins that way, and a defense's weak spot gets attacked. It also means a team with one great unit and one poor one can beat a well-rounded team of the same rating, which is exactly the kind of argument the draft should produce. Each of the 17 NPC teams has a style of its own, so a roster's holes matter against the right opponents.
Seasons are seeded, so any season can be replayed exactly, and a shared season's card can be redrawn on the server from its seed.
The season reveal doesn't just print scores. It stops on the plays worth seeing - the score that won a close game, the pick that sealed one, a pick-six, a long touchdown - and acts each one out on the field under a TV-style score bug with play-by-play wording.
That part is choreography, not simulation: the box score already decided who scored and from how far, and a play script stages it as a real play call. The offense runs a concept from a small playbook (Four Verticals, Smash, Inside Zone) against a coverage (Cover 1, 2, 3 or a blitz) picked to fit what happened - a deep touchdown comes from a deep shot. Nobody moves before the snap; linemen engage and push; defenders cover their man or their zone, break on the throw, and chase.


The draft room had to be real-time, cheap to run, and impossible to cheat, without accounts or a server running in the background.
state column with a version column for optimistic locking, so two picks made at the same moment can't overwrite each other.[link], and each player can post one message every 0.8 seconds and five in ten. Team names are shown to strangers in public rooms, so a name with any swearing, slur or link is refused. Each address can create six rooms per ten minutes.Most people will open a draft link on a phone, so every screen was designed twice. On phones the field runs full width and never pans, every action sits in a bar pinned to the bottom, champion cards open as bottom sheets with the splash art behind them, and the draft table gets a filter sheet in place of its column filters. Tablets got their own pass so the field and the bottom bars line up.

The look borrows from the League client - its navy and gold "Hextech" framing - and from a stadium on game day. Panels share one frame: a thin gold edge, a soft outer glow and thick gold corner brackets, with slimmer brackets on the cards beside the field. Headings and buttons are set in Saira Condensed, a narrow athletic face that reads like a jersey number. Buttons are 9-sliced painted art rather than CSS fills, so they stretch to any label without distorting.
Colour does a job everywhere it appears. Gold is structure and the primary action. Offense is blue and defense is orange-red, on every bar and tag. Champion classes read like Pokémon types, one colour each - tanks grey, fighters orange, assassins violet, mages blue, marksmen yellow, supports green - so a roll can be read at a glance. Stats raised by items are lilac and stats raised by chemistry carry an arrow. Behind it all, each mode has its own stadium backdrop, darkened in the middle so the content stays readable and the art shows at the edges.
The key art and the mode banners put champions in football uniforms, and the 17 NPC teams each have their own crest.

A game nobody hears about doesn't get played, so the launch was built like the product:
