<?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: tangit.ozukum</title>
    <description>The latest articles on DEV Community by tangit.ozukum (@tangitozukum_d255dc9ceaa).</description>
    <link>https://dev.to/tangitozukum_d255dc9ceaa</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%2F3647035%2Fd55e2371-1d6c-4df7-a9ea-64e6d6ff8429.png</url>
      <title>DEV Community: tangit.ozukum</title>
      <link>https://dev.to/tangitozukum_d255dc9ceaa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tangitozukum_d255dc9ceaa"/>
    <language>en</language>
    <item>
      <title>Vintage punch cards, modern AI—programming education resurrected.
#kiro #kirodotdev #ai</title>
      <dc:creator>tangit.ozukum</dc:creator>
      <pubDate>Fri, 05 Dec 2025 06:25:17 +0000</pubDate>
      <link>https://dev.to/tangitozukum_d255dc9ceaa/vintage-punch-cards-modern-ai-programming-education-resurrectedkiro-kirodotdev-ai-1k6b</link>
      <guid>https://dev.to/tangitozukum_d255dc9ceaa/vintage-punch-cards-modern-ai-programming-education-resurrectedkiro-kirodotdev-ai-1k6b</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/tangitozukum_d255dc9ceaa" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F3647035%2Fd55e2371-1d6c-4df7-a9ea-64e6d6ff8429.png" alt="tangitozukum_d255dc9ceaa"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/tangitozukum_d255dc9ceaa/bridging-the-decades-revitalizing-punch-card-data-with-modern-ai-2b0g" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Bridging the Decades: Revitalizing Punch Card Data with Modern AI&lt;/h2&gt;
      &lt;h3&gt;tangit.ozukum ・ Dec 5&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#kirodotdev&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#kiro&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>kirodotdev</category>
      <category>kiro</category>
      <category>ai</category>
    </item>
    <item>
      <title>Bridging the Decades: Revitalizing Punch Card Data with Modern AI</title>
      <dc:creator>tangit.ozukum</dc:creator>
      <pubDate>Fri, 05 Dec 2025 04:52:10 +0000</pubDate>
      <link>https://dev.to/tangitozukum_d255dc9ceaa/bridging-the-decades-revitalizing-punch-card-data-with-modern-ai-2b0g</link>
      <guid>https://dev.to/tangitozukum_d255dc9ceaa/bridging-the-decades-revitalizing-punch-card-data-with-modern-ai-2b0g</guid>
      <description>&lt;p&gt;Remember punch cards? Those paper cards with holes that programmed computers in the 1960s? I brought them back as an AI-powered learning tool for kids.&lt;/p&gt;

&lt;p&gt;This is how I built PunchCard.AI using Kiro - from requirements to deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Punch Cards?
&lt;/h2&gt;

&lt;p&gt;Programming used to be physical. You'd arrange cards in sequence, each card doing one thing. It was tactile, visual, and made you think step-by-step.&lt;/p&gt;

&lt;p&gt;Modern programming is powerful but intimidating. Kids see walls of text and syntax errors. What if we could bring back that tactile feeling with modern AI?&lt;/p&gt;

&lt;p&gt;That's PunchCard.AI: drag visual cards to build programs, AI compiles them to real code, and you see actual results.&lt;/p&gt;

&lt;h2&gt;
  
  
  What PunchCard.AI Does
&lt;/h2&gt;

&lt;p&gt;Pick your learning level (elementary to university). Choose a subject you love - or create your own. The AI generates a programming challenge just for you.&lt;/p&gt;

&lt;p&gt;Then you build your solution by dragging cards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Get User Input" card&lt;/li&gt;
&lt;li&gt;"Sort Numbers" card
&lt;/li&gt;
&lt;li&gt;"Display Result" card&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click run. The AI compiles your cards to Python code and executes it safely. You see real output, real errors, real learning.&lt;/p&gt;

