-
-
Easy Remember Pro via RevenueCat: reminders, Daily rediscover, Weekly review and App Lock. Monthly or lifetime.
-
Native iOS share sheet: save from any app with a note and a topic, without leaving the app you're in.
-
Easy Remember: one private library for the links, videos, notes and images you want to come back to.
-
Search finds items by the words in your own note, as well as titles, descriptions and links.
-
A notebook too: headings, lists, checklists and images, with autosave, undo and redo.
-
Social videos too: the post's preview image plus your own note, so you remember why you saved it.
-
How it's built: Expo + React Native, a SwiftUI share extension, an App Group inbox, SQLite and RevenueCat. Everything stays on the device.
-
-
-
Inspiration
I kept losing things I meant to come back to: a video on Instagram, a recipe in Safari, a screenshot with an idea. They ended up spread across saved posts, open tabs, chats with myself and the camera roll. When I needed one, I couldn't remember where I'd saved it, only what it was about. I wanted one private place where saving takes seconds, finding takes one search, and the app reminds me to actually come back.
What it does
Easy Remember saves links, videos, notes and images from any app into one private library on your phone.
- Share from any app. On iPhone, a native share sheet opens right where you are, so you can save ten videos in a row without leaving Instagram. On Android, it's the same flow through the system share menu.
- Say why it matters. Add a note, pick a topic and set the importance (Low, Medium, High or Auto).
- Topics that adapt to you. The topics you use most move to the top, based on how recently and how often you use them.
- Find it in seconds. Search titles, your notes, descriptions and links, then filter by importance and sort by priority or date.
- Rich notes. Headings, lists, checklists and photos, with autosave, undo and redo.
- Easy Remember Pro (monthly or lifetime, via RevenueCat). Remind me for any item or topic (once, weekly or monthly, even from the share sheet), Snooze / Done / Open link right in the notification, Daily rediscover, a Weekly review and App Lock with Face ID.
- Private by design. No account and no ads. The library stays on the device, reminders are local notifications, and optional crash reports never include your content.
How I built it
- Expo SDK 57 / React Native with strict TypeScript and expo-router, shipped to Google Play and the App Store from one codebase.
- Clean architecture: pure domain rules, application services and ports, with SQLite, filesystem and native adapters behind interfaces, composed at the app root.
- SQLite as the single source of truth, with 27 versioned migrations, transactions and a "Recently removed" recovery flow.
- iOS Share Extension in native SwiftUI, generated reproducibly through
@bacons/apple-targets. It writes atomic JSON records into an App Group inbox, which the app imports idempotently on next launch. A share is never lost, even if the app isn't running. - Link metadata parser ported from TypeScript to Swift, so the share sheet shows the same title and image as the app.
- Topic "frecency" ranking:
usage_rank = ln Σ e^(t/τ)with a 30-day half-life, stored as one number per topic and updated in O(1) on every use. - RevenueCat for Pro on both stores: one
proentitlement, monthly subscription and lifetime purchase, offerings and restore, behind aProPurchasesport. Test-store keys only ever load in development builds. - Local notifications with actionable categories (Snooze 1 h, Done, Open link), weekly and monthly repeats, and a headless Android task for notification actions.
- Sentry crash reporting behind an
ErrorReporterport, scrubbed so no library content leaves the device. - Tests: 665 Jest tests plus real-SQLite harness scripts for migrations, imports, reminders and topic ranking.
Challenges I ran into
- iOS share sheet parity with Android. iOS extensions run in a separate, memory-limited process with no access to the app's database. I designed an App Group "inbox" plus a read-only snapshot of topics, so the sheet can detect duplicates and create new topics just like Android.
- A crash only Apple's reviewers hit. The app crashed when iOS closed it in the background. Device crash logs, symbolicated against the build, showed SQLite's full-text-search statements being finalized twice when the database connection closed on unmount. The fix was one app-wide connection that is opened once and never closed by the UI.
- Link previews on social apps. Instagram and similar sites return thin metadata, so the parser needed site-specific fallbacks to show a useful title and image.
- Ordering topics without annoying the user. A plain "most used" order sticks forever. Exponential decay lets recent habits win while keeping long-time favorites near the top.
- Privacy-safe crash reports. I turned off screenshots, replays, network and console breadcrumbs, and redacted text before sending, while keeping reports useful.
Accomplishments that I'm proud of
- A native-feeling share flow on both platforms that saves in two taps without leaving the app you're in.
- An idempotent, crash-safe import pipeline: the same share can never create two items.
- A full product shipped as a solo developer: two stores, in-app purchases with RevenueCat, a website, a support page and a promo video.
What I learned
- iOS app extensions, App Groups and how to keep native targets reproducible with Expo's Continuous Native Generation.
- How store billing really works end to end: agreements, tax forms, products, sandbox testing and RevenueCat entitlements.
- That ranking algorithms matter for UX as much as visual design.
- That building privacy in from the start (ports, redaction, on-device data) is far easier than adding it later.
What's next for Easy Remember
- Export and import, backup and moving to a new phone.
- On-device smart features: text recognition in saved images and automatic topic suggestions, with nothing uploaded.
- Home screen widgets and faster "save from clipboard".
Built With
- android
- app-groups
- eas
- expo-router
- expo-sqlite
- expo.io
- ios
- jest
- react-native
- sentry
- share-extension
- sqlite
- swift
- swiftui
- tanstack-query
- typescript
- zustand

Log in or sign up for Devpost to join the conversation.