paurk
Quiet-spot discovery for right now
A fully client-side web app that ranks 604 public spots across 44 cities for the current moment — sun, weather, chosen vibe and walking distance — on a custom three.js globe. No backend, no map tiles, no API keys.
- 604 spots ranked
- 44 cities
- 170 KB first load, gzipped
01
Problem
Most "things to do" apps rank a place the same way at 7am on a Tuesday as at sunset on a Saturday. I wanted a tool that answers a simpler question: where is a good, quiet public spot to be *right now* — given the light, the weather and how far I feel like walking.
02
What I built
- A static React + TypeScript app that scores 604 curated public spots across 44 cities by period of day, live weather, a chosen vibe and walking distance, and explains every top pick in one line.
- A custom three.js globe with dot-matrix land sampled from world-atlas at build time and a real day/night terminator refreshed every minute.
- A d3-geo 2D fallback for devices without WebGL, so the app never shows a blank hero.
- On-device sunrise, sunset and golden-hour math with SunCalc, and keyless forecasts from Open-Meteo.
03
Technical decisions
- Fully client-side by design: no backend, map tiles or API keys means nothing to run, nothing to leak and nothing to pay for.
- The globe engine and per-city content are deferred until needed, holding the first load to 170 KB gzipped.
- Ranking, geo and sun-time logic are pure functions covered by Vitest; a headless-Chromium check enforces 44 px tap targets on mobile.
04
Results
- Live at paurk.com, deployed on Cloudflare Pages with builds on every push.
- 170 KB gzipped first load with a WebGL globe on the page.
- Every ranking decision is explainable in a single sentence in the UI.
05
What I'd do next
- Let people submit spots with a lightweight review queue.
- Cache the last forecast so the app still ranks sensibly offline.
- Add a "walk there" route preview using on-device routing data.
Built with
- React
- TypeScript
- three.js
- Vite
- Vitest
- Cloudflare Pages