Description
iDeary is a space to capture, connect, and visualize ideas as an interactive mental map inspired by graphs. It was born from a real frustration: how many times Iāve had an idea and lost it because I didnāt write it down in the moment, or how many times an idea grew when I related it to another. iDeary solves that with quick capture (text, photo, audio, drawing) and a visualization where each idea is a node and every connection tells a story.
Individual project developed for the Apple Swift Student Challenge 2026.
Problem
Existing note apps are linear. They donāt allow you to see the relationships between ideas in a visual and intuitive way. When you have many loose ideas, you lose the perspective of how they connect to each other.
My role
100% individual. From ideation and design to implementation and submission. Approximately 5,800 lines of code over 6 weeks of development.
Technical decisions
- Infinite canvas in pure SwiftUI: no SpriteKit or external libraries. Drag and pinch gestures implemented by hand with scale limits.
- Custom graph data structure: two arrays of structs (nodes and connections). No external dependencies.
- JSON persistence: direct serialization to the appās directory. Simple, portable, and easy to debug. No Core Data or SwiftData.
- Native Apple frameworks: AVFoundation for audio, PencilKit for drawings, PhotosUI for photos and video.
- Connection mode: the user activates the mode, taps a source node and then a destination node to create the visual connection with a gradient. Managing that reactive state between views was the most complex technical challenge.
Key learnings
- Knowing when to kill an idea is as valuable as having a good one. I discarded a first prototype because it was too similar to another project I had already built.
- Building something I myself wanted to use was what kept me motivated through the all-nighters.
- Feedback from people who donāt know your app is the most valuable ā and the hardest to get.
- Designing accessibility from day one, not as a checkbox at the end.