Skip to content
Farhad Nazir

Private location journal for Android

GeoPrints

An Android travel diary that automatically logs your stays, routes and photos, with all location history kept on your phone.

Role
Solo developer and designer
Platforms
Mobile
Status
Live on Google Play
Timeline
2026
  • Mobile app
GeoPrints Google Play feature graphic with the app icon and three phone screens: Today's Journal, Map Explorer and History calendar

Overview

GeoPrints (listed on Google Play as Smart Travel Diary - GeoPrints) is an Android app that builds a daily timeline of where you went, how long you stayed and how you got there, without any check-ins. A background service records location, detects stays and movements, and attaches photos from your gallery that were taken at the same time.

The app has no backend, no user accounts and no analytics SDK. Location history is stored in a local database on the phone and is not uploaded anywhere; it only leaves the device as a file when the user exports it. Map tiles and address lookups do use the network. On top of that data sit a journal timeline, a map explorer with a heatmap, a history calendar, search, place labels and a weekly life-balance summary.

I designed and built the Flutter app, the landing website and the Play Store listing graphics. The app is published on Google Play under my company, Techwine Solutions.

Built for: Android users who want an automatic personal travel and location journal without sending their location history to a cloud service.

The problem

Remembering where you went and which photos belong to which place usually means manual check-ins, or a cloud timeline service that uploads your full location history to someone else's servers.

Raw phone GPS is also unreliable. Mock locations, inaccurate fixes and sudden jumps produce distance that was never travelled, routes that cut through buildings and stays that never happened. A diary built on that data is not worth keeping.

The solution

I built a foreground location service that adapts its sampling to how the user is moving, rejects bad fixes before they are stored, and detects stays using an error-aware radius. Everything is written to a local Isar database that the app's screens read from directly.

The interface turns that data into a readable day: a journal of stays and movements, a map with cleaned routes and photo markers, and summaries of where time was spent. Gallery photos are matched to timeline events by timestamp, and users can export everything as JSON and GPX, auto-delete data older than 30 days or wipe it all.

Main features

What the software does day to day, taken from the code.
  • Automatic background tracking

    An Android foreground service samples location with separate profiles for walking, cycling, driving and staying still. Writes are buffered, and an open stay resumes correctly after a restart.

  • GPS noise filtering

    Mock locations, inaccurate fixes and physically impossible speeds are dropped. A sudden far jump is held until the next fix confirms whether it was real movement or a spike.

  • Stay detection

    A stay begins when recent fixes over several minutes fit within an accuracy-aware radius, and ends only after consecutive fixes fall outside the exit radius, so brief GPS drift does not split a visit.

  • Today's Journal

    A chronological timeline of stays and movements for the day, with durations, distance for each movement and a total count of stays.

  • Gallery photo matching

    Photos taken today are attached to the timeline event closest in time. The app reads only timestamps and file paths, and the photos never leave the device.

  • Map Explorer with heatmap

    Cleaned routes split by activity, clustered stay and photo markers, follow mode, dark and light basemaps and a heatmap of frequently visited areas. Viewed map tiles are cached on the device.

  • Place labels

    Frequently visited places can be labelled Home, Office, Gym, Food or a custom name, and those labels then replace raw addresses across the timeline.

  • History calendar and search

    A month calendar marks recorded days and opens each day's activity. Search covers past locations with quick filters such as stays longer than 15 minutes, food and coffee.

  • Life balance and daily story

    A rolling 7-day split of time at home, at the office, in transit and elsewhere, plus a rule-based written summary of each day generated on the device.

  • Data ownership controls

    Export the full history as JSON and GPX through the share sheet, auto-delete records older than 30 days, clear the map cache or delete all data.

Screens from the software itself. Design prototypes and illustrative mockups are labelled as such.

GeoPrints Map Explorer in dark mode with a cyan route line, stay duration markers, matched photo bubbles and zoom, locate, theme and heatmap controls
Map Explorer draws the recorded route with stay markers and matched photos.
GeoPrints Today's Journal timeline with stays labelled Home, two gallery photos attached to a stay, and a stationary period
Gallery photos are attached to the timeline event closest in time.
GeoPrints Edit Place Label sheet with Home, Office, Gym, Food and Custom Label options and arrival, departure and duration times
Frequent places can be given a label that replaces the raw address.
GeoPrints settings screen with a battery optimization section and a system permissions list explaining location, notification and photo gallery access
Each permission is explained in the app, with its current status.

Development and architecture

GeoPrints is an offline-first Flutter app organised by feature, with Riverpod providers over a local Isar database. There is no server: background work runs in an Android foreground service isolate, and the UI and the service share the same database schema.

The tracking logic (point filtering and stay detection) is plain Dart with no Flutter dependencies, which let me cover it with unit tests. Maps use flutter_map with CARTO and OpenStreetMap tiles, addresses come from the phone's built-in geocoder with a local cache, and a nightly local notification reminds the user to review the day.

The landing page is a single static site built with HTML, Tailwind CSS and vanilla JavaScript, with structured data for the app, the organization and the FAQ.

Privacy by architecture
I chose to have no backend, no accounts and no analytics at all. Location data stays in the on-device database unless the user starts an export, so privacy does not depend on a policy page alone.
Tested tracking core
The tracking and route-cleaning code is covered by 20 unit tests, including cases for mock fixes, accuracy limits, speed limits, spikes and stay entry and exit.
Battery-aware sampling
Sampling intervals change with the motion mode reported by Android activity recognition, with a short fast-sampling window to catch the moment a user leaves a stay.
On-device route cleaning
An earlier build snapped routes using a public OSRM server. I replaced it with on-device smoothing that breaks lines at time and distance gaps, splits them by activity and removes redundant points, so recorded routes are no longer sent to an outside server.
Shared database across isolates
One Isar schema list is used by both the UI and the background service isolate, with stays, location points, place labels and a geocode cache keyed at roughly 50 meters to avoid repeated lookups.
Play policy compliance
A prominent location disclosure and a permissions hub explain each permission before it is requested. No native permission prompt fires on launch, and restart on boot only happens when background location is granted.
Large exports
JSON and GPX 1.1 exports are written in pages of 5,000 records, so long histories can be exported without loading everything into memory at once.

Technology

  • Flutter
  • Dart
  • Android
  • Riverpod
  • Isar
  • flutter_map
  • OpenStreetMap
  • Android Activity Recognition
  • GitHub Actions
  • Tailwind CSS
  • JavaScript
Asaan Optics Desktop Stock Control Center showing stock value at cost and retail, potential profit, stock by category, last 30 days of sales and low-stock alerts

Optical shop management SaaS

Asaan Optics

Optical shop software for Android and Windows: prescriptions, counter sales, stock and staff shifts on one shared shop account.

  • SaaS product
  • Mobile app
  • Desktop app
  • Business system
Techwine Solutions homepage hero with the headline 'Digital reality on demand', the red and black Techwine logo and a glass navigation bar

Agency website and custom CMS

Techwine Solutions

The website of my software agency, backed by a custom Laravel and Livewire CMS for services, case studies, SEO and leads.

  • Web application
  • Business system
KAYANAK website home page in English with a no-down-payment installment hero, a Nissan SUV over the Riyadh skyline and a car search panel showing 1,841 cars available

Car marketplace and sales CRM

KAYANAK

Arabic-first car marketplace and sales CRM for a Riyadh car business, with installment pricing, car-wash booking and an AI sales assistant.

  • Web application
  • Mobile app
  • E-commerce
  • Business system

Have a software idea or a business process that needs a proper system?

Tell me what you are trying to fix. I will reply with honest questions, a practical plan and a realistic estimate.