About the project

The Spirit Box is a web-based Electronic Voice Phenomenon (EVP) simulator that lets you communicate with Cornelius Blackwood, a Victorian-era mechanic who died in 1887. It demonstrates "Frankenstein" architecture by stitching together raw WebAudio synthesis, real-time NASA space weather data, and AI to create an unpredictable paranormal experience.

Inspiration

We wanted to explore the intersection of science and the supernatural. What if ghost manifestations were influenced by real cosmic events? Paranormal researchers have long believed that geomagnetic storms affect spirit activity - so we built a tool that uses actual NASA data to determine when a ghost can "speak."

What it does

  • Scans for paranormal activity using a spectral radar and VU meter
  • Queries NASA's DONKI API for real-time geomagnetic storm data
  • Calculates "spectral energy" based on space weather (storms, solar flares, Kp index)
  • Manifests a ghost when energy ≥45% - powered by OpenAI's GPT-4o with a Victorian mechanic persona
  • Speaks through static using AI-generated voice with radio-style audio effects (reverb, distortion, low-pass filters)
  • Synthesizes analog noise in real-time using WebAudio API (no pre-recorded audio!)

How we built it

  • Kiro's Spec-Driven Development: Started with requirements → design → tasks workflow
  • Tech Stack: React + TypeScript + Vite, WebAudio API, NASA DONKI API, OpenAI (LLM + TTS) Frankenstein Stitching: Connected browser APIs (Speech Recognition, AudioContext) with cloud services (NASA, OpenAI)
  • Iterative Refinement: Used Kiro for core implementation, then vibe coding for polish 8-10 hours total from concept to deployment

Challenges we ran into

  • Audio Pipeline Complexity: Getting WebAudio nodes connected correctly (ScriptProcessor → BiquadFilter → Gain → Analyser → Destination)
  • Silent TTS Output: Debugging why ghost voice wasn't playing - needed to force AudioContext resume and set master gain
  • MCP Confusion: Initially planned to use Model Context Protocol, but learned it's overkill for browser apps - pivoted to direct NASA API calls
  • Entropy Tuning: Balancing randomness with real data so ghosts respond frequently enough for demos

Accomplishments that we're proud of

  • Real NASA Data: Using actual geomagnetic storm readings to influence ghost behavior
  • Complex Audio Effects: TTS → Low-pass filter → Distortion → Reverb → Output sounds genuinely eerie
  • Spec-Driven Success: 90% of code generated through Kiro's structured workflow
  • Production Quality: Error handling, fallbacks, auto-scroll, user-friendly UI
  • Frankenstein Theme: Successfully stitched 5+ disparate technologies into one cohesive experience

What we learned

  • Spec-driven vs Vibe Coding: Specs provide structure, vibe coding adds polish - use both!
  • When NOT to use MCP: Browser apps with simple API calls don't need protocol complexity
  • WebAudio is powerful: Can create analog-feeling effects purely through code
  • Kiro as partner: Best results come from honest conversations ("Is this the right approach?")
  • NASA has cool APIs: DONKI space weather data is free and fascinating!

What's next for The Spirit Box

  • Multiple Ghosts: Add different spirits with unique personas and voices
  • Historical Events: Tie manifestations to specific dates (ghost's death anniversary)
  • Voice Cloning: Let users upload audio to create custom spirit voices
  • Multiplayer Séances: Multiple users in the same session
  • Mobile App: Native iOS/Android with better audio processing
  • Real MCP Integration: Desktop version that connects to multiple paranormal data sources

Built With

Share this project:

Updates