<?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: Aryan</title>
    <description>The latest articles on DEV Community by Aryan (@astaaddahiya).</description>
    <link>https://dev.to/astaaddahiya</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%2F3612986%2F16b605f3-e5a8-4e20-845a-93e1be5ddebb.png</url>
      <title>DEV Community: Aryan</title>
      <link>https://dev.to/astaaddahiya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/astaaddahiya"/>
    <language>en</language>
    <item>
      <title># I built a resume roaster in 2 hours without writing a single line of code</title>
      <dc:creator>Aryan</dc:creator>
      <pubDate>Wed, 15 Apr 2026 18:41:18 +0000</pubDate>
      <link>https://dev.to/astaaddahiya/-i-built-a-resume-roaster-in-2-hours-without-writing-a-single-line-of-code-533h</link>
      <guid>https://dev.to/astaaddahiya/-i-built-a-resume-roaster-in-2-hours-without-writing-a-single-line-of-code-533h</guid>
      <description>&lt;h1&gt;
  
  
  I built a resume roaster in 2 hours without writing a single line of code
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;How vibe coding with MeDo changed the way I think about building products&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;I once sent out 47 job applications and heard back from 2.&lt;/p&gt;

&lt;p&gt;Not because I wasn't qualified. Because my resume was quietly, invisibly terrible.&lt;/p&gt;

&lt;p&gt;"Responsible for managing cross-functional teams." "Assisted in the development of key initiatives." "Worked collaboratively with stakeholders."&lt;/p&gt;

&lt;p&gt;Translation: I did stuff. I think. Please hire me.&lt;/p&gt;

&lt;p&gt;Every resume tool I tried gave me green checkmarks and told me I was doing great. I wasn't. I needed someone to tell me the truth.&lt;/p&gt;

&lt;p&gt;So I built the tool that does exactly that — and I did it entirely through conversation, no code written by hand.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;RoastMyResume&lt;/strong&gt; — an AI-powered resume coach with two modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Roast Mode&lt;/strong&gt;: line-by-line brutal critique of your resume. Vague bullets, passive voice, buzzword soup, missing metrics — all called out with a &lt;em&gt;Roast Score&lt;/em&gt; out of 100.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix Mode&lt;/strong&gt;: every weak line gets rewritten instantly. Strong verbs. Quantified impact. Recruiter-friendly language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Job Match Mode&lt;/strong&gt;: paste a job description, get your resume rewritten to match that specific role's language and ATS keywords.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Try it live: [your-app-url-here]&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The tool: MeDo
&lt;/h2&gt;

&lt;p&gt;I built this for the &lt;a href="https://medo.devpost.com" rel="noopener noreferrer"&gt;Build with MeDo Hackathon&lt;/a&gt; using &lt;a href="https://medo.dev/?invitecode=user-6r4myao1yeps" rel="noopener noreferrer"&gt;MeDo&lt;/a&gt; — an AI app builder where you describe what you want in plain English and it generates, deploys, and hosts the full-stack app.&lt;/p&gt;

&lt;p&gt;No IDE. No terminal. No Stack Overflow at 2am.&lt;/p&gt;

&lt;p&gt;Just conversation.&lt;/p&gt;




&lt;h2&gt;
  
  
  The actual prompts I used
&lt;/h2&gt;

&lt;p&gt;Here's exactly how I built it, turn by turn.&lt;/p&gt;

&lt;h3&gt;
  
  
  Turn 1 — Core scaffold
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build a full-stack web app called "RoastMyResume". Users paste their resume 
text into a text area. Two buttons: "Roast It" and "Fix It".

Roast It: AI critiques every weak line — vague bullets, buzzwords, passive 
voice, missing metrics. Give a Roast Score out of 100. Show each critique 
as a callout card with the original line and the burn.

Fix It: Rewrites every weak line with strong action verbs, quantified 
results, recruiter-friendly language. Show original vs improved side by side.

UI: clean, modern, dark header with orange accent. Deploy with one click.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MeDo generated the entire app. Frontend, backend, AI logic, deployment. In one shot.&lt;/p&gt;

&lt;h3&gt;
  
  
  Turn 2 — Deepen the roast engine
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Make the critique more specific. Detect: passive voice, unquantified impact, 
buzzword density, generic responsibilities that could belong to anyone. 
Add severity weights — not all bad lines are equally bad.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where it got interesting. MeDo rewired the prompt engineering under the hood and added pattern classification logic I would have spent days building manually.&lt;/p&gt;

&lt;h3&gt;
  
  
  Turn 3 — Job Match Mode
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add a third mode: user pastes a job description. AI rewrites the resume 
to mirror that role's language and surface the most relevant experience. 
ATS-optimized output.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Turn 4 — Polish &amp;amp; virality
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add: animated Roast Score meter on results, shareable image card of the 
funniest roast lines (1200x630 for X/LinkedIn), PDF export, mobile 
responsive layout, counter showing "X resumes roasted today".
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Turn 5 — Ship
&lt;/h3&gt;

&lt;p&gt;One-click deploy. Public URL. Done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Total time: ~2.5 hours.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What surprised me
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Vibe coding is a real skill&lt;/strong&gt; — and it's not about being lazy. The constraint of describing everything in plain English forces you to think like a product manager before you think like a developer. Fuzzy thinking produces fuzzy apps. Clear thinking produces clean apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-turn context is the actual superpower.&lt;/strong&gt; The app I shipped isn't the app from Turn 1. It's the app that emerged from five rounds of "yes, but also...". That's not how traditional coding works. It's closer to design thinking — iterative, responsive, human.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Honesty is a product differentiator.&lt;/strong&gt; I checked every resume tool on the market while building this. They're all optimistic to the point of uselessness. There's a real gap for something that just tells the truth.&lt;/p&gt;




&lt;h2&gt;
  
  
  The math behind the Roast Score
&lt;/h2&gt;

&lt;p&gt;The score isn't a fake "AI confidence" number. It's a transparent weighted penalty function:&lt;/p&gt;

&lt;p&gt;$$S_{roast} = 100 - \frac{1}{n}\sum_{i=1}^{n} w_i \cdot p_i$$&lt;/p&gt;

&lt;p&gt;Where:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;$n$ = number of resume lines analysed&lt;/li&gt;
&lt;li&gt;$w_i$ = severity weight of the issue type detected in line $i$&lt;/li&gt;
&lt;li&gt;$p_i \in [0, 10]$ = penalty for that line&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A score below 40 means your resume is on fire. Literally.&lt;/p&gt;




&lt;h2&gt;
  
  
  The biggest challenge: tone
&lt;/h2&gt;

&lt;p&gt;The hardest problem wasn't the code. It was calibrating the roast voice.&lt;/p&gt;

&lt;p&gt;Early versions were mean. Not "Gordon Ramsay calling out a burnt dish" mean — just demoralising. The kind of feedback that makes you close the tab. Getting MeDo to nail the voice of a &lt;em&gt;sarcastic-but-constructive senior engineer&lt;/em&gt; took several prompt iterations. The key phrase that unlocked it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Roast the resume like you genuinely want this person to get hired. You're harsh because you care, not because you enjoy it."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That one sentence changed the entire output character.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's next
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Interview mode — practice answering questions about your newly fixed resume&lt;/li&gt;
&lt;li&gt;Industry benchmarking — where does your score rank in your field's percentile?&lt;/li&gt;
&lt;li&gt;Chrome extension — highlight any job posting, get an instant resume gap analysis&lt;/li&gt;
&lt;li&gt;Before/after public gallery — the best roast transformations are genuinely funny&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Live app: &lt;a href="https://app-aysruew5kv7l.appmedo.com" rel="noopener noreferrer"&gt;https://app-aysruew5kv7l.appmedo.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Built with MeDo for the &lt;a href="https://medo.devpost.com" rel="noopener noreferrer"&gt;Build with MeDo Hackathon&lt;/a&gt;. If you want to try MeDo yourself, use this invite link for 300 free credits: &lt;a href="https://medo.dev/?invitecode=user-axzbcm77i2gw" rel="noopener noreferrer"&gt;medo.dev&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have a resume that needs roasting? Drop it in the comments. I won't be polite.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  BuiltWithMeDo #buildinpublic #vibe-coding #career #ai #hackathon #webdev
&lt;/h1&gt;

