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 requirements
  • design.md — system architecture + correctness properties
  • tasks.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

Built With

Share this project:

Updates