&lt;p&gt;The AI gives you feedback that's encouraging and educational. No harsh "wrong answer" messages - just helpful guidance.&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%2F7q4gh9qfnc1zvrnvnhr3.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%2F7q4gh9qfnc1zvrnvnhr3.PNG" alt="Homepage UI and Level Selection" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Building with Spec-Driven Development
&lt;/h2&gt;

&lt;p&gt;I didn't jump straight into coding. I used Kiro's spec-driven approach:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Planning&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wrote 10 user stories with acceptance criteria&lt;/li&gt;
&lt;li&gt;Used EARS syntax for clear requirements&lt;/li&gt;
&lt;li&gt;Mapped out the architecture&lt;/li&gt;
&lt;li&gt;Designed all service interfaces&lt;/li&gt;
&lt;li&gt;Created 11 correctness properties for testing&lt;/li&gt;
&lt;li&gt;Broke design into 19 actionable tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Implementation&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Executed tasks one by one&lt;/li&gt;
&lt;li&gt;Tests caught bugs immediately&lt;/li&gt;
&lt;li&gt;No major refactoring needed&lt;/li&gt;
&lt;li&gt;19 of 19 tasks completed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The upfront planning felt slow at first. But it saved me from the usual chaos of "build first, fix later."&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%2Faqnoio315jrxgig2a92m.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%2Faqnoio315jrxgig2a92m.PNG" alt="Kiro Docs" width="597" height="214"&gt;&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%2F3nf28yywh68vggy1curv.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%2F3nf28yywh68vggy1curv.PNG" alt="Kiro Docs" width="563" height="684"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Steering Docs: Teaching Kiro to Be a Teacher!
&lt;/h2&gt;

&lt;p&gt;The AI needed to generate educational content - challenges, feedback, card libraries. But AI can be inconsistent.&lt;/p&gt;

&lt;p&gt;I created three steering documents:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ai-behavior.md&lt;/strong&gt;: How to talk to students&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Age-appropriate language&lt;/li&gt;
&lt;li&gt;Encouraging tone (never discouraging)&lt;/li&gt;
&lt;li&gt;Specific, actionable feedback&lt;/li&gt;
&lt;li&gt;Educational explanations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;card-patterns.md&lt;/strong&gt;: How to design cards&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Six categories (INPUT, PROCESS, OUTPUT, etc.)&lt;/li&gt;
&lt;li&gt;Complexity ratings (1-5 scale)&lt;/li&gt;
&lt;li&gt;Subject-specific theming&lt;/li&gt;
&lt;li&gt;Consistent naming conventions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;subject-generation.md&lt;/strong&gt;: How to create diverse subjects&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No keyword overlap between subjects&lt;/li&gt;
&lt;li&gt;Balance across categories&lt;/li&gt;
&lt;li&gt;Age-appropriate examples&lt;/li&gt;
&lt;li&gt;Educational value validation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These docs transformed AI quality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feedback consistency: 60% → 95%&lt;/li&gt;
&lt;li&gt;Challenge quality: 70% → 90%&lt;/li&gt;
&lt;li&gt;Subject diversity: 75% → 100%&lt;/li&gt;
&lt;li&gt;Inappropriate content: 5% → 0%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kiro automatically includes these guidelines when generating content. The AI stays on-brand without me micromanaging every prompt.&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%2Fxgu6b025it55fswuici6.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%2Fxgu6b025it55fswuici6.PNG" alt="Subject Selection" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent Hooks: My Silent QA Team
&lt;/h2&gt;

&lt;p&gt;I set up two hooks that run automatically:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;test-on-save.json&lt;/strong&gt;: Runs all tests when I save a file&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Catches regressions instantly&lt;/li&gt;
&lt;li&gt;No manual test running&lt;/li&gt;
&lt;li&gt;Saved a lot of time!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;lint-on-save.json&lt;/strong&gt;: Fixes code style automatically  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistent formatting&lt;/li&gt;
&lt;li&gt;No style debates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These hooks caught 15+ bugs during development. Issues that would've made it to production were fixed immediately.&lt;/p&gt;

