<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>kgames, branch HEAD</title>
<subtitle>KGames — free keyboard games for kids
</subtitle>
<entry>
<id>6f593104ba87bf73b30095430a00c09efe7c15a8</id>
<published>2026-08-18T04:23:36Z</published>
<updated>2026-08-18T04:23:36Z</updated>
<title>Cache-bust work game scripts so stale game.js can&#39;t hide story credits</title>
<link rel="alternate" type="text/html" href="commit/6f593104ba87bf73b30095430a00c09efe7c15a8.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 6f593104ba87bf73b30095430a00c09efe7c15a8
parent 1563bb67890aac942a95b10401e607cb18415a1e
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon, 17 Aug 2026 21:23:36 -0700

Cache-bust work game scripts so stale game.js can&#39;t hide story credits

The site serves no Cache-Control headers, so heuristic caching can keep an
old game.js (which never calls KGamesShowStoryCredit) for days while the
new HTML hides the footer by default — story credits then never appear.

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01Esj1tf1Rgwe7odu4jqrXdG

</content>
</entry>
<entry>
<id>1563bb67890aac942a95b10401e607cb18415a1e</id>
<published>2026-08-18T04:15:51Z</published>
<updated>2026-08-18T04:15:51Z</updated>
<title>Lengthen music</title>
<link rel="alternate" type="text/html" href="commit/1563bb67890aac942a95b10401e607cb18415a1e.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 1563bb67890aac942a95b10401e607cb18415a1e
parent 751a75cb7d3496d1586e0da1c01ecf877891bf22
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon, 17 Aug 2026 21:15:51 -0700

Lengthen music

</content>
</entry>
<entry>
<id>751a75cb7d3496d1586e0da1c01ecf877891bf22</id>
<published>2026-08-18T04:04:15Z</published>
<updated>2026-08-18T04:04:15Z</updated>
<title>Code browser: KGames logo and Fredoka font</title>
<link rel="alternate" type="text/html" href="commit/751a75cb7d3496d1586e0da1c01ecf877891bf22.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 751a75cb7d3496d1586e0da1c01ecf877891bf22
parent 3d4e4857e933b510a936057cbd4b5ce75a2eca14
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon, 17 Aug 2026 21:04:15 -0700

Code browser: KGames logo and Fredoka font

The header showed stagit&#39;s default logo (invisible against the cream
background), and the stylesheet asked for Fredoka without anything loading
it — stagit&#39;s header emits no font &lt;link&gt;, so pull it in via @import.

