Inspiration
This project was inspired by the Kiroween theme a fun, spooky challenge that encouraged creativity while showcasing real engineering discipline. I wanted to prove that even a playful idea like a “haunted feedback form” can be built using formal specifications, automation, and property-based testing. The goal: [ \text{Fun Concept} + \text{Structured Engineering} = \text{Reliable Spooky App} ]
What it does
The Haunted Feedback Form lets users submit eerie or playful messages with a fully spooky UI. Behind the scenes, it uses:
- AI-generated spooky messages
- Hooks for automated content generation
- Cleanly structured specs
- Verified correctness using property-based tests
- Smooth UI transitions and themed styling
It’s a simple app on the surface, but powered by rigorous engineering underneath.
How we built it
The entire project was constructed using Kiro’s structured workflow:
Specifications (Specs)
Located in .kiro/specs/:
requirements.md— EARS-style formal requirementsdesign.md— system architecture + correctness propertiestasks.md— actionable build plan
These dictated what to build, ensuring clarity from the start.
Steering Files
Stored in .kiro/steering/:
- Provide product context, tone, tech stack, and structure
- Ensure all AI outputs remain consistent and on-theme
Hooks
A custom hook, generate_message.js, automatically creates spooky messages using rules defined in the project.
Property-Based Testing
Using fast-check, we tested mathematical correctness properties like: [ \forall x,; decode(encode(x)) = x ] and [ formData \rightarrow roundTrip(formData) = formData ]
Tests include:
- Form submission correctness
- URL encoding/decoding
- Message generation completeness
- Success page parameter handling
Challenges we ran into
- Translating high-level EARS requirements into implementable logic
- Maintaining a consistent spooky theme across all AI-generated outputs
- Designing meaningful property-based tests
- Ensuring data integrity across URL parameters
- Balancing creativity with formal engineering practices
Accomplishments that we're proud of
- Built a fun, spooky project with a serious engineering backbone
- Implemented spec-driven development from start to finish
- Created custom hooks for dynamic message generation
- Added fast-check property-based tests for deep correctness
- Demonstrated how Kiro can support both creativity and rigorous development
- Maintained full consistency across docs, code, and output using steering files
What we learned
- How to define formal, testable requirements using EARS
- The power of steering files for consistent AI-assisted development
- How hooks can automate domain-specific logic
- How property-based testing reveals edge cases traditional tests miss
- That fun, spooky projects can still follow strict engineering workflows
- Structured development leads to fewer errors and faster iteration
Log in or sign up for Devpost to join the conversation.