<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: kevin huang</title>
    <description>The latest articles on DEV Community by kevin huang (@hyy12345678).</description>
    <link>https://dev.to/hyy12345678</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4242342%2F1e99f9d1-b337-4c31-8fff-31f1f37d380a.jpg</url>
      <title>DEV Community: kevin huang</title>
      <link>https://dev.to/hyy12345678</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hyy12345678"/>
    <language>en</language>
    <item>
      <title>Lantern Run: a Halloween roguelike built with Kiro</title>
      <dc:creator>kevin huang</dc:creator>
      <pubDate>Fri, 13 Nov 2026 06:59:00 +0000</pubDate>
      <link>https://dev.to/hyy12345678/lantern-run-a-halloween-roguelike-built-with-kiro-4eie</link>
      <guid>https://dev.to/hyy12345678/lantern-run-a-halloween-roguelike-built-with-kiro-4eie</guid>
      <description>&lt;p&gt;This post was written as part of the Kiroween 2026 hackathon.&lt;/p&gt;

&lt;p&gt;Lantern Run is a small browser roguelike. You are a jack-o'-lantern carrying a flame through four rooms. The flame goes out over time, ghosts drain it, and candy restores it. Clear each room by collecting its candy goal and reaching the door. After each of the first three rooms you pick one upgrade. The fourth room holds the Pumpkin King.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy8nq4tmzm09kva9rpjx0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy8nq4tmzm09kva9rpjx0.png" alt="Lantern Run title screen" width="799" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Play it:&lt;/strong&gt; &lt;a href="https://hyy12345678.github.io/lantern-run/" rel="noopener noreferrer"&gt;https://hyy12345678.github.io/lantern-run/&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Code:&lt;/strong&gt; &lt;a href="https://github.com/hyy12345678/lantern-run" rel="noopener noreferrer"&gt;https://github.com/hyy12345678/lantern-run&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a roguelike
&lt;/h2&gt;

&lt;p&gt;A jack-o'-lantern is already a small light in the dark, so the game is about protecting that light, not fighting. Roguelikes suit this: each run is short, the rules are simple, and every choice changes what happens next.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Kiro shaped the project
&lt;/h2&gt;

&lt;p&gt;I used Kiro's spec, steering, and hooks features. Everything lives in the &lt;code&gt;.kiro/&lt;/code&gt; folder of the repo.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Specs.&lt;/strong&gt; &lt;code&gt;requirements.md&lt;/code&gt; lists 13 requirement groups, each with acceptance criteria. &lt;code&gt;design.md&lt;/code&gt; covers the modules, data types, tuning values, and test plan. &lt;code&gt;tasks.md&lt;/code&gt; tracks progress. When I changed the game from three nights to a roguelike, I updated all three files, then rebuilt the task list around the new run structure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steering.&lt;/strong&gt; Three files keep the project consistent. One sets scope rules, one sets code rules (for example, the core logic must not import Phaser), and one sets the palette and motion limits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks.&lt;/strong&gt; One runs the TypeScript check every time a &lt;code&gt;.ts&lt;/code&gt; file is saved. Another runs the test suite after each spec task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Property-based tests.&lt;/strong&gt; fast-check checks the core rules: the flame stays within bounds, levels are deterministic for a given seed, and the blow ability only moves ghosts inside its radius.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;p&gt;The game logic lives in &lt;code&gt;src/core/&lt;/code&gt;, which has no Phaser imports, so I could test it with Vitest and fast-check without a browser. Phaser scenes only connect input and drawing to that logic.&lt;/p&gt;

&lt;p&gt;Levels come from a seeded random generator. The same seed always gives the same map. The generator carves a guaranteed route from the start to the door and uses breadth-first search to keep every candy and ghost reachable.&lt;/p&gt;

&lt;p&gt;Everything on screen is drawn in code. There are no image or audio files. Sound effects are synthesized with the Web Audio API.&lt;/p&gt;

&lt;h2&gt;
  
  
  What worked
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Specs kept the work on track, especially after the big change in structure.&lt;/li&gt;
&lt;li&gt;Steering kept new code and visuals consistent without re-explaining the rules each time.&lt;/li&gt;
&lt;li&gt;Hooks removed a lot of manual checking.&lt;/li&gt;
&lt;li&gt;Property tests caught the kinds of bugs that unit examples miss, such as a boundary case in the flame math.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What didn't
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The roguelike pivot was the hardest part. Rewriting the spec and reorganizing the tasks took real effort, and keeping the three spec files in sync was easy to get wrong.&lt;/li&gt;
&lt;li&gt;Automated tests show that the rules are correct, but not that the game is fun. Balance still needed manual playtesting.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it and tell me what you think
&lt;/h2&gt;

&lt;p&gt;If you have a few minutes, play a run and tell me where it feels unfair. I am most interested in whether the upgrades feel meaningful and whether the boss room is too punishing.&lt;/p&gt;

&lt;p&gt;Thanks for reading, and happy Kiroween!&lt;/p&gt;

</description>
      <category>kiroweenhackathon26</category>
    </item>
  </channel>
</rss>