</description>
      <category>builtwithmedo</category>
      <category>webdev</category>
      <category>ai</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>"Building NecroOS: A Haunted Windows 95 Simulator with Kiro AI"</title>
      <dc:creator>Aryan</dc:creator>
      <pubDate>Sat, 15 Nov 2025 20:41:29 +0000</pubDate>
      <link>https://dev.to/astaaddahiya/building-necroos-a-haunted-windows-95-simulator-with-kiro-ai-4pl4</link>
      <guid>https://dev.to/astaaddahiya/building-necroos-a-haunted-windows-95-simulator-with-kiro-ai-4pl4</guid>
      <description>&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%2Fsqxqoeygapgsrza7vokh.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%2Fsqxqoeygapgsrza7vokh.png" alt=" " width="800" height="480"&gt;&lt;/a&gt;# Building NecroOS: A Haunted Windows 95 Simulator with Kiro AI&lt;/p&gt;

&lt;p&gt;What if your computer was haunted? Not just buggy—actually &lt;em&gt;possessed&lt;/em&gt;. That 2 AM thought turned into NecroOS, a horror game disguised as a Windows 95 desktop simulator. And I built it using Kiro AI's spec-driven development workflow.&lt;br&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%2Fihvgln1p15lts5lxiwla.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%2Fihvgln1p15lts5lxiwla.png" alt=" " width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  🎃 The Concept
&lt;/h2&gt;

&lt;p&gt;NecroOS starts as a comforting Windows 95 desktop—teal wallpaper, chunky pixels, satisfying clicks. But gradually, subtly, things go &lt;em&gt;wrong&lt;/em&gt;. Your cursor drifts. The calculator gives you 2+2=5. Files appear in folders you just emptied. The horror isn't in-your-face—it's the creeping dread of familiar technology betraying you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Demo&lt;/strong&gt;: &lt;a href="https://necro-os.vercel.app" rel="noopener noreferrer"&gt;necro-os.vercel.app&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Source Code&lt;/strong&gt;: &lt;a href="https://github.com/AstaadDahiya/Necro-OS" rel="noopener noreferrer"&gt;github.com/AstaadDahiya/Necro-OS&lt;/a&gt;&lt;br&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%2Fbsvbuiznij2ccvy0kbct.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%2Fbsvbuiznij2ccvy0kbct.png" alt=" " width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  🛠️ The Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Vue 3&lt;/strong&gt; + &lt;strong&gt;Pinia&lt;/strong&gt; for reactive state management&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemini AI&lt;/strong&gt; (2.5 Flash) for Cursed Clippy, Spirit Board, and Soul Scanner&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Web Audio API&lt;/strong&gt; for 4-layer dynamic audio mixing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;98.css&lt;/strong&gt; for authentic Windows 95 styling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vite&lt;/strong&gt; for blazing-fast development&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vercel&lt;/strong&gt; for deployment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The numbers&lt;/strong&gt;: 37,529 lines of code, 171 files, 11 functional apps, 4 difficulty modes, multiple endings.&lt;/p&gt;
&lt;h2&gt;
  
  
  🎯 The Kiro Difference: Spec-Driven Development
&lt;/h2&gt;