tools/code-logo.svg follows the thumbnail conventions (rounded square,
#FFF5F5 fill, palette stroke); the PNGs are rendered from it and committed
so deploy.sh needs no image tooling.

Co-Authored-By: Claude Opus 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01C3gaidQGTXzcyXKfEaw45a

</content>
</entry>
<entry>
<id>3d4e4857e933b510a936057cbd4b5ce75a2eca14</id>
<published>2026-08-18T03:57:37Z</published>
<updated>2026-08-18T03:57:37Z</updated>
<title>Render README as the code browser landing page</title>
<link rel="alternate" type="text/html" href="commit/3d4e4857e933b510a936057cbd4b5ce75a2eca14.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 3d4e4857e933b510a936057cbd4b5ce75a2eca14
parent 59e2f40d4ac6b2aa81ebb64d4bee442aae20fd37
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon, 17 Aug 2026 20:57:37 -0700

Render README as the code browser landing page

/code/ opened on the raw commit log, and stagit&#39;s README nav link went to
the syntax-less blob page. Generate index.html from README.md with
cmark-gfm instead, reusing stagit&#39;s own header markup so the nav and clone
URL stay identical, and repoint every README link at it. The log moves one
click away behind &quot;Browse the commit log&quot;.

Co-Authored-By: Claude Opus 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01C3gaidQGTXzcyXKfEaw45a

</content>
</entry>
<entry>
<id>59e2f40d4ac6b2aa81ebb64d4bee442aae20fd37</id>
<published>2026-08-18T03:50:33Z</published>
<updated>2026-08-18T03:50:33Z</updated>
<title>Only show story attribution when story active</title>
<link rel="alternate" type="text/html" href="commit/59e2f40d4ac6b2aa81ebb64d4bee442aae20fd37.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 59e2f40d4ac6b2aa81ebb64d4bee442aae20fd37
parent d5b89decce3fee0676dd96522c7867f8eed946fc
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon, 17 Aug 2026 20:50:33 -0700

Only show story attribution when story active

</content>
</entry>
<entry>
<id>d5b89decce3fee0676dd96522c7867f8eed946fc</id>
<published>2026-08-18T03:48:30Z</published>
<updated>2026-08-18T03:48:30Z</updated>
<title>Self-host git on NearlyFreeSpeech; drop Codeberg</title>
<link rel="alternate" type="text/html" href="commit/d5b89decce3fee0676dd96522c7867f8eed946fc.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit d5b89decce3fee0676dd96522c7867f8eed946fc
parent 001e26b7497c2ad35770e162656bdca46bb96ef5
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon, 17 Aug 2026 20:48:30 -0700

Self-host git on NearlyFreeSpeech; drop Codeberg

Point &quot;Open source&quot; at https://www.keyboard.games/code/, a static stagit
code browser served alongside a dumb-HTTP clone source. Nothing runs
server-side: the mirror and HTML are generated locally by deploy.sh and
rsynced up, and a pre-push hook runs the deploy on every push to origin.

tools/stagit-style.css restyles the browser to the site palette.

Co-Authored-By: Claude Opus 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01C3gaidQGTXzcyXKfEaw45a

</content>
</entry>
<entry>
<id>001e26b7497c2ad35770e162656bdca46bb96ef5</id>
<published>2026-08-18T03:07:20Z</published>
<updated>2026-08-18T03:07:20Z</updated>
<title>Stories changed to human made public domain stories</title>
<link rel="alternate" type="text/html" href="commit/001e26b7497c2ad35770e162656bdca46bb96ef5.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 001e26b7497c2ad35770e162656bdca46bb96ef5
parent a0399f95f80379b6954e7715b12051325e3b30b1
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon, 17 Aug 2026 20:07:20 -0700

Stories changed to human made public domain stories

</content>
</entry>
<entry>
<id>a0399f95f80379b6954e7715b12051325e3b30b1</id>
<published>2026-07-14T23:03:52Z</published>
<updated>2026-07-14T23:03:52Z</updated>
<title>Advanced driving mode for fire truck</title>
<link rel="alternate" type="text/html" href="commit/a0399f95f80379b6954e7715b12051325e3b30b1.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit a0399f95f80379b6954e7715b12051325e3b30b1
parent a55084f903e7db4ef4d3dc5d308d234625aec038
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Tue, 14 Jul 2026 16:03:52 -0700

Advanced driving mode for fire truck

</content>
</entry>
<entry>
<id>a55084f903e7db4ef4d3dc5d308d234625aec038</id>
<published>2026-07-14T15:51:19Z</published>
<updated>2026-07-14T15:51:19Z</updated>
<title>Remove stray markdown from repo; gitignore stray .md files</title>
<link rel="alternate" type="text/html" href="commit/a55084f903e7db4ef4d3dc5d308d234625aec038.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit a55084f903e7db4ef4d3dc5d308d234625aec038
parent 5ea25da83ea4ef07a1f1b15728cda67d3c6860de
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Tue, 14 Jul 2026 08:51:19 -0700

Remove stray markdown from repo; gitignore stray .md files

Deletes see-screenshot-of-current-sorted-flute.md (accidentally
committed and publicly served from the web root). Adds a .gitignore
rule to ignore all *.md by default while whitelisting the intentional
docs (README, CLAUDE, AGENTS, fire_truck_plan) so stray notes can&#39;t be
committed again.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>5ea25da83ea4ef07a1f1b15728cda67d3c6860de</id>
<published>2026-07-14T15:06:32Z</published>
<updated>2026-07-14T15:06:45Z</updated>
<title>fire truck midgame</title>
<link rel="alternate" type="text/html" href="commit/5ea25da83ea4ef07a1f1b15728cda67d3c6860de.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 5ea25da83ea4ef07a1f1b15728cda67d3c6860de
parent 231201da5967788ebf93121d698acf9182f034cb
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Tue, 14 Jul 2026 08:06:32 -0700

fire truck midgame

</content>
</entry>
<entry>
<id>231201da5967788ebf93121d698acf9182f034cb</id>
<published>2026-07-14T02:50:02Z</published>
<updated>2026-07-14T02:50:02Z</updated>
<title>fire-truck: people-first city — bike lanes, bicyclists, buses, denser crowds</title>
<link rel="alternate" type="text/html" href="commit/231201da5967788ebf93121d698acf9182f034cb.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 231201da5967788ebf93121d698acf9182f034cb
parent 3e2661dffc75de2d933851692e9ef37d3d6bc71d
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon, 13 Jul 2026 19:50:02 -0700

fire-truck: people-first city — bike lanes, bicyclists, buses, denser crowds

- Fix palms baking into the middle of roads: street palms now anchor to a
  sidewalk edge and jitter only along it
- Bake painted green bike lanes (with white separator dashes) on straight
  segments, matched to the bicyclists&#39; riding line
- New ambient movers on the road graph: 48 bicyclists, 6 buses; pedestrians
  up 18 -&gt; 160 and drawn larger; private cars cut 10 -&gt; 4
- Bus-stop shelters baked along straight sidewalk-lined streets (palms skip
  those cells)
- Browser ambient test now covers bikes/buses/ped density; CLAUDE.md depth
  map replaced with ordering (values live in game.js)

Co-Authored-By: Claude Fable 5 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>3e2661dffc75de2d933851692e9ef37d3d6bc71d</id>
<published>2026-07-14T02:19:19Z</published>
<updated>2026-07-14T02:19:19Z</updated>
<title>tests: fix 5 flaky/broken browser tests (test bugs, not game bugs)</title>
<link rel="alternate" type="text/html" href="commit/3e2661dffc75de2d933851692e9ef37d3d6bc71d.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 3e2661dffc75de2d933851692e9ef37d3d6bc71d
parent c7565b6e5dd82825c507d06ce4ab321c58089855
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon, 13 Jul 2026 19:19:19 -0700

tests: fix 5 flaky/broken browser tests (test bugs, not game bugs)

All five were failing due to defects in the tests themselves:

- work name/speed rounds: 0-delay page.keyboard.type() triggers OS-style
  auto-repeat in headless Chromium (overlapping key-holds), garbling the
  typed buffer (&quot;ABC&quot; -&gt; &quot;AABCCC&quot;). Type with a per-key delay.
- endgame color check: the game runs Phaser&#39;s Canvas (2D) renderer in
  headless Chromium, so the WebGL-only pixel read always saw 0 colors. Add
  the same 2D getImageData fallback the &quot;city colors&quot; test already uses.
- truck starts moving: compared two late samples that both landed in the
  same stationary &#39;waiting&#39; state (false zero delta at 8x test speed).
  Assert cumulative debugDistancePx from spawn instead.
- no-input-waiting / resumes-driving: positioned the truck at a hardcoded
  segmentEnd.x-260, which assumes a horizontal approach and sits beyond the
  216px stop line. Place it just short of segmentEnd along the real approach
  vector so it works for any segment orientation.

npm test: 36 passed, 0 failed.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>c7565b6e5dd82825c507d06ce4ab321c58089855</id>
<published>2026-07-14T02:06:41Z</published>
<updated>2026-07-14T02:06:41Z</updated>
<title>fire-truck: start music on first keypress, not just pointer</title>
<link rel="alternate" type="text/html" href="commit/c7565b6e5dd82825c507d06ce4ab321c58089855.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit c7565b6e5dd82825c507d06ce4ab321c58089855
parent 3ff6072bb4c3a95f57597d9c4cb800d110c24c6e
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon, 13 Jul 2026 19:06:41 -0700

fire-truck: start music on first keypress, not just pointer

Fire-truck is played entirely with the keyboard, so a player who
navigates to the page and immediately presses an arrow key never
triggers the pointerdown that gated audio init — music never started.
Init audio on the first keydown too (a real keydown is a user gesture
that satisfies the browser autoplay policy).

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>3ff6072bb4c3a95f57597d9c4cb800d110c24c6e</id>
<published>2026-07-14T02:00:56Z</published>
<updated>2026-07-14T02:00:56Z</updated>
<title>Graphics improvements for fire truck</title>
<link rel="alternate" type="text/html" href="commit/3ff6072bb4c3a95f57597d9c4cb800d110c24c6e.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 3ff6072bb4c3a95f57597d9c4cb800d110c24c6e
parent 0c3443e82a212334ed421ae55c6fb03db24d2bbb
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon, 13 Jul 2026 19:00:56 -0700

Graphics improvements for fire truck

</content>
</entry>
<entry>
<id>0c3443e82a212334ed421ae55c6fb03db24d2bbb</id>
<published>2026-07-14T00:56:08Z</published>
<updated>2026-07-14T00:56:08Z</updated>
<title>Basic phone access</title>
<link rel="alternate" type="text/html" href="commit/0c3443e82a212334ed421ae55c6fb03db24d2bbb.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 0c3443e82a212334ed421ae55c6fb03db24d2bbb
parent e7bf30e6b3a6a28a20bf432eaa6b84ee10ae0298
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon, 13 Jul 2026 17:56:08 -0700

Basic phone access

</content>
</entry>
<entry>
<id>e7bf30e6b3a6a28a20bf432eaa6b84ee10ae0298</id>
<published>2026-06-02T17:45:25Z</published>
<updated>2026-06-02T17:45:25Z</updated>
<title>work: add pretend word-processor game with Name and Mad Libs subgames</title>
<link rel="alternate" type="text/html" href="commit/e7bf30e6b3a6a28a20bf432eaa6b84ee10ae0298.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit e7bf30e6b3a6a28a20bf432eaa6b84ee10ae0298
parent da2670e596b47f0d619479b8260e91185a286d8b
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Tue,  2 Jun 2026 10:45:25 -0700

work: add pretend word-processor game with Name and Mad Libs subgames

New game &quot;Work&quot; — a light, Word-style page with a ribbon of icons that
launch typing subgames:

- Name: spoken/typed prompt asks the child&#39;s name, greets them, then runs
  a 5-second countdown and times how fast they retype it (auto-stops on
  match); confetti + fireworks on a new record (stored in localStorage).
- Mad Libs: kid-friendly word prompts fill a randomly chosen silly story.
- &quot;New&quot;: a free-typing blank page (Enter inserts a newline).

Implementation notes:
- All-canvas Phaser scene; pure logic in lib.js (templates, typewriter
  steps, time/record formatting) with unit tests.
- Single _reflow() vertical-flow layout stacks prompt/input/hint by their
  measured heights so wrapped/multi-line text never overlaps.
- Interactive zone hit areas are synced to button size on every layout.
- Added reusable AudioSystem.playKeyClick() (typewriter tick) to shared lib.

Adds thumbnail, portal tile, unit tests, and browser smoke tests.
All 54 unit + 27 browser tests pass.

Co-Authored-By: Claude Opus 4.8 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>da2670e596b47f0d619479b8260e91185a286d8b</id>
<published>2026-05-04T20:50:42Z</published>
<updated>2026-05-04T20:50:42Z</updated>
<title>fire-truck: fix dolphin rotation — nose-first with smooth 180° flip</title>
<link rel="alternate" type="text/html" href="commit/da2670e596b47f0d619479b8260e91185a286d8b.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit da2670e596b47f0d619479b8260e91185a286d8b
parent 25797180e663f3f0a2236f8f35ee7e46df0f8f12
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon,  4 May 2026 13:50:42 -0700

fire-truck: fix dolphin rotation — nose-first with smooth 180° flip

Twemoji dolphin SVG faces left, so +90° = nose up, -90° = nose down.
Previous negative angles had the nose pointing down on ascent and up
on descent. Replace two-tween sequential pattern with parallel tweens:
angle rotates 180° over full 1200ms (Sine.easeInOut, no instant flip
at apex) while y arc rises and falls independently.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>25797180e663f3f0a2236f8f35ee7e46df0f8f12</id>
<published>2026-05-04T20:41:08Z</published>
<updated>2026-05-04T20:41:08Z</updated>
<title>fire-truck: endgame dolphins with Twemoji SVG, depth layering, page reload on Play Again</title>
<link rel="alternate" type="text/html" href="commit/25797180e663f3f0a2236f8f35ee7e46df0f8f12.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 25797180e663f3f0a2236f8f35ee7e46df0f8f12
parent d758800ace6fe2c86af546e3c23f573bed724738
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon,  4 May 2026 13:41:08 -0700

fire-truck: endgame dolphins with Twemoji SVG, depth layering, page reload on Play Again

- Replace plain ellipses with Twemoji dolphin SVG (1f42c) from CDN
- Set dolphin depth to 5 so they appear in front of ocean/waves/truck
- Make dolphins ~9% screen height and nose-first jumping animation
- Change &quot;Play Again&quot; button to reload page for clean game reset
  (avoids stale state: fire counter not reset, truck not moving)

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>d758800ace6fe2c86af546e3c23f573bed724738</id>
<published>2026-05-04T20:30:02Z</published>
<updated>2026-05-04T20:30:02Z</updated>
<title>fire-truck: endgame scene, fires counter, audio robustness, speed/distance defaults</title>
<link rel="alternate" type="text/html" href="commit/d758800ace6fe2c86af546e3c23f573bed724738.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit d758800ace6fe2c86af546e3c23f573bed724738
parent ec87ac35dbc46c70c22b81192caa056f01c7c7b8
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon,  4 May 2026 13:30:02 -0700

fire-truck: endgame scene, fires counter, audio robustness, speed/distance defaults

- Add FireTruckEndScene: coastal celebration with dancing people, dolphins,
  animated water fan, color-cycling &#39;You did it!&#39; text, and Play Again button
- Track fires extinguished (🔥 0/4 HUD counter); transition to endgame after 4
- Celebration song: triumphant Em/Am/G melody at 170 BPM, triangle-wave synth
- Fix audio: initAudio() fires on any keydown/pointerdown, not just S/Space;
  playSuccessSound/playFailSound defensively call initAudio() themselves
- Default fire distance 20 → 10 blocks; add 5-block option to dropdown
- Speed 2.5× faster (BASE 170→425, MAX 220→550, ACCEL 260→650, BRAKE 320→800)

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>ec87ac35dbc46c70c22b81192caa056f01c7c7b8</id>
<published>2026-05-02T18:46:08Z</published>
<updated>2026-05-02T18:46:08Z</updated>
<title>fire-truck: background music, siren (S), flashing lights (L), music/sfx settings</title>
<link rel="alternate" type="text/html" href="commit/ec87ac35dbc46c70c22b81192caa056f01c7c7b8.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit ec87ac35dbc46c70c22b81192caa056f01c7c7b8
parent ebdfc6c300fdb1df587bed1308a8ab371f3857da
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sat,  2 May 2026 11:46:08 -0700

fire-truck: background music, siren (S), flashing lights (L), music/sfx settings

Adds Tone.js background music in E minor at 158 BPM with a driving
sawtooth bass, sparse chord hits, and an urgent square-wave melody.
S toggles a triangle-wave siren (A4–E5 wail, consonant with the key).
L toggles red/blue flashing on the truck&#39;s light bar. Settings panel
gains Music and SFX checkboxes (both on by default).

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>ebdfc6c300fdb1df587bed1308a8ab371f3857da</id>
<published>2026-05-02T18:33:53Z</published>
<updated>2026-05-02T18:33:53Z</updated>
<title>fire-truck: aim water at building center, add spray sound</title>
<link rel="alternate" type="text/html" href="commit/ebdfc6c300fdb1df587bed1308a8ab371f3857da.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit ebdfc6c300fdb1df587bed1308a8ab371f3857da
parent 5cd1a313cc114847f206db35eb7c5a2c503c42ac
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sat,  2 May 2026 11:33:53 -0700

fire-truck: aim water at building center, add spray sound

Water spray target was using fireCell (road) + CELL_SIZE/2 offset,
landing it half a cell off from the building. Changed target to
fireBuildingCell center which is where the flame animation renders.

Added looping white-noise (bandpass-filtered) water spray sound that
starts when SPACE is held and fades out on release or extinguish.
initAudio() is now called on the Space keydown so the AudioContext
is ready before the first spray.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>5cd1a313cc114847f206db35eb7c5a2c503c42ac</id>
<published>2026-05-02T18:29:51Z</published>
<updated>2026-05-02T18:29:51Z</updated>
<title>fire-truck: fix repeated fire spawning, scale flames to fill block</title>
<link rel="alternate" type="text/html" href="commit/5cd1a313cc114847f206db35eb7c5a2c503c42ac.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 5cd1a313cc114847f206db35eb7c5a2c503c42ac
parent ef51f2228ec65e52f4ef824080d9262990310913
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sat,  2 May 2026 11:29:51 -0700

fire-truck: fix repeated fire spawning, scale flames to fill block

_extinguishFire stayed in firefighting state for 600ms, causing step()
to call it every frame — queuing dozens of delayedCalls, each orphaning
a fireGraphics object in the Phaser scene as frozen sprites. Guard with
early return if fireBuildingCell is already null. Also destroy any
existing fireGraphics in _createFireGraphics before allocating a new one.

Scale flame triangles from fixed pixel values (~3px on screen) to
CELL_SIZE-relative values (~90% of cell height) with 7 overlapping
triangles to fill the building block visually.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>ef51f2228ec65e52f4ef824080d9262990310913</id>
<published>2026-05-02T18:20:03Z</published>
<updated>2026-05-02T18:20:03Z</updated>
<title>fire-truck: fix stuck bugs, clear prompt on correct key, distance-aware fire destination</title>
<link rel="alternate" type="text/html" href="commit/ef51f2228ec65e52f4ef824080d9262990310913.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit ef51f2228ec65e52f4ef824080d9262990310913
parent 837cd9820a0d2aed03b3a1c63c9500c4a8b12279
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sat,  2 May 2026 11:20:03 -0700

fire-truck: fix stuck bugs, clear prompt on correct key, distance-aware fire destination

- Guard null currentStep in step() and advancePhase() to fix the most
  common stuck case (TypeError after fire route is exhausted)
- Clear promptDir immediately on correct keypress so arrow vanishes
  at the moment the right key is pressed; gate retrigger on promptResolved
- Extract _setupFireRoute() helper shared by _initFireDestination and
  _extinguishFire respawn; always restores state=&#39;driving&#39; on any failure
  path so firefighting state can never get stuck
- Add stall watchdog: resets targetSpeed if truck is driving but
  speed stays 0 for &gt;2s without a prompt
- Add bfsRoadDistances() to lib.js and distance-aware opts to
  pickFireDestination (targetDistance/variance); fire now spawns ~20
  road-cells ahead by default
- Add Fire distance dropdown to settings panel (10/20/30/50 blocks)
- 8 new tests (unit + browser); all 45 unit + 21 browser tests pass

Co-Authored-By: Claude Opus 4.7 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>837cd9820a0d2aed03b3a1c63c9500c4a8b12279</id>
<published>2026-04-27T15:51:48Z</published>
<updated>2026-04-27T15:51:48Z</updated>
<title>fire-truck: random start, stop-line enforcement, dynamic prompt, fire minigame, arrow labels</title>
<link rel="alternate" type="text/html" href="commit/837cd9820a0d2aed03b3a1c63c9500c4a8b12279.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 837cd9820a0d2aed03b3a1c63c9500c4a8b12279
parent 97451ce2d6dd172834d7166bd8575dd67276407f
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Mon, 27 Apr 2026 08:51:48 -0700

fire-truck: random start, stop-line enforcement, dynamic prompt, fire minigame, arrow labels

- Random start position each game via pickRandomRouteStart()
- Truck stops at stop line (216 px) when no input; waiting state
- Dynamic prompt trigger: max(0.72 cell, speed * 2s)
- Goal-directed BFS route to fire + firefighting minigame
- Unicode arrows + text labels in prompts
- Removed AUTO_FAIL_GRACE_MS auto-resolve behavior
- Added unit and browser tests

</content>
</entry>
<entry>
<id>97451ce2d6dd172834d7166bd8575dd67276407f</id>
<published>2026-04-27T03:36:45Z</published>
<updated>2026-04-27T03:36:45Z</updated>
<title>Revert &quot;feat: Add 5 new features to Fire Truck&quot;</title>
<link rel="alternate" type="text/html" href="commit/97451ce2d6dd172834d7166bd8575dd67276407f.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 97451ce2d6dd172834d7166bd8575dd67276407f
parent c27e15ff785fe1b01ad4cdd158aa570d5ff2240f
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sun, 26 Apr 2026 20:36:45 -0700

Revert &quot;feat: Add 5 new features to Fire Truck&quot;

This reverts commit c27e15ff785fe1b01ad4cdd158aa570d5ff2240f.

</content>
</entry>
<entry>
<id>c27e15ff785fe1b01ad4cdd158aa570d5ff2240f</id>
<published>2026-04-27T03:35:43Z</published>
<updated>2026-04-27T03:36:33Z</updated>
<title>feat: Add 5 new features to Fire Truck</title>
<link rel="alternate" type="text/html" href="commit/c27e15ff785fe1b01ad4cdd158aa570d5ff2240f.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit c27e15ff785fe1b01ad4cdd158aa570d5ff2240f
parent 80d9f5deeb6338744aa648b5a3e363a9a316b0d3
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sun, 26 Apr 2026 20:35:43 -0700

feat: Add 5 new features to Fire Truck

Gemini attempt

1. Random start position.
2. Stop before intersections unless prompt resolved.
3. Speed-dependent prompt distances.
4. Goal-directed driving with BFS route to fire, and firefighting minigame.
5. Display unicode arrows for prompts.

</content>
</entry>
<entry>
<id>80d9f5deeb6338744aa648b5a3e363a9a316b0d3</id>
<published>2026-04-27T02:45:28Z</published>
<updated>2026-04-27T02:45:28Z</updated>
<title>Island map</title>
<link rel="alternate" type="text/html" href="commit/80d9f5deeb6338744aa648b5a3e363a9a316b0d3.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 80d9f5deeb6338744aa648b5a3e363a9a316b0d3
parent 9ea773b1f20332f6913365c151f29e2e4c56eaf7
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sun, 26 Apr 2026 19:45:28 -0700

Island map

</content>
</entry>
<entry>
<id>9ea773b1f20332f6913365c151f29e2e4c56eaf7</id>
<published>2026-04-26T21:38:23Z</published>
<updated>2026-04-26T21:38:23Z</updated>
<title>5.5 update</title>
<link rel="alternate" type="text/html" href="commit/9ea773b1f20332f6913365c151f29e2e4c56eaf7.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 9ea773b1f20332f6913365c151f29e2e4c56eaf7
parent 0088c092a8534fe30ee0d630f84ccba4b648fe42
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sun, 26 Apr 2026 14:38:23 -0700

5.5 update

</content>
</entry>
<entry>
<id>0088c092a8534fe30ee0d630f84ccba4b648fe42</id>
<published>2026-04-26T21:24:50Z</published>
<updated>2026-04-26T21:24:50Z</updated>
<title>Next iteration</title>
<link rel="alternate" type="text/html" href="commit/0088c092a8534fe30ee0d630f84ccba4b648fe42.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 0088c092a8534fe30ee0d630f84ccba4b648fe42
parent 8a8590ed8f5b2c7af20880b373500d63452f2594
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sun, 26 Apr 2026 14:24:50 -0700

Next iteration

</content>
</entry>
<entry>
<id>8a8590ed8f5b2c7af20880b373500d63452f2594</id>
<published>2026-04-26T21:21:16Z</published>
<updated>2026-04-26T21:21:16Z</updated>
<title>Getting stuck on this</title>
<link rel="alternate" type="text/html" href="commit/8a8590ed8f5b2c7af20880b373500d63452f2594.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 8a8590ed8f5b2c7af20880b373500d63452f2594
parent 56f3e0b265473d20f8fe8747ca556207fa592481
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sun, 26 Apr 2026 14:21:16 -0700

Getting stuck on this

</content>
</entry>
<entry>
<id>56f3e0b265473d20f8fe8747ca556207fa592481</id>
<published>2026-04-26T15:49:34Z</published>
<updated>2026-04-26T15:49:34Z</updated>
<title>Animal spelling game</title>
<link rel="alternate" type="text/html" href="commit/56f3e0b265473d20f8fe8747ca556207fa592481.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 56f3e0b265473d20f8fe8747ca556207fa592481
parent 1ad5439617774e2f2137de8fcd5c432417c73195
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sun, 26 Apr 2026 08:49:34 -0700

Animal spelling game

</content>
</entry>
<entry>
<id>1ad5439617774e2f2137de8fcd5c432417c73195</id>
<published>2026-04-26T02:43:35Z</published>
<updated>2026-04-26T02:43:35Z</updated>
<title>Animate animal and always show accented name on correct answer</title>
<link rel="alternate" type="text/html" href="commit/1ad5439617774e2f2137de8fcd5c432417c73195.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 1ad5439617774e2f2137de8fcd5c432417c73195
parent b49f541d1a70eb5554ac1a4905ec050c68782106
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sat, 25 Apr 2026 19:43:35 -0700

Animate animal and always show accented name on correct answer

On correct answer, always display the animal name with the first letter
in the round accent color before advancing, reinforcing word recognition.
The same accented display is used for the first-wrong hint. Animals now
gently sway and pulse while waiting for input to make the game feel alive.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>b49f541d1a70eb5554ac1a4905ec050c68782106</id>
<published>2026-04-26T01:51:25Z</published>
<updated>2026-04-26T01:51:25Z</updated>
<title>Add animal-letter game with shared library extraction</title>
<link rel="alternate" type="text/html" href="commit/b49f541d1a70eb5554ac1a4905ec050c68782106.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit b49f541d1a70eb5554ac1a4905ec050c68782106
parent 61a492078f769639adb94e5628161816a49714a9
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sat, 25 Apr 2026 18:51:25 -0700

Add animal-letter game with shared library extraction

- Extract audio (Tone.js + Web Audio), win screen, fireworks, confetti, and
  progress-bar into js/shared/game-shared.js (window.KGames namespace) so both
  letter-find and animal-letter share the code without duplication
- Refactor letter-find to consume the shared library; behavior unchanged
- New animal-letter game: 50 Twemoji animals across 17 letters, deck-shuffled
  so no animal repeats within a single 10-round game (letters may repeat)
- Three-level hint escalation: image only → image + name (speak name) →
  image + name + big colored first letter + &quot;Press X&quot; (speak letter)
- TTS reliability: debounced speak() with 80ms cancel-to-speak delay; exclusive
  if/else-if branches in updateHints() so only one thing is spoken per miss
- F-major 32-note melody with big octave leaps for an animal/circus feel
- Twemoji CC-BY 4.0 attribution fixed at bottom-center of screen
- Portal updated; browser + unit tests added and passing

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>61a492078f769639adb94e5628161816a49714a9</id>
<published>2026-04-26T00:53:34Z</published>
<updated>2026-04-26T00:53:34Z</updated>
<title>Optimize letter-find fireworks to avoid frame rate drops</title>
<link rel="alternate" type="text/html" href="commit/61a492078f769639adb94e5628161816a49714a9.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 61a492078f769639adb94e5628161816a49714a9
parent 9f8aae03c3ed6b82ab37b0e80c93c11a84a5fc34
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sat, 25 Apr 2026 17:53:34 -0700

Optimize letter-find fireworks to avoid frame rate drops

Pre-bake a 4-color texture atlas so particles use frame selection
instead of per-particle tinting. Cut simultaneous particle count
from ~275 (5 bursts × 55 tinted) to ~56 (2 bursts × 28 untinted)
by widening burst intervals to 500ms and shortening lifespan to 800ms.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>9f8aae03c3ed6b82ab37b0e80c93c11a84a5fc34</id>
<published>2026-04-25T23:34:06Z</published>
<updated>2026-04-25T23:34:06Z</updated>
<title>Add progress bar, win screen, and fireworks to letter-find</title>
<link rel="alternate" type="text/html" href="commit/9f8aae03c3ed6b82ab37b0e80c93c11a84a5fc34.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 9f8aae03c3ed6b82ab37b0e80c93c11a84a5fc34
parent 2da226aa27cee1a14e3e3f978712e1f53b42c19f
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sat, 25 Apr 2026 16:34:06 -0700

Add progress bar, win screen, and fireworks to letter-find

Track letters found toward a goal of 10 with a dot progress bar.
On completion, play a victory fanfare, launch fireworks, and show
Play Again / Main Menu buttons.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>2da226aa27cee1a14e3e3f978712e1f53b42c19f</id>
<published>2026-04-22T22:18:14Z</published>
<updated>2026-04-22T22:18:14Z</updated>
<title>Fix fire-truck stuttery framerate via chunked texture baking and renderer tuning.</title>
<link rel="alternate" type="text/html" href="commit/2da226aa27cee1a14e3e3f978712e1f53b42c19f.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 2da226aa27cee1a14e3e3f978712e1f53b42c19f
parent 17733c85aa2ea0577cff75b40c6e46ee3e4cccb5
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Wed, 22 Apr 2026 15:18:14 -0700

Fix fire-truck stuttery framerate via chunked texture baking and renderer tuning.

Root cause: ~5500 city cells × ~5 Graphics draw commands each = ~25k commands
re-executed every frame. Replaced Graphics objects with 16×16-cell baked texture
chunks generated once at startup; Phaser&#39;s camera culling then renders only the
~6 visible chunks per frame instead of all 25k commands.

Also disable preserveDrawingBuffer in production (only needed for Playwright
readPixels tests, but disables compositor fast paths on many drivers), and
disable antialias (baked images don&#39;t need MSAA). Added on-screen FPS counter
so real-browser improvement is visible.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>17733c85aa2ea0577cff75b40c6e46ee3e4cccb5</id>
<published>2026-04-22T21:29:07Z</published>
<updated>2026-04-22T21:29:07Z</updated>
<title>Scale game up 5x and zoom out camera to improve perceived rendering framerate. Add settings gear button for speed menu.</title>
<link rel="alternate" type="text/html" href="commit/17733c85aa2ea0577cff75b40c6e46ee3e4cccb5.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 17733c85aa2ea0577cff75b40c6e46ee3e4cccb5
parent df1c7123b6e429d644768b17e155bcacf23697da
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Wed, 22 Apr 2026 14:29:07 -0700

Scale game up 5x and zoom out camera to improve perceived rendering framerate. Add settings gear button for speed menu.

</content>
</entry>
<entry>
<id>df1c7123b6e429d644768b17e155bcacf23697da</id>
<published>2026-04-22T20:51:48Z</published>
<updated>2026-04-22T20:51:48Z</updated>
<title>Update fire-truck generation to remove dead-ends, increase straightaways, and lower default speed. Add speed settings selector.</title>
<link rel="alternate" type="text/html" href="commit/df1c7123b6e429d644768b17e155bcacf23697da.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit df1c7123b6e429d644768b17e155bcacf23697da
parent 9ca9ff25011e0493f9ec3087b5da7195b8893c32
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Wed, 22 Apr 2026 13:51:48 -0700

Update fire-truck generation to remove dead-ends, increase straightaways, and lower default speed. Add speed settings selector.

</content>
</entry>
<entry>
<id>9ca9ff25011e0493f9ec3087b5da7195b8893c32</id>
<published>2026-04-22T20:23:46Z</published>
<updated>2026-04-22T20:23:46Z</updated>
<title>Fix letter-find TTS saying &#39;capital&#39; in Edge and other browsers</title>
<link rel="alternate" type="text/html" href="commit/9ca9ff25011e0493f9ec3087b5da7195b8893c32.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 9ca9ff25011e0493f9ec3087b5da7195b8893c32
parent 1fb9126c8d515102746399761648c838ab122459
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Wed, 22 Apr 2026 13:23:46 -0700

Fix letter-find TTS saying &#39;capital&#39; in Edge and other browsers

</content>
</entry>
<entry>
<id>1fb9126c8d515102746399761648c838ab122459</id>
<published>2026-04-22T20:18:45Z</published>
<updated>2026-04-22T20:18:45Z</updated>
<title>Update tagline and footer link</title>
<link rel="alternate" type="text/html" href="commit/1fb9126c8d515102746399761648c838ab122459.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 1fb9126c8d515102746399761648c838ab122459
parent 718636f85eff1f4f7c61fd9f6e18cbdec76c6cb9
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Wed, 22 Apr 2026 13:18:45 -0700

Update tagline and footer link

- Change tagline to &#39;Free keyboard games for kids&#39;
- Link &#39;Open source&#39; to Codeberg repo and remove GPL-3.0 license link

</content>
</entry>
<entry>
<id>718636f85eff1f4f7c61fd9f6e18cbdec76c6cb9</id>
<published>2026-04-22T20:16:50Z</published>
<updated>2026-04-22T20:16:50Z</updated>
<title>Update .gitignore</title>
<link rel="alternate" type="text/html" href="commit/718636f85eff1f4f7c61fd9f6e18cbdec76c6cb9.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 718636f85eff1f4f7c61fd9f6e18cbdec76c6cb9
parent c166aaf6d44147b01d3dcd40841ef0448299e3e7
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Wed, 22 Apr 2026 13:16:50 -0700

Update .gitignore

</content>
</entry>
<entry>
<id>c166aaf6d44147b01d3dcd40841ef0448299e3e7</id>
<published>2026-04-22T20:16:40Z</published>
<updated>2026-04-22T20:16:40Z</updated>
<title>Improve fire-truck city flow and feedback</title>
<link rel="alternate" type="text/html" href="commit/c166aaf6d44147b01d3dcd40841ef0448299e3e7.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit c166aaf6d44147b01d3dcd40841ef0448299e3e7
parent cb8a19cf1823462c6e17520c52c4d1aafd7f5cc8
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Wed, 22 Apr 2026 13:16:40 -0700

Improve fire-truck city flow and feedback

</content>
</entry>
<entry>
<id>cb8a19cf1823462c6e17520c52c4d1aafd7f5cc8</id>
<published>2026-04-22T19:39:04Z</published>
<updated>2026-04-22T19:39:04Z</updated>
<title>New implementation</title>
<link rel="alternate" type="text/html" href="commit/cb8a19cf1823462c6e17520c52c4d1aafd7f5cc8.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit cb8a19cf1823462c6e17520c52c4d1aafd7f5cc8
parent 1ca8544426df7055ce8be4e4fb9a20e29d3d2aca
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Wed, 22 Apr 2026 12:39:04 -0700

New implementation

</content>
</entry>
<entry>
<id>1ca8544426df7055ce8be4e4fb9a20e29d3d2aca</id>
<published>2026-04-22T19:11:30Z</published>
<updated>2026-04-22T19:11:30Z</updated>
<title>Remove all code for fire truck game, leave placeholder icon</title>
<link rel="alternate" type="text/html" href="commit/1ca8544426df7055ce8be4e4fb9a20e29d3d2aca.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 1ca8544426df7055ce8be4e4fb9a20e29d3d2aca
parent 0cb47d542fdf48e0a75e3a6986f08caf6c0de34f
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Wed, 22 Apr 2026 12:11:30 -0700

Remove all code for fire truck game, leave placeholder icon

</content>
</entry>
<entry>
<id>0cb47d542fdf48e0a75e3a6986f08caf6c0de34f</id>
<published>2026-04-22T19:09:17Z</published>
<updated>2026-04-22T19:09:17Z</updated>
<title>fix fire-truck tests and persist repo permissions</title>
<link rel="alternate" type="text/html" href="commit/0cb47d542fdf48e0a75e3a6986f08caf6c0de34f.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 0cb47d542fdf48e0a75e3a6986f08caf6c0de34f
parent 15ed86c6f3c1a6693e6dce2947448d589d225432
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Wed, 22 Apr 2026 12:09:17 -0700

fix fire-truck tests and persist repo permissions

</content>
</entry>
<entry>
<id>15ed86c6f3c1a6693e6dce2947448d589d225432</id>
<published>2026-04-22T18:21:00Z</published>
<updated>2026-04-22T18:21:00Z</updated>
<title>chore: ignore .opencode and remove temp files</title>
<link rel="alternate" type="text/html" href="commit/15ed86c6f3c1a6693e6dce2947448d589d225432.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 15ed86c6f3c1a6693e6dce2947448d589d225432
parent ed650a88a4639f1b2b544b431f5f6e21203abba1
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Wed, 22 Apr 2026 11:21:00 -0700

chore: ignore .opencode and remove temp files

</content>
</entry>
<entry>
<id>ed650a88a4639f1b2b544b431f5f6e21203abba1</id>
<published>2026-04-22T18:20:37Z</published>
<updated>2026-04-22T18:20:37Z</updated>
<title>fix(fire-truck): refactor animations to use Phaser timers</title>
<link rel="alternate" type="text/html" href="commit/ed650a88a4639f1b2b544b431f5f6e21203abba1.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit ed650a88a4639f1b2b544b431f5f6e21203abba1
parent c4578d57ea48bb50f909851757590f8bf6e9eb0f
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Wed, 22 Apr 2026 11:20:37 -0700

fix(fire-truck): refactor animations to use Phaser timers

</content>
</entry>
<entry>
<id>c4578d57ea48bb50f909851757590f8bf6e9eb0f</id>
<published>2026-04-22T17:58:37Z</published>
<updated>2026-04-22T17:58:37Z</updated>
<title>Try and fix fire truck</title>
<link rel="alternate" type="text/html" href="commit/c4578d57ea48bb50f909851757590f8bf6e9eb0f.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit c4578d57ea48bb50f909851757590f8bf6e9eb0f
parent 089cebc27835aa4ae13536e03a2ee9bcf9d77798
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Wed, 22 Apr 2026 10:58:37 -0700

Try and fix fire truck

</content>
</entry>
<entry>
<id>089cebc27835aa4ae13536e03a2ee9bcf9d77798</id>
<published>2026-04-20T02:52:24Z</published>
<updated>2026-04-20T02:52:24Z</updated>
<title>Add Fire Truck game with pseudo-3D renderer and test suite</title>
<link rel="alternate" type="text/html" href="commit/089cebc27835aa4ae13536e03a2ee9bcf9d77798.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 089cebc27835aa4ae13536e03a2ee9bcf9d77798
parent 5034c9fec10ff9310f26480efcf37a406ef7cb54
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sun, 19 Apr 2026 19:52:24 -0700

Add Fire Truck game with pseudo-3D renderer and test suite

- Fire Truck driving game: Outrun-style scanline road, projected
  buildings/pedestrians/traffic lights, arrow-prompt intersection
  mechanic, fire destination with confetti + water spray on arrival
- Lights (L), siren (S), bell (B) via keyboard and on-screen buttons
- Fixed critical projection bug from initial implementation: Y formula
  now correctly places ground-level objects below the horizon
- Extract pure projection + route logic into lib.js for unit testing
- Add Playwright browser smoke tests + Node built-in unit tests
- Add CLAUDE.md with conventions and test-before-commit rule
- Update README with testing section and deploy exclusions
- Add .claude/ and *.log to .gitignore

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>5034c9fec10ff9310f26480efcf37a406ef7cb54</id>
<published>2026-04-20T01:04:55Z</published>
<updated>2026-04-20T01:04:55Z</updated>
<title>Add Letter Find game, replacing Typing for Now scaffold</title>
<link rel="alternate" type="text/html" href="commit/5034c9fec10ff9310f26480efcf37a406ef7cb54.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 5034c9fec10ff9310f26480efcf37a406ef7cb54
parent 2d3f151fe1bae1c9d4b55870b651e66117bf1cfd
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sun, 19 Apr 2026 18:04:55 -0700

Add Letter Find game, replacing Typing for Now scaffold

Kid-focused letter recognition game: a random A-Z letter is shown
large and spoken; correct keypress triggers confetti, a C-E-G chime,
and a diatonic harmony layer locked to the background chiptune loop;
wrong keypress plays a bong + descending chromatic lick. Responsive
full-viewport layout via Phaser Scale.RESIZE. Separate Music/SFX mute
buttons. Background music via Tone.js (square-wave melody + triangle
bass, 128 BPM). Folder and thumbnail renamed from typing → letter-find.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

</content>
</entry>
<entry>
<id>2d3f151fe1bae1c9d4b55870b651e66117bf1cfd</id>
<published>2026-04-19T19:21:08Z</published>
<updated>2026-04-19T19:21:08Z</updated>
<title>Initial KGames scaffold</title>
<link rel="alternate" type="text/html" href="commit/2d3f151fe1bae1c9d4b55870b651e66117bf1cfd.html" />
<author>
<name>Kyle Barlow</name>
<email>kb@kylebarlow.com</email>
</author>
<content>commit 2d3f151fe1bae1c9d4b55870b651e66117bf1cfd
Author: Kyle Barlow &lt;kb@kylebarlow.com&gt;
Date:   Sun, 19 Apr 2026 12:21:08 -0700

Initial KGames scaffold

Landing page with responsive game grid, GPL-3.0 license, and a
working Phaser 3 typing game that speaks each letter via the
Web Speech API. No build tooling — opens directly from file://.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;

</content>
</entry>
</feed>
