ShortStayGuide
ProjetPlateforme de guides de voyage curatés tri-locale (EN/FR/ES). 3 087 city guides (343 villes × 3 durées), 17 445 persona guides, 2 580 neighborhoods, 540 road trips, 333 verdicts worth-it, 46 itinéraires pays, 83 hubs day-trip, 48 food guides, 93 articles — 24 255 contenus au total, globe 3D, recherche sémantique sur l'edge, trip planner avec export PDF, switcher de devises. 1 211 commits, ~61 K LOC, 69 composants (48 Astro + 21 islands Preact).
Pourquoi j'ai construit ça
Les vols low cost ont transformé le weekend en terrain d'exploration. Un sac à dos, deux jours, une ville qu'on ne connaît pas — c'est devenu une passion. Sauf qu'une fois sur place, la vraie question c'est : qu'est-ce qu'il faut absolument voir pour avoir l'impression d'avoir vraiment tiré profit de son temps ? ShortStayGuide répond à ça : un guide curaté par ville, qui va droit aux essentiels sans noyer le lecteur dans 400 POIs génériques. Pensé pour les voyageurs rapides, par quelqu'un qui en est un.
Décisions techniques structurantes
Plus de 24 000 pages statiques générées au build (city guides × 3 langues, persona guides, neighborhoods, road trips, food, articles), réparties sur 94 templates de pages + 19 endpoints dynamiques, avec hydratation sélective uniquement sur les 21 islands Preact (globe, mega-menu, search, trip planner, switcher de devises). Zéro JS sur la grande majorité du site — le SEO garde toute sa priorité.
Plus de 24 000 fichiers markdown à frontmatter strictement validé (Zod 4) alimentent tout le routing (city / country / continent / duration / guide / persona / neighborhood / article / food / roadtrip) sans CMS. Génération reproductible ; D1 ne sert qu'aux données utilisateur du trip planner.
Cobe pèse ~19 KB canvas-based au lieu d'importer Three.js. Et Leaflet (~150 KB) n'est chargé que sur les routes guide qui en ont besoin — jamais sur la home, jamais sur les pages d'agrégation.
Le challenge non-trivial
Produire 3 087 city guides cohérents (3 durées × 343 villes × 5 continents × 3 langues EN/FR/ES), chacun avec stops géocodés (lat / lng), tags normalisés, excerpts < 90 caractères, continent UPPERCASE. Plus 17 445 persona guides, 2 580 neighborhoods, 540 road trips, 333 verdicts worth-it, 46 itinéraires pays, 83 hubs day-trip, 48 food guides, 93 articles — 24 255 contenus total. Faire tenir tout ça dans 94 templates de pages + 19 endpoints dynamiques + des pages d'agrégation par ville / pays / continent / persona, sans exploser le temps de build ni la cohérence du schéma. Le vrai boss n'est ni le globe ni la perf — c'est la discipline schéma × volume × locales.
Leçon retenue
L'architecture islands permet d'acheter l'interactivité à l'unité : Leaflet (150 KB) ne touche jamais la home, et le site reste essentiellement zero-JS là où ça compte pour le SEO.
Fonctionnalités
Navigation WebGL avec marqueurs par ville
Cloudflare Vectorize + Workers AI à la volée
Stockage D1, export PDF (Browser Rendering), liens partageables nanoid
Taux de change en temps réel par guide
Générées à la volée avec Satori + resvg
Consent cookies, hreflang EN/FR/ES, llms.txt pour crawlers IA