ShortStayGuide
ProjectTri-locale curated travel guide platform (EN/FR/ES). 3,087 city guides (343 cities × 3 durations), 17,445 persona guides, 2,580 neighborhoods, 540 road trips, 333 worth-it verdicts, 46 country itineraries, 83 day-trip hubs, 48 food guides, 93 articles — 24,255 total content pieces, 3D globe, semantic search on the edge, trip planner with PDF export, currency switcher. 1,211 commits, ~61 K LOC, 69 components (48 Astro + 21 Preact islands).
Why I built it
Low-cost flights turned the weekend into exploration territory. A backpack, two days, a city you don't know — it became a passion. But once on the ground, the real question is: what must I see to feel I genuinely made the most of my time? ShortStayGuide answers that: one curated guide per city, straight to the essentials, no drowning in 400 generic POIs. Built for fast travellers, by one of them.
Structural technical decisions
Over 24,000 pages statically generated at build time (city guides × 3 languages, persona guides, neighborhoods, road trips, food, articles), spread across 94 page templates + 19 dynamic endpoints, with selective hydration only on the 21 Preact islands (globe, mega-menu, search, trip planner, currency switcher). Zero JS on the overwhelming majority of the site — SEO keeps its priority.
Over 24,000 markdown files with strictly validated frontmatter (Zod 4) feed all routing (city / country / continent / duration / guide / persona / neighborhood / article / food / roadtrip) with no CMS. Reproducible builds; D1 only backs the trip planner's user data.
Cobe ships ~19 KB canvas-based instead of importing Three.js. And Leaflet (~150 KB) only loads on the guide routes that actually need it — never on the home, never on aggregation pages.
The non-trivial challenge
Producing 3,087 coherent city guides (3 durations × 343 cities × 5 continents × 3 languages EN/FR/ES), each with geo-located stops (lat / lng), normalized tags, excerpts under 90 chars, UPPERCASE continent. Plus 17,445 persona guides, 2,580 neighborhoods, 540 road trips, 333 worth-it verdicts, 46 country itineraries, 83 day-trip hubs, 48 food guides, 93 articles — 24,255 total content pieces. Fitting all of it into 94 page templates + 19 dynamic endpoints + aggregation pages per city / country / continent / persona, without blowing up build time or schema consistency. The real boss isn't the globe or perf — it's schema discipline at volume × locales.
Lesson learned
The islands architecture lets you buy interactivity à la carte: Leaflet (150 KB) never touches the homepage, and the site stays essentially zero-JS where it matters for SEO.
Features
WebGL navigation with per-city markers
Cloudflare Vectorize + Workers AI at the edge
D1 storage, PDF export (Browser Rendering), shareable nanoid links
Live exchange rates per guide
Generated on the fly with Satori + resvg
Cookie consent, EN/FR/ES hreflang, llms.txt for AI crawlers