LeafPace - Touch grass A developer built LeafPace, a zero-backend progressive web app that generates running, walking, and hiking routes in under 30 seconds while keeping GPS coordinates entirely on-device. The app races three Overpass mirrors in parallel and hedges to Nominatim if none responds within 2.5 seconds, and runs the open-weight SmolLM2-360M-Instruct model natively on the phone's GPU via WebLLM and WebGPU, with no closed LLM API used at any point. This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass https://dev.to/challenges/hacktoberfest-week1-2026-10-05 The screen must be the shortest part of the experience. 30 seconds on your phone → 45 minutes on the trail. LeafPace is a zero-backend progressive web app that gets runners, walkers, and hikers off the screen and into the wild — in under 30 seconds: Who it's for: anyone who wants their run or hike to happen outside the algorithm — and whose home address shouldn't be uploaded to a fitness social network to do it. Privacy by architecture: there is no backend. Your GPS coordinates never leave your device — every network call LeafPace makes OSM Overpass, Nominatim, OSRM/Valhalla is a location-independent public API query, and the AI runs 100% on-device. 🔗 Live app: https://big0boy.github.io/LeafPace/ https://big0boy.github.io/LeafPace/ GitHub Pages, zero hosting cost Try it on your phone: open the link, tap 🍃 Synthesize Trail , then 📱 Lock Phone & Touch Grass . 📦 Repo: https://github.com/Big0boy/LeafPace https://github.com/Big0boy/LeafPace — every dependency is open source, every data source is an open commons. Stack: React 18 + TypeScript + Vite + Tailwind , Leaflet , @mlc-ai/web-llm lazy-loaded , SunCalc , Vitest , plus a dependency-free CDP smoke-test harness scripts/smoke.mjs that drives the real app in headless Chromium — fake GPS lock, route synthesis, GPX download and XML validation included. The part I'm proudest of is the green-space lookup, because public open infrastructure is flaky and the app must never fail — it races three Overpass mirrors in parallel, hedges to Nominatim a completely separate OSM service if none answers in 2.5 s, retries, and only then falls back to synthetic parks: // First usable answer wins; a broken mirror can never stall route generation. const winner = await firstSuccess