Un codex visuel des dinosaures, du Mésozoïque tout entier — Trias, Jurassique, Crétacé. 1500+ espèces, paléo-art domaine public, voyage temporel cinématique, carte des fossiles trouvés.
5ᵉ site personnel de Sylad, suite naturelle d'Eywa (codex de Pandora). Cadeau pour ma nièce Eva, 18 ans.
Trois ères, trois climats, trois géographies. Une atmosphère ambre/sable/terre qui change toutes les 25 secondes sur la landing. Un codex filtrable de 1500 fiches. Une carte interactive du paléo-monde. Une page À propos qui assume la collab humain × Claude Code × openart.ai.
- Astro 6 + React 19 (composants interactifs : filtres, carte)
- Tailwind 4 (palette ambre fossile / jade fougère / rust terre rouge)
- Leaflet + tuiles Esri World Dark Gray Base (carte paléo-monde)
- Cinzel + Crimson Text (typographies lapidaires + lecture serif)
- Build statique pur, déployé sur Cloudflare Pages
- PBDB — Paleobiology Database, CC0 / CC-BY (taxonomie, occurrences fossiles, datations stratigraphiques)
- Wikidata + Wikipedia — enrichissement auto des fiches (nom commun,
classification, régime, description). Les blurbs sont reformulés en ton
documentaire par llama 3.1 en local (aucun appel à un service tiers).
1400+ fiches enrichies, 0 ChatGPT — voir
scripts/enrich-species.mjs. - Wikimedia Commons — paleo-art domaine public ou CC-BY-SA
- ICS 2024 — International Chronostratigraphic Chart pour les bornes Ma
- Esri World Dark Gray Base (données © OpenStreetMap contributors) — fond de carte
evatosorus/
├── frontend/ # site Astro
│ ├── src/
│ │ ├── pages/ # routes : / · /codex · /periodes · /carte · /about · 404.astro (servie en 404 par Cloudflare Pages)
│ │ │ ├── index.astro # landing cinématique 75s loop
│ │ │ ├── codex.astro # grid filtrable
│ │ │ ├── periodes/[id].astro
│ │ │ └── especes/[id].astro
│ │ ├── components/
│ │ │ ├── EvatoLogo.astro
│ │ │ ├── SpeciesCard.astro
│ │ │ ├── CodexFilters.tsx # client:load (filtres réactifs)
│ │ │ ├── PaleoMap.tsx # client:only react (Leaflet)
│ │ │ └── cinema/ # CycleBackdrop + DustField
│ │ ├── data/
│ │ │ ├── periods.ts # 3 ères statiques
│ │ │ ├── species.types.ts # schéma Zod-ready
│ │ │ ├── species.seed.ts # 24 stars curées à la main
│ │ │ ├── species.ts # merge seed + import
│ │ │ └── generated/ # output PBDB (gitignored)
│ │ ├── layouts/ # BaseLayout + CodexLayout (sidebar)
│ │ └── styles/global.css # @theme tokens + amber-word hover
│ ├── astro.config.mjs
│ └── package.json
├── scripts/
│ └── import-paleobiodb.mjs # enrichit avec ~1500 espèces PBDB
├── docs/ # essais éditoriaux ; qa/expectations.md = attendus lus par la QA (mesures rejouées par scripts/qa-expectations.test.mjs, codex-pagination.e2e.test.mjs et codex-img.e2e.test.mjs)
├── README.md
├── HOW-IT-WORKS.md
├── DEPLOY.md
└── LICENSE # MIT
cd frontend
nvm use # Node 22
npm install
npm run dev # http://localhost:4321cd frontend
npm run import:paleobiodb # 1500 espèces (default)
# ou
node ../scripts/import-paleobiodb.mjs --limit 3000Le script écrit frontend/src/data/generated/species.generated.json qui est
mergé au runtime avec le seed manuel. Si le fichier n'existe pas, le site
fonctionne avec les 24 espèces stars du seed — c'est volontaire.
Remplit nom commun, classification, régime (heuristique clade), blurb documentaire et image Wikimedia (téléchargée + créditée) pour les fiches PaleoBioDB sans contenu :
cd frontend
npm run enrich:species # toutes les fiches non-seed (batch resumable)
node ../scripts/enrich-species.mjs --limit 10 # échantillon
node ../scripts/enrich-species.mjs --ids abelisaurus-comahuensis- Offline : tourne en local, écrit le JSON +
public/species/*.jpgcommittés. Le build Cloudflare ne fait aucun appel réseau. - Resumable : cache par espèce dans
scripts/.cache/enrich/(gitignored). Relancer reprend où ça s'est arrêté. - Préservant : ne remplit que les champs vides/placeholder, ne touche jamais le seed curé.
- Prérequis : Ollama avec
llama3.1:8b(overrideOLLAMA_BASE_URL/OLLAMA_MODEL). Run de réf. : 1422/1479 enrichies, 976 images, 0 erreur.
Pour demander une proposition de blurb sans écraser species.seed.ts :
cd frontend
OLLAMA_BASE_URL=http://localhost:11434 npm run ollama:species -- --species=tyrannosaurus-rexLe JSON généré va dans ../tmp/ et doit être relu/mergé manuellement.
cd frontend
npm run build # → dist/Connecte le repo à Cloudflare Pages, build command cd frontend && npm install && npm run build,
output directory frontend/dist. C'est tout.
Vibé à trois :
- Sylvain (humain) — direction artistique, choix éditoriaux, code review
- Claude Code (Anthropic, Opus 4.7 1M context) — code Astro/React/CSS, blurbs vulgarisés des fiches espèce
- openart.ai — image hero du T-Rex et les trois vidéos d'animation (landing / films / about)
Toutes les fiches espèce sont CC-BY (texte) ; les images viennent de Wikimedia Commons avec leur licence d'origine, créditée sur chaque fiche. L'image hero et les animations vidéo sont des générations openart.ai à partir de prompts curés.
MIT — le code, pas les images. Voir LICENSE.