← All projects

Project

📍 PinPoint

A privacy-first map tool for saving places that matter.

Live React TypeScript PWA Local-first

The problem

Modern map apps are powerful, but many are optimized for engagement rather than ownership. They require accounts, store location history in the cloud, and blend personal memories with commercial recommendations.

PinPoint is the focused alternative: mark personal places and come back to them quickly — privately, with no backend involved.

The use case

  • Where did I park?
  • What was that quiet fishing spot?
  • Where exactly did we take that photo?
  • Where did I propose?

Core principles

Three constraints that shape every product decision.

  1. Local-first. Pins are stored in LocalStorage on-device. No server, no account, no cloud.
  2. Minimal surface area. No ratings, reviews, ads, or recommendation loops. Just your places.
  3. Utility over complexity. Precision placement and fast retrieval first. Everything else is secondary.

Features & architecture

🎯 Precision pins

Tap to draft, drag to fine-tune. Coordinates are exact.

🏷️ Category system

10 visual categories with custom icons and colors for instant recognition.

🗺️ Map layers

Standard, dark mode, and satellite options via OSM, Carto, and Esri tiles.

🧭 Smart directions

One-tap handoff to Google Maps navigation from any saved pin.

🔍 List tools

Live search, category filters, and mobile-friendly swipe-to-delete.

📱 PWA support

Home-screen install and fullscreen app-like usage on mobile.

Technical stack

  • Frontend: React 19, Vite, TypeScript, Tailwind CSS
  • Maps: Leaflet with OSM, Carto, and Esri raster tiles
  • State: LocalStorage with JSON serialization and safe parsing
  • UX: Mobile-first, safe-area handling, custom transitions
  • Delivery: No backend, no service worker (intentional early-stage tradeoff)

Tradeoffs & constraints

PinPoint intentionally avoids accounts, sync, and server infrastructure. That keeps it private and simple, but it means:

  • Clearing browser data deletes saved pins
  • No automatic backup yet
  • Not built for collaborative map editing

What I learned

  • Local-first removes ops overhead but raises UX responsibility around data safety
  • Mobile map UX depends heavily on spacing, safe areas, and gesture expectations
  • Service workers should be introduced only with strict cache discipline
  • The smallest feature sets are often the hardest to refine

Future directions

  • Optional encrypted cloud backup
  • Shareable view-only maps
  • Folder-based pin collections
  • A lightweight opt-in sync mode

Try PinPoint

Drop a pin. Name it. Find it again. That’s it — no account needed.

PinPoint is independently built and maintained. If it helps you, consider supporting its development.