Bug Fix

Weekly Fixes & Polish (Aug 18-24)

21 bug fixes and style improvements across calendar, live scoring, import rankings, rosters, and more.

The Full Story

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

Calendar — Doubleheaders were being pushed too early in the season. The maths that splits them between the start and the end subtracted the fixed Week 1 game before halving, which quietly shrank the late half — four past seasons ended up with doubleheaders stacked in Weeks 1 to 3 while bye-free weeks at the end of the season went unused. The schedule builder could not cope with a season of a different length or a different division structure — it assumed 14 weeks and today’s divisions and gave up outright on anything else. Replaying the last fifteen years of NFL bye calendars found ten seasons it could not schedule at all. It now works the shape out from the format instead of assuming it. Schedule Release Day can no longer publish a schedule that missed a goal it could have hit. The lock previously checked only for structural breakage, so a season could leave a bye-free finale unused or decide a division race in September and still go live. Goals that were genuinely unachievable that year are still reported and still publish. The Schedule Builder now says plainly that it is a preview. It runs a shortened search so the page loads in time, while the release job runs a far longer one and produces a different schedule — and the page had been offering a copy-to-clipboard button as though the two were the same. The AFL's Schedule Release page had counted down to zero on August 16 and then just sat there. The countdown was right; the reveal behind it was never locked, so there was nothing for the page to show and Schefter's release-day column had nothing to announce. The reveal is locked now, drawn from the schedule that is actually live in MFL rather than from an older draw of it that nobody is playing — 204 games, doubleheaders in Weeks 1, 2 and 12 with none of them on an NFL bye, and all 84 division games that can clear a bye week clearing one. The four games to circle are on the page, and Schefter's breakdown is in the feed.

Live Scoring — Live Scoring stopped sliding sideways in a week with no games. Open it before kickoff and the empty "Scores will appear here when games begin" card ran wider than the phone, so the page scrolled horizontally with nothing to scroll to — the card's right edge parked just off screen, and a stray gray-and-blue bar sat along its top looking for all the world like a scrollbar. That bar is the win-probability split every real matchup card wears; with no matchup behind it there was nothing for it to show, so it's gone from the empty state, and the card now measures itself the same way the scoring cards do and fits the screen. The board behind it also stopped overflowing by a hair on the narrowest phones. Open a matchup on your phone and the little "Tracking · updated 37s ago" line — the one that proves the scores are still coming in — sat a full step to the left of the "All matchups" link right above it, hanging off the edge of the card like it had fallen out of the header. The header is one row that wraps on a narrow screen, and the indent had been attached to the back button instead of the row, so the moment the status dropped to its own line it lost the indent with it. The row carries it now, so both lines start at the same place — and on a wide screen the back link finally lines up with the team names below it too. A couple dozen players — D'Andre Swift, Tony Pollard, Cameron Dicker and three other kickers among them — were missing the id that links them to ESPN, so they quietly showed no box-score line on Live Scoring and went uncredited on their own touchdowns. All of them resolve now, and a test keeps it that way. On a phone, the two sides of a Live Scoring matchup never quite agreed on where a player's points sat — a name that wrapped onto a second line pushed its score down a hair, a name that didn't left it where it was, and the two columns read as slightly out of step all the way down. Worse on a narrow phone, where a name like Mike Washington Jr. needs three lines and drops that score a full line below his opponent's. Both sides of a matchup now share their rows outright, so a longer name, a wrapping box-score line, or a red-zone flag grows the row for both players at once and the numbers stay level. The box-score detail also moved below the score line rather than above it, which is where you'd look for it. Open the Bench on a Live Scoring matchup and the only thing telling you whose bench you were reading — the team name over each column — was the smallest text on the screen, a muted little label losing a shouting match with sixteen player names set larger than it was. The crest beside it was 16 pixels, roughly the size of the helmet logos tucked next to each player's game time. Both now read as a header: the team name in the display face at the same size as the players underneath it, over a 32-pixel crest you can identify at arm's length. Same two columns, same order, but you can tell at a glance which one is yours.

Import Rankings — The My Rank panel — the one where you set how much each ranking source counts — was taller than a phone screen, and it was anchored to the bottom, so everything it couldn't fit got pushed off the TOP. The title went first, then the X. An owner with nine sources loaded opened it, found the rows running past the edge with no way to scroll them back, and couldn't close the thing either. It now measures itself against the part of the screen you can actually see rather than the taller one your browser reports when its address bar is hidden, so the header and the Done button stay put and the list of sources scrolls between them. The Actions column on Import Rankings had drifted out of line with its own header, and the Average Rank row trailed a stray horizontal rule off to one side. Both are back in the grid where they belong.

