Bug Fix

Weekly Fixes & Polish (Aug 10-18)

26 bug fixes and style improvements across rosters, other, rankings, schefter report, and more.

The Full Story

This week's 26 bug fixes and polish improvements touched the following areas of the site:

Rosters — The Analytics tab was shoving the whole roster page off the side of your screen. On a laptop, a small window, or a tablet held sideways, the team card at the top ran right past the edge — the team drawer would open and half the league's crests were somewhere out in the dark to the right, with the East and Southwest divisions simply gone. The card was innocent. Down at the bottom of the Analytics tab there's a Players by Team report that lays its cards out three across, and three of those cards need about a thousand pixels between them — more than the screen had. Rather than stack, they insisted, and everything above them stretched to match. They now count the room first and take two across, or one, depending on what's actually available. Three-across is still what you get on a wide monitor, which is the only place it ever fit. The bottom of the roster page's team card was a pileup. Three things were trying to occupy the same strip of air: the little word under the view tabs telling you which one you're on, the arrow that opens the team drawer, and the edge of the card itself. The label and the arrow were both floating — pinned to the layout rather than standing in it — so nothing below them knew they were there, and nothing reserved them any room. The arrow sat on top of the tabs it was supposed to sit beneath, the word underneath got sliced in half by the card's bottom edge, and on a phone the whole arrangement spilled past the card entirely. All three now stand in line: the tabs hold open the space their labels need, the arrow follows underneath with room on both sides, and the card grows to fit what's inside it at every screen size. The label on the tab you're actually using also stays up now, instead of appearing only while your finger was still on it. There are three sets of buttons on the roster page that tell you where you are — the view tabs up top, the GM/Coach switch, and the team crests in the drawer — and only two of them agreed on what "selected" looks like. The tabs and the GM switch draw a crisp blue ring. The team you're looking at got a soft blue glow instead, three pixels of it at 40% opacity, which on a dark card lands somewhere between blue and gray and reads more like a shadow than a choice. It now wears the same ring and the same faint blue fill as the tabs directly above it, in both light and dark mode. Nothing moved — the border was always there, it just wasn't colored in.

Other — Both sites got lighter on their feet. Every page request was quietly hauling around twenty years of archived league feeds — every roster, every box score, every player list back to 2004 — loaded fresh whether you were looking at last Sunday or the Bush administration. It was 165 megabytes of luggage, and the worst part is we were carrying two copies of it: the pages that show old seasons already have their own, so the second set was along for the ride and nothing more. The site had grown so heavy it had actually stopped being able to deploy. Now only the last three seasons ride along and the archives are pulled up when something actually asks for them, which cut the whole thing roughly in half. Nothing you can see has changed — every season is still there, still complete — it just gets there faster. Schefter stopped chewing holes in his own tips. To keep him from naming a team he's not allowed to name, every tip gets scrubbed before he reads it — any franchise name in the text is swapped out for "[a team]." Trouble is, the list of names he watches for includes short ones that are also just... words. "Dead Cap Walking" goes by DEAD in the standings and spent six seasons as Heavy Chevy, so a tip reading "deal is dead, but he's a heavy favorite to be cut" reached him as "deal is [a team], but he's a [a team] favorite." Worse than gibberish: he's under orders to make sure the substance of a tip survives the scrub, so he'd go hunting for the team that wasn't there and write one into the story. Retired names and standings abbreviations now go through untouched when they're plainly being used as words — lowercase, in the middle of a sentence. Nicknames anybody still uses are a different matter and stay locked down, so "put out feelers" is still going to come back fuzzed. Titsburgh Feelers will live. Roger's links in the group chat work again. When he ended a sentence with a link — "Review your plan at theleague.us/rosters." — GroupMe grabbed the period along with the address and sent everyone who tapped it to a page that doesn't exist. The roster-cutdown reminder is the one owners actually noticed, since it's the message telling seven teams to go log in and fix their roster. Two fixes, because one wasn't enough: every bot message now gets the trailing period trimmed off the link on the way out, and the site itself now catches a link that arrives with a period stuck to it and quietly sends you to the right page instead of a dead end. That second half matters, because the messages already sitting in the chat can't be edited — and it works for links you paste into a text message or an email too. Music City Mafia's dark-mode crest is real artwork now. The old one was the ordinary logo with a thin white line painted around the edge — which is precisely what the site already does on its own for any crest too dark to read at night, so the file was doing no work the stylesheet wasn't already doing. The new one puts the man, the hat and the skyline on their own near-black backdrop with the outline drawn in properly. Same guy, same cigar, no longer looking like a sticker somebody cut out. The Mariachi Ninjas get a proper dark-mode crest, and both leagues share it. The site can trace a thin ring around a dark logo to keep it readable at night, which is a fine safety net and never as good as artwork drawn for the job — so the green ring got drawn into the logo itself instead of being painted on at the last second by a stylesheet. The old dark file was the ordinary crest with a white line around it and is gone. Both leagues wear the identical new one, so the Ninjas finally look the same on either side after dark. Computer Jocks and Da Dangsters now look the same at night in both leagues. Both teams play in TheLeague and the AFL with the identical crest, and both were getting a different dark-mode treatment on each side. Computer Jocks had a dark file over here that was just the normal logo with a white line painted around it — which is exactly what the site already does on its own, so the file's gone and the outline is now drawn in the team's green, same as the AFL. Da Dangsters keeps its dark version, but it's the newer artwork the AFL got last week: the crest on its own navy backdrop instead of the old white-ringed one. Same logo, one look, whichever league you're reading. The Pecking Order's award cards stopped color-coding by team and started color-coding by meaning. Heater of the Week now runs a hot orange-red edge, Cooler of the Week an ice blue one, and the Bench Blunder gets pink — so the three you actually scan for are findable without reading the labels. Every other award still wears the winning franchise's color, and all of them are picked to stay legible in dark mode. Your phone was occasionally serving you a page from a previous visit and passing it off as live. The site keeps an offline copy of pages so there's something to show when you're in a dead zone — but it was reaching for that copy any time a request didn't complete cleanly, including the extremely normal case of tapping a second link before the first one finished loading. The saved copy could be days old and still point at a stylesheet that no longer exists, which is how a page could come up looking half-built and then quietly right itself a few taps later. Now the offline copy is only used when you're actually offline, it's ignored once it's more than twelve hours old, and images and logos refresh themselves in the background instead of being kept forever.

