How Kiro Specs Made Me Ship a Full-Stack AI App in 48 Hours
The Challenge
I had 48 hours to build NecroNet-a full-stack AI application that resurrects dead web artifacts (Flash, old HTML) into an interactive museum. That's:
- React + Next.js frontend
- FastAPI backend
- Supabase database
- AWS S3 storage
- ElevenLabs voice integration
- Ruffle emulator for Flash playback
48 hours. Solo developer. This needed serious automation.
The Solution: Kiro Specs
Instead of jumping into code, I spent 30 minutes writing /resurrection.spec.md:
Project: NecroNet
Goal: Resurrect obsolete web artifacts into an interactive museum
Stack: FastAPI, Next.js, Supabase, S3, ElevenLabs
Pipeline:
User uploads artifact → Backend detects MIME type
Migration service → Ruffle for Flash, sanitize HTML
AI narration → ElevenLabs generates ghost curator voice
Museum exhibit → Published to gallery
Database:
artifacts table (id, name, type, storage_url, status, ghost_narration_url)
migration_logs table (artifact_id, event, timestamp)
Then I gave Kiro this spec and asked: "Generate the database schema, API endpoints, and migration pipeline based on this."
Result? Kiro generated code that actually fit together. No refactoring. No "wait, this doesn't match the schema." It just worked because Kiro understood the entire system upfront.
Why Specs Beat Vibe Coding
Vibe Coding: "Make me a file upload endpoint"
- Kiro generates a handler function
- You paste it in
- You realize it doesn't know about your S3 bucket configuration
- You ask Kiro again: "Update it to use AWS"
- You debug for 30 minutes
- It still doesn't integrate with your migration pipeline
Spec-Driven: Define the contract upfront
- Kiro sees the full architecture
- Generated code respects the database schema
- Endpoints return the right data types
- Integration points are already designed
- Code ships with 80% fewer surprises
The Steering Docs Cherry on Top
I also created /curator.steering.md:
Curator Steering
Voice: Spooky but Professional
Tone: Witty, preservationist, theatrical
Examples:
"This Flash game was released in 2003 during the golden age of Newgrounds..."
"The original devs are probably on LinkedIn now. 🎃"
"Museum note: This artifact demonstrates early web creativity..."
text
Every time Kiro wrote UI copy or generated the ElevenLabs narration prompt, it followed this steering. Result: the entire app had one cohesive personality. Not generic. Not "meh." Haunted.
The Numbers
- Time to MVP: 6 hours (thanks to spec-driven generation)
- Time debugging integration bugs: ~30 minutes (Kiro already aligned everything)
- Lines of code I had to rewrite: < 100 out of 5000+
- Coffee cups: 4 (could have been 8 with vibe coding)
What I Learned
- Specs are documentation AND contracts. Kiro uses them to generate aligned code. So do future developers reading your codebase.
- Steering matters. Without it, every generated artifact is a snowflake. With it, your product has a voice.
- Context is king. Vibe coding = asking for help with no context. Specs = walking someone through your entire system first.
The Bottom Line
If you are shipping under deadline (or just shipping, period), stop vibe coding. Write a spec. Give it to Kiro. Watch your project assemble itself.
The future of development isn't "write better prompts." It is "write better specs."



Top comments (0)