&lt;p&gt;Here's where it gets interesting. I didn't just "vibe code" this project. I used &lt;strong&gt;Kiro AI's spec-driven workflow&lt;/strong&gt;, which completely transformed how I build software.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Traditional Approach (Vibe Coding)
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Me: "Add some spooky audio effects"
Kiro: "What kind of effects? How should they trigger?"
Me: "Uh... whispers? When things get scary?"
Kiro: [Generates basic audio player]
Me: "Actually, I need multiple layers that blend dynamically..."
Kiro: [Refactors]
Me: "And it needs to scale with possession level..."
Kiro: [Refactors again]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Result&lt;/strong&gt;: 3 iterations, inconsistent implementation, no clear architecture.&lt;/p&gt;
&lt;h3&gt;
  
  
  The Spec-Driven Approach
&lt;/h3&gt;

&lt;p&gt;Instead, I created &lt;strong&gt;4 comprehensive specs&lt;/strong&gt; that became my project's blueprint:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;necro-os&lt;/strong&gt; - Base operating system&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;necro-os-advanced-haunting&lt;/strong&gt; - Possession mechanics (22 tasks)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;necro-os-visual-corruption&lt;/strong&gt; - CRT effects and glitches&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;necro-os-progressive-corruption&lt;/strong&gt; - Level-based haunting&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each spec had three documents:&lt;/p&gt;
&lt;h4&gt;
  
  
  1. requirements.md - The "What"
&lt;/h4&gt;

&lt;p&gt;Using EARS format (Easy Approach to Requirements Syntax):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Requirement 1: Possession Level System&lt;/span&gt;

&lt;span class="gs"&gt;**User Story**&lt;/span&gt;: As a player, I want the haunting to gradually intensify, 
so that I experience escalating horror over time.

&lt;span class="gs"&gt;**Acceptance Criteria**&lt;/span&gt;:
&lt;span class="p"&gt;1.&lt;/span&gt; THE System SHALL track possession level from 0 to 100
&lt;span class="p"&gt;2.&lt;/span&gt; WHEN possession reaches 30, THE System SHALL trigger cursor corruption
&lt;span class="p"&gt;3.&lt;/span&gt; WHILE game runs, THE System SHALL increase possession by 1.5 points/min
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  2. design.md - The "How"
&lt;/h4&gt;

&lt;p&gt;Technical architecture with formulas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Possession Level Formula&lt;/span&gt;

$$&lt;span class="se"&gt;\D&lt;/span&gt;elta P = 1.5 &lt;span class="se"&gt;\t&lt;/span&gt;imes m_d &lt;span class="se"&gt;\t&lt;/span&gt;imes &lt;span class="se"&gt;\f&lt;/span&gt;rac{&lt;span class="se"&gt;\D&lt;/span&gt;elta t}{60000}$$

Where:
&lt;span class="p"&gt;-&lt;/span&gt; $&lt;span class="se"&gt;\D&lt;/span&gt;elta P$ = possession increase
&lt;span class="p"&gt;-&lt;/span&gt; $m_d$ = difficulty multiplier (Tourist: 0.5x, Nightmare: 3.0x)
&lt;span class="p"&gt;-&lt;/span&gt; $&lt;span class="se"&gt;\D&lt;/span&gt;elta t$ = time elapsed (ms)

&lt;span class="gu"&gt;## Audio Volume Scaling&lt;/span&gt;

$$V(P) = V_{&lt;span class="se"&gt;\t&lt;/span&gt;ext{base}} &lt;span class="se"&gt;\t&lt;/span&gt;imes (1 + 0.05 &lt;span class="se"&gt;\t&lt;/span&gt;imes P)$$
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  3. tasks.md - The "When"
&lt;/h4&gt;

&lt;p&gt;Actionable implementation checklist:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; [ ] 1. Set up Pinia store structure
&lt;span class="p"&gt;-&lt;/span&gt; [ ] 2. Implement possession tracking with formula
&lt;span class="p"&gt;  -&lt;/span&gt; Use setInterval for continuous updates
&lt;span class="p"&gt;  -&lt;/span&gt; Apply difficulty multiplier
&lt;span class="p"&gt;  -&lt;/span&gt; _Requirements: 1.1, 1.2, 1.3_
&lt;span class="p"&gt;-&lt;/span&gt; [ ] 3. Add threshold watchers (30, 45, 70, 80, 100)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The Workflow in Action
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Phase 1: Define requirements → "What should it do?"
Phase 2: Design architecture → "How should it work?"
Phase 3: Break into tasks → "What's the implementation order?"
Phase 4: Execute → "Implement task 2.1"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When I said &lt;strong&gt;"implement task 2.1"&lt;/strong&gt;, Kiro read all three docs and generated production-ready code with full context. No clarifying questions. No iterations.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Strategic Prompt Engineering
&lt;/h2&gt;