&lt;p&gt;The hooks also validate requirements. When a test fails, it shows which acceptance criteria broke. Continuous validation throughout development.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP: The Secret Sauce
&lt;/h2&gt;

&lt;p&gt;The core feature is real code execution. Students need to see actual Python output, not simulations.&lt;/p&gt;

&lt;p&gt;Running arbitrary code in the browser? Dangerous. Building custom sandboxing? Complex.&lt;/p&gt;

&lt;p&gt;Enter MCP (Model Context Protocol).&lt;/p&gt;

&lt;p&gt;I configured the MCP code-executor server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"code-executor"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-code-executor"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"env"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"EXECUTION_TIMEOUT"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"5000"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"MAX_MEMORY"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"128MB"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fyzx34mt2s9dzeq2256rt.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%2Fyzx34mt2s9dzeq2256rt.PNG" alt="Console" width="686" height="495"&gt;&lt;/a&gt;&lt;br&gt;
That's it. Now I have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Safe sandboxed execution&lt;/li&gt;
&lt;li&gt;Real stdout/stderr output&lt;/li&gt;
&lt;li&gt;Timeout protection (5 seconds max)&lt;/li&gt;
&lt;li&gt;Memory limits (128MB)&lt;/li&gt;
&lt;li&gt;Multi-language support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without MCP, I'd need to build custom infrastructure, worry about security, and maintain execution environments. With MCP, it's one config file.&lt;/p&gt;

&lt;p&gt;Students see real code behavior. Real error messages. Real learning.&lt;/p&gt;

&lt;h2&gt;
  
  
  The AI Pipeline
&lt;/h2&gt;

&lt;p&gt;Every feature uses AI differently:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Subject Generation&lt;/strong&gt;: Gemini creates 6 diverse learning themes&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Robotics, art, science, games, data, web&lt;/li&gt;
&lt;li&gt;Or students create custom subjects&lt;/li&gt;
&lt;li&gt;Steering docs ensure diversity and appropriateness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Challenge Generation&lt;/strong&gt;: AI creates unique programming problems&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Matched to subject and skill level&lt;/li&gt;
&lt;li&gt;Clear objectives and expected output&lt;/li&gt;
&lt;li&gt;Hints for when students get stuck&lt;/li&gt;
&lt;/ul&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%2Fjlgjy8w6dj7x9acwg3f5.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%2Fjlgjy8w6dj7x9acwg3f5.PNG" alt="Challenge Generation" width="800" height="359"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Card Library&lt;/strong&gt;: Subject-specific programming cards&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Move Robot Forward" for robotics&lt;/li&gt;
&lt;li&gt;"Play Musical Note" for music&lt;/li&gt;
&lt;li&gt;"Analyze Data" for data science&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Code Compilation&lt;/strong&gt;: Cards → Python code&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI translates card sequence to executable code&lt;/li&gt;
&lt;li&gt;Adds comments explaining logic&lt;/li&gt;
&lt;li&gt;Handles edge cases gracefully&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Feedback Analysis&lt;/strong&gt;: AI reviews student solutions&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;References specific cards used&lt;/li&gt;
&lt;li&gt;Explains what worked and what didn't&lt;/li&gt;
&lt;li&gt;Suggests improvements&lt;/li&gt;
&lt;li&gt;Always encouraging, never harsh&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The entire learning experience is dynamic. No two students get the same challenges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Property-Based Testing
&lt;/h2&gt;

&lt;p&gt;I didn't just write unit tests. I wrote 11 correctness properties - rules that should always be true.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Examples&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Challenge Uniqueness&lt;/strong&gt;: No two challenges should be identical in a session&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Card Library Completeness&lt;/strong&gt;: Library must contain cards that can solve the challenge&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feedback Relevance&lt;/strong&gt;: Feedback must reference the student's actual cards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subject Diversity&lt;/strong&gt;: No keyword overlap between subjects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Progressive Difficulty&lt;/strong&gt;: Difficulty adapts based on performance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error Recovery&lt;/strong&gt;: System maintains state without crashing&lt;/li&gt;
&lt;li&gt;...and 5 more properties&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used fast-check to test these across 100 random inputs each (800 total iterations). Found edge cases I never would've thought of.&lt;/p&gt;

