Back to selected work

Case study | Android + Wear OS

TrailScope

A local-first trail workout app for importing GPX routes, syncing them to a watch, recording route-following workouts, and exporting clean GPX and FIT files.

TrailScope route workflow shown on an Android phone.
Role
Product direction; Android, Wear OS, and release tooling.
Stack
Kotlin, Android, Wear OS, GPX/FIT, Health Connect.
Surface
Mobile app, watch app, shared Kotlin modules, widgets, Wear Tiles.
Outcome
Import-to-export route lifecycle with watch sync and recoverable workouts.

A complete route loop, not a single-screen app.

The visible proof is the phone route workflow, but the real product boundary is the full loop: import, review, sync, record, recover, and export.

  • Public product surface Android route workflow with GPX import and review.
  • System boundary Phone, Wear OS watch, GPS state, Health Connect, and GPX/FIT output.
  • Inspection path The phone preview, architecture diagram, and local-first note show the same import, sync, record, recover, and export loop from different levels.
  • Related product note The local-first note explains why recoverable state, offline behavior, file ownership, and release evidence matter for this kind of route workflow.
  • Private detail protected The diagram stays at product-architecture level and does not expose source code.
Diagram of TrailScope moving from GPX import to mobile review, Wear OS sync, GPS workout recording, and GPX plus FIT export.

A trail workflow that needs to survive real conditions.

Trail workouts cross fragile boundaries: imported route files, phone-to-watch sync, GPS quality, workout state, and exports that need to remain useful after the activity. TrailScope treats them as one local-first loop centered on an Android phone and paired Wear OS watch, without assuming a hosted account.

Mobile, watch, data, recovery, and release readiness.

Route import and navigation

GPX import, review, route following, GPS status, and workout recording operate as one product flow instead of isolated features.

Wear OS sync

Shared Kotlin modules keep route and workout state consistent between phone and watch-specific, wrist-first surfaces.

Recovery and export paths

Recovery flows and clean GPX/FIT exports preserve user data when GPS, sync, or device state gets messy.

Release surfaces

Health Connect, widgets, Wear Tiles, and release evidence make the product easier to test, explain, and ship responsibly.

Design for recoverable state, not just successful trips.

Local ownership

Routes, workouts, and exports remain user-owned local state while still supporting phone and watch handoff.

Interrupted workouts

Recovery is part of the normal route workflow because GPS, app lifecycle, and device connection state can change outdoors.

Export as evidence

GPX and FIT output must remain useful beyond the app, making export quality a product requirement rather than cleanup.

Protected detail

Public proof stays at the product-decision level and excludes source, real route data, precise locations, logs, accounts, and release secrets.

A focused trail computer with practical ownership boundaries.

TrailScope shows ownership of a cross-device route lifecycle, not a collection of screens. GPX import, watch handoff, workout recording and recovery, and GPX/FIT export remain one user-owned flow across Android and Wear OS.