Inspiration
What it does
How we built it
Challenges we ran into
Accomplishments that we're proud of
What we learned
What's next for CATSETTE
Inspiration
Photos preserve what a moment looked like, but they rarely preserve the voice that explains why it mattered. Voice memos keep that feeling, but they are easily lost in a long list with no visual context. We wanted a keepsake that felt as understandable and personal as writing a label on a cassette.
What it does
CATSETTE combines one photo with up to sixty seconds of the user's own voice. Side A permanently keeps the original recording. On Side B, GPT-5.6 organizes the memory into a title, short liner note, cautiously supported context and tags. A small cat asks exactly one warm question about something the photo cannot reveal. The user reviews and edits the result before it is saved locally.
How we built it
The iOS 17 app is native SwiftUI with SwiftData metadata, file-based photo and AAC storage, PhotosPicker, AVFoundation recording and playback, Swift Concurrency and URLSession multipart networking. The cassette and cat are original SwiftUI vector components whose states reflect recording, processing, completion and playback.
The TypeScript Fastify backend transcribes audio with gpt-4o-transcribe, then sends the transcript and EXIF-stripped image to the GPT-5.6 Responses API. Zod Structured Outputs enforce the response contract. The archivist prompt prohibits identity, sensitive-attribute, exact-date and exact-place guessing. Calls use store: false, and media or content is never retained or logged.
Challenges we ran into
The hardest design constraint was keeping AI useful without allowing it to become the author of someone's memory. We made the transcript the primary source, kept the original voice permanently playable, represented uncertainty with nullable fields, prohibited unsupported inference, and limited the cat to one missing-context question.
Accomplishments that we're proud of
- A coherent photo-to-voice-to-cassette experience rather than a caption-generator prototype
- Real 60-second recording, metering, interruption handling, seeking and animated cassette reels
- A gentle original cat identity drawn entirely in SwiftUI
- Strict multimodal GPT-5.6 output with a server-side privacy boundary
- Passing iOS and Backend tests with no external iOS dependencies
What we learned
The strongest AI memory experience is often the most constrained one. GPT-5.6 can understand a photo and transcript together, but trust comes from clear boundaries: the human voice is evidence, uncertain context stays uncertain, and the user approves the archive.
How we used Codex
Codex accelerated product scoping, SwiftUI cassette and mascot interaction design, the audio and persistence layers, multipart networking, the Fastify/OpenAI backend, tests, privacy review and submission documentation. XcodeBuildMCP was used to build, test, run and record the complete simulator flow.
What's next
Next we would add optional short audio answers, encrypted family sharing, richer cassette styles and exportable memory cards—without changing the principle that AI organizes memories but never replaces them.
Built With
- codex
Log in or sign up for Devpost to join the conversation.