Inspiration

I’ve always wanted a simple yet meaningful way to preserve my life’s milestones—travels, achievements, and personal highlights—in one place. Existing journaling apps felt too busy, social, or focused on daily logging rather than the big moments. That inspired me to build Memorable Milestones, a private time capsule that lets you reflect on your journey year by year.

What it does

Memorable Milestones helps users capture the moments that truly matter. Each entry can include a title, notes, photos, categories, and tags, all organized automatically by year and age. Users can also link milestones to specific locations through MapKit, making memories even more vivid and context-rich. To celebrate important moments beyond the app, users can generate shareable image cards with milestone details, perfect for posting on social media. The app makes it easy to revisit your personal timeline, see how you’ve progressed over time, and reflect on your journey. Privacy is at its core, with local storage and optional Face ID locking to keep memories completely private.

How I built it

I built the app using Swift 6.2 with strict concurrency and the latest SwiftUI features from iOS 26, while still maintaining support for iOS 17 and 18. For local data storage, I implemented SQLite via a lightweight package called SQLite-data and learned SQL to structure and query the database. I integrated RevenueCat for subscription management, which streamlined the premium upgrade experience, and added OneSignal for push notifications, which turned out to be much simpler to set up than I expected. The app also uses MapKit to display maps and let users attach locations to their milestones, and leverages the ImageRenderer API to create custom, delightful shareable images for posting on social media.

Challenges I ran into

One major challenge was learning SQL from scratch to handle local storage effectively. While I initially considered SwiftData, its instability led me to take on the learning curve of SQL instead. Another recurring challenge was iterating on the UI and UX design—I often found myself unsatisfied with early versions and kept refining until the experience felt right. Working with the Swift 6 compiler was also tough at first, as its strict concurrency rules surfaced many errors. Over time, I came to appreciate how those errors prevented subtle multithreading crashes and made the app more reliable.

Accomplishments that I'm proud of

I’m proud to have designed and developed this project entirely on my own, bringing an idea I’ve had for years to life. Creating an app that allows me—and eventually others—to capture milestones and reflect on personal growth feels incredibly rewarding. I’m also proud of integrating key technologies like RevenueCat quickly and smoothly, which freed me to focus on building features and crafting the overall experience.

What I learned

This project taught me that mobile app development is both challenging and deeply rewarding. I learned the value of embracing strict compiler checks as a safeguard against future issues. I also discovered how approachable new tools can be—like OneSignal, which I had avoided in the past but found easy and effective once I tried it. Most importantly, I learned the importance of persistence and iteration in design: every challenge was an opportunity to rethink, improve, and push the app closer to what I envisioned.

What's next for Memorable Milestones

Next, I want to expand the app’s capabilities with Apple’s Journal Suggestions API, allowing users to import meaningful suggestions automatically. I also plan to add more customization options, including themes and personalization, so users can make the app truly their own. Over time, I’ll continue refining the experience and expanding features that make revisiting life’s milestones even more delightful.

Built With

  • firebase
  • kingfisher
  • lottie
  • onesignal
  • revenuecat
  • shared
  • sqlitedata
  • swift
  • swiftui
Share this project:

Updates

Submission history