&lt;p&gt;Final test coverage: 91.6%&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges I Overcame
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AI Consistency&lt;/strong&gt;: Free-tier Gemini API can be slow (10-15 seconds per generation). Solution: Added caching and clear loading states with helpful messages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Property Test Flakiness&lt;/strong&gt;: AI-generated content varies slightly. Solution: Adjusted tests to allow minor variations while maintaining correctness.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;State Management&lt;/strong&gt;: Complex state across 6 services. Solution: Clear interfaces and progress tracking kept everything synchronized.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React 18 + TypeScript (strict mode)&lt;/li&gt;
&lt;li&gt;Vite for blazing fast builds&lt;/li&gt;
&lt;li&gt;Tailwind CSS for styling&lt;/li&gt;
&lt;li&gt;Google Gemini for AI generation&lt;/li&gt;
&lt;li&gt;MCP for code execution&lt;/li&gt;
&lt;li&gt;Vitest + fast-check for testing&lt;/li&gt;
&lt;li&gt;Local storage for progress tracking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything chosen for simplicity and speed.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned About Kiro
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Spec-driven development works&lt;/strong&gt;: way faster overall, higher quality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steering docs are powerful&lt;/strong&gt;: Small guidelines create massive consistency. The AI stays on-brand without constant supervision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent hooks are underrated&lt;/strong&gt;: Automated testing and linting saved 3-5 hours per day. Bugs caught before they spread.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP is a game-changer&lt;/strong&gt;: Complex features (code execution) become simple. One config file replaces weeks of custom development.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Property-based testing finds bugs&lt;/strong&gt;: Testing universal properties catches edge cases that example-based tests miss.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Results
&lt;/h2&gt;

&lt;p&gt;PunchCard.AI is live with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-generated subjects and challenges&lt;/li&gt;
&lt;li&gt;Drag-and-drop card programming&lt;/li&gt;
&lt;li&gt;Real code execution via MCP&lt;/li&gt;
&lt;li&gt;Intelligent, encouraging feedback&lt;/li&gt;
&lt;li&gt;Progress tracking and metrics&lt;/li&gt;
&lt;li&gt;Four educational levels&lt;/li&gt;
&lt;li&gt;Enhanced Library Info panel with API usage stats and quick tips&lt;/li&gt;
&lt;li&gt;Helpful context about AI generation times&lt;/li&gt;
&lt;li&gt;Improved user guidance throughout the interface&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Completely free and open source. No limits, no paywalls.&lt;br&gt;
PS - "Wait times or API rate limits may occur because we are using free AI API!:)"&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It Yourself
&lt;/h2&gt;

&lt;p&gt;PunchCard.AI is live at &lt;a href="https://punchcard-live.vercel.app/" rel="noopener noreferrer"&gt;https://punchcard-live.vercel.app/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pick a level, choose a subject, solve a challenge. See how punch card programming feels in 2025.&lt;/p&gt;

&lt;p&gt;Building this taught me that with the right approach (specs + steering + hooks + MCP), you can build complex educational tools without chaos.&lt;/p&gt;

&lt;p&gt;The 1960s had punch cards. 2025 has AI-powered punch cards. The future of learning is surprisingly retro.&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Built with&lt;/strong&gt;: Kiro IDE, React, TypeScript, Gemini AI, MCP
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Category&lt;/strong&gt;: Resurrection (Kiroween 2025)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time&lt;/strong&gt;: 16 days from idea to deployment
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lines of Code&lt;/strong&gt;: ~3,500 (plus 2,000 lines of tests)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test Coverage&lt;/strong&gt;: 91.6%
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bugs in Production&lt;/strong&gt;: 0&lt;/li&gt;
&lt;/ul&gt;

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