Ghost Deck brings the physical cassette ritual into a browser. It opens with a built-in two-sided demo, then lets listeners choose one local audio file for each side using the control on that cassette face. Title and artist tags populate its handwritten-style paper label, with a filename fallback when tags are unavailable. The readout shows elapsed and total time.
Click the cassette body or press Flip to turn it over. Playback stops, each side keeps its own position, and the destination arrives paused. Reel holes rewind instead of flipping; upload controls load songs instead of flipping. Short effects, moving reels and the turning animation connect each action to the object on screen.
This is a small two-song player, not a multi-track mixtape editor. Personal files stay in the open browser page and are never uploaded to a server.
Try it
Play the built-in tape or select one local song per side. Flip during playback, then flip back to check that the deck remembers your position. Click either reel to rewind.
How Kiro helped
I used Kiro IDE to review Ghost Deck’s cassette playback and animation behavior. The retained review files cover the flip animation and its follow-up fixes, saved playback positions, rewind cleanup, and handling audio errors after playback starts. Kiro’s animation review prompted fixes to duplicate animation styles, the flip midpoint, and cancellation when another control interrupts a flip. Follow-up reviews checked the changes. The root .kiro directory preserves those actual reviews. Review files are in .kiro/specs/ghost-deck-playback. Codex implemented changes and ran separate browser checks.
Built With
- codex
- css
- html
- javascript
- kiro-ide
