ne pas se reposer sur ces acquis
This commit is contained in:
@@ -1,45 +1,48 @@
|
||||
---
|
||||
import Layout from '../layouts/Layout.astro';
|
||||
import GameLayout from '../layouts/GameLayout.astro';
|
||||
import ParchmentCard from '../components/ui/ParchmentCard.astro';
|
||||
---
|
||||
<Layout title="Le Sanctuaire des Grains - Sweet Journey">
|
||||
<h1>🏜️ Le Sanctuaire des Grains</h1>
|
||||
<p>
|
||||
Entrez dans mon lieu de méditation. D'où je viens, la création n'est pas une affaire de métal et de feu, mais de patience, de concentration et de sable. Chaque grain est une possibilité, chaque ligne de code un chemin tracé dans les dunes de l'esprit. Cette section dévoile les arts que j'emploie pour donner forme à ce monde.
|
||||
</p>
|
||||
<GameLayout title="Le Sanctuaire des Grains - Sweet Journey">
|
||||
<ParchmentCard>
|
||||
<h1>🏜️ Le Sanctuaire des Grains</h1>
|
||||
<p>
|
||||
Entrez dans mon lieu de méditation. D'où je viens, la création n'est pas une affaire de métal et de feu, mais de patience, de concentration et de sable. Chaque grain est une possibilité, chaque ligne de code un chemin tracé dans les dunes de l'esprit. Cette section dévoile les arts que j'emploie pour donner forme à ce monde.
|
||||
</p>
|
||||
|
||||
<h2>Le Façonnage du Sable : Les Arts Techniques</h2>
|
||||
<p>
|
||||
Au lieu d'une forge, mon art s'exprime par le façonnage. Les idées brutes sont comme du sable sauvage ; il faut le canaliser, le modeler avec discipline pour qu'il devienne une histoire, une expérience. Pour invoquer un monde 3D dans le navigateur, le choix des arts est aussi crucial que le choix du sable.
|
||||
</p>
|
||||
<h3>Pourquoi Three.js ?</h3>
|
||||
<p><strong>Three.js</strong> est mon art martial numérique. C'est un ensemble de katas (fonctions) en JavaScript qui me permet de maîtriser le flux de la 3D dans le navigateur. Chaque mouvement est précis : je peux dicter la course de la lumière, orchestrer la danse des objets et appliquer les textures comme on applique un pigment. C'est le ki qui donne vie à la matière inerte.</p>
|
||||
<h3>Pourquoi Blender ?</h3>
|
||||
<p>Si Three.js est l'art du mouvement, <strong>Blender</strong> est l'art de la méditation. C'est dans ce monde intérieur que je voyage pour façonner les personnages, les paysages et les rêves de mon peuple. C'est un outil open source qui me permet de donner une forme tangible à mes visions, avant de leur insuffler le souffle de vie sur le web.</p>
|
||||
<h2>Le Façonnage du Sable : Les Arts Techniques</h2>
|
||||
<p>
|
||||
Au lieu d'une forge, mon art s'exprime par le façonnage. Les idées brutes sont comme du sable sauvage ; il faut le canaliser, le modeler avec discipline pour qu'il devienne une histoire, une expérience. Pour invoquer un monde 3D dans le navigateur, le choix des arts est aussi crucial que le choix du sable.
|
||||
</p>
|
||||
<h3>Pourquoi Three.js ?</h3>
|
||||
<p><strong>Three.js</strong> est mon art martial numérique. C'est un ensemble de katas (fonctions) en JavaScript qui me permet de maîtriser le flux de la 3D dans le navigateur. Chaque mouvement est précis : je peux dicter la course de la lumière, orchestrer la danse des objets et appliquer les textures comme on applique un pigment. C'est le ki qui donne vie à la matière inerte.</p>
|
||||
<h3>Pourquoi Blender ?</h3>
|
||||
<p>Si Three.js est l'art du mouvement, <strong>Blender</strong> est l'art de la méditation. C'est dans ce monde intérieur que je voyage pour façonner les personnages, les paysages et les rêves de mon peuple. C'est un outil open source qui me permet de donner une forme tangible à mes visions, avant de leur insuffler le souffle de vie sur le web.</p>
|
||||
|
||||
<h2>Le Kit du Pèlerin : Outils de Prédilection</h2>
|
||||
<p>Tout pèlerin transporte avec lui des outils essentiels. Les miens ne sont pas faits de bois ou de métal, mais ils sont tout aussi vitaux pour mon voyage.</p>
|
||||
<dl>
|
||||
<dt><strong>Visual Studio Code : Mon Grimoire de Rituels</strong></dt>
|
||||
<dd>C'est ici que je calligraphie les incantations (le code) qui donnent leurs instructions au sable. Chaque fonction est un mantra, chaque variable un grain choisi avec soin pour construire le monde.</dd>
|
||||
<h2>Le Kit du Pèlerin : Outils de Prédilection</h2>
|
||||
<p>Tout pèlerin transporte avec lui des outils essentiels. Les miens ne sont pas faits de bois ou de métal, mais ils sont tout aussi vitaux pour mon voyage.</p>
|
||||
<dl>
|
||||
<dt><strong>Visual Studio Code : Mon Grimoire de Rituels</strong></dt>
|
||||
<dd>C'est ici que je calligraphie les incantations (le code) qui donnent leurs instructions au sable. Chaque fonction est un mantra, chaque variable un grain choisi avec soin pour construire le monde.</dd>
|
||||
|
||||
<dt><strong>Lenovo Yoga 530 (Ubuntu) : Ma Pierre de Méditation</strong></dt>
|
||||
<dd>C'est sur cette surface que je m'installe pour me concentrer. Sa flexibilité me permet de trouver la posture juste, et son cœur (Ubuntu) bat au rythme du partage et de la liberté, des valeurs chères à tout pèlerin.</dd>
|
||||
<dt><strong>Lenovo Yoga 530 (Ubuntu) : Ma Pierre de Méditation</strong></dt>
|
||||
<dd>C'est sur cette surface que je m'installe pour me concentrer. Sa flexibilité me permet de trouver la posture juste, et son cœur (Ubuntu) bat au rythme du partage et de la liberté, des valeurs chères à tout pèlerin.</dd>
|
||||
|
||||
<dt><strong>Wacom One, GIMP & Krita : Ma Toile de Sable et mes Pigments de Songe</strong></dt>
|
||||
<dd>La tablette est une étendue de sable fin sur laquelle je dessine les premières formes de mes visions. GIMP et Krita m'offre les pigments extraits des rêves pour leur donner couleur et vie.</dd>
|
||||
<dt><strong>Wacom One, GIMP & Krita : Ma Toile de Sable et mes Pigments de Songe</strong></dt>
|
||||
<dd>La tablette est une étendue de sable fin sur laquelle je dessine les premières formes de mes visions. GIMP et Krita m'offre les pigments extraits des rêves pour leur donner couleur et vie.</dd>
|
||||
|
||||
<dt><strong>Obsidian & Carnet à dessin : Ma Carte des Étoiles et mon Journal de Piste</strong></dt>
|
||||
<dd>Le carnet recueille les croquis bruts de mon voyage. Obsidian, lui, est ma carte du ciel intérieure ; il me permet de relier chaque idée, chaque souvenir et chaque rêve en une constellation de savoir qui guide ma quête.</dd>
|
||||
<dt><strong>Obsidian & Carnet à dessin : Ma Carte des Étoiles et mon Journal de Piste</strong></dt>
|
||||
<dd>Le carnet recueille les croquis bruts de mon voyage. Obsidian, lui, est ma carte du ciel intérieure ; il me permet de relier chaque idée, chaque souvenir et chaque rêve en une constellation de savoir qui guide ma quête.</dd>
|
||||
|
||||
<dt><strong>Raspberry Pi : Mon Foyer de Pèlerin</strong></dt>
|
||||
<dd>Ce petit autel est le cœur de mon campement numérique. C'est un serveur humble mais résilient, d'où je publie mes récits et partage mes créations avec le monde. Il bat au rythme de plusieurs esprits bienveillants :</dd>
|
||||
<dd>
|
||||
<ul>
|
||||
<li><strong>Docker :</strong> L'art de créer des bocaux à songes. Chaque service est contenu dans son propre terrarium magique, parfait et isolé, pour s'assurer que les rêves ne se mélangent pas.</li>
|
||||
<li><strong>Nginx Proxy Manager :</strong> Le gardien des carrefours, qui guide les visiteurs égarés vers la bonne histoire, le bon outil.</li>
|
||||
<li><strong>Nextcloud & Wallabag :</strong> Ma besace sans fond et mon filet à murmures. L'un stocke mes trouvailles et mes grains de sable précieux, l'autre capture les histoires du vent pour une lecture future.</li>
|
||||
<li><strong>Dolibarr & Superset :</strong> Mon grand livre de marchand et ma lentille d'analyse. Ils m'aident à tenir les comptes de mes échanges de rêves et à scruter la nature profonde de chaque grain de sable (donnée) que je collecte.</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
</Layout>
|
||||
<dt><strong>Raspberry Pi : Mon Foyer de Pèlerin</strong></dt>
|
||||
<dd>Ce petit autel est le cœur de mon campement numérique. C'est un serveur humble mais résilient, d'où je publie mes récits et partage mes créations avec le monde. Il bat au rythme de plusieurs esprits bienveillants :</dd>
|
||||
<dd>
|
||||
<ul>
|
||||
<li><strong>Docker :</strong> L'art de créer des bocaux à songes. Chaque service est contenu dans son propre terrarium magique, parfait et isolé, pour s'assurer que les rêves ne se mélangent pas.</li>
|
||||
<li><strong>Nginx Proxy Manager :</strong> Le gardien des carrefours, qui guide les visiteurs égarés vers la bonne histoire, le bon outil.</li>
|
||||
<li><strong>Nextcloud & Wallabag :</strong> Ma besace sans fond et mon filet à murmures. L'un stocke mes trouvailles et mes grains de sable précieux, l'autre capture les histoires du vent pour une lecture future.</li>
|
||||
<li><strong>Dolibarr & Superset :</strong> Mon grand livre de marchand et ma lentille d'analyse. Ils m'aident à tenir les comptes de mes échanges de rêves et à scruter la nature profonde de chaque grain de sable (donnée) que je collecte.</li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
</ParchmentCard>
|
||||
</GameLayout>
|
||||
@@ -1,42 +1,46 @@
|
||||
---
|
||||
import Layout from '../layouts/Layout.astro';
|
||||
import GameLayout from '../layouts/GameLayout.astro';
|
||||
import ParchmentCard from '../components/ui/ParchmentCard.astro';
|
||||
---
|
||||
|
||||
<Layout title="L'Artisan des Rêves - Nicolas Latchimy">
|
||||
<h1>🐸 L'Artisan derrière le Pèlerin</h1>
|
||||
<p>
|
||||
Je suis G'Mas, un pèlerin fait de sable et de songes. Mais qui est l'artisan qui me rêve ? Qui est celui dont les mains façonnent mon voyage ? Laissez-moi vous parler de lui, car son histoire est la source de la mienne.
|
||||
</p>
|
||||
<p>
|
||||
Il se nomme <strong>Nicolas Latchimy</strong>. Artiste, développeur, un esprit ubiquiste qui, depuis l'âge de trois ans, utilise le dessin pour donner une forme à ses émotions. Son parcours est un long pèlerinage entre deux mondes : celui de l'Art, étudié à Paris et à La Réunion, et celui du Code, appris plus tard pour construire de nouvelles formes de récits.
|
||||
</p>
|
||||
<GameLayout title="L'Artisan des Rêves - Nicolas Latchimy">
|
||||
<ParchmentCard>
|
||||
<h1>🐸 L'Artisan derrière le Pèlerin</h1>
|
||||
<p>
|
||||
Je suis G'Mas, un pèlerin fait de sable et de songes. Mais qui est l'artisan qui me rêve ? Qui est celui dont les mains façonnent mon voyage ? Laissez-moi vous parler de lui, car son histoire est la source de la mienne.
|
||||
</p>
|
||||
<p>
|
||||
Il se nomme <strong>Nicolas Latchimy</strong>. Artiste, développeur, un esprit ubiquiste qui, depuis l'âge de trois ans, utilise le dessin pour donner une forme à ses émotions. Son parcours est un long pèlerinage entre deux mondes : celui de l'Art, étudié à Paris et à La Réunion, et celui du Code, appris plus tard pour construire de nouvelles formes de récits.
|
||||
</p>
|
||||
|
||||
<h2>Hatjan Krâpo, le Cousin du grung</h2>
|
||||
<p>
|
||||
Avant que je n'existe, un autre batracien est né de son crayon : <strong>Hatjan Krâpo</strong>. Mon lointain cousin de papier. Si je suis un pèlerin des sables, Hatjan est un symbole du rejet, du dégoût, mais aussi d'une humanité cinglante. À travers lui, Nicolas explore les thèmes qui le hantent : l'exclusion, les discriminations, le harcèlement. C'est un cri silencieux contre les écarts qui fracturent nos sociétés.
|
||||
</p>
|
||||
<h2>Hatjan Krâpo, le Cousin du grung</h2>
|
||||
<p>
|
||||
Avant que je n'existe, un autre batracien est né de son crayon : <strong>Hatjan Krâpo</strong>. Mon lointain cousin de papier. Si je suis un pèlerin des sables, Hatjan est un symbole du rejet, du dégoût, mais aussi d'une humanité cinglante. À travers lui, Nicolas explore les thèmes qui le hantent : l'exclusion, les discriminations, le harcèlement. C'est un cri silencieux contre les écarts qui fracturent nos sociétés.
|
||||
</p>
|
||||
|
||||
<h2>Mosaic Chantilly, l'Armateur d'Art</h2>
|
||||
<p>
|
||||
Le 14 septembre 2024, un autre chemin s'est ouvert. Sous le nom de <strong>Mosaic Chantilly</strong>, il est devenu un "armateur d'art à corps perdu". Sa mission : déconstruire l'art comme une mosaïque pour en révéler l'essence. C'est une quête de dix ans qui commence, un nouveau voyage dans la matière et la forme.
|
||||
</p>
|
||||
<h2>Mosaic Chantilly, l'Armateur d'Art</h2>
|
||||
<p>
|
||||
Le 14 septembre 2024, un autre chemin s'est ouvert. Sous le nom de <strong>Mosaic Chantilly</strong>, il est devenu un "armateur d'art à corps perdu". Sa mission : déconstruire l'art comme une mosaïque pour en révéler l'essence. C'est une quête de dix ans qui commence, un nouveau voyage dans la matière et la forme.
|
||||
</p>
|
||||
|
||||
<h2>Du Pinceau au Code</h2>
|
||||
<p>
|
||||
Après des années à questionner le monde à travers l'art, il s'est tourné vers le développement web. Non pas pour abandonner le dessin, mais pour lui offrir un nouveau terrain de jeu. Il voit le code comme un autre langage pour raconter des histoires, pour créer des ponts. Ce site en est la preuve : un lieu où la 3D, la narration et la technique se rencontrent.
|
||||
</p>
|
||||
<h2>Du Pinceau au Code</h2>
|
||||
<p>
|
||||
Après des années à questionner le monde à travers l'art, il s'est tourné vers le développement web. Non pas pour abandonner le dessin, mais pour lui offrir un nouveau terrain de jeu. Il voit le code comme un autre langage pour raconter des histoires, pour créer des ponts. Ce site en est la preuve : un lieu où la 3D, la narration et la technique se rencontrent.
|
||||
</p>
|
||||
|
||||
<h2>Retrouver l'Artisan</h2>
|
||||
<p>Pour suivre ses autres pérégrinations, qu'elles soient dessinées ou codées :</p>
|
||||
<ul>
|
||||
<li><strong>Portfolio Artistique :</strong> <a href="https://www.pinterest.com/imazmaronrstones/errances-cr%C3%A9atives/" target="_blank" rel="noopener noreferrer">Errances Créatives sur Pinterest</a></li>
|
||||
<li><strong>Page Auteur :</strong> <a href="https://www.la-reunion-des-livres.re/auteur/latchimy-nicolas/" target="_blank" rel="noopener noreferrer">La Réunion des Livres</a></li>
|
||||
<li><strong>Forum Dessiné :</strong> <a href="https://www.forum-dessine.fr/auteurs/krapo" target="_blank" rel="noopener noreferrer">Profil de Krâpo</a></li>
|
||||
<li><strong>23h de la BD (2019) :</strong> <a href="https://23hbd.com/participants/2019/krapo/" target="_blank" rel="noopener noreferrer">Participation 2019</a></li>
|
||||
<li><strong>23h de la BD (2020) :</strong> <a href="https://23hbd.com/participants/2020/krapo/" target="_blank" rel="noopener noreferrer">Participation 2020</a></li>
|
||||
<li><strong>Webtoon (Liestral) :</strong> <a href="https://www.webtoons.com/fr/canvas/liestral/list?title_no=1049110" target="_blank" rel="noopener noreferrer">Découvrir son webtoon</a></li>
|
||||
<li><strong>Instagram :</strong> <a href="https://www.instagram.com/mosaic_chantilly/" target="_blank" rel="noopener noreferrer">@mosaic_chantilly</a></li>
|
||||
<li><strong>CV en ligne :</strong> <a href="https://nohay.github.io/" target="_blank" rel="noopener noreferrer">Découvrir son parcours</a></li>
|
||||
</ul>
|
||||
<h2>Retrouver l'Artisan</h2>
|
||||
<p>Pour suivre ses autres pérégrinations, qu'elles soient dessinées ou codées :</p>
|
||||
<ul>
|
||||
<li><strong>Portfolio Artistique :</strong> <a href="https://www.pinterest.com/imazmaronrstones/errances-cr%C3%A9atives/" target="_blank" rel="noopener noreferrer">Errances Créatives sur Pinterest</a></li>
|
||||
<li><strong>Page Auteur :</strong> <a href="https://www.la-reunion-des-livres.re/auteur/latchimy-nicolas/" target="_blank" rel="noopener noreferrer">La Réunion des Livres</a></li>
|
||||
<li><strong>Forum Dessiné :</strong> <a href="https://www.forum-dessine.fr/auteurs/krapo" target="_blank" rel="noopener noreferrer">Profil de Krâpo</a></li>
|
||||
<li><strong>23h de la BD (2019) :</strong> <a href="https://23hbd.com/participants/2019/krapo/" target="_blank" rel="noopener noreferrer">Participation 2019</a></li>
|
||||
<li><strong>23h de la BD (2020) :</strong> <a href="https://23hbd.com/participants/2020/krapo/" target="_blank" rel="noopener noreferrer">Participation 2020</a></li>
|
||||
<li><strong>Webtoon (Liestral) :</strong> <a href="https://www.webtoons.com/fr/canvas/liestral/list?title_no=1049110" target="_blank" rel="noopener noreferrer">Découvrir son webtoon</a></li>
|
||||
<li><strong>Instagram :</strong> <a href="https://www.instagram.com/mosaic_chantilly/" target="_blank" rel="noopener noreferrer">@mosaic_chantilly</a></li>
|
||||
<li><strong>CV en ligne :</strong> <a href="https://nohay.github.io/" target="_blank" rel="noopener noreferrer">Découvrir son parcours</a></li>
|
||||
</ul>
|
||||
</ParchmentCard>
|
||||
</GameLayout>
|
||||
|
||||
</Layout>
|
||||
@@ -1,17 +1,19 @@
|
||||
---
|
||||
import Layout from '../layouts/Layout.astro';
|
||||
import GameLayout from '../layouts/GameLayout.astro';
|
||||
import ParchmentCard from '../components/ui/ParchmentCard.astro';
|
||||
---
|
||||
|
||||
<Layout title="La Boussole Éthique - Sweet Journey">
|
||||
<h1>⚖️ La Boussole Éthique</h1>
|
||||
<p>
|
||||
Mon voyage a commencé à cause d'un fléau : un sable sombre, dépourvu de vie, qui corrompt mes terres et empoisonne les rêves de mon peuple. Cette quête m'a enseigné à distinguer le sable pur du sable vicié. Il en va de même pour les créations des mortels. Certaines sont conçues pour apporter un repos réparateur, d'autres sont des pièges, aussi subtils que le poison sur ma peau.
|
||||
</p>
|
||||
<GameLayout title="La Boussole Éthique - Sweet Journey">
|
||||
<ParchmentCard>
|
||||
<h1>⚖️ La Boussole Éthique</h1>
|
||||
<p>
|
||||
Mon voyage a commencé à cause d'un fléau : un sable sombre, dépourvu de vie, qui corrompt mes terres et empoisonne les rêves de mon peuple. Cette quête m'a enseigné à distinguer le sable pur du sable vicié. Il en va de même pour les créations des mortels. Certaines sont conçues pour apporter un repos réparateur, d'autres sont des pièges, aussi subtils que le poison sur ma peau.
|
||||
</p>
|
||||
|
||||
<h2>Les Sables de Vie : Les Chemins à Suivre</h2>
|
||||
<p>Ce sont les modèles basés sur le respect et la valeur. L'**Open Source**, par exemple, est comme une oasis où chaque pèlerin peut puiser de l'eau, mais aussi y ajouter une goutte pour le suivant. C'est un cycle de don où la connaissance n'est pas un trésor gardé, mais une source qui abreuve la communauté. Ma conviction est que l'on peut bâtir de grandes choses avec des matériaux que d'autres jugent obsolètes, en laissant une empreinte légère. L'autonomie est possible sans dévaster le monde ; c'est une question de culture. Se souvenir de la naissance de la grande toile (le web) et voir où elle en est aujourd'hui doit nous inspirer à créer en harmonie avec l'ensemble.</p>
|
||||
<h2>Les Sables de Vie : Les Chemins à Suivre</h2>
|
||||
<p>Ce sont les modèles basés sur le respect et la valeur. L'**Open Source**, par exemple, est comme une oasis où chaque pèlerin peut puiser de l'eau, mais aussi y ajouter une goutte pour le suivant. C'est un cycle de don où la connaissance n'est pas un trésor gardé, mais une source qui abreuve la communauté. Ma conviction est que l'on peut bâtir de grandes choses avec des matériaux que d'autres jugent obsolètes, en laissant une empreinte légère. L'autonomie est possible sans dévaster le monde ; c'est une question de culture. Se souvenir de la naissance de la grande toile (le web) et voir où elle en est aujourd'hui doit nous inspirer à créer en harmonie avec l'ensemble.</p>
|
||||
|
||||
<h2>Les Marécages de Sable Noir : Les Chemins à Éviter</h2>
|
||||
<p>Ici se trouvent les sables mouvants. Je perçois dans le monde une tendance à la démesure, une soif de pouvoir qui oublie l'équilibre. On y cherche à dominer plutôt qu'à harmoniser, à prendre plutôt qu'à partager. Cette philosophie ressemble au sable noir : elle crée des systèmes où quelques-uns s'enrichissent en asséchant les rêves de la multitude. Mon art se refuse à emprunter cette voie.</p>
|
||||
|
||||
</Layout>
|
||||
<h2>Les Marécages de Sable Noir : Les Chemins à Éviter</h2>
|
||||
<p>Ici se trouvent les sables mouvants. Je perçois dans le monde une tendance à la démesure, une soif de pouvoir qui oublie l'équilibre. On y cherche à dominer plutôt qu'à harmoniser, à prendre plutôt qu'à partager. Cette philosophie ressemble au sable noir : elle crée des systèmes où quelques-uns s'enrichissent en asséchant les rêves de la multitude. Mon art se refuse à emprunter cette voie.</p>
|
||||
</ParchmentCard>
|
||||
</GameLayout>
|
||||
@@ -1,17 +1,9 @@
|
||||
---
|
||||
import Layout from '../layouts/Layout.astro';
|
||||
import Card from '../components/Card.astro';
|
||||
import GameLayout from '../layouts/GameLayout.astro';
|
||||
import GoldButton from '../components/ui/GoldButton.astro';
|
||||
---
|
||||
<style>
|
||||
.card-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(auto-fit, minmax(24ch, 1fr));
|
||||
gap: 2rem;
|
||||
padding: 0;
|
||||
}
|
||||
</style>
|
||||
|
||||
<Layout title="Bienvenue sur JDRSweetJourney">
|
||||
<GameLayout title="Bienvenue sur JDRSweetJourney">
|
||||
<h1>Bienvenue sur le projet JDR Sweet Journey !</h1>
|
||||
<h2>L'Ambition</h2>
|
||||
<p>L'objectif est de créer un clone entièrement web de l'application mobile <strong>AFK Journey</strong>. Ce projet sera une vitrine technologique utilisant :</p>
|
||||
@@ -20,10 +12,10 @@ import Card from '../components/Card.astro';
|
||||
<li>La retranscription de ces éléments dans le navigateur grâce à <strong>Three.js</strong>.</li>
|
||||
</ul>
|
||||
<ul class="card-grid">
|
||||
<Card
|
||||
<GoldButton
|
||||
href="https://threejs-journey.com"
|
||||
title="🎓 Formation : Three.js Journey"
|
||||
body="Pour garantir une base technique solide, ce projet s'appuie sur les enseignements de Three.js Journey, une formation de référence pour maîtriser Three.js."
|
||||
body="Ce projet s'appuie sur les enseignements de Three.js Journey pour garantir une base technique solide."
|
||||
/>
|
||||
</ul>
|
||||
<p>Si en plus, cette plateforme peut servir de point de repère pour nos aventures de jeu de rôle, c'est une pierre deux coups !</p>
|
||||
@@ -32,17 +24,17 @@ import Card from '../components/Card.astro';
|
||||
<p>Ce site est aussi un levier pour maîtriser les paradigmes technologiques de demain. Explorez le <strong>journal d'aventure</strong> pour suivre la quête, ou consultez les <strong>logs de construction</strong> pour voir les coulisses techniques.</p>
|
||||
|
||||
<ul class="card-grid">
|
||||
<Card
|
||||
<GoldButton
|
||||
href="/atelier"
|
||||
title="🏜️ Le Sanctuaire des Grains"
|
||||
body="Découvrez les arts et les outils du pèlerin pour façonner le sable et les rêves."
|
||||
/>
|
||||
<Card
|
||||
<GoldButton
|
||||
href="/observatoire"
|
||||
title="🎨 L'Observatoire"
|
||||
body="Explorez les sources d'inspiration : artistes, développeurs, podcasts et jeux qui nourrissent ce projet."
|
||||
/>
|
||||
<Card
|
||||
<GoldButton
|
||||
href="/boussole"
|
||||
title="⚖️ La Boussole Éthique"
|
||||
body="Une réflexion sur les modèles économiques vertueux et ceux à éviter dans le monde du jeu vidéo."
|
||||
@@ -50,4 +42,4 @@ import Card from '../components/Card.astro';
|
||||
</ul>
|
||||
|
||||
<p>Quelle ambition, jeune batracien...</p>
|
||||
</Layout>
|
||||
</GameLayout>
|
||||
|
||||
45
src/pages/journal/[...slug].astro
Normal file
45
src/pages/journal/[...slug].astro
Normal file
@@ -0,0 +1,45 @@
|
||||
---
|
||||
import { getCollection } from 'astro:content';
|
||||
import GameLayout from '../../layouts/GameLayout.astro';
|
||||
import ParchmentCard from '../../components/ui/ParchmentCard.astro';
|
||||
|
||||
// 1. Génère une page statique pour chaque article de la collection
|
||||
export async function getStaticPaths() {
|
||||
const posts = await getCollection('journal');
|
||||
return posts.map((post) => ({
|
||||
params: { slug: post.slug },
|
||||
props: post,
|
||||
}));
|
||||
}
|
||||
|
||||
// 2. Récupère les props de l'article correspondant
|
||||
const post = Astro.props;
|
||||
const { Content } = await post.render();
|
||||
---
|
||||
|
||||
<GameLayout title={post.data.title}>
|
||||
<ParchmentCard>
|
||||
<h1>{post.data.title}</h1>
|
||||
<div class="meta">
|
||||
Par {post.data.author} • Le {post.data.publishDate.toLocaleDateString('fr-FR')}
|
||||
</div>
|
||||
{post.data.tags && (
|
||||
<div class="tags-container">
|
||||
{post.data.tags.map((tag) => (
|
||||
<a href={`/journal/tags/${tag}`} class="tag">{tag}</a>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
<article class="prose">
|
||||
<Content />
|
||||
</article>
|
||||
</ParchmentCard>
|
||||
</GameLayout>
|
||||
|
||||
<style>
|
||||
.meta {
|
||||
text-align: center;
|
||||
font-style: italic;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
</style>
|
||||
@@ -1,24 +0,0 @@
|
||||
---
|
||||
import { getCollection } from 'astro:content';
|
||||
import Layout from '../../layouts/Layout.astro';
|
||||
|
||||
// 1. Génère une page pour chaque entrée de la collection 'journal'
|
||||
export async function getStaticPaths() {
|
||||
const journalEntries = await getCollection('journal');
|
||||
return journalEntries.map(entry => ({
|
||||
params: { slug: entry.slug },
|
||||
props: { entry },
|
||||
}));
|
||||
}
|
||||
|
||||
// 2. Récupère les props pour la page actuelle
|
||||
const { entry } = Astro.props;
|
||||
const { Content } = await entry.render();
|
||||
---
|
||||
|
||||
<Layout title={entry.data.title}>
|
||||
<h1>{entry.data.title}</h1>
|
||||
<p>Par {entry.data.author}, le {entry.data.publishDate.toLocaleDateString('fr-FR')}</p>
|
||||
<hr>
|
||||
<Content />
|
||||
</Layout>
|
||||
@@ -1,18 +1,26 @@
|
||||
---
|
||||
import { getCollection } from 'astro:content';
|
||||
import Layout from '../../layouts/Layout.astro';
|
||||
import GameLayout from '../../layouts/GameLayout.astro';
|
||||
import ContentSearch from '../../components/ContentSearch.astro';
|
||||
|
||||
// 1. Récupère TOUS les articles et les trie.
|
||||
const allPosts = await getCollection('journal');
|
||||
const sortedPosts = allPosts.sort(
|
||||
(a, b) => b.data.publishDate.valueOf() - a.data.publishDate.valueOf()
|
||||
);
|
||||
|
||||
// 2. Extrait toutes les balises uniques
|
||||
const allTags = [...new Set(allPosts.flatMap(post => post.data.tags || []))];
|
||||
|
||||
const allJournalEntries = await getCollection('journal');
|
||||
---
|
||||
|
||||
<Layout title="Journal d'Aventure">
|
||||
<h1>Journal d'Aventure</h1>
|
||||
<ul>
|
||||
{allJournalEntries.map(entry => (
|
||||
<li>
|
||||
<a href={`/journal/${entry.slug}`}>{entry.data.title}</a>
|
||||
<p>Publié le: {entry.data.publishDate.toLocaleDateString('fr-FR')}</p>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</Layout>
|
||||
<GameLayout title="Journal d'Aventure">
|
||||
<h1>📖 Journal d'Aventure</h1>
|
||||
<p style="text-align: center; margin-bottom: 3rem;">
|
||||
Les chroniques de nos voyages. Utilisez la barre de recherche pour trouver un récit.
|
||||
</p>
|
||||
|
||||
<!-- 2. On passe tous les articles au composant client -->
|
||||
<ContentSearch posts={sortedPosts} tags={allTags} basePath="journal" />
|
||||
|
||||
</GameLayout>
|
||||
39
src/pages/journal/tags/[tag].astro
Normal file
39
src/pages/journal/tags/[tag].astro
Normal file
@@ -0,0 +1,39 @@
|
||||
---
|
||||
import { getCollection } from 'astro:content';
|
||||
import GameLayout from '../../../layouts/GameLayout.astro';
|
||||
import GoldButton from '../../../components/ui/GoldButton.astro';
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const allPosts = await getCollection('journal');
|
||||
const allTags = [...new Set(allPosts.flatMap((post) => post.data.tags || []))];
|
||||
|
||||
return allTags.map((tag) => {
|
||||
const filteredPosts = allPosts.filter((post) => post.data.tags?.includes(tag));
|
||||
return {
|
||||
params: { tag },
|
||||
props: { posts: filteredPosts },
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
const { tag } = Astro.params;
|
||||
const { posts } = Astro.props;
|
||||
---
|
||||
|
||||
<GameLayout title={`Récits: ${tag}`}>
|
||||
<h1>Récits avec la balise : <span class="tag-title">{tag}</span></h1>
|
||||
|
||||
<div class="card-grid">
|
||||
{
|
||||
posts.map((post) => (
|
||||
<GoldButton href={`/journal/${post.slug}/`} title={post.data.title} body={`Publié le ${post.data.publishDate.toLocaleDateString('fr-FR')}`} />
|
||||
))
|
||||
}
|
||||
</div>
|
||||
</GameLayout>
|
||||
|
||||
<style>
|
||||
.tag-title {
|
||||
color: #c89b3c;
|
||||
}
|
||||
</style>
|
||||
47
src/pages/logs/[...slug].astro
Normal file
47
src/pages/logs/[...slug].astro
Normal file
@@ -0,0 +1,47 @@
|
||||
---
|
||||
import { getCollection } from 'astro:content';
|
||||
import GameLayout from '../../layouts/GameLayout.astro';
|
||||
import ParchmentCard from '../../components/ui/ParchmentCard.astro';
|
||||
|
||||
// 1. Génère une page pour chaque entrée de la collection 'logs'
|
||||
export async function getStaticPaths() {
|
||||
const logEntries = await getCollection('logs');
|
||||
return logEntries.map((entry) => ({
|
||||
params: { slug: entry.slug },
|
||||
props: entry,
|
||||
}));
|
||||
}
|
||||
|
||||
// 2. Récupère les props pour la page actuelle
|
||||
const post = Astro.props;
|
||||
const { Content } = await post.render();
|
||||
---
|
||||
|
||||
<GameLayout title={post.data.title}>
|
||||
<ParchmentCard>
|
||||
<h1>{post.data.title}</h1>
|
||||
<div class="meta">
|
||||
Publié le {post.data.publishDate.toLocaleDateString('fr-FR')}
|
||||
</div>
|
||||
{post.data.tags && (
|
||||
<div class="tags-container">
|
||||
{post.data.tags.map((tag) => (
|
||||
<a href={`/logs/tags/${tag}`} class="tag">{tag}</a>
|
||||
))}
|
||||
</div>
|
||||
)}
|
||||
<article class="prose">
|
||||
<Content />
|
||||
</article>
|
||||
</ParchmentCard>
|
||||
</GameLayout>
|
||||
|
||||
<style>
|
||||
/* Les styles des tags sont maintenant globaux dans GameLayout.astro */
|
||||
|
||||
.meta {
|
||||
text-align: center;
|
||||
font-style: italic;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
</style>
|
||||
@@ -1,24 +0,0 @@
|
||||
---
|
||||
import { getCollection } from 'astro:content';
|
||||
import Layout from '../../layouts/Layout.astro';
|
||||
|
||||
// 1. Génère une page pour chaque entrée de la collection 'logs'
|
||||
export async function getStaticPaths() {
|
||||
const journalEntries = await getCollection('logs');
|
||||
return journalEntries.map(entry => ({
|
||||
params: { slug: entry.slug },
|
||||
props: { entry },
|
||||
}));
|
||||
}
|
||||
|
||||
// 2. Récupère les props pour la page actuelle
|
||||
const { entry } = Astro.props;
|
||||
const { Content } = await entry.render();
|
||||
---
|
||||
|
||||
<Layout title={entry.data.title}>
|
||||
<h1>{entry.data.title}</h1>
|
||||
<p>Publié le {entry.data.publishDate.toLocaleDateString('fr-FR')}</p>
|
||||
<hr>
|
||||
<Content />
|
||||
</Layout>
|
||||
@@ -1,18 +1,25 @@
|
||||
---
|
||||
import { getCollection } from 'astro:content';
|
||||
import Layout from '../../layouts/Layout.astro';
|
||||
import GameLayout from '../../layouts/GameLayout.astro';
|
||||
import ContentSearch from '../../components/ContentSearch.astro';
|
||||
|
||||
const allLogEntries = await getCollection('logs');
|
||||
// 1. Récupère TOUS les logs et les trie.
|
||||
const allPosts = await getCollection('logs');
|
||||
const sortedPosts = allPosts.sort(
|
||||
(a, b) => b.data.publishDate.valueOf() - a.data.publishDate.valueOf()
|
||||
);
|
||||
|
||||
// 2. Extrait toutes les balises uniques
|
||||
const allTags = [...new Set(allPosts.flatMap(post => post.data.tags || []))];
|
||||
---
|
||||
|
||||
<Layout title="Logs de Construction">
|
||||
<h1>Logs de Construction</h1>
|
||||
<ul>
|
||||
{allLogEntries.map(entry => (
|
||||
<li>
|
||||
<a href={`/logs/${entry.slug}`}>{entry.data.title}</a>
|
||||
<p>Publié le: {entry.data.publishDate.toLocaleDateString('fr-FR')}</p>
|
||||
</li>
|
||||
))}
|
||||
</ul>
|
||||
</Layout>
|
||||
<GameLayout title="Logs de Construction">
|
||||
<h1>⚙️ Logs de Construction</h1>
|
||||
<p style="text-align: center; margin-bottom: 3rem;">
|
||||
Les coulisses techniques du projet. Utilisez la barre de recherche pour trouver un log.
|
||||
</p>
|
||||
|
||||
<!-- 3. On utilise le composant de recherche pour les logs -->
|
||||
<ContentSearch posts={sortedPosts} tags={allTags} basePath="logs" />
|
||||
|
||||
</GameLayout>
|
||||
|
||||
39
src/pages/logs/tags/[tag].astro
Normal file
39
src/pages/logs/tags/[tag].astro
Normal file
@@ -0,0 +1,39 @@
|
||||
---
|
||||
import { getCollection } from 'astro:content';
|
||||
import GameLayout from '../../../layouts/GameLayout.astro';
|
||||
import GoldButton from '../../../components/ui/GoldButton.astro';
|
||||
|
||||
export async function getStaticPaths() {
|
||||
const allPosts = await getCollection('logs');
|
||||
const allTags = [...new Set(allPosts.flatMap((post) => post.data.tags || []))];
|
||||
|
||||
return allTags.map((tag) => {
|
||||
const filteredPosts = allPosts.filter((post) => post.data.tags?.includes(tag));
|
||||
return {
|
||||
params: { tag },
|
||||
props: { posts: filteredPosts },
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
const { tag } = Astro.params;
|
||||
const { posts } = Astro.props;
|
||||
---
|
||||
|
||||
<GameLayout title={`Logs: ${tag}`}>
|
||||
<h1>Logs avec la balise : <span class="tag-title">{tag}</span></h1>
|
||||
|
||||
<div class="card-grid">
|
||||
{
|
||||
posts.map((post) => (
|
||||
<GoldButton href={`/logs/${post.slug}/`} title={post.data.title} body={`Publié le ${post.data.publishDate.toLocaleDateString('fr-FR')}`} />
|
||||
))
|
||||
}
|
||||
</div>
|
||||
</GameLayout>
|
||||
|
||||
<style>
|
||||
.tag-title {
|
||||
color: #c89b3c;
|
||||
}
|
||||
</style>
|
||||
@@ -1,28 +1,32 @@
|
||||
---
|
||||
import Layout from '../layouts/Layout.astro';
|
||||
import GameLayout from '../layouts/GameLayout.astro';
|
||||
import ParchmentCard from '../components/ui/ParchmentCard.astro';
|
||||
---
|
||||
|
||||
<Layout title="L'Observatoire des Songes - Sweet Journey">
|
||||
<h1>🔭 L'Observatoire des Songes</h1>
|
||||
<p>
|
||||
Un pèlerin, même dans les mers de sable, doit lever les yeux vers les constellations pour ne pas perdre son chemin. Mon voyage n'est pas solitaire ; il est guidé par les échos d'autres mondes, les murmures d'autres créateurs. Cet observatoire est ma carte du ciel, où chaque étoile est une âme dont la lumière m'inspire.
|
||||
</p>
|
||||
<GameLayout title="L'Observatoire des Songes - Sweet Journey">
|
||||
<ParchmentCard>
|
||||
<h1>🔭 L'Observatoire des Songes</h1>
|
||||
<p>
|
||||
Un pèlerin, même dans les mers de sable, doit lever les yeux vers les constellations pour ne pas perdre son chemin. Mon voyage n'est pas solitaire ; il est guidé par les échos d'autres mondes, les murmures d'autres créateurs. Cet observatoire est ma carte du ciel, où chaque étoile est une âme dont la lumière m'inspire.
|
||||
</p>
|
||||
|
||||
<h2>Les Tisseurs de Rêves : Artistes & Développeurs</h2>
|
||||
<p>Certains artisans, comme le maître Hayao Miyazaki, créent des mondes où le vent, les arbres et les esprits ont une voix. Leurs récits sont des leçons d'harmonie, un rappel que même la plus petite créature a sa place dans le grand cycle. J'étudie leurs œuvres comme un ancien grimoire, y cherchant la maîtrise de la forme et du mouvement.</p>
|
||||
<h2>Les Tisseurs de Rêves : Artistes & Développeurs</h2>
|
||||
<p>Certains artisans, comme le maître Hayao Miyazaki, créent des mondes où le vent, les arbres et les esprits ont une voix. Leurs récits sont des leçons d'harmonie, un rappel que même la plus petite créature a sa place dans le grand cycle. J'étudie leurs œuvres comme un ancien grimoire, y cherchant la maîtrise de la forme et du mouvement.</p>
|
||||
|
||||
<h2>Mes Compagnons de Quête</h2>
|
||||
<p>Mon pèlerinage serait vain sans ceux qui marchent à mes côtés. Chacun est une étoile dans ma nuit, une source de force et de récits inattendus. Leur courage et leurs bizarreries nourrissent mon voyage autant que le sable :</p>
|
||||
<ul>
|
||||
<li><strong>Orson, le Gardien du Froid :</strong> Notre Maître de Jeu, un être aussi énigmatique et froid que sa patrie gelée. Il tisse les fils de notre destinée tout en suivant la sienne : une quête de vengeance pour sa sœur disparue, marquée au fer rouge par un symbole arcanique. Il est le vent glacial qui nous pousse en avant.</li>
|
||||
<li><strong>Gurdill "Cul Brillant" :</strong> Un prince nain en exil, dont le surnom lumineux cache une profonde connaissance de la forge. Banni par les siens, il cherche à prouver sa valeur, son marteau elfique à la main. Sa quête de rédemption est aussi flamboyante que son fameux caleçon.</li>
|
||||
<li><strong>Bulle aux Mains d’Or :</strong> Une fée guérisseuse, exilée volontaire de son royaume pour comprendre la souffrance du monde matériel. Sa lumière est un baume pour nos blessures, et sa naïveté un rappel constant de la pureté que nous cherchons à protéger.</li>
|
||||
<li><strong>Jinn le Mélodiste :</strong> Un barde Genasi au sang de feu, dont la musique est aussi ardente que son tempérament. Sa quête pour retrouver l'épée de ses ancêtres est un chant d'honneur qui rythme nos pas et enflamme nos cœurs.</li>
|
||||
<li><strong>Nyrae la Guérisseuse :</strong> Une Tabaxi dont les pas silencieux la guident loin de sa forêt natale. Son instinct et sa connaissance des onguents sont un réconfort précieux, une présence sauvage et apaisante dans notre groupe hétéroclite.</li>
|
||||
</ul>
|
||||
<h2>Mes Compagnons de Quête</h2>
|
||||
<p>Mon pèlerinage serait vain sans ceux qui marchent à mes côtés. Chacun est une étoile dans ma nuit, une source de force et de récits inattendus. Leur courage et leurs bizarreries nourrissent mon voyage autant que le sable :</p>
|
||||
<ul>
|
||||
<li><strong>Orson, le Gardien du Froid :</strong> Notre Maître de Jeu, un être aussi énigmatique et froid que sa patrie gelée. Il tisse les fils de notre destinée tout en suivant la sienne : une quête de vengeance pour sa sœur disparue, marquée au fer rouge par un symbole arcanique. Il est le vent glacial qui nous pousse en avant.</li>
|
||||
<li><strong>Gurdill "Cul Brillant" :</strong> Un prince nain en exil, dont le surnom lumineux cache une profonde connaissance de la forge. Banni par les siens, il cherche à prouver sa valeur, son marteau elfique à la main. Sa quête de rédemption est aussi flamboyante que son fameux caleçon.</li>
|
||||
<li><strong>Bulle aux Mains d’Or :</strong> Une fée guérisseuse, exilée volontaire de son royaume pour comprendre la souffrance du monde matériel. Sa lumière est un baume pour nos blessures, et sa naïveté un rappel constant de la pureté que nous cherchons à protéger.</li>
|
||||
<li><strong>Jinn le Mélodiste :</strong> Un barde Genasi au sang de feu, dont la musique est aussi ardente que son tempérament. Sa quête pour retrouver l'épée de ses ancêtres est un chant d'honneur qui rythme nos pas et enflamme nos cœurs.</li>
|
||||
<li><strong>Nyrae la Guérisseuse :</strong> Une Tabaxi dont les pas silencieux la guident loin de sa forêt natale. Son instinct et sa connaissance des onguents sont un réconfort précieux, une présence sauvage et apaisante dans notre groupe hétéroclite.</li>
|
||||
</ul>
|
||||
|
||||
<h2>Les Murmures du Vent</h2>
|
||||
|
||||
<h2>Les Chroniques d'Autres Mondes</h2>
|
||||
<h2>Les Murmures du Vent</h2>
|
||||
|
||||
<h2>Les Chroniques d'Autres Mondes</h2>
|
||||
</ParchmentCard>
|
||||
</GameLayout>
|
||||
|
||||
</Layout>
|
||||
Reference in New Issue
Block a user