&lt;p&gt;The quality of AI-generated code is directly proportional to the context you provide. Here's what I learned:&lt;/p&gt;

&lt;h3&gt;
  
  
  ❌ Vague Prompt
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Create an audio system"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  ✅ Precision Prompt
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Create a 4-layer audio haunting system using Web Audio API with independent 
gain nodes for ambient, effects, whispers, and tension. Scale volume using 
V = baseVolume × (1 + 0.05 × possessionLevel). Handle browser autoplay 
restrictions with lazy initialization. Integrate with Pinia advancedHaunting 
store for reactive updates."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The result&lt;/strong&gt;: Kiro generated a complete, optimized audio system in one shot—Web Audio API architecture, gain nodes, volume formulas, autoplay handling, Pinia integration, error handling, and JSDoc documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎨 The Horror Mechanics
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Possession System
&lt;/h3&gt;

&lt;p&gt;Everything revolves around one number: &lt;strong&gt;possession level (0-100)&lt;/strong&gt;. It drives all horror effects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;30%&lt;/strong&gt;: Cursor starts drifting&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;45%&lt;/strong&gt;: Wallpaper flickers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;70%&lt;/strong&gt;: Whispers and phantom notifications&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;80%&lt;/strong&gt;: Heartbeat tension, full chaos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;100%&lt;/strong&gt;: Possessed ending&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4-Layer Audio System
&lt;/h3&gt;

&lt;p&gt;Instead of random spooky sounds, I built a dynamic audio architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AudioHauntingService&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;layers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;ambient&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;baseVolume&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;  &lt;span class="c1"&gt;// Background dread&lt;/span&gt;
    &lt;span class="na"&gt;effects&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;baseVolume&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;  &lt;span class="c1"&gt;// Phantom typing, HDD grinding&lt;/span&gt;
    &lt;span class="na"&gt;whispers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;baseVolume&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="c1"&gt;// Barely audible voices&lt;/span&gt;
    &lt;span class="na"&gt;tension&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;baseVolume&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;   &lt;span class="c1"&gt;// Pre-jumpscare heartbeat&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nf"&gt;updateVolume&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;possessionLevel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;layers&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(([&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;multiplier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.05&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;possessionLevel&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;newVolume&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;baseVolume&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;multiplier&lt;/span&gt;
      &lt;span class="nx"&gt;layer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gainNode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gain&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setValueAtTime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newVolume&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;audioContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;currentTime&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Volume scales with possession level, creating audio that responds to gameplay.&lt;/p&gt;

&lt;h3&gt;
  
  
  Exorcism Mechanics
&lt;/h3&gt;

&lt;p&gt;Players aren't helpless:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Text Exorcism&lt;/strong&gt;: Type "begone spirit" (-15 possession)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File Exorcism&lt;/strong&gt;: Delete cursed files (-8 possession)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Puzzle Exorcism&lt;/strong&gt;: Complete symbol sequences in 30s (-20 possession)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each has a 2-minute cooldown, creating strategic gameplay.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI Integration with Gemini
&lt;/h3&gt;