Rankings — Schefter's headshot on The Pecking Order stopped floating out in the margin. The little round photo beside the "The Pecking Order" heading was parked in the gutter to the left of the page on purpose — the idea being that the heading text would then line up dead even with the headline, the breadcrumbs and the ranking cards below it. Nice idea, wrong measurement: the page's column has about 19 pixels of room on that side and the photo needed 50, so on any screen wide enough to show it at all, it sat outside the layout entirely — a disembodied head hovering off in the left margin with nothing above or below it. It's back in the heading now, starting on the same left edge as everything else and reading like a byline. It also shows up on phones, which it never did before: the old version hid itself on anything under 1300 pixels wide, because below that there was no margin left to hide in.

Schefter Report — Schefter learned that a team keeps its old names. He'd been told to name one team per rumor and no more, and he was following it — right up until a tipster typed a name the team doesn't wear anymore. The list he checks against only had everybody's current names on it, so last year's names walked straight through, which is how a rumor about Balls Deep ended up dragging a former Cock Gobbler front office into it. Every name every franchise has ever answered to is on the list now, nicknames included. The callback itself survives, because it's funny: when a team's rename is still fresh, Schefter can nod at the old name — but he has to say the new one in the same breath, and he stops bringing it up entirely three weeks into the season. Dead Cap Walking will be hearing about Heavy Chevy until then. Every link Roger and Schefter drop in the group chat said the league's name twice. theleague.us/theleague/calendar. afl-fantasy.com/afl-fantasy/news. They worked — a redirect quietly cleaned it up on the way through — but you were reading the ugly version, and every tap paid for a round trip it didn't need. The folder name only exists so both leagues can share one site; on your own league's domain it's noise. Roger's countdowns, Schefter's Trade Builder invites, the Cut Watch and Gauntlet links, and the cutdown-deadline nags now all point straight at the clean address. The links also got pinned to the same address you actually browse, so they should stop occasionally opening you logged out.

Homepage — The standings cards on both homepages swapped team names for team logos. On a phone the team column was eating half the row to spell out names you already know by their crest, which squeezed the numbers you actually came for. Now it's the logo, and the records and points get room to breathe. Dark mode got the harder half of this problem: a good chunk of the league wears a black or near-black logo, and once the crest is the only thing naming the row, a black logo on a black card names nothing. Every crest was measured against the dark card, and the ones that failed now get a thin white outline traced around the logo itself — so Badd Boys and Da Dangsters and the rest stay readable at night without anybody having to redraw them. Teams that already have a proper dark-mode logo still just switch to it. Screen readers still read the team name, and if a logo ever fails to load the name comes back in its place. The homepage's "Explore" quick-links grid had the same cross-league leak as search — three of its eight tiles were quietly pointing at AFL pages (Rosters, Standings, Free Agents) instead of TheLeague's own, and clicking any of them dead-ended in a 404. The grid now only pulls from TheLeague's own page list. The homepage hero turned into a ghost on some phone loads — white headline, white countdown, white everything, floating on the plain gray page with no card behind it. The kickoff copy was technically all there; you just couldn't read a word of it, in light mode or dark. The hero paints its blue-to-navy gradient through a single CSS variable, and that one line is all-or-nothing: if the browser doesn't take the value, the entire background is discarded and the white text is left standing on nothing. Every hero on the site — kickoff countdown, cut watch, auction, breaking news, champion crowned, weekly recap — now paints a plain brand-colored panel first and lays the gradient on top of it. When the gradient shows up you get the same hero you've always had; when it doesn't, you get a solid blue (or red, or gold) card and copy you can actually read.

