ECHO is a minimalist, offline-first reminder app that fires based on where you are, not just when. Drop a pin, set a radius, and ECHO nudges you the moment you arrive — no account, no signal required.
| Year | 2025 |

I don't forget tasks because of when they matter — I forget them because of where. “Pick this up when you get to campus.” “Remind her when you're at her place.” Time-based reminders never had an answer for that, so I built ECHO: a location-first reminder app that surfaces the right task at the right place, whether or not I'm online.


Challenge
Most reminders are built around clocks, but half of real life is tied to places — and the moment you pass that place, the reminder is useless. Building ECHO meant making location sensing work reliably in the background, where operating systems aggressively fight to save battery, and where platform limits quietly break naive implementations.
Action
Building for myself
I started ECHO to fix my own habit of forgetting location-based tasks — walking past the pharmacy and remembering two stops later. The goal was a clean, intuitive, offline-first tool that just works when I'm there: no account, no setup friction, no cloud dependency.
Technical foundations
ECHO is built with React Native and Expo (SDK 54) — one codebase for iOS and Android. Geofencing runs on expo-location's region monitoring backed by a headless expo-task-manager task, so reminders still fire when the app is closed. Notifications are local, delivered through expo-notifications with action buttons you can act on from the lock screen. Everything persists offline in AsyncStorage, with a NetInfo-driven banner when connectivity drops. React Navigation 7 handles the stack and tabs, and the minimalist UI is set in Archivo and Bricolage.
Problems while building
The hardest part was background reliability. iOS only allows 20 monitored regions per app, so ECHO caps active reminders at 20 and syncs geofences from a single source of truth — using a dirty-check signature and a serialized promise chain to kill race conditions when reminders change in quick succession. The background task has to hold its promise open until all side effects complete, or the OS tears it down mid-work. Search was another fight: reverse-geocoding every keystroke was slow and rate-limited, so ECHO debounces forward geocoding while you type and only reverse-geocodes the pin you actually tap. All of it had to balance accuracy against battery, which meant testing on real devices instead of trusting the simulator.
Result
ECHO ships the full loop: search or drop a pin, set a radius from 50 to 1,000 meters, pick an icon and color, and get an actionable notification on arrival — with repeat reminders, saved locations, and an offline-first store underneath. Reminders stay accurate in the background without draining the battery, everything works with no connection, and the codebase is covered by unit tests with TypeScript checking. It's the app I reach for when I need to remember something where, not when — and the foundation is clean enough to grow on.