Note To Self
Note To Self is a clever way to capture your personal inspirations and send them to your future self. Built from a personal need and as a means of exploring Cursor and Xcode for end-to-end iOS design and development.
Note To Self is a clever way to capture your personal inspirations and send them to your future self. Built from a personal need and as a means of exploring Cursor and Xcode for end-to-end iOS design and development.
I built Note To Self to solve a problem I had that I couldn’t find a solution for.
My notes app was constantly filled with lil anecdotes, thoughts, and inspirations I gathered throughout the day. These would mostly end up stowed away in a folder, rarely visited. It seemed like a waste to stack up these little treasures but never putting them to use. I wanted to sort this out.
When I build a product or business I like to start at the highest level with defining the must, should, and could. I find this is useful to clarify the build and prevent unnecessary diversions or bloat. I couldn’t find an existing app that hit my musts so I built it. This was the requirements.
Note To Self...
Must
• Let me easily capture thoughts or inspirations in text form
• Send these to me at random intervals in the future
• Store all data on device for privacy
• Not use server processes because I ain’t got time for that
Should
• Be simple and intuitive
• Be different enough from Apple notes and reminders to justify it’s existence
Could
• Allow the user to choose between random or pre-set notification intervals
• Allow the user to set location based reminders
• Have a companion widget to display notes to self on homescreen
• Be design customizable by the user
• Allow the user to instruct Siri to add a note to self
• Have downloadable packs of poet, philosopher, other notes
• Enable in-app subscription or pack purchasing
I also had the desire to build a fully functional iOS application end-to-end using AI and this seemed like the perfect project. As a PM and founder I’ve generally been on the strategy, design, and business development sides of things (although I’ve often worked on algorithms and other dev side processes as a counterpart to my development teams). For NTS the success metric was to achieve the musts list in deployed app and purchaseable app on the iOS store.
To do this I used a combination of Cursor, Claude AI, ChatGPT, and Xcode. I started with describing the general “vibe” of the app and what I wanted to achieve to Claude in its stand-alone app. I asked it to take me step by step in building out the project in Xcode. There were some obvious hurdles in this approach. I found that what worked best was to have Cursor (using Claude 3.5) reading and writing in my main dev file and then to have Xcode live to preview design changes and error messages. I did not find that it worked well to have Cursor create the files for me so I would create them myself in Xcode and then read/write via Cursor. This method enabled me to move quickly and preview design/function changes in near real-time. I was able to build a working prototype using SwiftData within a handful of hours.
This took a good deal of iteration between me, Claude, and ChatGPT acting as the third person in the room looking over our shoulders. When I’d run into an issue in the code that Claude wasn’t quite sorting I’d drop it into GPT and get its take. Part of the way through the process OpenAI enabled the connection between ChatGPT and Xcode but I never found this to be very useful.
The most complicated part of the process was in hacking an approach to send random notes to the user in the form of notifications. If I had the app built with a server backend up we could create logic to pull randomly from the database and then push notifications to the user but I didn’t want to rely on any server side processes. SwiftData meant all the user’s data was private and on device.
Solving this was something that the AI really couldn’t sort by itself. Luckily for me I have a nice lil human brain prone to creative solutions. I came up with idea of scheduling a large batch of notifications at app launch or new note creation. The final notification is the batch is a “tap to view” notification so the user is incentivized to re-engage with the app and the app restarts its cycle of notifications. These notes to self are scheduled ahead with a random number generator introducing variances in the timing. It’s a hack, not perfect, but works (see below for notification management code).
All in all the experience from idea to live prototype took a couple afternoons and prototype to live app on the store a handful of days. I'm gonna tackle a handful of the things on the could list in V2. Lemme know if you have any good ideas to add!
Here’s that bit of code for the notifications for those who are interested: