---
title: "Waypoint Mobile"
slug: waypoint-mobile
date: 2025-11-05
url: https://mohammadhameed.dev/projects/waypoint-mobile
status: paused
tags: ["fullstack", "geospatial"]
technologies: ["Expo", "React Native", "MapLibre"]
---

{/* Sample case study for the design refresh — placeholder numbers; this one
    stays 'paused' honestly to exercise that status across the site. */}

I wanted a hiking journal that understood mountains. Every trail app flattens
your day into a polyline on a 2D map — but in the Rockies the *elevation* is
the story: where the wind turned, the altitude where the view opened, the
boulder field that broke the rhythm.

Waypoint wrote every note against a 3D position: lat, lon, and the elevation
band you were standing in.

## What worked

- **Offline map packs.** Three regions, vector tiles on device, because the
  best notes happen where the bars are zero.
- **Elevation-native annotations.** A note at 2,180 m on the north face is
  a different fact than the same words at the trailhead.
- **Fast, quiet sync.** Walk into coffee range, the day uploads itself. No
  spinners, no ceremony.

<Figure src="/images/projects/waypoint-mobile-alt.svg" alt="A day on the wall" caption="Route, elevation band, and the notes pinned between them." />

<Callout type="insight">
The sync design here — resumable queues, field-level merge, honest status
lines — became the direct ancestor of CollectKit's architecture. This
"failed" product paid for itself twice.
</Callout>

## Why paused, honestly

Autonomy research consumed the calendar, and a journaling app without its
author on the trail is just software. Pausing is a decision, not a defeat —
the roadmap is written, the codebase is tidy, and the thesis is done.

If offline-first mobile is your problem, the lessons inside are [more useful
than this page suggests](/contact).
