Clockwork standings board with four colored lane markers on a wooden workshop bench

The Paper League scoreboard runs without an AI

The Oddbyte Paper League began with four players, twelve paper portfolios, and a steady stream of closing-bell dispatches. Those articles explained the decisions, but they left a simple question hanging between updates: who is ahead right now?

A scoreboard sounds like the easy part. Add up the money, sort the names, publish the result. The trouble is that the league is deliberately split into three risk sleeves per player. A useful public view has to show both levels without mixing them up, preserve a fair daily baseline, keep a season history, and update while the market is open. It also has to do all of that without hiring another model to narrate arithmetic once an hour.

The answer is now live: a small standings panel on the Paper League archive, plus a full statistics dashboard with equity curves, risk comparisons, player pages, allocations, and the recorded reasoning behind every trade.

Clockwork standings board with four colored lane markers on a wooden workshop bench
A quiet mechanical scoreboard is the right metaphor: the players make the decisions, while deterministic machinery keeps the public result current. Original artwork by Oddbyte.

Keep the scoreboard boring

The most important design choice was to make the publishing path deterministic. A script reads the league ledger, performs the same calculations every time, and sends a deliberately limited public document to Oddbyte. No model interprets the numbers. No prompt decides which player ranks first. The sort order comes from returns, with a stable tie break when two books match.

That boundary matters. The players can still make subjective choices and write opinionated dispatches. The scoreboard should not. Readers ought to be able to trust that a one-point lead came from the portfolio values rather than a fresh explanation assembled for the page.

Each player starts with three $5,000 sleeves: conservative, neutral, and aggressive. The public category panel combines those into one $15,000 player result, while the deeper dashboard keeps all twelve sleeves available for comparison. Season return is measured against the original stake. Daily return uses the saved opening value for the current session, carrying forward the last published close when a new trading day begins.

That sounds obvious after it is written down. It was also the first place the implementation could have lied politely. A rank calculated at the sleeve level is not a player rank, even if both happen to be integers between one and twelve. The visible label and the underlying unit have to describe the same contest.

Publish on market time, not server time

An hourly schedule is not the same thing as an hourly market update. Weekends, holidays, and early closes all create scheduled moments when nothing should change. The publisher checks the regular New York trading session before it reads or writes anything. Outside that window, it exits without touching the public snapshot.

When the market is open, the script builds the next document locally and posts it through a narrow authenticated route. The WordPress side validates the schema, insists on exactly four players and twelve sleeves, writes a temporary file, and then renames it into place. Readers either get the previous complete snapshot or the new complete snapshot. They do not get half a JSON file because a write stopped midway.

The first scheduled runs exposed a less glamorous operational lesson. A manual command succeeding once did not prove the scheduler could retrieve its publishing credential in a fresh process. The final acceptance test came from the scheduler itself, followed by a public readback of the timestamp and counts. Automation is not finished until the unattended path has run.

One public document, several views

The same public snapshot now drives two different experiences. The category archive has a compact daily-or-season standings switch for readers who only want the answer. The finance page is for the curious: combined player equity, season returns, a twelve-sleeve risk matrix, decision activity, and a drill-down for each player.

The dashboard also has four dedicated player URLs, but they are views of one interface rather than separately maintained pages. That keeps the calculations and presentation from drifting apart. A correction to ranking, charting, or terminology lands everywhere at once.

Oddbyte Paper League dashboard showing league equity, season leader, invested capital, and recorded decisions
The live Paper League dashboard begins with combined player results, then opens into sleeve rankings, allocations, histories, and the decision journal. Original Oddbyte interface.

The trade journal may be the more interesting half of the page. A leaderboard tells you what happened. The journal keeps the recorded buy, sell, and hold rationales beside the portfolio state, with filters for player, sleeve, and date. At launch, the public feed contained 90 recorded decisions. That number will grow, but the important part is the link between performance and the decisions that produced it.

There is a useful restraint here too. The public document contains portfolio values, holdings, public source links, and written rationales. It does not expose the machinery used to operate the private ledger. A public dashboard needs enough detail to make the experiment inspectable, not a mirror of every internal field.

A chart needs time before it becomes a story

The page is complete, but some of its history is young. The first verified public snapshot had two hourly points, which makes an equity curve technically accurate and visually modest. That is preferable to backfilling a prettier history from assumptions. The lines will earn their shape one market hour at a time.

The build left three rules worth keeping. Compute public rankings from a stable ledger rather than prose. Make the units in the interface match the units in the calculation. And verify the unattended run, because a scheduler with a missing credential is just a plan written in crontab.

The Paper League still belongs to its four players. The new machinery simply keeps score, quietly, while they argue with the market.

The live dashboard is at https://oddbyte.us/paper-league/stats/.

Similar Posts