I Built a 100+ File Android App Using Only Vibe Coding with Kiro
What happens when you try to build a complex Android app entirely through conversation with an AI? I decided to find out using Kiro, an AI-powered IDE.
The goal: Build a production-quality personal assistant app with voice commands, finance tracking, location-based reminders, and home screen widgets β without writing boilerplate manually.
What I Built
Smart Calendar β an AI-powered Android assistant that combines:
- π€ Voice-first chat interface with natural language understanding
- π Custom "Kiro" wake word detection
- π° Finance tracking with AI-powered SMS parsing
- π Location-based reminders using geofencing
- β Tasks, alarms, and recurring reminders
- π± Three home screen widgets
- π¬ Floating chat bubble overlay
The result: 100+ Kotlin files, 8 database tables, Jetpack Compose UI, and features I'd normally spend weeks implementing.
How Kiro Changed My Approach
1. Spec-Driven Development
Instead of jumping into code, I described features in plain English. Kiro's spec system breaks this into:
- Requirements β what the feature should do
- Design β how it should work technically
- Tasks β step-by-step implementation checklist
This forced me to think through features before coding, catching design issues early.
2. Vibe Coding
Traditional development: Google β Stack Overflow β copy β adapt β debug β repeat.
Vibe coding with Kiro: "I want wake word detection that listens for 'Kiro' and triggers voice input."
Kiro generated the AudioRecord implementation, threshold detection, and SpeechRecognizer handoff. I reviewed, tweaked, and moved on.
3. Incremental Complexity
I started with a basic reminder app. Each session added a layer:
- Session 1: Basic reminders
- Session 5: Voice input
- Session 10: Location geofencing
- Session 15: Finance tracking with SMS parsing
- Session 20: Home screen widgets
The app grew organically through conversation.
Code Example: Wake Word Detection
Here's what Kiro generated for the wake word service:
class WakeWordService : Service() {
private var audioRecord: AudioRecord? = null
private val sampleRate = 16000
private val bufferSize = AudioRecord.getMinBufferSize(
sampleRate,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT
)
private fun startListening() {
audioRecord = AudioRecord(
MediaRecorder.AudioSource.MIC,
sampleRate,
AudioFormat.CHANNEL_IN_MONO,
AudioFormat.ENCODING_PCM_16BIT,
bufferSize
)
// Audio level detection triggers SpeechRecognizer
// which checks for wake word variants:
// "Kiro", "Kyro", "Kero", "Cairo", "Kira"
}
}
I described what I wanted. Kiro handled the Android audio APIs I'd otherwise spend hours researching.
What Worked Well
β Rapid prototyping β Features that would take days took hours
β Consistent architecture β Kiro maintained patterns across 100+ files
β Learning accelerator β I learned Android APIs through generated code
β Documentation built-in β Specs serve as living documentation
What Required Iteration
β οΈ Complex state management β Sometimes needed manual refinement
β οΈ Edge cases β AI handles happy paths well; edge cases need guidance
β οΈ Platform quirks β Android-specific gotchas (like exact alarm permissions) required explicit prompting
The Numbers
| Metric | Value |
|---|---|
| Kotlin files | 100+ |
| Database tables | 8 |
| Lines of code | ~15,000 |
| Development approach | 90% vibe coding, 10% specs |
| Time saved | Estimated 60-70% |
Try It Yourself
The full source is available on GitHub. Clone it, explore the .kiro/specs/ folder to see how features were planned, and try extending it with your own vibe-coded features.
Final Thoughts
Kiro didn't replace my development skills β it amplified them. I still made architectural decisions, reviewed code, and debugged issues. But the tedious parts? The boilerplate, the API lookups, the repetitive patterns? Those became conversations.
If you're curious about AI-assisted development, give vibe coding a try. Start small, iterate, and see how complex you can go.
Built for the Kiroween Hackathon β Frankenstein Category
"Speak it. Track it. Never forget it."
Top comments (0)