Rules — Reporting a wrong answer now actually reaches the Commissioner. When the report button shipped, hitting it wrote the report to the database and put a red banner on the card — which is useful if somebody happens to be looking at that card, and useless otherwise. Reports now ride the same weekly channel as Roger's own self-audit: a reported answer gets posted to the group chat the week it's flagged and opens a tracked item that keeps nagging until it's dealt with. There's also finally a way to mark one handled, which clears the banner for everyone once the rulebook and the answer agree again. Roger now tells you when he thinks he blew a call. His weekly self-audit had already caught the taxi squad blunder on July 27th — two days after the question was asked — and written a perfectly accurate diagnosis of it into a file in the repo, where it sat for seventeen days until the wrong answer got noticed in the group chat instead. The detection was never the problem. The delivery was: the job did its homework and went back to sleep. Now a flagged answer posts to the group chat the week it's found, so you know not to lean on it before Brandon rules. Repeat nagging stays on the commissioner's to-do list rather than your phone, and a quiet week posts nothing at all. The pinned League Office card explaining the 5th-year team option had the price wrong, and had it wrong since March. It said the option salary is the top 5 positional average. It's the top 10 — which is what the constitution has always said, what the rules page has always said, and what the site's own salary math has always calculated. Only the explainer was off. The likely culprit is that the Rookie Extension formula genuinely does use the top 5 positional average, the two rules sit next to each other, and they're mutually exclusive on the same player, so it's a very easy wire to cross. Different numbers, on purpose. If you did any 2026 first-rounder planning off that card, the option is pricier than you were told. Roger blew a call, and the constitution is why. Gridiron Geeks asked whether taxi squad players count toward the 20-player-under-contract minimum, and Roger said no — reasoning, quite confidently, that the taxi squad is a separate animal from the 22-man active roster. It is separate. That was never the question. The rule says 20 players UNDER CONTRACT, and a taxi squad rookie is under contract, which is exactly why he's eating half his base salary against your cap. Same for anyone parked on IR. The Commissioner has ruled: if he's signed to your franchise, he counts, wherever he's sitting. The rulebook now says so in plain English instead of leaving a chatbot to infer it, and Roger's test suite has a case for this one so he can't talk himself back into it.

Standings — Archived standings were showing the wrong divisions. Pull up 2015 and the site would group teams the way the league is organized TODAY — which is not how it was organized in 2015, or 2011, or 2008. Go back far enough and it got surreal: the 2007 season really had a Pacific, a Midwest and an Atlantic division, and the standings page was cheerfully sorting those teams into a Northwest and a Southwest that wouldn't exist for years. Twenty-one division races between 2007 and 2015 were showing a different winner than that team's own franchise page was — including the 2015 Central, the exact race we'd just spent a week proving belonged to the Amish Rakefighters. Every season now gets grouped the way it was actually played, straight from the league's own records, so the two finally tell the same story. Settled a tiebreaker argument nobody knew we were having. Both rulebooks list 'Most Points Allowed' near the bottom of the standings tiebreakers — the idea being that if you're dead even with someone and you had to survive a tougher schedule of beatings, that should work in your favor. The code read it backwards and quietly rewarded the team that gave up FEWER points. Now a team that allowed more points wins that step, which means both the better spot in the standings and the earlier draft pick. Fair warning: this has never actually decided anything. In 76 seasons of TheLeague divisions and 106 of the AFL's, no tie has ever made it that far down the list. It's fixed for the day one finally does.

Free Agents — The Free Agents page finally noticed the rookie draft happened. The 'Include rookies' filter stayed off year-round, so every undrafted rookie — guys who are legitimately sitting in the player pool right now — was invisible unless you flipped the checkbox yourself. The page now reads the draft results: before and during the rookie draft the class stays tucked away like always, and once the final pick is in the books, the leftovers show up by default. Clearing filters respects whichever default the calendar says. Ashton Dulin went to Malone University, a school so small ESPN doesn't keep a logo for it — and instead of shrugging, the Free Agents table rendered a broken-image icon and the school's full name, inflating his row to twice the height of everyone else's. Small-school players now get a tidy dash in the college column (the name's still there on hover). Bonus find while we were in there: the Ragin' Cajuns' logo had been pointing at Louisiana Christian University — a school with no logo either — since forever, so Louisiana products like Elijah Mitchell finally wear the actual fleur-de-lis.

Navigation & Routing — Search on TheLeague's site was pulling AFL-only pages into its results — type "keeper" looking for a rules question and you'd land on the AFL's Keeper Planner instead, a page that doesn't even apply to TheLeague's roster rules. The site directory is shared infrastructure across both leagues; TheLeague's search now only shows TheLeague's own pages.