Rosters — Player news in the player pop-up had no expiration date. Open a quiet backup and ESPN would happily hand back three stories from a season and a half ago — a training-camp battle he lost in 2024, presented with the same confidence as this morning's injury report. News now ages out: one month during the season, when a three-week-old note is already two depth charts behind, and three months in the offseason, when a June signing really is the freshest true thing about a player. And when there's genuinely nothing to show, the section stops holding open a tall empty box under the heading — it collapses to a single line telling you nothing turned up in the last 30 (or 90) days, so you know the search happened and came back empty instead of wondering whether it ran at all. Washington players had been quietly missing from their own games on Set Lineup. Every other roster spot told you who its player was up against that week; a Commanders player told you nothing — no opponent, no defensive matchup ranking — as if the week had forgotten him. Two halves of the app had been spelling the team differently, WAS on one side and WSH on the other, and a lookup that has to match exactly never did. They speak the same way now, and Washington's players get their week back like everybody else. Every row on Set Lineup tells you the game that player is walking into, and every one of them had the opponent's helmet parked out front with the words trailing behind it in a gray faint enough to read like a disclaimer — you had to lean in to tell a home game from a road game. The crest now sits inside the phrase, right after the vs or the @ where the team's name belongs, and the whole thing is in full-strength text like the rest of the row. Your starters and your bench also spell the opponent out now instead of leaving you to identify a 16-pixel logo on your phone: "vs LAC" beats a squint. Starters, bench, and the list of eligible replacements all read the same way, which they did not before. Set Lineup had two ways of losing your lineup on a future week, and an owner caught both in the same sitting: week 12 came up with nine empty slots and week 14 came up with nine players named 'Player 13592'. The names were the easy half — every page view re-asked MFL for the whole player file, and when that call got throttled the page had nothing left to print but the ID, even though the same names are sitting in a feed on our own disk. The empty week was the same throttling hitting the roster call instead. But the real find was underneath: the page asked MFL for your saved lineup with a request MFL has never accepted — myStarters is an import, not an export — and the error was swallowed, so it silently fell back to filling the slots with whoever projects best. That means it has never once shown you a lineup you submitted. It does now, for any week, and when there's genuinely nothing on file for that week it says so instead of dressing up a projection as your lineup. The franchise crest on a player modal's header was sitting directly behind the headshot, which left you looking at its edges. It is now about twice the size and offset to the left, so it tucks behind the player with most of the logo showing.

Rankings — The ranking columns on Free Agents finally look like they belong to the same table as everything else. Their headers are built on the fly once your board loads, and they had been missing the styling every other header gets — so "My Rank" and "FBG ®" came in oversized, mixed-case, and folded onto two lines on a phone while AGE, EXP and DRAFT sat neatly on one. They now read small, uppercase and gray like their neighbors, right-aligned over their numbers, and each title stays on a single line no matter how narrow the screen gets. Same fix in TheLeague and the AFL.

Other — The Computer Jocks finally have a real night look. Their crest was surviving dark mode on a generated green outline — a ring the site draws around any logo too dark to read on a dark card, which keeps a logo findable but is a floor, not a design. Somebody sat down and drew the thing properly instead: the lifter and the CPU wordmark redrawn to glow on black, ring baked into the artwork. It's the same file in both leagues, so the defending champs look identical whether you're reading TheLeague or the AFL, and the borrowed outline is gone from both. The GroupMe avatar got the matching cut while we were in there.

Schefter Report — Schefter dropped a Pecking Order on the AFL in the middle of August, ranking a season that ended in December. The column runs every Tuesday year-round and it knew to sit out the offseason — it just had no idea it was the offseason. Its season clock rolls at Labor Day, so from February until then it still answers '2025', and the last completed week of 2025 is, unhelpfully, always available. The only thing that had kept it quiet all summer was that every past week already had a column on file; the first gap in the archive is what let it write one and buzz everybody's phone. It now checks that the season it's about to rank is actually being played, so the earliest column of any year is the Tuesday after Week 1, and the stray August issue has been pulled.

Design System & Theming — Hover a day on the Owner Activity chart in dark mode and the readout came up white text on a near-white box — legible only if you already knew what it said. The chart's tooltip was pinned to the darkest gray in the palette, and that palette flips in dark mode, so the "almost black" it asked for resolved to almost white while the text stayed white. It's now the same raised card surface the rest of the site uses, which fixes a quieter problem in light mode at the same time: the team dots in that readout are tuned to stand out against a card, so on the old dark chip the darker-jerseyed teams were dots you couldn't see.