Nolan Idle

Skip to content
Back to projects

2025 · Solo · PWA

Field Journal

An offline-first notebook for hike photos, notes, and where they were taken.

  • PWA
  • IndexedDB
  • Leaflet
  • TypeScript

The problem

When I hike, my phone ends up full of photos I never look at again, and the small things I noticed — a heron on the Rum River, the way frost sat on the prairie grass — disappear by the time I get home. Most journaling apps need a signal, and the places I like best usually don't have one.

What I built

Field Journal is a progressive web app that works entirely offline. You add a photo, write a few lines, and it reads the photo's EXIF data to place the entry on a small map and record the time.

Everything lives in IndexedDB on the device. When I'm back on Wi-Fi, I can export a trip as a single JSON file or a printable page. There's no server, which also means there's nothing to leak.

  • Service worker caches the app shell and map tiles for areas I've saved ahead of time
  • EXIF GPS parsing in the browser, with a manual pin when a photo has no location
  • Images are resized on-device before storing, keeping a whole summer under 200 MB
  • Works as an installed app on my phone with no app store involved

Tech stack

  • Service WorkersOffline shell and pre-cached map tiles
  • IndexedDBEntries and resized photos stored locally via a thin wrapper
  • LeafletLightweight map that behaves well without a network
  • TypeScriptVanilla TS with Vite, no framework, to keep it small

What I learned

Offline-first changed how I think about state. Instead of asking the server what's true, the device is the source of truth, and syncing becomes an export problem rather than a conflict problem. That felt like a small idea until I tried to build it the other way first.

I also found that browser storage limits vary more than documentation suggests, so I test on real devices now instead of trusting desktop Chrome.