<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel>
<title>Sporacle changelog</title>
<link>https://sporacle.app/changelog</link>
<description>Every release of sporacle.app, newest first.</description>
<item><title>2.0.0</title><link>https://sporacle.app/changelog/2.0.0</link><guid>https://sporacle.app/changelog/2.0.0</guid><pubDate>Fri, 02 Oct 2026 12:00:00 GMT</pubDate><description>Every page of the site is rebuilt from one set of design boards: the game pages, the rankings, the team pages, the player pages, the track record, and the site and tool pages. The value rankings that lived at /rankings/value/ are now the league chips on /rankings, and an old link takes you there. Before kickoff, a game's page shows our call, the projected score and margin with its range, a chart of how our number moved from run to run, each club's last three results, how often our calls at that percentage have hit, and the injuries and players already in the model. After the final it adds the score by quarter, the five biggest moves in our reading during the game, each player's actual fantasy points with the top three performers, and the market's closing margin and total, labelled as the market's and never as ours. While a game is being played, its page updates in your browser: the score, the score by quarter, our win probability charted through the game, where it stands, and the swings and leaders so far. A page you opened before kickoff turns live by itself, and at the final it reads as the page built after the game does. A game with no live feed says so and reads KICKED OFF; a feed that has sent nothing for three minutes is marked stalled while the page keeps reconnecting, less often the longer it waits; a game that went to overtime, a tie, and a game we published no call for each have a page of their own. The rankings open on one list across positions, ranked by value: a player's projection minus the last starter at his position, in a 12 team 1QB, Superflex, 2QB or Flex league, with each range drawn on one scale. The QB, RB, WR and TE pages add projected stats, the change since the last run and the injury report's status, and switch between standard, half PPR and PPR scoring. Twelve rows show first and the rest load 25 at a time. A star saves a player, up to 40, on this device only. My players lists them with the best lineup they make in the league you choose and who sits on the bench. Start or sit compares two players on the rankings page, and up to three at /compare, with their ranges on one scale and a sentence on why. The rankings, the position pages, /compare and search show a run exactly as it was published; the site ranks and values no one again. An edition published before projections froze at kickoff projected a player again after his game began, so it leaves those players out of all of them and out of the players ranked around a player, and the numbering keeps its gaps; everyone else shows exactly as that edition published them. On the rankings and at /compare a sentence below the run stamp says how many players are shown from before kickoff or left out, and where the players ranked around a player leave any out, its panel says so. Each player page shows this week's projection with its floor and ceiling, how sure it is, his projected stats in each scoring format, our record on him week by week against the box score, the rest of his season, how his rank moved from run to run, the players ranked around him, and his club's context. A questionable player, a player we did not project this week and a rookie projected from earlier rookies each have their own state, and an injury report filed after the projection is dated as such. Each team page carries the club's record, its rating with a chart of the rating through the season and a table of the same numbers for screen readers, the schedule with our call on each game, the games still to play, the standings, the injury report, this week's key players and the season so far. The roster has its own page, linked as Depth chart. The teams index lists all 32 clubs by division in rating order, each with its record and next game. Playoff chances, projected wins and injury impact say they are not published yet. The track record opens on its headline tiles, then how closely our percentages matched the results, the season week by week, how often the final margin landed in our range, and the player projections, with every call listed and tabs to filter and order them. Every week with calls has a page of its own, playoff weeks included, and each season's calls download as a CSV beside a copy of the published track record file. When the record cannot be verified the page shows the last verified one, and before anything is scored it shows last season's. About, Data, How to read, Privacy, Accessibility and this changelog are rebuilt, and the changelog has an RSS feed at /changelog.xml. A schedule at /schedule/ lists each week's games with our call, and exports the week as a CSV or a calendar file. A status page at /status shows what is published and when. An archived run's page shows that run exactly as published and says it has been superseded. A link to a game page shares an image of our call: the split, the margin and its 9 in 10 range. A link to an archived run's game shares a receipt of what that run said, with the final once there is one, and the track record shares its season's last nine scored calls. Amber warning text, such as Questionable and the imputed rookie marker, now reaches the 4.5 to 1 contrast minimum against the page and the cards in both themes; in light mode it had measured 1.75 to 1. Hovering a filled button, such as Start or sit, no longer makes it vanish. Small controls are easier to tap. The phone header's search, theme and menu buttons are 44px tall, and the save stars, load more, clear all, export, Hide and Explain take taps beyond their drawn size. Between 841 and 1199px wide, the game chart cut off its fourth quarter and the final; it now scales to fit its box. At 320px the score by quarter and the phone players table no longer push the page sideways. The header on a phone is one row now, 56px tall and pinned to the top of the screen as you scroll: the mark, search, the theme control and a menu control. The four sections of the site used to wrap to a second row and then scroll sideways, so on a 320px screen the longest of them sat off the side of the screen behind a swipe nothing announced. The menu control opens a sheet with those four sections in it, Games, Rankings, Teams and Track record, the one you are reading marked, each with a short status: the week for Games, QB RB WR TE for Rankings, 32 clubs for Teams, and how many of our scored calls have hit for Track record. Below them sit search, a Dark, System and Light choice, and links to the data sources, privacy, accessibility and this changelog. Escape closes it, so does a tap on the dimmed page beside it, and the keyboard stays in the menu while it is open rather than wandering onto a page you cannot see. On a phone the theme control is one moon button in the header that steps through dark, system and light and says which is on, and the menu sheet carries all three as a row. It used to draw all three of its icons at once, the moon, the monitor and the sun, which pushed the rest of the header off the side of a 360px phone. The footer now carries the whole site. On a wide screen the mark and a sentence saying what Sporacle publishes sit on the left, and three columns of links on the right: Product, this week's games, the rankings, teams, the track record and My players; Method, how we score ourselves, our publishing rules, engines and runs, data sources and the changelog; and Site, about, contact, privacy, accessibility and the status page. Below a rule sit the freshness dot with the time and id of the run the page was built from, the version, the copyright and a note that we are not affiliated with the NFL. A phone shows a shorter set of the same three columns. It used to be a disclaimer and three links. There are no social links, because there is no account to send you to. IND at PHI, a week 14 game, showed 40% and 61% on its game page, the week 14 games list and its archived week 2 edition, because each side was rounded on its own. That edition now reads 40% and 60%, and no pair the site prints can sum to 101 any longer. The published probability underneath is unchanged. After a score, a game's live percentage used to go blank for typically about five minutes, until the next snap. The live number now carries on through those minutes: after a score it is the model's reading of the kickoff that comes next, received by the team the rules give it to. At halftime it is the model's reading of the kickoff that opens the second half, received by the team that kicked the opening kickoff, which is the usual outcome, though a team can choose otherwise. In some moments there is still no live number until the next snap, for example between a touchdown and its extra point, once the ball has been kicked, and on a score the rules cannot read, such as a return on a try or a two point score the feed cannot tell from a safety. A game's forecast and its players' projections stay fixed once the game kicks off, whatever kind of run follows. A player's points in every scoring format, his floor and ceiling and his projected stats stay the ones we published before the kickoff, and the ranks and value lists are worked out around them. A player with no projection published before his kickoff is left out, rather than given one made after his game started. Once a game kicks off, every number on a player page is the one that stood at kickoff, and a final game's players panel and a team page's key players show that same projection. Where no run was published before the kickoff, they say Not published yet. The track record's biggest misses label each player with his rank in that same run, and with no rank where none was published before his kickoff.</description></item>
<item><title>1.9.11</title><link>https://sporacle.app/changelog/1.9.11</link><guid>https://sporacle.app/changelog/1.9.11</guid><pubDate>Mon, 21 Sep 2026 12:00:00 GMT</pubDate><description>A player's page now gives him the rank his own club's depth chart gives him, LT1 or FB1, where it could say only OL1 or a second RB1. The roster we publish carried one coarse position code per player, and DB, OL, LB and DL each cover several different jobs while fullbacks are filed with running backs, so a club's first back and its first fullback both read as its first running back and its five starting blockers all read as its first lineman. On the roster of 1,684 players this was first measured against, 1,057 shared a position and slot with a team mate and only the 622 who did not could be given a rank at all. The roster now carries the chart's own position beside the slot, so the rank is the one the chart states. On the roster published on 2026-09-21, where 1,216 of 1,721 players shared a position and slot and 500 did not, that labels 1,677 of the 1,721 and leaves 44 blank, which are the players the current chart does not list at all or lists in two places at once. Week 1's finished games now show the forecast we published for them, and whether each call was a Hit or a Miss. They used to print their final score beside a note saying the forecast was still to come, because every week page read the newest published run and that run no longer carries a week it has left behind. A past week now reads the run that priced it, and the page names that run. A game page shows the key players and the injury report for its own week only. A week 5 game used to list this week's players and this week's injuries as though they were facts about that game. Each panel now says which week the published set covers. A game page links the frozen published edition its forecast came from, where that edition's page carries the game's own week and so describes it correctly. Those archive pages were always built and nothing reached them. The archive files a forecast by the week of the run that made it, and a run prices weeks ahead, so the pages where those two disagree carry no link at all rather than a link to a page that would call the game a different week. A game that has not started no longer shows a 0 to 0 score while its page is open. The live feed reports zeros for a game it has listed but nobody has played, and we were printing them as a score. A club's record on a game page no longer doubles up when it changes while the page is open. The projection card stops saying &amp;quot;Pre kickoff&amp;quot; above a game that has started. What it says instead comes from when that forecast was published against that game's kickoff: &amp;quot;Published before kickoff&amp;quot; when it went out first, &amp;quot;Published after kickoff&amp;quot; when the game was already being played, and &amp;quot;Published forecast&amp;quot; when the timestamps cannot settle it. A player with no reported game status is no longer listed as injured with the word &amp;quot;None&amp;quot; beside their name. A player with no status but a practice report is still listed, and says &amp;quot;No game status&amp;quot;. The rankings tables say the same thing the same way, where they used to say &amp;quot;No designation published&amp;quot;. The Matchup row that counted injuries is now called &amp;quot;Ranked players out&amp;quot;, and its explanation says what it counts. It read zero beside clubs with several players ruled out, because it only counts players our published rankings carry, and we rank four positions. A player page with no projection now says the published edition does not rank them. It used to say they were too far down the depth chart, which we never measured, on 164 pages including healthy starters. The projection explanation no longer says every number was simulated by a model. A rookie with no usage history is projected from a draft class prior, and the source note beside the number says so. The footer's &amp;quot;Data sources&amp;quot; link now reaches the page that lists the sources. Each forecast publication now has its own address, so one no longer replaces the one before it. Every run of a week wrote to the same address, which is why a game page's headline number and the chart below it disagreed on 234 of 274 priced pages, why an archived edition could be rewritten after the fact, and why a game's forecast history kept only the first number of the week instead of every number we published. Nothing already published is changed or removed by this: from here on each publication stands on its own, and the site keeps pointing at the newest one. A player whose club has no game in a week is no longer given a projection for that week. Every player was projected whether or not his club played, so on a bye week a reader setting a lineup saw a number for a player with no game to play in. The first idle clubs of this season are in week 5, so nothing published so far was affected: on the current data the change removes 21 players in week 5, Patrick Mahomes and Travis Kelce among them, and none at all in weeks 1 to 4. A club's listed first choice player who has not recorded a statistic yet this season is ranked again, from his own usage last season and labelled as coming from it, rather than being absent until his first catch or pass. He had no row in this season's player data at all, so the model never saw him and he was missing from the rankings for as long as that held, even after returning to full health. On the current data this returns Michael Penix Jr. and Brock Bowers in week 5, where their injury reports no longer rule them out, along with four blocking backs and tight ends. Every club now publishes our rating of it, and the rating it carried into each week so far this season. All 32 read &amp;quot;Not published yet: our rating&amp;quot; before, because the rating the forecast already solves was never handed to the part of the pipeline that writes the team pages. The number is the one the forecast itself uses: how many points a club is expected to win a game by against an average opponent on a neutral field, read only from games played before the week it describes. A rookie is ranked only where his club's depth chart puts him among the players it actually fields at his position: one quarterback, two running backs, three receivers, one tight end. A rookie with no professional history is ranked from what happened to rookies drafted where he was drafted, and that figure describes a player who plays, so giving it to a rookie his club lists fourth claimed a starter's workload for a player his club does not field. On the current data this week, the number of rookies ranked goes from 35 to 2, and in week 5 from 34 to 1. The 33 who go include the two highest projected rookies of all, a second choice quarterback at 13.55 points and a third choice at 12.42, and they now carry no ranking rather than a number their club's own depth chart contradicts. Search finds every player the site has a page for, and a game result opens that game. It listed only the players the published edition ranks, 331 of the 1,684 on a club's roster, so four in five players with a page of their own could not be found by name. It also filed every game by the week of the run that priced it, and a run prices weeks ahead, so 240 of its 256 game results opened a page that was never built. A team result now opens that club's own page, with its schedule, its record and its depth chart, where it used to open the unfiltered rankings, and a club can be found by its city or its name as well as by its three letter code. Every page on the site is lighter, most of all the game pages: the heaviest went from 99,768 bytes to 92,971, and the shared stylesheet from 87,953 to 80,543. A quarter of a game page was the markers the build stamps on each element to keep one component's styles to itself, and there is a cheaper form of the same marker that changes nothing about how the page looks. /changelog now shows unreleased work, the newest release, and as many older releases as fit, with the rest one click away as they already were. It showed a fixed three releases however long they ran, and a release here runs from 726 to 18,978 characters, so the page had crept past its 68,000 byte limit and the only lever left was shortening sentences. It is 52,028 now, with this whole set of changes written into it. The track record shows the most recent week or two of calls in full, and every earlier week on a page of its own, linked from the main page with its call count and its hit, miss and pending split. It listed every call of the season on one page, which reaches about 250,000 bytes by week 18. Nothing is dropped and nothing is summarised: every published call still renders in full, and the accuracy, Brier score and log loss at the top still count the whole season. An archived edition now says which week the game it shows is played in, and which week's edition you are reading. An edition is filed by the week of the run that made it, and a run prices weeks ahead, so a page holding a week 6 forecast published in the week 2 edition called that game week 2 in its heading, its title and its breadcrumb: 2,224 of the 2,384 edition pages in a real build were labelled with a week their game is not played in. Because the page is now correct about its game whatever week it was published in, a game page links its edition again: 272 games of 321 carry that link, where 32 did. Sixteen archived editions carry a kickoff four hours earlier than the game was played, an Eastern time recorded as though it were universal time by a part of the pipeline that has since been corrected. The published edition is left exactly as it was published, and those sixteen pages now carry a dated note naming the time the schedule has for the game. The site publishes the archived editions it can show you, not one for every forecast ever published. Each publication now has its own address, about 38 a week, and a week page only ever reads one of them: on a real build the whole site resolved to two of the ten on hand. It keeps three of each week all the same, so a bad publication cannot take that week's forecasts off the site, and drops the rest. You lose nothing you could reach. The edition each game page links is kept, the chart of how a forecast moved reads a different file and is untouched, and an address that is no longer built now says so and sends you to that week's edition. An address for a published forecast edition the site no longer builds now says so. It used to reach the ordinary not found page, which says the address may be incomplete, and that is a claim about you rather than about us. The page now names what that address names, the matchup and the week of the edition, and links you to that week. It says what the address names and not that we published it, because an address is something anyone can type: a made up matchup gets the ordinary not found page instead. A source note now reads &amp;quot;Model engine2-0.2.0&amp;quot; instead of &amp;quot;Modelengine2-0.2.0&amp;quot;. The label and the version beside it were run together on every published number that carries one, 11,012 of them across 2,218 pages of a real build. A club's depth chart no longer carries an empty Season column, and its defensive linemen join the Defense group rather than forming one of their own below the specialists. The Season column was a heading above an empty cell on all 32 team pages, because no player in the published roster carries that figure yet; it returns on its own when one does. The accessibility statement is in the sitemap. It was built, linked from the footer and open to search engines, and missing from the one list that says which pages we mean them to have.</description></item>
<item><title>1.9.10</title><link>https://sporacle.app/changelog/1.9.10</link><guid>https://sporacle.app/changelog/1.9.10</guid><pubDate>Sat, 19 Sep 2026 12:00:00 GMT</pubDate><description>A tie now shows as a Miss on the games list too, where it showed no label before, and the game's own page now uses the same wording as the games list. Nothing changes for you yet. The track record now counts a tied game as a miss, at the confidence we had in the side we leaned toward, because we never predict a tie. No game has ended in a tie this season, so no figure on the track record changes. No published call changes either: this changes how a tie is counted, not what we said. A finished game now reads the same way everywhere: the games list, the game's own page, a game that finishes while its page is open, and the track record all say Hit or Miss with the confidence we had in the side we leaned toward. The Favorite won, Underdog won and Coin flip labels are gone, and the game page's result now names the side we leaned toward and our number for it. A tie now counts as a Miss, because we never predict a tie. It shows as Miss with our confidence in the side we leaned toward, and both clubs stay in the normal text colour, since neither won. A game that finishes while the games list is open now switches to the finished scoreline without a reload. The track record shows Hit or Miss with the percentage on every call, and a dated note explains the change to how ties are counted. No published call was changed. Nothing changes for you. The twice daily data refresh now reads the NFL data it depends on without the library whose maintainers stopped supporting it.</description></item>
<item><title>1.9.9</title><link>https://sporacle.app/changelog/1.9.9</link><guid>https://sporacle.app/changelog/1.9.9</guid><pubDate>Sat, 19 Sep 2026 12:00:00 GMT</pubDate><description>Nothing changes for you. The private assistant tools that read these forecasts now answer with a short readable summary, such as a rankings table or a game card with its win probability and ranges exactly as published, alongside the complete data they already returned. A finished game in the games list now reads as a scoreline: both clubs and the final score on one row, the winner in green and the loser in red, and a Hit or Miss label with the confidence we had in the side we leaned toward. A miss shows the number we were wrong at, so a 60% call that lost says Miss 60%, never the winner's 40%. A tie shows no label, because a tie has no winner. The game's own page still uses the older wording for close calls; bringing the two into agreement is the next change. In light mode, the status green and red are darker, so text in them is easier to read: the winner's and loser's names and scores on a finished game, the Hit and Miss labels, a team's W and L results, and error messages. The marks that use the same colours, such as the dot beside a player ruled out and the mark beside a note that data is current, darken with them. Small text needs a contrast of 4.5 to 1. Against white the old green measured 3.35 to 1, and against the grey of the selected game in the games list the old red measured 3.7 to 1. Both now measure at least 4.7 to 1 on every light background, and the red is clearly darker than the green, so a reader who cannot tell red from green still sees the winner and the loser apart. Dark mode is unchanged.</description></item>
<item><title>1.9.8</title><link>https://sporacle.app/changelog/1.9.8</link><guid>https://sporacle.app/changelog/1.9.8</guid><pubDate>Sat, 19 Sep 2026 12:00:00 GMT</pubDate><description>Correction, 2026-09-18: the week 2 player projections this site has shown since about 03:36 UTC on 2026-09-18 were wrong, and are replaced. They showed veterans at roughly a third of their usual projection, with Josh Allen at 7.0 points and two rookie quarterbacks ranked first and second. The model was reading every veteran as a player who took none of his team's snaps, because snap share for a week not yet played was left empty and then counted as zero. Veterans now carry the snap share from the weeks they actually played: on the 2026-09-18 data Josh Allen projects at about 20 points and Jared Goff at about 16. The replacement includes players whose games had already kicked off, Josh Allen's 7.0 among them, so those numbers change after their kickoff; this entry is the record of what they were. A second fault never reached this site's pages but did reach the rankings tool for assistants, which from about 15:35 UTC on 2026-09-18 returned 76 players instead of about 336: once Thursday's game was in the data, only that game's players and the rookies were projected. Every player who has played this season is projected again, along with rookies, and a player whose game has already been played is projected from the same weeks as before his kickoff; his own box score is never an input. A player who has not yet played this season is still not projected. Nothing changes for you yet. The twice daily data refresh behind every forecast now starts on the minute it is scheduled for. The old scheduler started the morning refresh as much as five hours and 39 minutes late in the last week, so news from overnight could miss the midday forecast update. Team chips in the rankings table are readable again in light mode. The text colour chosen for each club was always correct, but a table wide link style replaced it with the page's default ink, so dark club colours such as the Rams, Browns and Vikings showed near black text on a near black chip. Nothing changes for you yet. The injury report's format now has a place, and a matching status colour, for a player who is inactive or suspended, though nothing publishes either one yet. Nothing changes for you yet. Behind the scenes, the official weekly injury report is set up to retire a faster designation once it covers the same moment or a later one, and to keep every disagreement between the two for review. That starts only once the official report carries its own report times, which it does not today. The rankings page and the four full value ranking pages are much lighter to download. Every value in those tables still names where it came from and which version produced it; what each kind of source means is now explained once below each table instead of again in every cell. The player comparison page now offers the players our rankings tables publish, the top 50 at each position in any scoring format, instead of every ranked player, which made it one of the heaviest pages on the site. Player projections and game forecasts now use this season's games instead of only last season's. Rankings show players' full names, such as Josh Allen rather than J.Allen, so searching the site for a full name finds the player. Rookies already had full names; veterans had the short form that play by play uses. Nothing changes for you while the data is healthy. If this season's play by play or player stats ever fail to load again after games have been played, the twice daily data refresh now keeps the data it already had and raises an alert, instead of reporting success, so forecasts are not quietly rebuilt from last season's numbers. The track record claimed results through week 18 when only week 1 had been played, which the site's own checks reject, and it listed every forecast for a game not yet played beside the finished ones. It now counts a week once every game in it has finished, lists only games that have been played, and shows player projections for a finished week whose player stats have not arrived as waiting, rather than as players who did not play. A tied game now reads as a tie. The confidence tier no longer shows a count of calls not yet played, which could only ever read zero once unplayed games stopped being listed; a call on a game still to be played stands on its game card. A finished game's live win likelihood history on its game card now shows the last stretch of the game, its latest in game readings and the final result, rather than the final result repeated. The live service had been saving a fresh copy of every game's pregame number and final result on every update, more than two thousand copies for one game, and a history request returned only the newest of them.</description></item>
<item><title>1.9.7</title><link>https://sporacle.app/changelog/1.9.7</link><guid>https://sporacle.app/changelog/1.9.7</guid><pubDate>Tue, 15 Sep 2026 12:00:00 GMT</pubDate><description>Rankings no longer include a player who has been cut, placed on reserve, moved to the practice squad, or announced retired, though a player who is simply inactive for one game day still shows up, and a player just signed mid season with no roster history yet still shows up too. The track record now grades each game forecast on the call that stood at kickoff, the last one we published before the game started, and grades each player projection on the first one we published for that week, where player projections used to score nothing at all. And comparing two players who share a short name now returns every one of them, not a guess. Nothing changes for you yet. The server that lets assistant tools read these forecasts now updates itself whenever a fix ships, instead of waiting for someone to redeploy it by hand. Nothing changes for you. This is an internal step that keeps one current designation per player alongside the database that already records every sighting; nothing reads it yet. Nothing changes for you. The designation record kept by that same internal step now has a reader: the live score worker merges it into the game snapshot it already serves, both on its own schedule and on every request, so the two pieces are connected even though no page shows any of it yet.</description></item>
<item><title>1.9.6</title><link>https://sporacle.app/changelog/1.9.6</link><guid>https://sporacle.app/changelog/1.9.6</guid><pubDate>Mon, 14 Sep 2026 12:00:00 GMT</pubDate><description>Nothing changes for you. This is a new scheduled worker that only writes to an internal database; nothing it records is served anywhere yet.</description></item>
<item><title>1.9.5</title><link>https://sporacle.app/changelog/1.9.5</link><guid>https://sporacle.app/changelog/1.9.5</guid><pubDate>Mon, 14 Sep 2026 12:00:00 GMT</pubDate><description>A forecast you already saw for a game that has kicked off can no longer be quietly replaced by one of these new runs; the one you saw before kickoff is the one that stands. Nothing changes for you. This corrects two comments that explain how the site reaches live scores. Nothing changes for you. This is an internal measurement collector, not part of the site you read. Nothing changes for you. This is a maintenance job that keeps an internal lookup table fresh so player matching behind the scenes does not quietly go stale.</description></item>
<item><title>1.9.4</title><link>https://sporacle.app/changelog/1.9.4</link><guid>https://sporacle.app/changelog/1.9.4</guid><pubDate>Fri, 11 Sep 2026 12:00:00 GMT</pubDate><description>Nothing changes for you. These are two checks in the build gate, standing guard on two repairs that already shipped.</description></item>
<item><title>1.9.3</title><link>https://sporacle.app/changelog/1.9.3</link><guid>https://sporacle.app/changelog/1.9.3</guid><pubDate>Fri, 11 Sep 2026 12:00:00 GMT</pubDate><description>A fourteen point collapse used to rise about five pixels across the whole chart, so a real swing read as flat. The live game card's band is much taller now, states its own 0 to 100% scale, draws the club boundary, not a gap in the card colour, and carries a 50% mark and a labelled time axis from the opening drive on. Its labels rendered at about 5.4 pixels and measure 12, at 1280 pixels of width and at 375. The two clubs in that chart are never the same colour now, and the chart says which is which. On the dark theme the Rams and the 49ers measured 1.37 to 1 against each other, 464 of the 496 possible pairings sat below the 3 to 1 accessibility floor, 394 of 496 on the light theme we had believed was fine, and a rule that moves lightness and leaves each club's hue alone pulls them apart. The only key had been the percentage's colour beneath them, naming whoever is ahead, not a band; the caption says which club is the lower band and which the upper. Two things the live card stated were not true. Its percentage scale ran backwards against the band it labels: a club holding 66% had its boundary drawn where the gutter reads 34%, so a collapsing club drew as a boundary rising toward the 100% label. The boundary sits where the scale says now, a share filling from the end the scale calls 0. Second, once the lead changed the movement sentence measured against a percentage printed nowhere on the card: 54% beside a kickoff forecast of 60%, claiming a move of 14. It names the side it measures on now, as in &amp;quot;up 14 from LV 40% at kickoff&amp;quot;, so its two numbers subtract to the number it states. The score reads the same way everywhere on the card, away club first with both team codes; it used to appear twice in opposite orders about 40 pixels apart, reading as a contradiction. The header clock says Now, no longer confused with the times beside each score change, and the kickoff forecast is stated once, not three times, the freed space going to how far the live number has travelled since kickoff. A screen reader is told what the live card says. Everything on it is rewritten about once a minute, the card appears from nowhere when a game starts, and none of it was announced. The one sentence carrying the leading club, its percentage and how far the number has moved is read out politely on each update, once, as a whole; six regions would have interrupted three more times to repeat it. The chart's labels grow with your text size. A reader who has raised their default font size got a doubled score and ticker beside a chart whose labels stayed at twelve pixels; the axis and its gutter answer to the same preference as the rest of the card. Smaller repairs to the same card. A quarter marker landing early in the first half printed its label through the word Kickoff, one run of letters at a narrow phone width; the quarter guide marks are a shade more visible in both themes; the Live badge is a full size touch target, not a 43 by 26 pixel one; and a game whose feed carries only the pre kickoff number leaves no empty gap where the live figure goes. The facts on every game page refresh again: injury designations, the schedule and the team summaries alike. nflverse blanks this week's injury report timestamp instead of dropping the column, a blank value survived every emptiness check before raising an error partway through the build, and the cadence's broad safety net degraded that error to a note, so the published files kept their old contents and looked healthy while nothing advanced, and game pages showed no injuries though a full report had come in. The blank timestamp is read honestly now, and that kind of failure is logged loudly. Rookie rows now carry a number measured for the scoring format you are reading, not one half-PPR number copied into standard and PPR too. Kenyon Sadiq published 7.57 points in all three columns while a veteran like Trey McBride separated to 10.79, 13.89 and 16.98, ranking rookies too high in standard leagues and too low in PPR ones. The rookie cohort behind each projection already scored in all three formats, so standard and PPR read their measured median. Two more places where two clubs' colours touch are pulled apart the same way that card's chart was. A team page's schedule put your club's colour directly against the opponent's with nothing at all between them, and Philadelphia against Houston measured 2.82 to 1 there on the dark theme and 1.48 to 1 on the light one, against a 3 to 1 accessibility floor. A game page's forecast chart draws two curves that are mirror images of each other, so they cross whenever the favourite changes and they sit on top of each other whenever a game prices close to a coin flip; the Chargers against Denver measured 1.15 to 1. Both now use the rule that moves lightness and leaves each club's own hue alone. Four other places where two clubs' colours meet were measured in both themes and left exactly as they were, because a gap, a seam or a number already stands between them.</description></item>
<item><title>1.9.2</title><link>https://sporacle.app/changelog/1.9.2</link><guid>https://sporacle.app/changelog/1.9.2</guid><pubDate>Thu, 10 Sep 2026 12:00:00 GMT</pubDate><description>The live card on a finished game shows only the Final badge now, and its ticker always states the locked kickoff call, even when the game's minute by minute history cannot be reached. On the morning of 2026-09-10 a final page showed Live and Final side by side and a ticker with nothing in it; the locked call was on the card the whole time, so it is now stamped into the page at build and no longer waits on the network. A card with no locked call to state stays hidden entirely. A live game's win likelihood now survives a bad moment in the data feed. On opening night one malformed reading stopped the in game number mid fourth quarter and the rest of the game showed only the pre kickoff call; the poller now logs the failure in full and carries on, and gives up, visibly, only after ten straight failures. Two of opening night's games, the Rams' and Washington's, were missing from the live card the whole way through because the scoreboard feed spells their team names differently than our own forecasts do; both show up now. The trajectory a game traces during play is recorded again. On opening night the live history behind the in game card silently failed to save for the whole game, because the recording credentials never reached the poller; they do now, so a reader joining mid game sees the path so far and a finished game keeps its record.</description></item>
<item><title>1.9.1</title><link>https://sporacle.app/changelog/1.9.1</link><guid>https://sporacle.app/changelog/1.9.1</guid><pubDate>Thu, 10 Sep 2026 12:00:00 GMT</pubDate><description>During a game, the game page carries a live card: a two color ribbon that traces the win probability from our locked kickoff call to the game's current state, quarter by quarter, and a ticker of every scoring change with the model's number beside it whenever the live model was speaking. The ticker states score changes only, never invented play descriptions, because the live feed knows scores, not plays. After the final the card stays put as the game's record, and the projection card beneath it now says plainly that its numbers are the pre kickoff call. A game page opened before kickoff now notices the game starting: the live connection decision is re checked every minute instead of decided once at page load, and a connection that goes quiet mid game falls back to polling within three minutes instead of waiting for the network to admit the drop. Nothing changes on the site. This is a private, internal-only addition: a new server lets the team query the published forecasts and rankings directly, not a feature anyone visiting the site sees. Coming back to the site is faster: the styles and fonts your browser already saw are trusted for a year instead of being re-checked every four hours, because their filenames guarantee they cannot have changed. The numbers behind the forecasts refresh themselves twice a day. The rosters, injuries and results the models read now advance automatically every morning and again in the late afternoon instead of waiting for someone to run the update by hand, so afternoon injury news reaches the forecasts the same evening on most days, and the inputs stop depending on anyone remembering to run the update. The call you saw before kickoff is the call that stays up. A between-runs refresh that happened to start minutes before a kickoff could replace a game's published forecast with a fresh one computed after the game began; now the last pre-kickoff call is the one that stands. A flexed game's card shows its real kickoff. The corrected time from the scoreboard source now reaches the published card instead of the old slot nflverse still lists, and the freeze that keeps a published call standing after kickoff fires at the game's true start rather than the stale one.</description></item>
<item><title>1.9.0</title><link>https://sporacle.app/changelog/1.9.0</link><guid>https://sporacle.app/changelog/1.9.0</guid><pubDate>Wed, 09 Sep 2026 12:00:00 GMT</pubDate><description>Every page starts drawing sooner, the weekly rankings most of all: the small per-section stylesheets travel with the page now instead of each having to arrive before anything could be drawn. Nothing changes on the site. These are research measurements of the game forecast and player projection models, and no published number moves. During a game, a team's win probability falls back to the pre-game number, labelled as a prior, whenever the live scoreboard does not say which team has the ball, instead of publishing a figure computed as though the away team had it: a guess presented as a reading. The changelog page opens at a readable length. The newest releases render in full, and every older release keeps its own page, one click away from the list at the bottom. Searching for weekly fantasy football rankings or a side by side player comparison lands better: the rankings and compare pages name what they are in their titles and descriptions, matched to how people search for tools like these. Nothing on the pages themselves changes. A new page explains how to read the site's numbers: what a published likelihood, margin range, and projection mean, what calibration is, and why being right about how often we are right is a stronger claim than being usually right. The track record page links to it.</description></item>
<item><title>1.8.4</title><link>https://sporacle.app/changelog/1.8.4</link><guid>https://sporacle.app/changelog/1.8.4</guid><pubDate>Thu, 27 Aug 2026 12:00:00 GMT</pubDate><description>Clicking a different game updates the players and injuries panels beside it. They kept showing whichever game the page was first served with, so reading the Ravens at Colts forecast came with New England and Seattle player names and injury designations in the column next to it, attributed to two clubs not in the game being read. A ranked player is shown at the club he is rostered on in the published artifact itself, not only on the site. The rankings took the club a player last PLAYED for, which names the club he left until he takes a snap for the new one. On the week 1 artifact that was 108 of 591 ranked players, Kyler Murray among them, ranked at Arizona while the published roster had him at Minnesota.</description></item>
<item><title>1.8.3</title><link>https://sporacle.app/changelog/1.8.3</link><guid>https://sporacle.app/changelog/1.8.3</guid><pubDate>Thu, 27 Aug 2026 12:00:00 GMT</pubDate><description>A game's players panel no longer prints player names on top of the position rank beside them. The two teams stack when the panel is too narrow to hold both side by side, so every name reads in full instead of colliding with the column next to it. The navigation links, the week chips, the team badges on a game card and the skip link are all easier to hit on a phone. The marks themselves are unchanged; the area that responds to a tap is bigger. The track record page opens at a readable length. Published calls are grouped by the week they were made, newest first, and a week opens as soon as it has a result to show. Before the season starts every published call is still awaiting its game, so the weeks begin closed and each states its own count of calls, hits, misses and results still pending. Nothing is removed from the page: every call is one click away, and still found by a browser's own find on the page. The weekly rankings page is shorter. The overall value table shows its top 25 and links to a new page carrying the complete list for that lineup format, the same way each position's table already links to its own page. Nothing on the site drags sideways any more. Every wide table, the rankings, the value tables and the published game calls, becomes one card per player or per row on a phone instead of a grid you had to scroll across. The rankings table alone was 1280px wide in a 351px window, so about a quarter of a row was visible at a time. No column was dropped to make this fit; they are stacked, and each names itself. The week strip fades out on its right, so it is clear the weeks carry on past the side of the screen. The navigation wraps to a second row on a narrow phone instead of hiding the last link off the side behind a sideways drag nothing advertised. The footer states the year. The rankings table fits the page now at every width, not just on a phone. Its columns were split evenly, so Rank was handed 157px to print &amp;quot;QB1&amp;quot; while the floor to ceiling band, which needs 258px, was squeezed into the same 157px. The columns are sized to what they hold, and the table no longer reaches wider than the page it sits on. On a phone a ranking now reads as four short rows, the player and their rank, the projection beside its band, and the projected stats. The first version of this stacked every column as a labelled field and ran to 312px per player, which read as a form rather than a ranking; it is 181px now, and a row no longer says &amp;quot;No designation published&amp;quot; when there is nothing to say. The forecast history table is gone from the game page. It listed the same published points the drift chart above it already plots. The run id that table carried moves to the published stamp, so the page still names the run every number on it came from. The Week 1 cold start notice is gone from the rankings pages. A ranked player is shown at the club the published roster has him at. The rankings carry a club of their own, but it is the club a player last played for, so before a season's first game it names the club he left: on the week 1 artifact that was 108 of 591 ranked players, Kyler Murray among them, ranked at Arizona while the published roster has him at Minnesota. The club now comes from the roster, which is the channel that knows it. No table cell is cut off any more, at any screen size. A source mark carries a detail string beside its label, and the badge it is drawn as refused to wrap, so at a table's column width the mark ran past its cell and the cell clipped it: a provenance mark that exists to be read was in the page and not on it. It wraps now, and the wide tables carry column widths and a middle step that fit their container instead of splitting it evenly. The forecast chart on a game page reads against a scale. Dashed marks at 25%, 50% and 75% sit behind the two clubs, with the even-money mark drawn a step stronger, so a published 58 can be placed against how likely that actually is instead of floating in an unscaled box. Both clubs are now drawn as solid curves that bend gently through the forecasts we published. One club used to be drawn broken, which read as a lesser reading rather than the other side of the same game; each is told apart by its own colour and the label at the end of its run. The forecast heading puts a space between each club and its percentage, which had been running together as &amp;quot;Seahawks59%&amp;quot;. On the forecast chart each reading is written on the outside of its own club's run, above when that club is the one on top and below when it is not. They were pinned, one always above and one always below, which only held while the home club led: once the other club went ahead the numbers were written across the wrong run, across the dots, or across each other. Two forecasts a fraction apart now still read cleanly. Every bar on the site is rounded to match the cards around it. They were drawn inside artwork that scales width and height by different amounts, so the rounding came out stretched and the ends read as almost pointed. A game's projection card lays its two clubs out one per row wherever the card is too narrow for three columns, which on a game page is every screen size, not just a phone. The card sits in a column about 416px wide even on a large display, so the club badge, the name and the record had been wrapping into three rows apiece at two different heights. A game's matchup card no longer repeats the same absence six times. Before a season's first game every season to date row is empty for both clubs, so the card printed &amp;quot;season to date unavailable&amp;quot; once per row beneath a heading promising a comparison. Those rows stand down now and one sentence names them, while the rows that do carry something, the road and home record and the injuries that matter, keep the card. The row of buttons at the top of a game page carries only sections of that page now. Players and Injuries have gone: both pointed at panels that sit beside the reader on a wide screen and directly below on a narrow one, so each offered a trip to something already in view. A preseason game has no section of its own and carried those two alone, so it carries no row at all now. Pressing Forecast reaches the forecast chart. It pointed at the projection card, which is the first thing in the article, so the one button a reader would press to reach the chart barely moved the page and read as broken. The buttons also run in the order the sections appear; Forecast came first while the matchup card sat above it. Clicking a different game updates the players and injuries panels beside it. They kept showing whichever game the page was first served with, so reading the Ravens at Colts forecast came with New England and Seattle player names and injury designations in the column next to it, attributed to two clubs not in the game being read.</description></item>
<item><title>1.8.2</title><link>https://sporacle.app/changelog/1.8.2</link><guid>https://sporacle.app/changelog/1.8.2</guid><pubDate>Tue, 25 Aug 2026 12:00:00 GMT</pubDate><description>The rankings table now shows what a projection is made of: for a quarterback, the passing attempts, yards and touchdowns behind the number; for a running back, carries, rushing yards and touchdowns; for a receiver or tight end, targets, receiving yards and catches. The rankings band is named in plain words. It reads &amp;quot;floor to ceiling&amp;quot; rather than a pair of statistical percentiles, and the page says what the bar and the tick actually are. A rankings page shows the top of a position rather than every player at it, and says how many there are in total, so the page states its own depth instead of running to hundreds of rows. Where a projection came from is stated once above each position's rankings table instead of on every row, and the rows that differ are marked. The full detail for any one player stays on that player's own page. A rankings page's top rows are the top in every scoring format, not just the one showing when the page loads. Switching between Standard, Half PPR and Full PPR can reorder the visible rows, but it can no longer reveal a player who was not even sent to the page a moment before. A search result now opens a page that actually has that player on it: their own page when they have one, otherwise that position's rankings. If a row still is not on screen there, the page says so plainly instead of quietly scrolling to nothing. The marker on a rankings row now checks its floor, its projection and its ceiling together, not one of the three alone, so a row whose sources genuinely disagree is marked instead of sitting unmarked beneath a sentence that says every unmarked row shares one source. A row marked only because its sources disagree, with nothing on it actually filled in, gets its own distinct marker rather than being called imputed. The sentence above each position's rankings table, and the site's own explanation of it, now describe exactly what that table shows, a row marked imputed or mixed, rather than a broader claim about every player's provenance across the whole site. The saved players filter now tells apart having saved nobody yet from having saved players who simply are not among this page's rows, instead of showing the same empty message either way. A player's floor to ceiling bar is drawn to the same scale wherever that position appears, so the same player's bar is not narrower on one rankings page than another. The longest player names, and the imputed or mixed marker beside them, no longer get cut off in the rankings table; long names truncate the same way every other cell already does. Every team page links to all 32 clubs, grouped by conference and division, so you can reach any other club without going back to an index. A team's header states its Record, Home and Away splits, and the division it plays in, instead of a bare name and a breadcrumb. The rating panel says what its number means, &amp;quot;points better than an average team,&amp;quot; and states plainly that there is nothing to show yet rather than an empty chart. Every schedule row shows the published forecast as a two-sided bar in each club's own color, or says plainly &amp;quot;not forecast&amp;quot; when a game has not been priced. The list shows the first eight games and says so, with the real total count alongside it. A team's roster is a real depth chart: each player's own depth slot, sorted so the starter comes first at every position. A player's projection band says floor, projection and ceiling instead of p20, median and p80, with a sentence explaining what the gap between them means: uncertainty, not a big game on the way. A player's header names the position and club, and the position rank carries a real label instead of a bare code; the scoring table names Standard, Half PPR and Full PPR to match. A player's peer list carries each nearby player's club and projection, not just a rank and a name, so you can see how close the next player along really is. The icon in the browser tab is the current one. The site offered its icon only in a format many clients do not read, and the address those clients ask for instead returned nothing, so they kept showing a copy saved before the colours changed. Google's icon service was still handing out the old amber mark weeks later, on every device, and clearing a local cache could not replace it. The site now offers the icon in the formats those clients ask for, including a home screen icon for phones. Games we call at 65 percent or better now carry a mark, and it links to a page showing how those calls have actually done. The page starts at nothing and fills up as the season is played, because the only record worth showing is one you can check against games we called in advance. Nothing else changes on the site. The forecasts, the numbers and the bands are the ones that were there yesterday. Nothing changes on the site. This is a research plumbing fix in the player projection model, and no published number moves.</description></item>
<item><title>1.8.1</title><link>https://sporacle.app/changelog/1.8.1</link><guid>https://sporacle.app/changelog/1.8.1</guid><pubDate>Sat, 22 Aug 2026 12:00:00 GMT</pubDate><description>Every player's page, and every team's squad list, actually appear on the published site. The pages were built and linked correctly, but the published build never downloaded the roster file they read from, so each club's squad came up empty and no player page existed at all. Nothing about the pages themselves changed; they can now find their data.</description></item>
<item><title>1.8.0</title><link>https://sporacle.app/changelog/1.8.0</link><guid>https://sporacle.app/changelog/1.8.0</guid><pubDate>Sat, 22 Aug 2026 12:00:00 GMT</pubDate><description>Team colors are more distinct on both the light and dark themes. A few clubs used to render a chip identical to another club's (Denver's orange next to Cincinnati's, the Rams' navy next to Dallas', Seattle's navy next to New England's); each of those now shows its own separated shade a reader can actually tell apart, and every chip stays legible against the page's own text color. Every graphic that names a team now draws in that team's own color instead of the site's single accent color: the win probability bar, the projected margin range, the finished game's outcome ladder, the forecast drift chart, and a team page's own rating history chart. The margin range splits at an even matchup and colors each side by whichever team it favors, instead of one shade covering the whole range. The drift chart now traces both teams' probability across every published run, each in its own color, instead of drawing only the home team's. The week strip covers all four weeks of the preseason instead of one combined week. Week 1 is the Hall of Fame game on its own, and weeks 2 through 4 each get their own page, matching the league's own schedule instead of folding a full slate down to a single chip. A game's broadcaster is a link to that broadcaster's own site, wherever we can vouch for the address. A local station or a team's own preseason feed still prints as plain text rather than guessing where it streams. The key players panel names what its own numbers mean: a column heading names the position rank, and another names the projected points, so a rank like &amp;quot;QB9&amp;quot; and a projection like &amp;quot;17.6&amp;quot; are no longer left for a reader to work out alone. A team's schedule row for a game that has not been played yet no longer uses the site's own highlight color; it reads in the same neutral gray every other not-yet-known figure on the site already uses. Team labels at the end of the forecast drift chart are easier to read: each one sits in a small colored chip with readable text on it, instead of colored text placed directly on the card, which was too faint to read for many clubs. Every remaining week of the season now carries a live forecast, not only this week and next. A game far off on the calendar shows a real number as soon as the season starts pricing it, instead of a skeleton waiting for the season to reach it. A far week's forecast shows exactly the history it has, as short as that is, rather than stretching or padding it to look like a full season of updates, and says how old its last number is once a later run has moved past it, in the same words the site already uses for a published stamp. The Arizona Cardinals page lists its roster again. The published roster file names that club by a code the site did not recognise, so the page had been showing an empty squad while every other club showed a full one. Every rostered player now has their own page: team, jersey number and depth chart slot, plus a projection for the players our model ranks, including a rookie with no NFL games logged yet, whose projection is labeled as an estimate built from a cohort of comparable rookies rather than their own history. A player at a position we do not model, or one too far down the depth chart to make this edition's ranked list, still gets a page that plainly states which of those is true instead of a number. Rankings rows, a game's key players list and a team's roster page all link straight to it. Rankings pages show all six position tabs together (QB, RB, WR, TE, DST and K); QB, RB, WR and TE each carry the actual count of players ranked there. DST and K stay in the row, dashed and marked not ranked, rather than vanishing from it, with a plain explanation on request: we built a defense ranking, tested it, and it beat guessing, but beating guessing was not enough to clear the bar we set for publishing it. We have not built a kicker ranking at all, and it will face the same bar when we do. Switching a rankings page between standard, half point per reception and full point per reception scoring now reorders every row to match, not just the printed number. Two players can genuinely trade places between formats, and the table now shows it. A ranked player's projected range, floor to ceiling, now fills in their own team's color on the rankings table, matching the win probability bar, the projected margin range and every other team graphic already colored this way. A player's floor to ceiling range on a rankings table, or on the player comparison page, now shares one scale with every other player in that same table or comparison, so a wider range actually reads as wider. Before this, each player's own range always filled its own full width, so the 231st ranked receiver at a position drew exactly as wide as the best. Each table now also states the scale's own maximum in its caption.</description></item>
<item><title>1.7.4</title><link>https://sporacle.app/changelog/1.7.4</link><guid>https://sporacle.app/changelog/1.7.4</guid><pubDate>Sat, 22 Aug 2026 12:00:00 GMT</pubDate><description>Every week of the season is reachable from the week strip, including the four playoff rounds. Those rounds have no games yet, because who plays is decided by the regular season, and the page says so rather than going nowhere. Weeks that have fixtures but no forecast already listed them, and still do. The research note about what these numbers are, and are not, now sits once at the foot of the page instead of twice on it. It is still on every page.</description></item>
<item><title>1.7.3</title><link>https://sporacle.app/changelog/1.7.3</link><guid>https://sporacle.app/changelog/1.7.3</guid><pubDate>Sat, 22 Aug 2026 12:00:00 GMT</pubDate><description>Nothing on the site changes. This is a maintenance release that moves the data pipeline onto current patch versions of libraries it already used.</description></item>
<item><title>1.7.2</title><link>https://sporacle.app/changelog/1.7.2</link><guid>https://sporacle.app/changelog/1.7.2</guid><pubDate>Fri, 21 Aug 2026 12:00:00 GMT</pubDate><description>Every club now reads as itself. A team's colour is one the club actually publishes, and clubs no longer pile onto the same colour, so a colour on a chart mostly says which team it belongs to. Where a club's main colour disappeared against a dark page, it takes another of its own colours rather than a washed out version of the first. A few pairs genuinely publish the same colour as each other, and we leave those sharing it rather than inventing a difference. The site's own highlight colour moved off gold, because ten clubs publish a gold close enough to it that a team's colour and a button could look the same. An injury tag no longer borrows it either. A few charts still draw with it and will move to team colours as those pages are rebuilt. Injury labels are readable in light mode, where one of them had been printing in a colour too pale to read against the page.</description></item>
<item><title>1.7.1</title><link>https://sporacle.app/changelog/1.7.1</link><guid>https://sporacle.app/changelog/1.7.1</guid><pubDate>Fri, 21 Aug 2026 12:00:00 GMT</pubDate><description>A result now actually moves the games that follow it: team ratings absorb a confirmed final within about a minute, so the late afternoon games reprice off the early ones. Kickoff times are correct, so a game's number freezes when it kicks off rather than hours before, and the live percentage disappears when the game does.</description></item>
<item><title>1.7.0</title><link>https://sporacle.app/changelog/1.7.0</link><guid>https://sporacle.app/changelog/1.7.0</guid><pubDate>Thu, 20 Aug 2026 12:00:00 GMT</pubDate><description>Numbers now move the moment the league does: a Sunday afternoon result reprices the later games within minutes, next week's games get their first numbers the same evening, and during a game you see a live win probability updating as it is played. What we said at each kickoff is kept and scored on the track record, unchanged, forever.</description></item>
<item><title>1.6.2</title><link>https://sporacle.app/changelog/1.6.2</link><guid>https://sporacle.app/changelog/1.6.2</guid><pubDate>Thu, 20 Aug 2026 12:00:00 GMT</pubDate><description>Preseason games are on the board with live scores. Every team name opens its team page: record, rating, schedule with our calls, roster and injuries. The game page reads in three columns and the forecast charts are always visible.</description></item>
<item><title>1.6.1</title><link>https://sporacle.app/changelog/1.6.1</link><guid>https://sporacle.app/changelog/1.6.1</guid><pubDate>Thu, 20 Aug 2026 12:00:00 GMT</pubDate><description>Live scores and records now actually reach the page. The feed the site listens to was refused upstream and had never delivered a single update; it is unblocked.</description></item>
<item><title>1.6.0</title><link>https://sporacle.app/changelog/1.6.0</link><guid>https://sporacle.app/changelog/1.6.0</guid><pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate><description>The home page is now this week's games, each with the forecast, the range, records and where it streams. Tap a game to see the number explained in plain words and how it moved during the week. Scores and records update on the page within about a minute during games, with the time we confirmed them. New typeface and rounder cards across the site.</description></item>
<item><title>1.5.1</title><link>https://sporacle.app/changelog/1.5.1</link><guid>https://sporacle.app/changelog/1.5.1</guid><pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate><description>This changelog page. The version in every footer links here.</description></item>
<item><title>1.5.0</title><link>https://sporacle.app/changelog/1.5.0</link><guid>https://sporacle.app/changelog/1.5.0</guid><pubDate>Wed, 19 Aug 2026 12:00:00 GMT</pubDate><description>Nothing user-facing. This is the first tracked release.</description></item>
</channel></rss>
