← Back to blog
15 March 2026 · 400 words
The stack behind FOMO Sun
technical
Every time someone opens FOMO Sun, a surprising number of services get involved. Here's the full picture.
Frontend + hosting
- Next.js 14 (App Router) with TypeScript and Tailwind.
- Vercel for hosting, edge CDN, analytics, and speed insights. Every push to main auto-deploys production. Every PR gets a preview URL.
Weather data
- Open-Meteo for primary forecasts — hourly sunshine, clouds, temperature. Free, reliable, no key.
- MeteoSwiss open data for Swiss destinations, following the "use the national model when in the national domain" principle.
- A custom scoring layer that blends sun score, travel time, and net sun gain into the FOMOscore™.
Travel + transit
- opentransportdata.swiss (OJP) for Swiss train timetables.
- Pre-computed train-time datasets so we can rank 300+ destinations without hitting the live API on every request.
- Car estimates via distance-and-average-speed heuristics until a real routing API is worth the cost.
Geography + maps
- swisstopo tiles for the Sun Map basemap.
- Leaflet for interactive markers and overlays.
- A custom sun-hours interpolation layer that renders as a soft gradient over Switzerland.
Content
- Notion as a headless CMS for the blog and the About page. Drafts live in Notion, publish status toggles them live.
- All 323 destination stamps are AI-generated vintage travel posters via Gemini 2.5 Flash Image, then manually curated.
Analytics
- Vercel Analytics and Vercel Speed Insights, both cookieless.
- Umami as an optional self-hosted layer when we want custom events.
Dev partners
- Claude (Opus 4.6) for pair programming, code reviews, release polish, and rewriting copy that sounded like dev jargon.
- Codex (GPT-5) for short-horizon debugging spikes.
What this actually means
One developer, weekends and evenings, can ship an app that talks to national weather services, draws a usable map of Switzerland, and suggests a sunny day trip in under a second. That would have been a team of six a decade ago.
The hard part isn't the stack. The hard part is still taste — choosing what to leave out.