<?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: Sumin Kim</title>
    <description>The latest articles on DEV Community by Sumin Kim (@moolmin).</description>
    <link>https://dev.to/moolmin</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3640363%2F6b28a0b0-e6dc-4757-8fb6-ccd06aa25209.jpeg</url>
      <title>DEV Community: Sumin Kim</title>
      <link>https://dev.to/moolmin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/moolmin"/>
    <language>en</language>
    <item>
      <title>Building a Kiroween Avatar Maker with Kiro 👻 + 4S Playbook</title>
      <dc:creator>Sumin Kim</dc:creator>
      <pubDate>Tue, 02 Dec 2025 06:20:06 +0000</pubDate>
      <link>https://dev.to/moolmin/building-a-kiroween-avatar-maker-with-kiro-4s-playbook-12jk</link>
      <guid>https://dev.to/moolmin/building-a-kiroween-avatar-maker-with-kiro-4s-playbook-12jk</guid>
      <description>&lt;p&gt;Github Link: &lt;a href="https://github.com/moolmin/kiro-avatar-creator" rel="noopener noreferrer"&gt;https://github.com/moolmin/kiro-avatar-creator&lt;/a&gt;&lt;br&gt;
Live Link: &lt;a href="https://kiroween-avatar.vercel.app/" rel="noopener noreferrer"&gt;https://kiroween-avatar.vercel.app/&lt;/a&gt;&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.amazonaws.com%2Fuploads%2Farticles%2Frpsir1w9dtxpd7we8ahx.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.amazonaws.com%2Fuploads%2Farticles%2Frpsir1w9dtxpd7we8ahx.png" alt=" " width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Hackathons make you choose: ship fast or ship clean. I wanted both. So I built a &lt;strong&gt;Kiroween Avatar Maker&lt;/strong&gt; for Kiroween and ran the whole thing through Kiro with a simple approach I call &lt;strong&gt;4S — Specs, Steering, Spooks, Smooth UX&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Specs&lt;/strong&gt; to keep scope tight and progress visible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Steering&lt;/strong&gt; for standard commits that point the way&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Spooks&lt;/strong&gt; to layer in the Halloween vibe without hurting usability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smooth UX&lt;/strong&gt; to make every interaction snappy, accessible and exportable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s the exact flow, the files I wrote, the tests I used, and the few things I’d do differently next time.&lt;/p&gt;


&lt;h2&gt;
  
  
  Development
&lt;/h2&gt;
&lt;h3&gt;
  
  
  1) Specs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Folders&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.kiro/specs/halloween-ghost-avatar/
  requirements.md
  design.md
  tasks.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Requirements (12 user stories, all measurable)&lt;/strong&gt;&lt;br&gt;
Requirements (12 user stories, all measurable)&lt;br&gt;
Each story had clear acceptance criteria. A typical one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When a user picks an eye option, the preview updates within &lt;strong&gt;100 ms&lt;/strong&gt;. &lt;strong&gt;Checks&lt;/strong&gt;: no layout shift, other parts stay put, keyboard users can do the same action.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Other criteria covered exports, layering, responsiveness, and accessible controls&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Design (tiny but specific)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stack: Next.js 14 + TypeScript (strict) + Tailwind&lt;/li&gt;
&lt;li&gt;State: Zustand with a single AvatarConfiguration (eyes, hat, cape, accessory, background)&lt;/li&gt;
&lt;li&gt;Rendering: SVG components per part&lt;/li&gt;
&lt;li&gt;Registry pattern: IDs → components so assets are plug‑and‑play&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  2) Spec‑based implementation
&lt;/h3&gt;

&lt;p&gt;Kiro systematically implemented features following tasks.md:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- [ ] 1. Initialize Next.js project and install dependencies
  - Create Next.js 14 app with TypeScript and Tailwind CSS
  - Install required packages: zustand, html2canvas, downloadjs, @headlessui/react, fast-check
  - Configure TypeScript with strict mode
  - Set up Tailwind configuration
  - _Requirements: All_

- [ ] 2. Create type definitions and core interfaces
  - Define GhostPartProps interface for SVG components
  - Define AvatarConfiguration interface for state management (eyes, hat, cape, accessory, background)
  - Define ComponentRegistryEntry and CategoryRegistry interfaces
  - Create utility types for component mapping
  - _Requirements: 10.3, 11.5_

{...}

- [ ] 25. Final checkpoint - Ensure all tests pass
  - Ensure all tests pass, ask the user if questions arise.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For each step I kicked off the task, gave the code a quick once‑over (type‑check, lint, unit tests), and made a commit using the task’s title. That kept a clean one‑task‑one‑commit history and made reviews dead simple.&lt;/p&gt;

&lt;h3&gt;
  
  
  3) Steering document
&lt;/h3&gt;

&lt;p&gt;I wrote a short Steering document to standardise commit messages. The goal was simple: make the git history read like the spec. Each change starts from tasks.md, passes a quick check (type, lint, tests), then lands as one task, one commit. Messages follow Conventional Commits, so they’re easy to scan and trivial to filter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Commit Message Guidelines

When the user asks for a commit message recommendation, always provide a concise English version following these rules:

## Format
Use conventional commits format:
- `feat:` for new features
- `fix:` for bug fixes
- `refactor:` for code refactoring
- `style:` for styling changes
- `docs:` for documentation
- `chore:` for maintenance tasks
{...}
## Style
## Examples
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  4) Vibe mode
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;UI/UX&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Header with a simple logo; cleaner layout.&lt;/li&gt;
&lt;li&gt;Export button simplified (text only) — clearer and less noisy.&lt;/li&gt;
&lt;li&gt;Responsive: stacked controls on mobile; split‑pane on desktop.&lt;/li&gt;
&lt;li&gt;Headless UI for menus, so keyboard users aren’t second‑class.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Assets&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Removed the none background to avoid confusing blank exports.&lt;/li&gt;
&lt;li&gt;Added more eyes, hats, capes, and accessories as first‑class SVG components.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Testing&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vitest + per‑component tests (*.test.tsx).&lt;/li&gt;
&lt;li&gt;Basic accessibility test (accessibility.test.tsx) for labels, roles and focus order.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Kiro mattered
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Specs made me faster.&lt;/strong&gt; Clear user stories + acceptance criteria meant fewer rewrites and easier decisions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The registry pattern scales.&lt;/strong&gt; New assets drop in without changing business logic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Properties catch weirdness.&lt;/strong&gt; Layering, export fidelity, performance budgets — tested, not hoped.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid flow wins.&lt;/strong&gt; Spec mode gave me guardrails; vibe mode gave me speed and personality.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What I’d tweak next time
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Start property tests earlier so they grow with the parts library.&lt;/li&gt;
&lt;li&gt;Bake a tiny a11y checklist straight into tasks.md.&lt;/li&gt;
&lt;li&gt;Timebox SVG optimisation so it doesn’t steal attention from UX details.&lt;/li&gt;
&lt;/ul&gt;

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