Geospatial · Browser-local · SVG · Next.js · 2026 · Solo — geospatial algorithm design, TDD implementation, interaction design, deployment
GeoStamp
Drop your Google Timeline history, see every trip on a cartographic SVG map, and export a shareable travel card — 100% browser-local.
The problem
Google Timeline shows raw location history chronologically — there is no way to isolate distinct trips, inspect spatial routes on a clean map, or produce a shareable card without uploading data to a third-party service. The underlying challenge is algorithmic: you must statistically identify a user's home location from dwell patterns, then cluster away-segments by spatial proximity and duration.
Architecture
Key decisions
Haversine + dwell-time home cluster
Home detection bins visits into ~1km grid cells (0.01° resolution), finds the maximum-dwell cell, then computes the centroid of all visits within 50km of that cell. This handles multi-unit buildings and commuter noise without requiring a pre-labelled 'home' place.
Spatial-gap trip grouping with time threshold
Adjacent away-segments (>50km from home) are merged when the spatial gap between them is <200km and the time gap is <24h. This correctly joins multi-leg journeys (fly + hotel + drive) while separating distinct trips with return-home gaps.
pathLength=1 animation without computing pixel length
Setting pathLength=1, strokeDasharray=1, and animating strokeDashoffset from 1→0 lets the browser's own rendering engine handle path-length measurement at any resolution, with no JavaScript pixel-length computation required.
Pure TypeScript — no external geospatial library
The entire spatial engine is self-contained and tree-shaken. No Turf.js, no proj4, no Leaflet. This makes the algorithm transparent, fully testable in isolation, and fast to load in the browser.