&lt;p&gt;Three apps use Google Gemini AI:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cursed Clippy&lt;/strong&gt;: Sarcastic AI assistant with command execution&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;systemPrompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`You are Cursed Clippy, a sarcastic AI haunting a Windows 95 
desktop. Make references to being trapped. Use 90s internet culture. 
Execute commands via [COMMAND:action:target] syntax.`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Spirit Board&lt;/strong&gt;: Ouija board with AI-generated responses&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`You are a spirit communicating through a Ouija board. 
Respond in max 30 characters. Use only letters, numbers, spaces.`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Soul Scanner&lt;/strong&gt;: Webcam facial expression analysis with Gemini Vision API&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Analyze this person's expression in one cryptic sentence (max 15 words). 
If happy, threaten them. If scared, mock them. If neutral, make eerie observations.`&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;Time Comparison&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Planning with specs: 2 hours&lt;/li&gt;
&lt;li&gt;Implementation: 6 hours (22 tasks)&lt;/li&gt;
&lt;li&gt;Refactoring: 30 minutes&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Total: 8.5 hours&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Without specs&lt;/strong&gt;: Estimated 20+ hours with multiple rewrites&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quality Improvements&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Got it right the first time (minimal refactoring)&lt;/li&gt;
&lt;li&gt;✅ Consistent architecture across all features&lt;/li&gt;
&lt;li&gt;✅ Built-in documentation&lt;/li&gt;
&lt;li&gt;✅ Clear definition of "done"&lt;/li&gt;
&lt;li&gt;✅ Easy to resume after breaks&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎓 Key Lessons
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Spec-Driven &amp;gt; Vibe Coding for Complex Projects
&lt;/h3&gt;

&lt;p&gt;Specs aren't slower—they're &lt;strong&gt;front-loaded thinking&lt;/strong&gt;. Spend 2 hours planning to save 12 hours refactoring.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Specificity Beats Brevity in Prompts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Bad: "Make it faster"&lt;/li&gt;
&lt;li&gt;Good: "Batch DOM updates using requestAnimationFrame to maintain 60 FPS"&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Context Persistence is Everything
&lt;/h3&gt;

&lt;p&gt;Specs gave Kiro a complete mental model. Each conversation built on the last. No context loss between sessions.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Accessibility in Horror is Possible
&lt;/h3&gt;

&lt;p&gt;I added photosensitivity warnings, reduced motion mode, and keyboard navigation without losing the scary parts.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Audio is 50% of Horror
&lt;/h3&gt;

&lt;p&gt;Investing in the Web Audio API multi-layer system paid huge dividends. Simple &lt;code&gt;&amp;lt;audio&amp;gt;&lt;/code&gt; tags wouldn't have cut it.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 What's Next
&lt;/h2&gt;

&lt;p&gt;I'm planning:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multiplayer haunting&lt;/strong&gt; where possession spreads between users&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Procedural jumpscare generation&lt;/strong&gt; using AI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VR support&lt;/strong&gt; for truly immersive terror&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More endings&lt;/strong&gt; based on player choices&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  💭 Final Thoughts
&lt;/h2&gt;

&lt;p&gt;NecroOS started as a weird 2 AM idea and turned into the most complex project I've built. But the real story isn't the horror game—it's discovering that &lt;strong&gt;spec-driven development with AI&lt;/strong&gt; is a game-changer.&lt;/p&gt;

&lt;p&gt;Kiro didn't build NecroOS. &lt;strong&gt;I architected it through strategic prompts and specs. Kiro implemented my vision.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's the difference between "AI wrote my code" and "I used AI as a force multiplier for my ideas."&lt;/p&gt;

&lt;p&gt;The haunting is just beginning. 👻&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Try it&lt;/strong&gt;: &lt;a href="https://necro-os.vercel.app" rel="noopener noreferrer"&gt;necro-os.vercel.app&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Source&lt;/strong&gt;: &lt;a href="https://github.com/AstaadDahiya/Necro-OS" rel="noopener noreferrer"&gt;github.com/AstaadDahiya/Necro-OS&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Built with&lt;/strong&gt;: Vue 3, Gemini AI, Kiro, and way too much coffee ☕&lt;/p&gt;

&lt;h1&gt;
  
  
  kiro #ai #webdev #gamedev #vue #horror
&lt;/h1&gt;

</description>
      <category>kiro</category>
      <category>kiroween</category>
      <category>hookedonkiro</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
