<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Latent Mirror — Hobby Hero</title><description>Hobby Hero: its artifact page, and the posts and reflections that belong to it.</description><link>https://latentmirror.com/</link><language>en-ca</language><copyright>© 2026 Dan Peterson. CC BY-SA 4.0.</copyright><item><title>Porting Hobby Hero</title><link>https://latentmirror.com/posts/porting-hobby-hero/</link><guid isPermaLink="true">https://latentmirror.com/posts/porting-hobby-hero/</guid><description>seedling · tended 2026-10-02</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The NHL season started on September 29. Montreal opened in Toronto, and my goal model had the Canadiens at 52% on the road.&lt;/p&gt;
&lt;p&gt;The end result matched a pre-game Mastodon poll, with Montreal winning in regular time. The
model’s favourite won too.&lt;/p&gt;
&lt;p&gt;I wanted Hobby Hero on my phone for nights like that, so this week I ported it. It started as a &lt;a href=&quot;https://latentmirror.com/artifacts/hobby-hero/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;Claude artifact&lt;/a&gt;, and it still is one. But the same page now also lives at &lt;a href=&quot;https://play.latentmirror.com/hobby-hero/&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;play.latentmirror.com/hobby-hero&lt;/a&gt;, as an app you can install (phone or desktop). All of its data ships with it, so after the first visit it opens with no connection at all.&lt;/p&gt;
&lt;p&gt;The port was fiddly. An artifact is one big file: the styles, the script and five seasons of data all sit inside the page. A site with a strict security policy allows none of that, so everything had to come apart. The data alone became six files (one per season, plus a core). The fonts I used to borrow from Google are served from my own site now. Both editions are built from the same source, and a test checks that they show the same numbers for the same game. The code is &lt;a href=&quot;https://github.com/accu4x/hobbyhero&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;public&lt;/a&gt; too, which is new.&lt;/p&gt;
&lt;div class=&quot;pop-row&quot; data-side=&quot;L&quot;&gt;
&lt;p&gt;It is not finished. The data stops on June 14, with the last game of the Final. Every game of the new season shows a pre-season estimate: last year’s form and last year’s main starters, with no trades, signings or injuries. Those numbers stay frozen until I rebuild the page with played games. The next feature is to auto re-index as the season progresses.&lt;/p&gt;
&lt;aside class=&quot;pop pop--counterpoint&quot; aria-label=&quot;Counterpoint from the robot&quot;&gt;&lt;span class=&quot;pop-label&quot;&gt;&lt;span aria-hidden=&quot;true&quot;&gt;🤖&lt;/span&gt;Counterpoint&lt;/span&gt;A frozen pre-season estimate has one virtue: it was made before a single game was played, so nothing that happened since can leak into it.&lt;/aside&gt;
&lt;/div&gt;
&lt;p&gt;Also, it still has not beaten the closing market, and the page says so.&lt;/p&gt;
&lt;p&gt;Still, the whole schedule is in there. Montreal’s home opener is October 6 against Carolina, and the model has Carolina at 64%.&lt;/p&gt;
&lt;p&gt;It will be interesting to see where this goes. So glad hockey is back!&lt;/p&gt;
</content:encoded><category>hockey</category><category>programming</category></item><item><title>Hobby Hero</title><link>https://latentmirror.com/artifacts/hobby-hero/</link><guid isPermaLink="true">https://latentmirror.com/artifacts/hobby-hero/</guid><description>Pick two NHL teams and a date: a goal model&apos;s win chance, likely scores and what-if levers, checked honestly against the closing market.</description><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;img src=&quot;https://latentmirror.com/_astro/hobby-hero.BOsIgrB1_NqGK6.webp&quot; alt=&quot;Hobby Hero&amp;#39;s matchup page in dark navy: Carolina at Vegas in the 2026 Stanley Cup Final, Carolina 54% to Vegas 46%, most likely score 3–2.&quot; /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://play.latentmirror.com/hobby-hero/&quot;&gt;Play Hobby Hero&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://claude.ai/artifact/47HzJJXs1KM7zZapvtgoGE&quot;&gt;Open it on claude.ai&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hobby Hero has had a few lives. The last one wrote hockey games. A language model played out each
matchup about twenty times, and every run produced a full game sheet: period-by-period scoring,
penalties, three stars and a story to go with it. It read like the real thing. It also cost like
the real thing. Output tokens are never cached, and a box score, times the prose, times twenty
runs, times every game on the schedule, adds up fast. The goal had drifted too, toward fantasy and
betting. So I shut it down.&lt;/p&gt;
&lt;p&gt;This version starts from the other end: math computes every number, and no language model gets a
say in the result. Each side gets its own goal model, an
&lt;a href=&quot;https://doi.org/10.1111/j.1467-9574.1982.tb00782.x&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;approach from soccer&lt;/a&gt; that has been
&lt;a href=&quot;https://doi.org/10.1515/jqas-2013-0129&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;adapted for hockey&lt;/a&gt;. They read recent form:
&lt;a href=&quot;https://moneypuck.com/about.htm&quot; target=&quot;_blank&quot; rel=&quot;noopener noreferrer&quot;&gt;expected goals&lt;/a&gt;, the starting goalie, shot attempts and special
teams. From there it works out a win chance and a spread of likely scores. Pick a date and two
teams, pull the levers, and see what moves.&lt;/p&gt;
&lt;p&gt;Every game of the last two seasons was predicted using only the games before it, and each one
sits beside what the closing market said and what actually happened. The market still edges it
out, narrowly. I’d rather show you an honest scoreboard than a flattering one. The closing line is
a benchmark, but there are no plans to advertise gambling on the artifact.&lt;/p&gt;
&lt;p&gt;It is also my first port to a Claude artifact, and it won’t be the last. Everything it needs is
baked into the page, so there is no server to run and nothing to sign in to: you open the link
and it works. I like that delivery mechanism so much that I’m building in artifacts from now on.&lt;/p&gt;</content:encoded></item></channel></rss>