16 February 2026 · 1150 words
Day 4: Vintage stamps, joystick physics, and why your travel app needs a soul
This is part of the FOMO Sun build-in-public series. The app is live at fomosun.com.
We're at version 63 now. Sixty-three versions of a fog-escape app built in stolen weekends and evenings. The core works: you open it on a grey Basel morning, it tells you where the sun is, and you go.
But working isn't enough. Today was about giving the app a soul.
The joystick problem nobody talks about
FOMO Sun started with a slider. Drag it to set your travel time. Simple, boring, effective.
Then we had an idea: what if it felt like a game controller? A joystick you flick left for closer destinations, right for further ones. Spring-back physics. Haptic snap. The kind of interaction that makes you want to play with it even when you don't need to.
The first version (v54) was basically a reskinned slider pretending to be a joystick. It moved and stayed. No spring-back. No character.
v55 added real physics. Spring stiffness, damping coefficients, return-to-center on release. It started feeling like something you'd find in a game. But it was too loose. Multi-step jumps. The orb would fly across the track.
v56-v57 tightened everything. One bucket per flick. Stiffer spring. Faster return. It felt right. But we'd left a visual artifact: two grey sticks. One moves with the orb, one sits frozen in the background like a ghost limb. It looked like a rendering bug.
v63 cleaned up the motion, but the ghost stick survived. That's v64's first fix: one stick, connected to center, moves with the orb. Done.
The bigger lesson: game-feel interactions take 4-5 iterations minimum to get right. The physics are the easy part. The hard part is the feel. How stiff is too stiff? How far is one flick? When does the return animation end? You can't spec this. You have to ship, test on your phone, adjust, ship again.
We're also adding proper desktop support in v64. Left and right arrow keys, rendered as actual keyboard key cap icons flanking the joystick. Mobile stays touch. Desktop gets keys. Same interaction, different affordance.
The stamp idea: why your app needs artifacts
Here's what I noticed scrolling through FOMO Sun results: every card looks the same. Name, numbers, timeline bars. Functionally complete, emotionally flat.
Then I thought about my apartment wall. I have Swiss vintage tourism posters framed above my desk. Chasseral. Rigi. The kind with bold flat mountains, three colors, and the destination name screaming in condensed type. They were designed in the 1930s and they still stop you mid-scroll.
What if every destination in FOMO Sun had a miniature version of that? A tiny stamp. Not a photo. Not an icon. A proper little poster, programmatically generated from the destination data.
The design brief wrote itself:
Bebas Neue for the destination name. It's a tall, condensed, uppercase-only display font. Free on Google Fonts. When you see CHASSERAL in Bebas Neue on a cream background with a peak silhouette above it, something happens in your brain. It stops being data. It becomes a place you want to visit.
Jost Light for the altitude and region. Geometric, quiet, Futura's open-source cousin. It lets the destination name do the talking.
Six landscape silhouettes, generated as SVG paths from the destination type: mountains get peaked ridges, lakes get wavy water with mountains behind, towns get clustered rooflines with a church spire, thermal baths get rising steam wisps. Two or three colors per stamp. A dashed perforated border for the postage-stamp feel. Slight 3-degree rotation so it looks casually stuck on the card.
The whole thing runs at build time. No AI generation. No external images. No API calls. Just a <DestinationStamp /> component that takes a name, altitude, region, and type, and returns an SVG.
All 294 destinations get a stamp automatically.
Why programmatic, not AI-generated?
I considered it. Midjourney can produce gorgeous vintage Swiss posters. I even wrote the prompt:
"Vintage Swiss tourism poster stamp for CHASSERAL, Jura. Minimalist flat color lithograph style, 1930s aesthetic. Bold geometric sans-serif typography. Limited palette: deep blue, golden amber, cream white, charcoal..."
It works. But it doesn't scale for a weekend builder.
294 destinations means 294 generation runs, a QA pass on each, hosting the images, optimizing load times, and regenerating every time you add a destination. The programmatic approach gives you consistency, zero cost, instant generation for new POIs, and total control over the output. It'll never hallucinate a sixth color or misspell Gruyeres.
The plan: programmatic SVG for all 294 as the baseline. Later, maybe Midjourney for the top 20 hero destinations. Best of both worlds.
The deeper point: data needs a costume
FOMO Sun's core value is information. Sun hours, travel time, FOMO score. But information without emotion is a spreadsheet.
The stamp doesn't add information. It adds desire. When you see that little cream-and-slate poster for Weissenstein with its Jura ridge silhouette, you don't just think "1284m, 5 hours of sun." You think "I want to be there."
The same thing happened with the joystick. A slider gives you the same data. But the flick, the spring-back, the snap -- they make you explore. You flick right just to see what's 3 hours away. You'd never drag a slider to 3 hours out of curiosity.
Every design decision in v64 follows this principle: same data, more feeling. The ticker sentences get punchier ("The fog in Basel won't lift today" hits different than "Basel: 1.5h sun"). The town names move inside the timeline bars so the comparison is tighter and more visceral. The "Based on live forecast" label moves out of prime real estate because nobody cares about data provenance when they're deciding whether to catch a train.
What's shipping in v64
One version. No mega-prompt. Lessons learned from last time.
- Joystick: remove ghost stick, add arrow key icons on desktop
- Sun + gain: unified display, green gain text tucked next to sun hours
- Hero metrics: aligned on same row as destination name
- Timeline bars: town names inside bars, bars closer together, subtle hour ticks
- Logo: proper SVG wordmark with sun-ray motif
- Ticker: 15-20 punchier sentences, single-line on mobile
- Tomorrow card: clever why-sentence explaining the recommendation
- Destination stamps: programmatic SVG, Bebas Neue + Jost, six silhouette types
- "Based on live forecast" moved to subtle footer
Small moves. Big feel difference.
FOMO Sun is a fog-escape finder for the Swiss Mittelland. Built with Next.js, Open-Meteo, SBB connections API, and two AI agents that somehow haven't broken everything yet. Try it at fomosun.com.