diff --git a/config.ts b/config.ts deleted file mode 100644 index befbab5..0000000 --- a/config.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { defineCollection, z } from "astro:content"; - -// Collection pour le Journal de bord de la campagne JDR -const journalCollection = defineCollection({ - type: "content", - schema: z.object({ - title: z.string(), - author: z.string(), - publishDate: z.date(), - tags: z.array(z.string()), - }), -}); - -// Collection pour les logs de développement et de réflexion -const logsCollection = defineCollection({ - type: "content", - schema: z.object({ - title: z.string(), - publishDate: z.date(), - tags: z.array(z.string()), - }), -}); - -// Collection pour le "Codex de la Substance" (apprentissage) -const codexCollection = defineCollection({ - type: "content", - schema: z.object({ - title: z.string(), - subtitle: z.string(), - publishDate: z.date(), - tags: z.array(z.string()), - concept2D: z.string(), - mecanique: z.string(), - vision3D: z.string(), - status: z.enum(["Acquis", "En cours", "À explorer"]), - }), -}); - -const bujoCollection = defineCollection({ - type: 'content', - schema: z.object({ - title: z.string(), - publishDate: z.date(), - tags: z.array(z.string()), - period: z.string().optional(), - }), -}); - -export const collections = { - journal: journalCollection, - logs: logsCollection, - codex: codexCollection, - bujo: bujoCollection, -}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 3fd06be..8bd6e53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "@astrojs/mdx": "^4.3.13", "@tailwindcss/vite": "^4.1.18", - "astro": "^5.16.15", + "astro": "^5.17.1", "tailwindcss": "^4.1.18" } }, @@ -2057,9 +2057,9 @@ } }, "node_modules/astro": { - "version": "5.16.15", - "resolved": "https://registry.npmjs.org/astro/-/astro-5.16.15.tgz", - "integrity": "sha512-+X1Z0NTi2pa5a0Te6h77Dgc44fYj63j1yx6+39Nvg05lExajxSq7b1Uj/gtY45zoum8fD0+h0nak+DnHighs3A==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/astro/-/astro-5.17.1.tgz", + "integrity": "sha512-oD3tlxTaVWGq/Wfbqk6gxzVRz98xa/rYlpe+gU2jXJMSD01k6sEDL01ZlT8mVSYB/rMgnvIOfiQQ3BbLdN237A==", "license": "MIT", "dependencies": { "@astrojs/compiler": "^2.13.0", diff --git a/package.json b/package.json index 1e88ad5..73796bd 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "dependencies": { "@astrojs/mdx": "^4.3.13", "@tailwindcss/vite": "^4.1.18", - "astro": "^5.16.15", + "astro": "^5.17.1", "tailwindcss": "^4.1.18" } } diff --git a/src/components/ContentSearch.astro b/src/components/ContentSearch.astro index 22b1505..a25171a 100644 --- a/src/components/ContentSearch.astro +++ b/src/components/ContentSearch.astro @@ -1,202 +1,190 @@ --- -import type { CollectionEntry } from 'astro:content'; -import GoldButton from './ui/GoldButton.astro'; -import CodexCard from './ui/CodexCard.astro'; +import type { CollectionEntry } from "astro:content"; +import GoldButton from "./ui/GoldButton.astro"; +import CodexCard from "./ui/CodexCard.astro"; interface Props { - posts: CollectionEntry<'journal' | 'logs' | 'codex'>[]; - tags: string[]; - basePath: 'journal' | 'logs' | 'codex'; + posts: CollectionEntry<"journal" | "logs" | "codex">[]; + tags: string[]; + basePath: "journal" | "logs" | "codex"; } const { posts, tags, basePath } = Astro.props; ---
-
- -
+
+ +
-
- - { - tags.map((tag) => ( - - )) - } -
+
+ + { + tags.map((tag) => ( + + )) + } +
-
- {basePath === 'codex' ? ( - posts.map((post) => ( - } /> - )) - ) : ( - posts.map((post) => ( - - )) - ) - } -
- +
+ { + basePath === "codex" + ? posts.map((post) => ( + } /> + )) + : posts.map((post) => ( + + )) + } +
+ + + +
- \ No newline at end of file + /* Conteneur des tags : centrage et espacement */ + .tags-container { + display: flex; + justify-content: center; + gap: 0.6rem; + flex-wrap: wrap; + margin-bottom: 3rem; + width: 100%; + } + + /* Le bouton de tag : on force les styles pour contrer Tailwind */ + .tag-btn { + all: unset; /* On réinitialise les styles par défaut du navigateur */ + display: inline-block; + cursor: pointer; + background-color: #f3ece0; + color: #4a4130; + padding: 0.4rem 1.2rem; + border-radius: 9999px; /* Forme pilule parfaite */ + font-family: "Cinzel", serif; + font-size: 0.85rem; + border: 1px solid #dcd0b9; + transition: all 0.2s ease-in-out; + text-align: center; + } + + /* État survolé */ + .tag-btn:hover { + background-color: #fdf6e8; + border-color: #c89b3c; + color: #c89b3c; + transform: translateY(-1px); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.05); + } + + /* État actif (celui qui est doré sur ton image 2) */ + .tag-btn.active { + background-color: #c89b3c !important; + color: #ffffff !important; + border-color: #b8860b !important; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2); + } + + /* Centrage de la barre de recherche */ + .search-wrapper { + display: flex; + justify-content: center; + margin-bottom: 2.5rem; + width: 100%; + } + + #search-input { + width: 100%; + max-width: 450px; + padding: 0.75rem 1.2rem; + border: 1px solid #dcd0b9; + border-radius: 8px; + background-color: rgba(253, 246, 232, 0.9); + font-family: "EB Garamond", serif; + font-size: 1.1rem; + color: #4a4130; + outline: none; + transition: border-color 0.2s; + } + + #search-input:focus { + border-color: #c89b3c; + box-shadow: 0 0 0 2px rgba(200, 155, 60, 0.1); + } + diff --git a/src/components/bujo/BujoFutureLog.astro b/src/components/bujo/BujoFutureLog.astro deleted file mode 100644 index 6b00f0f..0000000 --- a/src/components/bujo/BujoFutureLog.astro +++ /dev/null @@ -1,41 +0,0 @@ ---- -import { getCollection } from 'astro:content'; - -const months = [ - "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", - "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre" -]; - -// 1. Récupérer tous les événements futurs -const futureEvents = await getCollection('bujo', ({ id }) => { - return id.startsWith('future/'); -}); - -// 2. Grouper les événements par mois -const eventsByMonth = {}; -futureEvents.forEach(event => { - const monthIndex = event.data.publishDate.getMonth(); // 0 = Janvier, 1 = Février, etc. - if (!eventsByMonth[monthIndex]) { - eventsByMonth[monthIndex] = []; - } - eventsByMonth[monthIndex].push(event); -}); ---- - -

Future Log

-

La vue d'ensemble de l'année à venir. Les grands rendez-vous, les voyages, les jalons importants.

- -
- {months.map((monthName, index) => ( -
-

{monthName} 2026

-
- {eventsByMonth[index] ? eventsByMonth[index].map(event => ( -
{event.data.publishDate.getDate()} - {event.data.title}
- )) : ( -
- )} -
-
- ))} -
\ No newline at end of file diff --git a/src/components/bujo/BujoIndex.astro b/src/components/bujo/BujoIndex.astro deleted file mode 100644 index f1affeb..0000000 --- a/src/components/bujo/BujoIndex.astro +++ /dev/null @@ -1,58 +0,0 @@ ---- -const { months } = Astro.props; ---- -

Index du Journal

- -
-

Fondations

- -
- -
-

Logs Temporels

-

Le cœur du journal, où le temps est cartographié mois par mois.

-
- {months.map(monthPath => { - const [year, month] = monthPath.split('/'); - const monthName = new Date(parseInt(year), parseInt(month) - 1).toLocaleString('fr-FR', { month: 'long' }); - return ( - - {monthName.charAt(0).toUpperCase() + monthName.slice(1)} {year} - - ) - })} -
-
- -
-

Collections

-

Les pages thématiques qui rassemblent idées, suivis et inspirations.

-
-
-

Organisation & Suivi

- -
-
-

Inspiration & Bien-être

- -
-
-

Créativité & Culture

- -
-
-
diff --git a/src/components/bujo/BujoKeys.astro b/src/components/bujo/BujoKeys.astro deleted file mode 100644 index 5a49a59..0000000 --- a/src/components/bujo/BujoKeys.astro +++ /dev/null @@ -1,50 +0,0 @@ ---- ---- -

Les Clés

-

Ceci est notre langage pour capturer les pensées rapidement. Chaque symbole a une intention.

- -
-
-

Symboles de Base

- -
- -
-

Signifiants de Priorité (Préfixes)

-

Placés à gauche du symbole de base pour ajouter du contexte.

- -
- -
-

Souffle de Vie (Bien-être & Réflexion)

- -
- -
-

Exemple d'utilisation :

-
-

* • Finaliser le projet A

-

$ – Penser à renouveler l'abonnement

-

! △ La patience est la forme la plus douce du courage.

-

○ Passer faire coucou à Sofia en métropole

-
-
-
\ No newline at end of file diff --git a/src/components/bujo/CollectionBooks.astro b/src/components/bujo/CollectionBooks.astro deleted file mode 100644 index c13a11e..0000000 --- a/src/components/bujo/CollectionBooks.astro +++ /dev/null @@ -1,40 +0,0 @@ ---- -// Exemple de données. Plus tard, cela pourrait venir de fichiers de contenu. -const books = [ - { title: "Vers la beauté", author: "David Foenkinos", status: "En cours" }, - { title: "La huitième couleur", author: "Terry Pratchett", status: "À acheter" }, -]; - -const booksByStatus = { - 'En cours': books.filter(b => b.status === 'En cours'), - 'À lire': books.filter(b => b.status === 'À lire'), - 'À acheter': books.filter(b => b.status === 'À acheter'), - 'Lu': books.filter(b => b.status === 'Lu'), -}; - -const statusStyles = { - 'En cours': 'bg-blue-100 text-blue-800', - 'À lire': 'bg-yellow-100 text-yellow-800', - 'Lu': 'bg-green-100 text-green-800', -}; ---- - -

Collection : Livres à lire

-

La pile de savoir et d'évasion qui attend d'être explorée.

- -{Object.entries(booksByStatus).map(([status, bookList]) => ( -
-

{status}

- -
-))} \ No newline at end of file diff --git a/src/components/bujo/CollectionFilms.astro b/src/components/bujo/CollectionFilms.astro deleted file mode 100644 index 1578fce..0000000 --- a/src/components/bujo/CollectionFilms.astro +++ /dev/null @@ -1,38 +0,0 @@ ---- -// Example data. -const items = [ - { title: "Demon Slayer : La forteresse infinie", type: "Film", status: "Vu" }, -]; - -const itemsByStatus = { - 'En cours': items.filter(b => b.status === 'En cours'), - 'À voir': items.filter(b => b.status === 'À voir'), - 'Vu': items.filter(b => b.status === 'Vu'), -}; - -const statusStyles = { - 'En cours': 'bg-blue-100 text-blue-800', - 'À voir': 'bg-yellow-100 text-yellow-800', - 'Vu': 'bg-green-100 text-green-800', -}; ---- - -

Collection : Films & Séries à voir

-

Pour ne jamais être à court d'idées lors d'une soirée cinéma.

- -{Object.entries(itemsByStatus).map(([status, itemList]) => ( -
-

{status}

- -
-))} \ No newline at end of file diff --git a/src/components/bujo/CollectionObjectifs.astro b/src/components/bujo/CollectionObjectifs.astro deleted file mode 100644 index e7e8e1b..0000000 --- a/src/components/bujo/CollectionObjectifs.astro +++ /dev/null @@ -1,46 +0,0 @@ ---- -// Example data. This could later come from content files. -const objectives = [ - { - title: "Finaliser le pivot structurel du site", - steps: [ - ] - }, - { - title: "Lancer la section 'Journal de Bord'", - steps: [ - { text: "Créer l'architecture du Bujo", done: true }, - { text: "Remplir les collections de base", done: true }, - ] - }, - { - title: "Améliorer ma pratique d'Obsidian", - steps: [ - ] - }, - { - title: "Améliorer ma pratique d'Astro", - steps: [ - ] - } -]; ---- - -

Collection : Objectifs du Mois

-

Découper les grandes ambitions en étapes réalisables pour rester motivé.

- -
- {objectives.map(obj => ( -
-

{obj.title}

- -
- ))} -
\ No newline at end of file diff --git a/src/components/bujo/CollectionPlaceholder.astro b/src/components/bujo/CollectionPlaceholder.astro deleted file mode 100644 index 5b04fdc..0000000 --- a/src/components/bujo/CollectionPlaceholder.astro +++ /dev/null @@ -1,10 +0,0 @@ ---- -const { collectionTitle } = Astro.props; -const capitalizedTitle = collectionTitle ? collectionTitle.charAt(0).toUpperCase() + collectionTitle.slice(1) : "Collection"; ---- -

Collection : {capitalizedTitle}

-

Cette collection est en cours de construction.

- -
-

Contenu à venir...

-
\ No newline at end of file diff --git a/src/components/bujo/CollectionTracker.astro b/src/components/bujo/CollectionTracker.astro deleted file mode 100644 index f856ce3..0000000 --- a/src/components/bujo/CollectionTracker.astro +++ /dev/null @@ -1,61 +0,0 @@ ---- -// Exemple de données. Plus tard, cela pourrait venir de fichiers de contenu. -const habits = [ - "Sport (3x/sem)", - "Lecture", - "Écriture (Log/Journal)", - "Pratique du code", - "Budget respecté", - "Coucher avant 23h" -]; - -const daysInMonth = 31; // Pour Janvier, à rendre dynamique plus tard - -// C'est ici que vous contrôlez l'état du tracker. -// Pour chaque habitude, listez les jours où elle a été complétée. -const completedHabits = { - "Sport (3x/sem)": [19], - "Lecture": [19], - "Écriture (Log/Journal)": [17,18,19], - "Pratique du code": [17,18,19], - "Budget respecté": [19], - "Coucher avant 23h": [], -}; ---- - -

Collection : Trackers Mensuels

-

Une vue d'ensemble pour cultiver la discipline et observer les schémas qui se dessinent.

- -
-

Janvier 2026

-
- - - - - {Array.from({ length: daysInMonth }, (_, i) => ( - - ))} - - - - {habits.map(habit => ( - - - {Array.from({ length: daysInMonth }, (_, i) => { - const day = i + 1; - const isCompleted = completedHabits[habit]?.includes(day); - const cellClass = isCompleted ? 'bg-green-400' : 'bg-white'; - return ( - - ); - })} - - ))} - -
Habitude{i + 1}
{habit} -
-
-
-

Astuce : Sur mobile, la grille peut être scrollée horizontalement.

-
\ No newline at end of file diff --git a/src/components/bujo/Key.astro b/src/components/bujo/Key.astro deleted file mode 100644 index 3dde153..0000000 --- a/src/components/bujo/Key.astro +++ /dev/null @@ -1,24 +0,0 @@ ---- -const { symbol } = Astro.props; - -const keyMap = { - '•': { style: '' }, - 'X': { style: 'text-green-600' }, - '>': { style: 'text-blue-600' }, - '<': { style: 'text-orange-600' }, - '○': { style: '' }, - '–': { style: '' }, - 's': { style: 'text-slate-400', symbol: '' }, // Cas spécial pour la tâche annulée - '*': { style: 'text-red-500' }, - '!': { style: 'text-yellow-500' }, - '$': { style: 'text-green-700' }, - '👁️': { style: '' }, - '△': { style: '' }, - '♡': { style: 'text-pink-500' }, - '⭘': { style: '' }, - '⚓': { style: '' }, -}; - -const currentKey = keyMap[symbol] || { style: '', symbol: symbol }; ---- - \ No newline at end of file diff --git a/src/components/bujo/MonthlyLog.astro b/src/components/bujo/MonthlyLog.astro deleted file mode 100644 index 47367f8..0000000 --- a/src/components/bujo/MonthlyLog.astro +++ /dev/null @@ -1,62 +0,0 @@ ---- -const { logs, year, month } = Astro.props; - -const yearNum = parseInt(year); -const monthNum = parseInt(month); - -const monthName = new Date(yearNum, monthNum - 1).toLocaleString('fr-FR', { month: 'long' }); -const capitalizedMonthName = monthName.charAt(0).toUpperCase() + monthName.slice(1); - -// --- Logique du Calendrier --- -const daysInMonth = new Date(yearNum, monthNum, 0).getDate(); -const firstDayOfMonth = new Date(yearNum, monthNum - 1, 1).getDay(); // 0=Dim, 1=Lun, ... -const startOffset = firstDayOfMonth === 0 ? 6 : firstDayOfMonth - 1; -const weekDays = ['Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam', 'Dim']; - -const logsByDay = new Map(logs.map(log => { - const day = log.data.publishDate.getDate(); - return [day, log]; -})); ---- - -

Monthly Log

-

{capitalizedMonthName} {year}

- - -
- - {weekDays.map(day =>
{day}
)} - - - {Array.from({ length: startOffset }).map(() =>
)} - - - {Array.from({ length: daysInMonth }, (_, i) => i + 1).map(day => { - const log = logsByDay.get(day); - const currentDate = new Date(yearNum, monthNum - 1, day); - const isToday = new Date().toDateString() === currentDate.toDateString(); - const dayOfWeek = currentDate.getDay(); - const isWeekend = dayOfWeek === 0 || dayOfWeek === 6; - - return ( - {day} - ); - })} -
- - -

Toutes les entrées du mois

- \ No newline at end of file diff --git a/src/components/ui/CodexCard.astro b/src/components/ui/CodexCard.astro index 49ba85a..dd930e6 100644 --- a/src/components/ui/CodexCard.astro +++ b/src/components/ui/CodexCard.astro @@ -2,103 +2,117 @@ import type { CollectionEntry } from "astro:content"; interface Props { - entry: CollectionEntry<"codex">; + entry: CollectionEntry<"codex">; } const { entry } = Astro.props; --- -
-
{entry.data.title}
-
{entry.data.subtitle}
- - {entry.data.status} - -
-
-
Compétence
-

{entry.data.mecanique}

-
Application Concrète
-

{entry.data.vision3D}

+
+
{entry.data.title}
+
{entry.data.subtitle}
+ + {entry.data.status} + +
+
+
Compétence
+

{entry.data.mecanique}

+
Application Concrète
+

{entry.data.vision3D}

\ No newline at end of file + .skill-content { + margin: 0 0 0.75rem 0; + padding-left: 0.5rem; + border-left: 2px solid rgba(200, 155, 60, 0.3); + } + diff --git a/src/components/ui/GameNav.astro b/src/components/ui/GameNav.astro deleted file mode 100644 index 669e2dd..0000000 --- a/src/components/ui/GameNav.astro +++ /dev/null @@ -1,88 +0,0 @@ ---- -const { pathname } = Astro.url; - -// Dans une application réelle, ces liens pourraient provenir d'un fichier de configuration. -const navItems = [ - { href: '/', label: 'Accueil' }, - { href: '/codex', label: 'Codex' }, - { href: '/atelier', label: 'Atelier' }, - { href: '/observatoire', label: 'Observatoire' }, - { href: '/boussole', label: 'Boussole' }, - { href: '/journal', label: 'Journal' }, - { href: '/auteur', label: 'Auteur' }, - { href: '/logs', label: 'Logs' }, -]; ---- - - - - \ No newline at end of file diff --git a/src/components/ui/GoldButton.astro b/src/components/ui/GoldButton.astro index 5aaa332..1a7a947 100644 --- a/src/components/ui/GoldButton.astro +++ b/src/components/ui/GoldButton.astro @@ -1,17 +1,14 @@ --- interface Props { - href: string; - title: string; - body: string; + href: string; + title: string; + body: string; } const { href, title, body } = Astro.props; --- - -
{title}
-

{body}

-
\ No newline at end of file +
{title}
+

{body}

+ diff --git a/src/components/ui/ParchmentCard.astro b/src/components/ui/ParchmentCard.astro deleted file mode 100644 index ee11986..0000000 --- a/src/components/ui/ParchmentCard.astro +++ /dev/null @@ -1,20 +0,0 @@ ---- -// Ce composant est un simple conteneur stylisé. -// Il n'a pas besoin de props, il affiche simplement le contenu passé à l'intérieur. ---- - -
- -
- - \ No newline at end of file diff --git a/src/content.config.ts b/src/content.config.ts index 8d1af2d..ea65cca 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -1,36 +1,24 @@ -import { defineCollection, z } from 'astro:content'; -import { glob } from 'astro/loaders'; +import { defineCollection, z } from "astro:content"; +import { glob } from "astro/loaders"; -const bujo = defineCollection({ - loader: glob({ pattern: '**/[^_]*.{md,mdx}', base: "./src/content/bujo" }), - schema: z.object({ - title: z.string(), - publishDate: z.date(), - }).passthrough(), -}); - -const codex = defineCollection({ - loader: glob({ pattern: '**/[^_]*.{md,mdx}', base: "./src/content/codex" }), - schema: z.object({}).passthrough(), // TODO: Définir un schéma plus strict -}); +// Petit helper pour éviter la répétition du loader +const obsidianLoader = (path: string) => + glob({ + pattern: "**/[^_]*.{md,mdx}", + base: `./src/content/${path}`, + }); const journal = defineCollection({ - loader: glob({ pattern: '**/[^_]*.{md,mdx}', base: "./src/content/journal" }), - schema: z.object({ - title: z.string(), - author: z.string(), - publishDate: z.date(), - tags: z.array(z.string()), - }).passthrough(), + loader: obsidianLoader("journal"), + schema: z + .object({ + title: z.string(), + // On rend la date plus flexible car Obsidian peut parfois envoyer des strings + publishDate: z.coerce.date(), + tags: z.array(z.string()).default([]), + author: z.string().default("Artisan"), + }) + .passthrough(), }); -const logs = defineCollection({ - loader: glob({ pattern: '**/[^_]*.{md,mdx}', base: "./src/content/logs" }), - schema: z.object({ - title: z.string(), - publishDate: z.date(), - tags: z.array(z.string()), - }).passthrough(), -}); - -export const collections = { bujo, codex, journal, logs }; \ No newline at end of file +export const collections = { journal }; // Simplifié pour test diff --git a/src/content/bujo/2026/01/18.mdx b/src/content/bujo/2026/01/18.mdx deleted file mode 100644 index 4ab04fa..0000000 --- a/src/content/bujo/2026/01/18.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: "Daily Log - 18 Janvier 2026" -publishDate: 2026-01-18 -tags: ["Daily", "Pivot", "Organisation"] ---- -import Key from '~/components/bujo/Key.astro'; - -
-

Ancrage & Bien-être

-
    -
  • Routine du matin (douche, dents...)
  • -
  • Activité physique
  • -
  • Qualité du sommeil (1-5) : 3
  • -
  • Humeur du jour (1-5) : 4
  • -
-
- -
-

Objectifs du Dimanche

-

Une ou deux choses pour profiter de la journée et se sentir bien.

-
    -
  • [Objectif principal]
  • -
  • [Autre petite tâche]
  • -
-
- -
-

Organisation & Budget

-
    -
  • Planifier les repas de la semaine à venir
  • -
  • Chercher une activité gratuite ou un bon plan
  • -
-
- -
-

Foyer & Préparation de la semaine

-
    -
  • Session de rangement (15 min)
  • -
  • Préparer les vêtements pour lundi
  • -
  • Tâche ménagère au choix (lessive, vaisselle...)
  • -
-
- -
-

Loisirs & Note du jour

-

Un moment pour soi, une pensée, une petite victoire :

-

Ce matin après la séance d'hier c'était très compliqué de pouvoir tenir la routine du jour. Je me suis réveillé vers 13h30, je suis sorti du lit vers 14h 14h30... Mais je me sens reposé, je n'ai pas le cou qui tire aujourd'hui, ou encore de migraine particulière. Deux objectifs principales aujourd'hui. La première était de faire le résumé de la session de JDR d'hier. La seconde de commencer à créer mon bullet Journal, ce n'est que le début mais c'est déjà ça.. J'ai réussi à faire les deux et j'ai fait ma lessive, j'ai tendu mon ligne. J'ai rangé un peu mes affaires. J’ai créé mon bullet journal aujourd’hui je suis trop content.. Il y a tellement de chose à faire encore mais franchement, ça fait plaisir !

- -
- - \ No newline at end of file diff --git a/src/content/bujo/2026/01/19.mdx b/src/content/bujo/2026/01/19.mdx deleted file mode 100644 index 1926549..0000000 --- a/src/content/bujo/2026/01/19.mdx +++ /dev/null @@ -1,62 +0,0 @@ ---- -title: "Daily Log - 19 Janvier 2026" -publishDate: 2026-01-19 -tags: ["Daily", "Work", "Organisation"] ---- -import Key from '~/components/bujo/Key.astro'; - -
-

Ancrage & Bien-être

-
    -
  • Routine du matin (douche, dents...)
  • -
  • Activité physique douce (étirements, marche...)
  • -
  • Qualité du sommeil (1-5) : 4
  • -
  • Humeur du jour (1-5) : 5
  • -
-
- -
-

Priorités du Jour (Pro & Perso)

-

Se concentrer sur 1 à 3 tâches essentielles pour avancer.

-
    -
  • [Tâche pro n°1]
  • -
  • [Tâche pro n°2]
  • -
  • [Tâche perso importante]
  • -
-
- -
-

Organisation & Budget

-
    -
  • Planifier le repas du soir
  • -
  • Point rapide sur les comptes
  • -
-
- -
-

Foyer & Routine du soir

-
    -
  • Remplir mon carnet à dessin et projets
  • -
  • Ranger l'espace de travail (5 min)
  • -
  • Préparer les affaires pour demain
  • -
-
- -
-

Loisirs & Note du jour

-

Un moment pour soi, une pensée, une petite victoire :

-

Ce matin réveil à l'heure, j'étais trop bien dans mon lit... Je sentait que ma nuit a était reposante. J'avais pas trop de douleur, ça tirait un peu, juste assez pour que je me rende compte que ça ne me faisait pas mal. je suis partie de chez moi à vélo, en forme et avec un moral d'acier fort d'avoir réalisé ce bel outil hier... De samedi j'ai eu un appel concernant LEO qui demandait à mettre un article au tarif défini, le problème c'est que c'est la 5ème fois qu'il m’appelle pour ce type d'article. Alors je me suis investi d'une mission aujourd'hui, mettre en lumière l'erreur et faire en sorte de structurer un tableur avec toute les corrections à mettre en place. Ce qui a était fait bon j'ai fini un peu plus tard que d'habitude mais ça en valait la peine. Peut-être diront-il demain que ça ne sert à rien. En tout cas moi je sais que ça sert à quelque chose. Ce soir j'ai commencé à remplir mon BUJO. Mais je dois surtout organiser des tâches dans un véritable carnet et noter ce qui doit être améliorer ou modifier pour rendre ce travail loin d'être fastidieux. Ce soir ce sera simple au niveau du repas, rien de folichon, juste de quoi sustenter mon estomac. Il faudrait que je pense à la section recette. Pour les comptes, idem il faudrait que j'y penses également. Et aussi à améliorer chaque point de ce Bujo. Je dois aussi structurer mes routines pour l'entretien de ma maison. Il faudrait aussi peut-être que je penses à un petit espace de notification... Enfin à voir c'est pas le plus urgent. En attendant ce soir une fois que j'ai finaliser de remplir toute les sections on s'attarde dans un vrai carnet de note avec des crayons ^^

- -
- - \ No newline at end of file diff --git a/src/content/bujo/2026/01/20.mdx b/src/content/bujo/2026/01/20.mdx deleted file mode 100644 index 35bfb9e..0000000 --- a/src/content/bujo/2026/01/20.mdx +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: "Daily Log - 20 Janvier 2026" -publishDate: 2026-01-20 -tags: ["Daily", "Work", "Organisation"] ---- -import Key from '~/components/bujo/Key.astro'; - -
-

Ancrage & Bien-être

-
    -
  • Routine du matin (douche, dents...)
  • -
  • Activité physique douce (étirements, marche...)
  • -
  • Qualité du sommeil (1-5) : __
  • -
  • Humeur du jour (1-5) : __
  • -
-
- -
-

Priorités du Jour (Pro & Perso)

-

Se concentrer sur 1 à 3 tâches essentielles pour avancer.

-
    -
  • [Tâche pro n°2 d'hier]
  • -
  • [Tâche pro n°1]
  • -
  • [Tâche pro n°2]
  • -
  • [Tâche perso importante d'hier]
  • -
  • [Tâche perso importante]
  • -
-
- -
-

Organisation & Budget

-
    -
  • Planifier le repas du soir
  • -
-
- -
-

Foyer & Routine du soir

-
    -
  • Ranger l'espace de travail (10 min)
  • -
  • Préparer les affaires pour demain
  • -
-
- -
-

Loisirs & Note du jour

-

Un moment pour soi, une pensée, une petite victoire :

- -
- - \ No newline at end of file diff --git a/src/content/bujo/future/fin-950-loyer.md b/src/content/bujo/future/fin-950-loyer.md deleted file mode 100644 index 1f37c6e..0000000 --- a/src/content/bujo/future/fin-950-loyer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Fin des frais d'agence" -publishDate: 2026-08-01 -tags: ["future-log", "pro"] ---- diff --git a/src/content/bujo/future/log-2602.md b/src/content/bujo/future/log-2602.md deleted file mode 100644 index 95be336..0000000 --- a/src/content/bujo/future/log-2602.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Publier la dernière mouture du site" -publishDate: 2026-02-01 -tags: ["future-log", "pro"] ---- \ No newline at end of file diff --git a/src/content/bujo/future/negocier-contrat-cirrus.md b/src/content/bujo/future/negocier-contrat-cirrus.md deleted file mode 100644 index af8e8ba..0000000 --- a/src/content/bujo/future/negocier-contrat-cirrus.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: "Négocier contrat Cirrus" -publishDate: 2026-04-01 -tags: ["future-log", "pro"] ---- - -*• Préparer la renégociation du contrat. -– Deux ans d'ancienneté, c'est un pivot stratégique. Le moment est venu d'aligner le contrat avec la valeur apportée. - -### A. Bilan des Réalisations (Le Factuel) - -• Lister les réalisations concrètes : - - $ Chiffres clés (hausse CA, gain de temps, économies). - - • Projets complexes menés de A à Z. - - • Tâches et responsabilités acquises hors contrat initial (Argument n°1). - -### B. Étude du Marché - -👁️ Rechercher ma valeur sur le marché actuel : - - • Consulter les simulateurs de salaire (Apec, Glassdoor). - - • Analyser les offres d'emploi pour des postes similaires. -– L'objectif n'est pas de menacer, mais de démontrer une connaissance de ma valeur. - -### C. Préparer le "Panier de Négociation" - -• Définir les demandes au-delà du salaire : - - $ Rémunération : Salaire de base, primes. - - ♡ Qualité de vie : Télétravail, aménagement d'horaires. - - • Évolution : Formation certifiante, changement de poste. - -### D. L'Entretien - -< ○ Demander un entretien spécifique pour discuter de mon évolution. -– Pendant l'entretien : rester positif, être précis dans les demandes, et préparer une réponse au "non" ("Que dois-je accomplir dans les 6 prochains mois ?"). - diff --git a/src/content/bujo/future/planning-fevrier.md b/src/content/bujo/future/planning-fevrier.md deleted file mode 100644 index 2230e13..0000000 --- a/src/content/bujo/future/planning-fevrier.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Plannifier mon mois de février" -publishDate: 2026-01-20 -tags: ["future-log", "pro", "perso"] ---- diff --git a/src/content/bujo/future/repas-cohesion.md b/src/content/bujo/future/repas-cohesion.md deleted file mode 100644 index 5a623ba..0000000 --- a/src/content/bujo/future/repas-cohesion.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: "Repas d'entreprise pour la cohésion d'équipe" -publishDate: 2026-02-15 -tags: ["future-log", "pro"] ---- \ No newline at end of file diff --git a/src/content/bujo/future/vacances-ete-2026.md b/src/content/bujo/future/vacances-ete-2026.md deleted file mode 100644 index 6972b4e..0000000 --- a/src/content/bujo/future/vacances-ete-2026.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: "Vacances, rencontres et affaires" -publishDate: 2026-09-15 -tags: ["future-log", "perso"] ---- -Préparer le voyage pour la métropole et réserver les billets. \ No newline at end of file diff --git a/src/content/codex/blender-animation.md b/src/content/codex/blender-animation.md deleted file mode 100644 index 4955be9..0000000 --- a/src/content/codex/blender-animation.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: "L'Anatomie du Mouvement" -subtitle: "Animer pour le Web" -publishDate: 2026-01-14 -tags: ["Blender", "Pipeline", "Animation", "Rigging"] -domain: "3D" -concept2D: "Créer un GIF animé à partir d'une séquence d'images." -mecanique: "Stocker plusieurs animations dans l'Éditeur d'actions non linéaires (NLA) pour les exporter en une seule fois." -vision3D: "Une statue qui bouge n'est pas vivante. Une créature vivante exprime une intention dans chaque mouvement. Le NLA Editor est le grimoire où l'on écrit les différents 'états d'âme' de l'avatar (marche, course, attente) pour pouvoir les invoquer à volonté dans le code." -status: "À explorer" ---- - -Le mouvement est la manifestation la plus pure du souffle de vie. Pour qu'il s'exprime dans Three.js, il doit être correctement catalogué dans Blender. - -### La Check-list de l'Animateur - -1. **Une Armature, Un Corps :** - * **Mécanique :** Le maillage de votre personnage (`Mesh`) doit être parenté à un seul objet `Armature`. Évitez les armatures multiples. - * **Vision :** Le squelette est unique. Il est le conduit par lequel le souffle se propage dans tout le corps. - -2. **Le Grimoire des Actions (NLA Editor) :** - * **Mécanique :** Ne laissez pas vos animations en vrac. Pour chaque animation (ex: `marche`, `course`), allez dans l'éditeur d'actions, créez une nouvelle action, puis cliquez sur le bouton "Stocker l'action" (Push Down). Cela l'ajoute comme une "piste" dans l'éditeur NLA. - * **Vision :** Chaque piste est un chapitre de la vie de votre personnage. En les nommant correctement, vous pourrez dire à votre code : "Maintenant, lis le chapitre de la course" ou "Joue l'incantation de l'attente". - -3. **Exporter les Actions :** - * **Mécanique :** Dans les paramètres d'export GLB, sous l'onglet `Animation`, assurez-vous que "Animer les actions" est coché et que "Exporter les actions NLA" l'est aussi. - * **Vision :** C'est le sceau final qui lie tous les chapitres de votre grimoire d'animations au cristal `.glb` avant son grand voyage. - -En suivant ces préceptes, vous pourrez, dans Three.js, charger votre modèle et accéder à un tableau de toutes ses animations par leur nom, prêt à insuffler le véritable Hebel à votre création. \ No newline at end of file diff --git a/src/content/codex/blender-export-glb.md b/src/content/codex/blender-export-glb.md deleted file mode 100644 index 28655c7..0000000 --- a/src/content/codex/blender-export-glb.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: "Le Sceau de Transmutation" -subtitle: "Exporter en GLB/GLTF pour le Web" -publishDate: 2026-01-14 -tags: ["Blender", "Pipeline", "GLTF", "Export"] -domain: "3D" -concept2D: "Enregistrer un fichier en 'JPEG pour le Web' avec les bons réglages de compression." -mecanique: "Configurer les paramètres de l'exportateur GLTF 2.0 pour optimiser la taille et la compatibilité." -vision3D: "L'export n'est pas une simple sauvegarde. C'est un rituel qui enferme l'essence du modèle dans un cristal (le fichier .glb) pour son voyage vers le monde du navigateur. Un rituel mal exécuté peut briser le cristal ou en altérer le contenu." -status: "À explorer" ---- - -Le format `.glb` (GLTF Binaire) est le vaisseau qui transportera votre création. Le configurer correctement, c'est s'assurer que le voyage se fasse sans perte et que le modèle arrive intact et léger. - -### La Check-list du Rituel d'Exportation (`Fichier > Exporter > gLTF 2.0`) - -1. **Format :** - * Choisissez **`gLTF Binaire (.glb)`**. Il contient tout (modèle, textures, animations) en un seul fichier, plus simple à gérer dans le code. - -2. **Onglet `Inclure` :** - * **`Objets sélectionnés` :** Cochez **toujours** cette case. Vous ne voulez exporter que votre personnage, pas les lumières ou caméras de votre scène de travail. - * **`Propriétés personnalisées` :** Utile pour passer des données de Blender au code. - * **`Caméras` / `Lumières directionnelles` :** Décochez-les. La lumière et la caméra doivent être gérées par Three.js pour un contrôle total. - -3. **Onglet `Transformation` :** - * **`+Y vers le Haut` :** Toujours coché. C'est la convention de Three.js. - -4. **Onglet `Géométrie` :** - * **`Appliquer les modificateurs` :** Cochez cette case, sauf si vous utilisez des Shape Keys (morphings) pour la déformation. - * **`Compression` :** **Activez-la !** C'est le secret pour des modèles légers qui se chargent vite. L'algorithme Draco de Google est extrêmement efficace. - -5. **Onglet `Animation` :** - * **`Animer les actions` :** Cochez cette case. - * **`Élaguer les animations` :** Cochez pour enlever les images-clés inutiles qui alourdissent le fichier. \ No newline at end of file diff --git a/src/content/codex/blender-fondations.md b/src/content/codex/blender-fondations.md deleted file mode 100644 index 7973d46..0000000 --- a/src/content/codex/blender-fondations.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: "La Discipline de la Forme" -subtitle: "Préparer le Modèle pour le Souffle" -publishDate: 2026-01-14 -tags: ["Blender", "Pipeline", "Optimisation"] -domain: "3D" -concept2D: "Nettoyer un fichier SVG avant de l'importer" -mecanique: "Appliquer les transformations, vérifier l'orientation et nettoyer la géométrie d'un modèle 3D." -vision3D: "Le corps de l'avatar n'est pas qu'une forme, c'est un réceptacle. S'il est impur ou mal orienté, le souffle de vie (l'animation) sera corrompu ou s'exprimera de travers. C'est l'art de préparer un golem parfait avant le rituel d'animation." -status: "À explorer" ---- - -Avant même de murmurer la formule d'exportation, le pèlerin doit s'assurer que son réceptacle est pur. Un modèle mal préparé dans Blender se manifestera dans Three.js comme une entité tordue, décalée ou gigantesque. - -### La Check-list des Fondations - -1. **Le Centre du Monde :** - * **Mécanique :** Assurez-vous que votre personnage est au centre de la scène (Origine du Monde : 0, 0, 0). Son origine (le petit point orange) doit être idéalement entre ses pieds. - * **Vision :** L'avatar doit être ancré dans la réalité de votre monde. S'il naît décalé, il sera toujours un étranger. - -2. **L'Échelle de la Réalité :** - * **Mécanique :** Appliquez toutes les transformations avec `Ctrl + A` > `Toutes les transformations`. L'échelle de votre objet doit être de `(1, 1, 1)`. - * **Vision :** Un avatar dont l'échelle n'est pas appliquée peut apparaître 100 fois trop grand ou trop petit dans la scène Three.js. C'est la différence entre un dieu et un insecte. - -3. **Le Regard vers l'Avant :** - * **Mécanique :** Votre modèle doit faire face à l'axe **-Y** (Avant). C'est la convention pour que la commande `lookAt()` de Three.js fonctionne intuitivement. - * **Vision :** Le regard de votre création doit être aligné avec son intention. S'il regarde de côté, il avancera en crabe, son corps trahissant son âme. - -4. **La Pureté de la Géométrie :** - * **Mécanique :** En mode `Édition`, sélectionnez tout (`A`) et utilisez `M` > `Par distance` pour fusionner les sommets en double. Recalculez les normales avec `Shift + N`. - * **Vision :** Les sommets dupliqués sont des fractures dans l'âme du modèle. Les normales inversées sont des morceaux de peau retournés. Ces impuretés créent des artefacts visuels, des cicatrices sombres là où la lumière devrait être. - -5. **Nommer, c'est Invoquer :** - * **Mécanique :** Donnez des noms clairs à vos objets (`Corps`, `Yeux`, `Armature`) et à vos matériaux. - * **Vision :** Un nom est une incantation. Il vous permettra, dans le code, d'invoquer une partie précise du corps pour la modifier, comme si vous appeliez son véritable nom. \ No newline at end of file diff --git a/src/content/codex/css-flexbox.md b/src/content/codex/css-flexbox.md deleted file mode 100644 index c53ae1a..0000000 --- a/src/content/codex/css-flexbox.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "L'Alignement des Souffles" -subtitle: "CSS Flexbox" -publishDate: 2026-01-14 -tags: ["CSS", "Layout", "Flexbox"] -domain: "Web Dev" -concept2D: "Centrer un texte verticalement dans un bloc, avec des astuces." -mecanique: "Un modèle de boîte unidimensionnel qui permet de distribuer l'espace et d'aligner des éléments le long d'un axe principal (horizontal ou vertical)." -vision3D: "Imaginez des âmes (des objets) flottant en ligne. Flexbox est le vent qui les pousse pour les regrouper, les espacer ou les centrer. C'est un souffle directionnel, parfait pour organiser des éléments qui se suivent, comme une barre de navigation ou une liste d'attributs." -status: "Acquis" ---- - -Flexbox (Flexible Box Layout) a été une révolution pour les développeurs web. Il a rendu simple ce qui était auparavant complexe : l'alignement et la distribution d'éléments dans un conteneur. - -### La Philosophie de l'Axe - -Flexbox est **unidimensionnel**. Il ne raisonne que sur un seul axe à la fois : -* **L'axe principal (`justify-content`) :** Comment les éléments se répartissent-ils le long de la direction principale (par défaut, de gauche à droite) ? Sont-ils au début, à la fin, au centre, ou avec un espace égal entre eux ? -* **L'axe secondaire (`align-items`) :** Comment les éléments s'alignent-ils sur l'axe perpendiculaire ? Sont-ils en haut, en bas, au centre, ou étirés pour remplir l'espace ? - -C'est l'outil idéal pour les composants d'interface : barres de navigation, en-têtes de cartes, listes... partout où des éléments doivent être organisés en ligne ou en colonne. \ No newline at end of file diff --git a/src/content/codex/css-grid.md b/src/content/codex/css-grid.md deleted file mode 100644 index 1188531..0000000 --- a/src/content/codex/css-grid.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "La Trame du Monde" -subtitle: "CSS Grid" -publishDate: 2026-01-14 -tags: ["CSS", "Layout", "Grid"] -domain: "Web Dev" -concept2D: "Utiliser des `` pour la mise en page (l'ancienne méthode, rigide)." -mecanique: "Un modèle de boîte bidimensionnel qui permet de créer des mises en page complexes en définissant des lignes et des colonnes explicites." -vision3D: "Si Flexbox est un souffle, Grid est la main de l'architecte qui dessine la trame invisible du monde. On ne pousse pas les objets, on leur assigne une place précise dans une structure. C'est le pouvoir de dire : 'Toi, tu iras ici, de cette colonne à celle-ci', créant des espaces complexes et asymétriques." -status: "Acquis" ---- - -CSS Grid a complété Flexbox en offrant un contrôle sur les deux dimensions simultanément. C'est l'outil de choix pour la mise en page globale d'une page ou d'un composant complexe. - -### La Philosophie de la Grille - -Grid est **bidimensionnel**. Il raisonne en termes de grille, avec des lignes et des colonnes : -* **Définition de la trame (`grid-template-columns` / `rows`) :** Vous définissez la structure de votre grille à l'avance. Combien de colonnes ? De quelle taille ? -* **Placement des éléments (`grid-column` / `grid-row`) :** Vous pouvez ensuite placer chaque élément précisément à l'intérieur de cette grille, en lui disant de s'étendre sur une ou plusieurs cellules. - -C'est l'outil parfait pour les mises en page de magazines, les tableaux de bord, et toute interface où les éléments ne se suivent pas simplement mais occupent des zones spécifiques de l'écran. \ No newline at end of file diff --git a/src/content/codex/interface-menu-creation.md b/src/content/codex/interface-menu-creation.md deleted file mode 100644 index 9bb498b..0000000 --- a/src/content/codex/interface-menu-creation.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "Le Portail Diégétique" -subtitle: "La Question du Menu de Création" -publishDate: 2026-01-14 -tags: ["UI", "UX", "Game Design", "Interface"] -domain: "Game Design" -concept2D: "Un formulaire web bien désigné." -mecanique: "L'Interface Utilisateur (UI) qui permet au joueur de faire des choix pour personnaliser son avatar." -vision3D: "Le menu est la membrane entre le monde du joueur et le monde du jeu. S'il est une simple liste de boutons, il est une barrière à l'immersion. S'il est intégré à l'univers (un miroir, un rêve, une table d'alchimiste), il devient le premier rituel, le premier acte de création magique." -status: "À explorer" ---- - -Le mot "menu" peut sembler froid et technique, mais il représente un défi de design crucial : comment donner au joueur les outils de la création sans briser l'illusion ? - -### Les Approches du Menu de Création - -1. **Le Menu "Catalogue" (Classique) :** Une série de listes et de curseurs. Efficace, précis, mais souvent peu immersif. C'est la boîte à outils posée à côté de la sculpture. - -2. **Le Menu "Diégétique" (Moderne) :** L'interface fait partie du monde du jeu. - * **Exemple :** Le personnage se regarde dans un miroir magique et le joueur modifie son reflet (*Dragon's Dogma 2*). - * **Exemple :** Le joueur manipule des orbes d'énergie ou des fragments de cristal qui flottent autour de l'avatar pour en changer les aspects. - -Dans un projet Low Poly novateur, le menu lui-même peut devenir une expérience artistique. Puisque le personnage est simple, l'interface peut être riche et animée, utilisant des formes géométriques et des effets de lumière qui répondent en temps réel aux choix du joueur, transformant un formulaire en un véritable acte de magie. \ No newline at end of file diff --git a/src/content/codex/raycasting.md b/src/content/codex/raycasting.md deleted file mode 100644 index 589d2d2..0000000 --- a/src/content/codex/raycasting.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Le Regard et le Toucher" -subtitle: "Raycasting" -publishDate: 2026-01-15 -tags: ["Physique du Sable", "Interaction"] -domain: "3D" -concept2D: "États :hover et :active des boutons" -mecanique: "Lancer un rayon depuis la caméra pour détecter les intersections avec les objets de la scène." -vision3D: "Le regard qui devient une main. Le simple fait de poser les yeux sur un objet peut altérer sa matière (changement de shader), déclencher un son, ou le faire léviter. C'est le premier pas vers une interaction sans interface visible." -status: "Acquis" ---- - -### La Dissection du Grain - -Le Raycasting est le pont entre le monde 2D de l'écran et l'espace 3D de la scène. En projetant un rayon invisible depuis la position de la souris (ou du centre de la caméra), nous pouvons lister tous les objets qu'il traverse. - -C'est le mécanisme fondamental qui nous permet de répondre à la question : "Qu'est-ce que le visiteur est en train de regarder ?". Il remplace la logique du DOM où l'on attache des `event listeners` à des boîtes HTML. Ici, l'événement est attaché à la direction du regard lui-même. C'est la mécanique derrière le "regard" ou la "main" du visiteur dans notre univers. - -### Le Journal de Transmutation - -Le passage du `:hover` CSS au Raycasting est un saut paradigmatique. On ne décore plus une boîte, on interroge l'espace. Le feedback n'est plus un simple changement de couleur, mais peut devenir une réaction physique de l'objet lui-même, lui donnant l'illusion d'être conscient de notre présence. \ No newline at end of file diff --git a/src/content/codex/style-lowpoly-voxel.md b/src/content/codex/style-lowpoly-voxel.md deleted file mode 100644 index e792ef5..0000000 --- a/src/content/codex/style-lowpoly-voxel.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "La Pureté Géométrique" -subtitle: "Le Style Low Poly & Voxel" -publishDate: 2026-01-14 -tags: ["Low Poly", "Voxel", "Direction Artistique", "Style"] -domain: "Game Design" -concept2D: "Le Pixel Art, où chaque carré compte." -mecanique: "Utiliser un nombre minimal de polygones (Low Poly) ou de cubes (Voxel) pour représenter des formes, en se concentrant sur la silhouette, la couleur et la lumière plutôt que sur le détail réaliste." -vision3D: "Le 'souffle de vie' n'a pas besoin des pores de la peau pour exister. En réduisant la forme à son essence, on laisse plus de place à l'imagination et à l'énergie pure. Le personnage n'est plus une imitation du réel, mais un symbole, une idée en mouvement." -status: "À explorer" ---- - -Choisir le Low Poly en 2026 n'est plus une contrainte technique, mais un choix esthétique radical. C'est l'art de la **"Modernité Simple"**. On utilise la puissance des moteurs modernes non pas pour imiter le réel, mais pour sublimer la simplicité. - -### Le Low Poly "Haute-Fidélité" - -Pour qu'un style simple ne paraisse pas "vieux jeu", on le marie à des technologies de pointe : - -* **La Lumière sur la Forme :** On applique des éclairages et des ombres ultra-réalistes (calculés par des shaders complexes) sur des formes géométriques pures. Le contraste entre la simplicité du modèle et la complexité de la lumière crée un rendu unique, à la fois lisible et magnifique. C'est le style de jeux comme *Tunic* ou *Sable*. - -* **La Matière avant la Texture :** Au lieu de peindre des détails, on simule des matériaux. Le personnage peut ressembler à une figurine en plastique brillant, en verre dépoli ou en métal brossé. La lumière interagit avec ces matériaux de façon crédible, donnant au modèle un aspect "premium" et tangible. - -* **L'Animation comme Âme :** La fluidité du mouvement devient primordiale. Un personnage en 100 polygones peut sembler plus vivant qu'un modèle photoréaliste s'il bouge avec une grâce et une intention parfaites. Le "Hebel" se déplace du détail de la surface vers la pureté du mouvement. \ No newline at end of file diff --git a/src/content/codex/systeme-arbre-talents.md b/src/content/codex/systeme-arbre-talents.md deleted file mode 100644 index 9f43a9b..0000000 --- a/src/content/codex/systeme-arbre-talents.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "L'Architecture de l'Âme" -subtitle: "L'Arbre de Talents" -publishDate: 2026-01-14 -tags: ["Game Design", "Systèmes", "RPG", "Progression"] -domain: "Game Design" -concept2D: "Un organigramme ou une carte mentale." -mecanique: "Un système de progression visuel où le joueur dépense des points pour débloquer des compétences et des bonus interconnectés, créant un 'build' (une construction) unique." -vision3D: "Le 'Hebel' n'est pas que visuel. C'est aussi la structure invisible de la puissance du personnage. L'arbre de talents est la constellation de son âme guerrière, où chaque choix est une étoile qui définit qui il est au combat, bien plus que la couleur de ses yeux." -status: "À explorer" ---- - -La personnalisation n'est pas qu'une affaire d'apparence. Un arbre de talents est une forme de création de personnage tout aussi profonde, mais qui se joue au niveau des systèmes. - -### La Personnalisation Systémique - -* **L'Expression par le Gameplay :** Dans des jeux comme *Path of Exile* ou *Divinity: Original Sin*, l'identité du personnage se définit par ses actions : la manière dont il combine ses sorts, la vitesse de ses attaques, sa capacité à survivre. L'arbre de talents est le lieu où ces choix sont architecturés. - -* **Le Plaisir Cérébral :** "Jouer dans les menus" est une forme de plaisir à part entière. Le joueur devient un théoricien, un architecte de builds, cherchant la synergie parfaite entre des dizaines de compétences. - -* **Une Constellation de Pouvoirs :** Visuellement, un arbre de talents peut lui-même devenir une œuvre d'art. Une carte céleste où chaque compétence est une étoile, et les liens entre elles forment les constellations du pouvoir que le joueur dessine pour son avatar. \ No newline at end of file diff --git a/src/content/journal/eveil.md b/src/content/journal/eveil.md index a903593..43a85db 100644 --- a/src/content/journal/eveil.md +++ b/src/content/journal/eveil.md @@ -33,7 +33,7 @@ A l'intérieur, l'obscurité y était totale, une gueule noire dévorant la lumi C’est ainsi que **Gurdil**, désormais baptisé **"Cul Brillant"**, est devenu notre phare, notre cap, que dis-je notre firmament. Et c'est guidés par son postérieur rayonnant que nous nous sommes enfoncés dans les entrailles de la terre, prêts à affronter l'obscurité. ---- + ### Aventuriers | **Nom** | **Race** | **Notes particulières** | @@ -43,6 +43,7 @@ C’est ainsi que **Gurdil**, désormais baptisé **"Cul Brillant"**, est devenu | **Bulle** | Fée | A lancé _Lumière_ sur le caleçon de Gurdil pour explorer la mine. | | **Gurdil** | Nain | Désormais surnommé "Cul Brillant" à cause du sort de Bulle. | | **Jinn** | Genasi | Musicien du groupe ; a payé sa chambre d'auberge en jouant. | + ### Personnages | **Nom** | **Race / Rôle** | **Relation / Détails** | @@ -63,17 +64,12 @@ C’est ainsi que **Gurdil**, désormais baptisé **"Cul Brillant"**, est devenu | **Ran & Zas** | Gobelins | Enfants de Tritte et Iben. | | **Alvin** | Gnome | Enfant du village. | ---- ### Les légendes de Kwel le Sang-dragon Kwel semble être une source d'informations aussi riche qu'incertaine. Voici les détails de ses récits : -**Le Dragon de la Mine :** Il affirme qu'un "Dragon Infernal" vit dans la mine. Il raconte cette histoire de deux façons : dans l'une, il était enfant quand cela s'est produit, dans l'autre, il y travaillait. - -**La Fondation de l'Auberge :** Il prétend avoir bâti l'auberge lui-même avec l'aide d'un groupe d'aventuriers. Bien qu'il soit originaire du village, il loge à l'auberge. - -**La Bataille du Grand Arbre :** Il y a plus de 1000 ans, des ogres ont attaqué la forêt. L'arbre millénaire devait être détruit, mais il a été sauvé par un groupe d'aventuriers dont Kwel prétend avoir fait partie. - -**Paradoxe Temporel :** Il affirme avoir fait partie d'aventuriers il y a un millénaire, tout en disant qu'il a lui-même moins de 1000 ans (alors que le village, lui, dépasse cet âge). - -**Connaissance des Grungs :** Il a mentionné avoir déjà croisé des membres de votre espèce (Grung) au cours de sa vie. +- **Le Dragon de la Mine :** Il affirme qu'un "Dragon Infernal" vit dans la mine. Il raconte cette histoire de deux façons : dans l'une, il était enfant quand cela s'est produit, dans l'autre, il y travaillait. +- **La Fondation de l'Auberge :** Il prétend avoir bâti l'auberge lui-même avec l'aide d'un groupe d'aventuriers. Bien qu'il soit originaire du village, il loge à l'auberge. +- **La Bataille du Grand Arbre :** Il y a plus de 1000 ans, des ogres ont attaqué la forêt. L'arbre millénaire devait être détruit, mais il a été sauvé par un groupe d'aventuriers dont Kwel prétend avoir fait partie. +- **Paradoxe Temporel :** Il affirme avoir fait partie d'aventuriers il y a un millénaire, tout en disant qu'il a lui-même moins de 1000 ans (alors que le village, lui, dépasse cet âge). +- **Connaissance des Grungs :** Il a mentionné avoir déjà croisé des membres de votre espèce (Grung) au cours de sa vie. diff --git a/src/content/journal/obscur.md b/src/content/journal/obscur.md index a3342e5..e4ddf76 100644 --- a/src/content/journal/obscur.md +++ b/src/content/journal/obscur.md @@ -21,8 +21,6 @@ Le groupe réagit alors avec une coordination héroïque. **Gurdil** pulvérisa Le calme revenu, nous avons secouru **Jinn**. Stabilisé par Bulle et soigné par Maielan, le Génasi reprit connaissance. Nyrae se contenta d'un simple "Mouais..." laconique en croisant son regard, soulignant le poids de l'épreuve. Après s'être lui même soigné, Jinn retrouva assez de forces pour continuer. Nous avons repris la marche jusqu'au bout du couloir. Là, un **mur maçonné**, étrangement propre et hors de place, nous barrait la route. Une partie de son centre est effondrée. C'est de l'autre côté, dans ce vide inconnu, que nous entendons enfin les voix des enfants. Qu'est-ce qui a bien pu être enfermé ici ? ---- - ### État du Groupe - **Jinn :** Affaibli mais conscient (récupération en cours). diff --git a/src/content/journal/sang.md b/src/content/journal/sang.md new file mode 100644 index 0000000..fbbb663 --- /dev/null +++ b/src/content/journal/sang.md @@ -0,0 +1,69 @@ +--- +title: "Le printemps sanglant" +author: "G'Mas" +publishDate: 2026-02-08 +tags: ["Vampire","Enfant perdu", "Maçonnerie"] +--- + +## L'Ombre de Constancia + +Après avoir terrassé les Krutiks, nous nous sommes enfoncés dans un conduit étroit serpentant vers le nord-est. Au bout de ce cul-de-sac de briques, un spectacle troublant nous attendait : un mur maçonné effondré, dont la facture humaine, médiocre et grossière, rappelait étrangement celle du manoir noble du village. L'expertise de **Gurdil** fut à couper le souffle ; avec le dédain propre à son peuple, il nous décrivit la pauvreté de cette construction comparée à la finesse de l'architecture naine. + +Pendant ce temps, la lumière projetée par le caleçon de Gurdil étayait les parois, transformant la roche brute en véritables enluminures pour mes yeux de Grung. N'ayant jamais parcouru de tels espaces, la noirceur des cavités me révélait un monde mystérieux et fabuleux dès qu'une source de "lumière étoilée" y était introduite. + +Au centre de la pièce, derrière la section effondrée, une **Eladrin** (elfe des plans féeriques) dont l'humeur reflétait la rigueur de l'hiver semblait prisonnière d'un **pentacle tracé à la poudre blanche**. Autour d'elle, les enfants disparus gisaient au sol ou erraient, proies de magies d'illusion. Pendant que l'Elfe subissait l'emprise d'une magie d'abjuration, le jeune Arengon, **Zajic**, paraissait totalement hypnotisé, selon l'analyse magique de **Bulle**. + +L'Eladrin nous supplia de la libérer, prétendant être la victime d'un savant fou qui l'utilisait pour drainer ses pouvoirs héréditaires. J'essayai d'expliquer au groupe qu'il était impératif de l'endormir avant toute chose, tant l'étrangeté de la situation m'alertait. + +Malgré mes doutes et ma tentative de neutraliser la menace à distance, la tension monta. Gurdil, pressé par l'urgence du sauvetage, céda aux appels insistants de la créature. En dépit de mes avertissements, fidèle à sa nature directe, asséna une gifle monumentale à un enfant pour le réveiller, provoquant l'ire immédiate de la bourgmestre. Las de mes palabres qu'il jugeait inutiles, le nain brisa d'un geste le cercle de poudre blanche au sol. Instantanément, la tristesse hivernale de l'elfe fit place à une joie printanière malveillante... et l'illusion tomba. + +Une fois libérée, l'elfe révéla sa véritable nature : une **Vampire** n'ayant pas bu de sang depuis 70 ans. Le combat s'engagea immédiatement, acharné. Mon poison resta inefficace, mais **Nyrae** parvint à l'entraver avec son fouet sylvestre et un sort d'_Enchevêtrement_. **Bulle** déchaîna la foudre, un éclair foudroyant qui brûla les parures de la créature, révélant une régénération terrifiante. + +Malgré son manque d'énergie apparent, la vampire fit preuve d'une expérience qui lui permettait de résister indéfiniment à nos assauts. Dans le chaos, elle utilisa son charme sur moi ; soudain, ma perception changea et je ne vis plus en elle qu'une amie à secourir, m'obligeant à baisser ma sarbacane. Le drame survint lorsqu'elle planta ses crocs dans le cou de **Nyrae** pour recouvrer sa puissance. Elle révéla alors sa véritable identité : **Constancia Denney, Chevalier de la Couronne d'Argent**. + +Un portail s'ouvrit derrière elle, nous laissant quelques instants pour échanger. Une fois le charme dissipé, je revins sur la défensive et l'interrogeai sur son apparence féerique et ses liens éventuels avec l'Arbre Millénaire. Elle répondit avec dédain qu'il ne s'agissait que d'une image parmi d'autres, avant de prendre les traits de **Jean-Laurent**, le frère d'un de mes amis d'enfance. J'empêchai le groupe de la poursuivre dans le portail, affirmant avoir le pouvoir d'aller à sa rencontre par mes rêves. Elle finit par s'évanouir dans les profondeurs de sa dimension alors que le portail se refermait. + +J'ai tenu à présenter mes excuses à la bourgmestre pour mes soupçons concernant une complicité du village. Elle nous assura que les villageois n'en sauraient rien ; le secret resterait entre nous, la bourgmestre et les enfants encore sous le choc. + +Nous sommes sortis de la mine en héros, accueillis par le village entier. Les enfants ont rejoint les bras de leurs parents, sains et saufs, bien qu'incapables d'expliquer leurs légères blessures. À l'instant où nous avons retrouvé l'air libre, le sort de _Lumière_ s'est dissipé : le caleçon de Gurdil a cessé de briller, marquant la fin de l'ère du "Cul Brillant" (Pour l'instant). + +Le village a célébré notre victoire par un festin, mais le repos fut de courte durée. Tandis que Gurdil se noyait dans la bière et que **Kwel** s'appropriait nos exploits à l'auberge, le sommeil loin d'être léger m'accueilli en son ceint pour me délivrer un message nocturne en rêve. La fée du **Grand Chêne** m'a appelé à l'aide : Ce souffle de vie si cher à mon cœur, est menacé. Dans cette vision, Nyrae et Bulle apparaissaient comme les messagères les plus aptes à communiquer avec cette force ancienne. + +### 🧛 L'Entité : Constancia Denney + +- **Identité :** Vampire et Chevalier de la Couronne d'Argent. +- **Métamorphose :** Elle utilise des apparences saisonnières liées à son état (Eladrin hivernale lors de son emprisonnement, joie printanière à sa libération). Elle peut également copier les traits de proches, comme Jean-Laurent. +- **Capacités :** * **Régénération :** Capacité de soin exceptionnelle, même après avoir subi la foudre de Bulle. + - **Charme :** Peut transformer un adversaire en "ami dévoué", neutralisant ainsi toute hostilité (testé sur G'mas). + - **Drain de vie :** Recouvre sa puissance en s'abreuvant de sang frais (victime : Nyrae). +- **Statut :** En fuite via un portail dimensionnel. + + +### 🕸️ Mécanismes & Mystères + +- **Le Pentacle :** Un cercle de poudre blanche combinant des magies d'abjuration (confinement) et d'illusion (dissimulation de la véritable forme). +- **L'Incident Diplomatique :** Gurdil a rompu l'hypnose de Zajic par une gifle monumentale, créant une tension avec la Bourgmestre Maielan. +- **Le Paradoxe :** Bien que Constancia prétende que son apparence féerique était fortuite, l'appel de détresse du **Grand Chêne** a suivi immédiatement sa libération. + + +### 🌌 Le Souffle de Vie + +- **Localisation :** Le cœur du Grand Chêne, l'arbre millénaire du village. +- **État :** Menacé par une force obscure. La fée protectrice de l'arbre a envoyé un appel au secours onirique. +- **Émissaires :** Nyrae et Bulle sont identifiées comme les vecteurs de communication prioritaires avec l'essence de l'Arbre. + +### 🟢 Évolution des Aventuriers (Niveau 2) + +|**Nom**|**Action Marquante**|**État**| +|---|---|---| +|**G'mas**|A tenté la diplomatie ; charmé par la vampire.|Troublé, en quête de réponses oniriques.| +|**Nyrae**|A immobilisé la vampire (Enchevêtrement) ; a subi la morsure.|Lien renforcé avec le Grand Chêne.| +|**Gurdil**|A brisé le sceau de poudre blanche.|Victorieux, en pleine gueule de bois.| +|**Bulle**|Diagnostic magique et éclair dévastateur.|Prête pour la mission féerique.| +|**Jinn**|Soutien au combat malgré la régénération de l'ennemi.|Prêt pour la suite.| + +### 📋 Métadonnées + +- **Lieu :** Conduit Nord-Est, Secteur Maçonné (facture humaine médiocre). +- **Atmosphère :** Noirceur totale révélée par la source lumineuse "stellaire" de Gurdil. +- **Concept-clé :** #SouffleDeVie #Niveau2 #CouronneDArgent. diff --git a/src/content/logs/acquis.md b/src/content/logs/acquis.md deleted file mode 100644 index e88b1d3..0000000 --- a/src/content/logs/acquis.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -title: "Acquis et Paradigmes d'Astro" -publishDate: 2026-01-13 -tags: ["Astro", "Architecture", "Paradigmes", "Composants", "Routage", "Contenu"] ---- - -Ce log est une halte. Un moment pour observer le chemin parcouru, non pas comme une liste de compétences acquises, mais comme la compréhension des fondations sur lesquelles nous nous tenons. Cette version du site est une étape nécessaire : l'apprentissage des langages et des structures du web "plat", pour mieux en déceler les limites et préparer le véritable saut dans l'immersion. - -### 1. L'Apprentissage du Langage des Bâtisseurs - -Avant de pouvoir façonner le sable en mondes, il fallait apprendre à tailler la pierre. L'architecture actuelle repose sur les paradigmes d'Astro, qui sont ceux des bâtisseurs de la toile moderne. - -* **L'Art de la Brique (`Composants Astro`)** : Nous avons appris à créer des "briques" réutilisables (`GoldButton`, `ParchmentCard`). C'est un art de l'efficacité, de la modularité. Chaque brique est autonome, avec ses propres styles. C'est puissant, mais cela nous enferme dans une logique de "boîtes" empilées les unes sur les autres. - -* **Le Grimoire Ordonné (`Content Collections`)** : Nous avons appris à cataloguer nos récits et nos logs. Chaque parchemin est validé, chaque métadonnée est à sa place. C'est la sagesse de l'archiviste, qui assure l'ordre et la cohérence. Mais un livre, même magique, reste une succession de pages linéaires. - -* **Les Sentiers Tracés (`Routage Dynamique`)** : Nous avons appris à tracer les chemins qui relient nos pages. De l'index du journal à un article, d'un article à sa balise. Ces chemins sont clairs, rapides, générés à l'avance. Mais ce sont des sentiers balisés sur une carte en deux dimensions, pas une exploration libre dans un monde vivant. - -### 2. La Conscience des Murs Invisibles - -Cette architecture modulaire, si prisée, est aussi une cage dorée. Elle nous a permis de construire vite et bien, mais elle nous a aussi forcés à penser en "pages", en "blocs", en "liens". L'immersion que permet Three.js ne peut se contenter de cela. - -Le paradigme actuel est celui du **document**. On navigue d'un document à l'autre. L'ambition est de passer au paradigme de l'**espace**. Un monde unique et persistant dans lequel le contenu n'est pas une page que l'on charge, mais un objet avec lequel on interagit. - -C'est ici que des logiques ont été abandonnées, non par erreur, mais par nécessité. Le menu hamburger, par exemple, est une convention du web 2D. Dans un monde 3D, la navigation pourrait être un objet dans la scène, une carte que l'on déplie, un chemin de lumière que l'on suit. - -### 3. Le Prochain Pas : Façonner le Sable - -Cette fondation n'est pas vaine. Elle est le sol stable sur lequel nous allons maintenant ériger un sanctuaire en trois dimensions. La prochaine grande étape n'est pas d'ajouter une fonctionnalité, mais de changer de regard. - -* **Comprendre chaque grain** : Il s'agira de déconstruire. Comment une scène Three.js peut-elle devenir le "layout" principal ? Comment faire en sorte que le routage d'Astro ne recharge pas une page, mais déclenche une animation dans la scène 3D ? - -* **Construire avec intention** : Chaque choix devra être conscient. Nous n'appliquerons pas des solutions toutes faites, mais nous chercherons à comprendre les principes fondamentaux de la 3D sur le web pour créer une expérience qui a du sens. Le but n'est pas de "faire" un site 3D, mais de **comprendre** comment le faire naître. - -Cette étape est terminée. Le pèlerin a appris les cartes du vieux monde. Il est temps, maintenant, de les brûler pour dessiner la sienne. \ No newline at end of file diff --git a/src/content/logs/initialisation.md b/src/content/logs/initialisation.md deleted file mode 100644 index 6552269..0000000 --- a/src/content/logs/initialisation.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: "Initialisation du projet" -publishDate: 2026-01-09 -tags: ["Setup", "Infrastructure", "Docker", "Raspberry Pi", "Astro"] ---- - -Le projet a été initialisé avec Astro. La structure de base est en place. - -Le déploiement est géré par Docker et Docker Compose, ce qui permet de lancer le site sur le Raspberry Pi avec une seule commande. -### Matériel - -* **Serveur** : Raspberry Pi 4 (4Go de RAM) -* **Stockage** : Disque dur externe de 2To - -### Environnement Serveur - -* **Système d'exploitation** : Debian -* **Conteneurisation** : Docker & Docker Compose - -### Environnement de Développement - -* **Système d'exploitation local** : Ubuntu -* **Framework** : Astro diff --git a/src/content/logs/matiere.md b/src/content/logs/matiere.md deleted file mode 100644 index 9a06c10..0000000 --- a/src/content/logs/matiere.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: "Ajout de la matière du passé" -publishDate: 2026-01-12 -tags: ["Contenu", "Design", "Narratif", "Composants"] ---- - -Le site a été enrichi avec le contenu principal, donnant vie à l'univers narratif du projet. L'ensemble du site adopte désormais la voix et la perspective de G'Mas, le pèlerin Grung. - -### Nouvelles Sections - -* **Le Sanctuaire des Grains (`/atelier`)** : Présente l'arsenal technique (Three.js, Blender, Raspberry Pi) à travers la métaphore du "Kit du Pèlerin". - -* **L'Observatoire des Songes (`/observatoire`)** : Partage les inspirations du projet, des œuvres de Miyazaki aux histoires des compagnons d'aventure du jeu de rôle. - -* **La Boussole Éthique (`/boussole`)** : Expose la philosophie du projet, en distinguant les modèles de création vertueux (Open Source) des approches jugées néfastes. - -* **Page Auteur (`/auteur`)** : Crée un pont entre le personnage (G'Mas), l'alter-ego artistique (Hatjan Krâpo) et le créateur (Nicolas Latchimy), en listant ses différents travaux et contacts. - -La page d'accueil a également été mise à jour pour refléter ces ajouts via un système de cartes de présentation. diff --git a/src/content/logs/pivot-structurel.md b/src/content/logs/pivot-structurel.md deleted file mode 100644 index 343b408..0000000 --- a/src/content/logs/pivot-structurel.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -title: "Déconstruction pour un Nouveau Souffle" -publishDate: 2026-01-18 -tags: ["Architecture", "Pivot", "Blueprint", "GSAP", "State Management"] ---- - -**Log de Construction #04** - -**Statut :** Pivot structurel / Phase de Blueprint - -**Sujet :** Abandon du modèle actuel pour la Voie du "Slide Navigator" - -### 1. Le Constat du Mécanicien - -Après avoir testé l'architecture actuelle, le verdict tombe : les pièces s'emboîtent, mais le moteur ne tourne pas rond. L'expérience manque de fluidité, le "souffle de vie" (Hebel) s'éparpille dans une structure trop complexe qui ne rend pas hommage à l'esthétique *Storybook* que je vise. - -Vouloir construire la carrosserie avant d'avoir stabilisé le châssis est une erreur de débutant que je choisis de corriger aujourd'hui. - -### 2. La Voie du "Slide Navigator" - -Je décide de revenir à l'essentiel : **la narration séquentielle**. Plutôt qu'un site web classique, je vais structurer l'expérience comme une galerie interactive, un "PowerPoint 3D" où chaque vue est une étape clé de mon pèlerinage. - -Ce choix s'impose pour plusieurs raisons : -* **Contrôle du Flux :** Chaque "slide" devient une scène Three.js maîtrisée (position caméra, éclairage, UI spécifique). -* **Clarté Narrative :** On ne se perd plus dans le site ; on tourne les pages d'un grimoire numérique. -* **Prototypage Rapide :** Cela me permet de valider le passage de l'écran titre au menu "Hebel", puis à la Timeline, avec la précision d'un mécanicien qui règle ses soupapes. - -### 3. Prochaines Étapes (Le Blueprint) - -Le chantier se concentre désormais sur le **"State Controller"**. Il s'agira de définir un tableau d'objets contenant les coordonnées de chaque scène, puis d'utiliser **GSAP** pour créer des transitions fluides entre ces "slides", simulant un voyage cinématographique. Les calques d'interface HTML resteront superposés au canvas pour garantir une accessibilité totale. - -*Le grain de sable ne s'arrête pas, il change de trajectoire pour mieux dessiner l'oasis.* \ No newline at end of file diff --git a/src/content/logs/reflexion-ia.md b/src/content/logs/reflexion-ia.md deleted file mode 100644 index c693272..0000000 --- a/src/content/logs/reflexion-ia.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "L'Harmonie du Souffle et du Silicium" -publishDate: 2026-01-14 -tags: ["IA", "Création", "Philosophie", "Codex"] ---- - -J'ai d'abord vu cette chose comme un piège. Dans ma quête pour bâtir le "Codex de la Substance", je l'ai effleuré quelques fois, et le résultat m'avait glacé : un savoir sans âme, un corps sans "Hebel", ce souffle de vie qui naît de l'effort et de la découverte. Ma conclusion fut simple, presque réac­tionnaire : rejeter l'outil pour préserver le chemin. - -Aujourd'hui, je regarde cette posture avec une nouvelle perspective. Les événements qui secouent un de ces mondes que je ne voient qu'en rêve me servent de miroir. Là-bas, la société se fracture entre les adeptes d'une production de masse sans âme et les artisans d'un rejet total, une guerre culturelle où chacun semble avoir perdu de vue l'essentiel. Ce n'est pas l'outil le problème, mais notre relation à lui. - -Le rejet pur et simple est une impasse. C'est se priver d'un partenaire de danse d'une puissance inouïe. L'adoption aveugle en est une autre, menant à une uniformisation stérile. - -### Forger une Troisième Voie - -La véritable voie est celle de l'harmonie. L'IA ne doit pas être une usine qui remplace le créateur, ni un simple outil que l'on brandit. Elle doit devenir une extension de notre intention, un instrument accordé à notre propre souffle. - -Mon rôle n'est pas de tout écrire à la main par principe, mais de devenir le chef d'orchestre. Je fournis l'intention, la "Vision", la question fondamentale. L'IA, elle, explore les possibles, génère la "Mécanique", propose des formes et des structures à une vitesse surhumaine. Mon travail se déplace : de celui qui taille chaque pierre à celui qui dessine le plan de la cathédrale et insuffle son âme dans l'édifice. - -Le Codex ne sera donc pas le journal d'un ermite, mais le témoignage d'une collaboration. Chaque carte sera le fruit d'un dialogue entre le souffle et le silicium. Le chemin sera différent, ni plus court, ni plus long. Il sera simplement plus riche, car il explorera des territoires que je n'aurais jamais pu arpenter seul. - -Il ne s'agit plus de se méfier de la machine, mais d'apprendre à créer *avec* elle, en harmonie. \ No newline at end of file diff --git a/src/layouts/GameLayout.astro b/src/layouts/GameLayout.astro index ca2b47f..192ace3 100644 --- a/src/layouts/GameLayout.astro +++ b/src/layouts/GameLayout.astro @@ -1,9 +1,8 @@ --- -import { ClientRouter } from 'astro:transitions'; -import GameNav from '../components/ui/GameNav.astro'; +import { ClientRouter } from "astro:transitions"; interface Props { - title: string; + title: string; } const { title } = Astro.props; @@ -11,271 +10,303 @@ const { title } = Astro.props; - - - - - - - {title} - - - -
- -
- - + + + + + + + {title} + + + +
+ +
+ \ No newline at end of file + .card-grid { + gap: 1rem; /* Moins d'espace entre les cartes */ + } + } + diff --git a/src/layouts/LifeLayout.astro b/src/layouts/LifeLayout.astro deleted file mode 100644 index 8581ab6..0000000 --- a/src/layouts/LifeLayout.astro +++ /dev/null @@ -1,39 +0,0 @@ ---- -import {ClientRouter} from 'astro:transitions'; -import '../styles/global.css'; - -interface Props { - title: string; -} - -const { title } = Astro.props; ---- - - - - - - - - - - {title} - - - -
-
- - Journal de Bord - -

Le codex de la vie de l'artisan.

-
-
- -
- -
- - \ No newline at end of file diff --git a/src/modele/21.mdx b/src/modele/21.mdx deleted file mode 100644 index f7f1f04..0000000 --- a/src/modele/21.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: "Daily Log - 21 Janvier 2026" -publishDate: 2026-01-21 -tags: ["Daily", "Work", "Organisation"] ---- -import Key from '~/components/bujo/Key.astro'; - -
-

Ancrage & Bien-être

-
    -
  • Routine du matin (douche, dents...)
  • -
  • Activité physique douce (étirements, marche...)
  • -
  • Qualité du sommeil (1-5) : __
  • -
  • Humeur du jour (1-5) : __
  • -
-
- -
-

Priorités du Jour (Pro & Perso)

-

Se concentrer sur 1 à 3 tâches essentielles pour avancer.

-
    -
  • [Tâche pro n°1]
  • -
  • [Tâche pro n°2]
  • -
  • [Tâche perso importante]
  • -
-
- -
-

Organisation & Budget

-
    -
  • Planifier le repas du soir
  • -
  • Point rapide sur les comptes
  • -
-
- -
-

Foyer & Routine du soir

-
    -
  • Ranger l'espace de travail (5 min)
  • -
  • Préparer les affaires pour demain
  • -
-
- -
-

Loisirs & Note du jour

-

Un moment pour soi, une pensée, une petite victoire :

- -
- - \ No newline at end of file diff --git a/src/modele/22.mdx b/src/modele/22.mdx deleted file mode 100644 index 707f9d0..0000000 --- a/src/modele/22.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: "Daily Log - 22 Janvier 2026" -publishDate: 2026-01-22 -tags: ["Daily", "Work", "Organisation"] ---- -import Key from '~/components/bujo/Key.astro'; - -
-

Ancrage & Bien-être

-
    -
  • Routine du matin (douche, dents...)
  • -
  • Activité physique douce (étirements, marche...)
  • -
  • Qualité du sommeil (1-5) : __
  • -
  • Humeur du jour (1-5) : __
  • -
-
- -
-

Priorités du Jour (Pro & Perso)

-

Se concentrer sur 1 à 3 tâches essentielles pour avancer.

-
    -
  • [Tâche pro n°1]
  • -
  • [Tâche pro n°2]
  • -
  • [Tâche perso importante]
  • -
-
- -
-

Organisation & Budget

-
    -
  • Planifier le repas du soir
  • -
  • Point rapide sur les comptes
  • -
-
- -
-

Foyer & Routine du soir

-
    -
  • Ranger l'espace de travail (5 min)
  • -
  • Préparer les affaires pour demain
  • -
-
- -
-

Loisirs & Note du jour

-

Un moment pour soi, une pensée, une petite victoire :

- -
- - \ No newline at end of file diff --git a/src/modele/23.mdx b/src/modele/23.mdx deleted file mode 100644 index 43309e9..0000000 --- a/src/modele/23.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: "Daily Log - 23 Janvier 2026" -publishDate: 2026-01-23 -tags: ["Daily", "Work", "Organisation"] ---- -import Key from '~/components/bujo/Key.astro'; - -
-

Ancrage & Bien-être

-
    -
  • Routine du matin (douche, dents...)
  • -
  • Activité physique douce (étirements, marche...)
  • -
  • Qualité du sommeil (1-5) : __
  • -
  • Humeur du jour (1-5) : __
  • -
-
- -
-

Priorités du Jour (Pro & Perso)

-

Se concentrer sur 1 à 3 tâches essentielles pour avancer.

-
    -
  • [Tâche pro n°1]
  • -
  • [Tâche pro n°2]
  • -
  • [Tâche perso importante]
  • -
-
- -
-

Organisation & Budget

-
    -
  • Planifier le repas du soir
  • -
  • Point rapide sur les comptes
  • -
-
- -
-

Foyer & Routine du soir

-
    -
  • Ranger l'espace de travail (5 min)
  • -
  • Préparer les affaires pour demain
  • -
-
- -
-

Loisirs & Note du jour

-

Un moment pour soi, une pensée, une petite victoire :

- -
- - \ No newline at end of file diff --git a/src/modele/24.mdx b/src/modele/24.mdx deleted file mode 100644 index a865d43..0000000 --- a/src/modele/24.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "Daily Log - 24 Janvier 2026" -publishDate: 2026-01-24 -tags: ["Daily", "Weekend", "Organisation"] ---- -import Key from '~/components/bujo/Key.astro'; - -
-

Ancrage & Bien-être

-
    -
  • Routine du matin (douche, dents...)
  • -
  • Activité physique douce (étirements, marche...)
  • -
  • Qualité du sommeil (1-5) : __
  • -
  • Humeur du jour (1-5) : __
  • -
-
- -
-

Objectifs du Samedi

-

Une ou deux choses pour profiter de la journée et se sentir bien.

-
    -
  • [Objectif principal]
  • -
  • [Autre petite tâche]
  • -
-
- -
-

Foyer & Organisation

-
    -
  • Session de rangement (15 min)
  • -
  • Tâche ménagère au choix (lessive, vaisselle...)
  • -
-
- -
-

Loisirs & Note du jour

-

Un moment pour soi, une pensée, une petite victoire :

- -
- - \ No newline at end of file diff --git a/src/modele/25.mdx b/src/modele/25.mdx deleted file mode 100644 index e728655..0000000 --- a/src/modele/25.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: "Daily Log - 25 Janvier 2026" -publishDate: 2026-01-25 -tags: ["Daily", "Weekend", "Organisation"] ---- -import Key from '~/components/bujo/Key.astro'; - -
-

Ancrage & Bien-être

-
    -
  • Routine du matin (douche, dents...)
  • -
  • Activité physique douce (étirements, marche...)
  • -
  • Qualité du sommeil (1-5) : __
  • -
  • Humeur du jour (1-5) : __
  • -
-
- -
-

Objectifs du Dimanche

-

Une ou deux choses pour profiter de la journée et se sentir bien.

-
    -
  • [Objectif principal]
  • -
  • [Autre petite tâche]
  • -
-
- -
-

Organisation & Budget

-
    -
  • Planifier les repas de la semaine à venir
  • -
  • Chercher une activité gratuite ou un bon plan
  • -
-
- -
-

Foyer & Préparation de la semaine

-
    -
  • Session de rangement (15 min)
  • -
  • Préparer les vêtements pour lundi
  • -
-
- -
-

Loisirs & Note du jour

-

Un moment pour soi, une pensée, une petite victoire :

- -
- - diff --git a/src/modele/dimanche.mdx b/src/modele/dimanche.mdx deleted file mode 100644 index e728655..0000000 --- a/src/modele/dimanche.mdx +++ /dev/null @@ -1,59 +0,0 @@ ---- -title: "Daily Log - 25 Janvier 2026" -publishDate: 2026-01-25 -tags: ["Daily", "Weekend", "Organisation"] ---- -import Key from '~/components/bujo/Key.astro'; - -
-

Ancrage & Bien-être

-
    -
  • Routine du matin (douche, dents...)
  • -
  • Activité physique douce (étirements, marche...)
  • -
  • Qualité du sommeil (1-5) : __
  • -
  • Humeur du jour (1-5) : __
  • -
-
- -
-

Objectifs du Dimanche

-

Une ou deux choses pour profiter de la journée et se sentir bien.

-
    -
  • [Objectif principal]
  • -
  • [Autre petite tâche]
  • -
-
- -
-

Organisation & Budget

-
    -
  • Planifier les repas de la semaine à venir
  • -
  • Chercher une activité gratuite ou un bon plan
  • -
-
- -
-

Foyer & Préparation de la semaine

-
    -
  • Session de rangement (15 min)
  • -
  • Préparer les vêtements pour lundi
  • -
-
- -
-

Loisirs & Note du jour

-

Un moment pour soi, une pensée, une petite victoire :

- -
- - diff --git a/src/modele/jeudi.mdx b/src/modele/jeudi.mdx deleted file mode 100644 index 707f9d0..0000000 --- a/src/modele/jeudi.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: "Daily Log - 22 Janvier 2026" -publishDate: 2026-01-22 -tags: ["Daily", "Work", "Organisation"] ---- -import Key from '~/components/bujo/Key.astro'; - -
-

Ancrage & Bien-être

-
    -
  • Routine du matin (douche, dents...)
  • -
  • Activité physique douce (étirements, marche...)
  • -
  • Qualité du sommeil (1-5) : __
  • -
  • Humeur du jour (1-5) : __
  • -
-
- -
-

Priorités du Jour (Pro & Perso)

-

Se concentrer sur 1 à 3 tâches essentielles pour avancer.

-
    -
  • [Tâche pro n°1]
  • -
  • [Tâche pro n°2]
  • -
  • [Tâche perso importante]
  • -
-
- -
-

Organisation & Budget

-
    -
  • Planifier le repas du soir
  • -
  • Point rapide sur les comptes
  • -
-
- -
-

Foyer & Routine du soir

-
    -
  • Ranger l'espace de travail (5 min)
  • -
  • Préparer les affaires pour demain
  • -
-
- -
-

Loisirs & Note du jour

-

Un moment pour soi, une pensée, une petite victoire :

- -
- - \ No newline at end of file diff --git a/src/modele/lundi.mdx b/src/modele/lundi.mdx deleted file mode 100644 index 17f25af..0000000 --- a/src/modele/lundi.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: "Daily Log - 19 Janvier 2026" -publishDate: 2026-01-19 -tags: ["Daily", "Work", "Organisation"] ---- -import Key from '~/components/bujo/Key.astro'; - -
-

Ancrage & Bien-être

-
    -
  • Routine du matin (douche, dents...)
  • -
  • Activité physique douce (étirements, marche...)
  • -
  • Qualité du sommeil (1-5) : __
  • -
  • Humeur du jour (1-5) : __
  • -
-
- -
-

Priorités du Jour (Pro & Perso)

-

Se concentrer sur 1 à 3 tâches essentielles pour avancer.

-
    -
  • [Tâche pro n°1]
  • -
  • [Tâche pro n°2]
  • -
  • [Tâche perso importante]
  • -
-
- -
-

Organisation & Budget

-
    -
  • Planifier le repas du soir
  • -
  • Point rapide sur les comptes
  • -
-
- -
-

Foyer & Routine du soir

-
    -
  • Ranger l'espace de travail (5 min)
  • -
  • Préparer les affaires pour demain
  • -
-
- -
-

Loisirs & Note du jour

-

Un moment pour soi, une pensée, une petite victoire :

- -
- - \ No newline at end of file diff --git a/src/modele/mardi.mdx b/src/modele/mardi.mdx deleted file mode 100644 index 3d8330b..0000000 --- a/src/modele/mardi.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: "Daily Log - 20 Janvier 2026" -publishDate: 2026-01-20 -tags: ["Daily", "Work", "Organisation"] ---- -import Key from '~/components/bujo/Key.astro'; - -
-

Ancrage & Bien-être

-
    -
  • Routine du matin (douche, dents...)
  • -
  • Activité physique douce (étirements, marche...)
  • -
  • Qualité du sommeil (1-5) : __
  • -
  • Humeur du jour (1-5) : __
  • -
-
- -
-

Priorités du Jour (Pro & Perso)

-

Se concentrer sur 1 à 3 tâches essentielles pour avancer.

-
    -
  • [Tâche pro n°1]
  • -
  • [Tâche pro n°2]
  • -
  • [Tâche perso importante]
  • -
-
- -
-

Organisation & Budget

-
    -
  • Planifier le repas du soir
  • -
  • Point rapide sur les comptes
  • -
-
- -
-

Foyer & Routine du soir

-
    -
  • Ranger l'espace de travail (5 min)
  • -
  • Préparer les affaires pour demain
  • -
-
- -
-

Loisirs & Note du jour

-

Un moment pour soi, une pensée, une petite victoire :

- -
- - \ No newline at end of file diff --git a/src/modele/mercredi.mdx b/src/modele/mercredi.mdx deleted file mode 100644 index f7f1f04..0000000 --- a/src/modele/mercredi.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: "Daily Log - 21 Janvier 2026" -publishDate: 2026-01-21 -tags: ["Daily", "Work", "Organisation"] ---- -import Key from '~/components/bujo/Key.astro'; - -
-

Ancrage & Bien-être

-
    -
  • Routine du matin (douche, dents...)
  • -
  • Activité physique douce (étirements, marche...)
  • -
  • Qualité du sommeil (1-5) : __
  • -
  • Humeur du jour (1-5) : __
  • -
-
- -
-

Priorités du Jour (Pro & Perso)

-

Se concentrer sur 1 à 3 tâches essentielles pour avancer.

-
    -
  • [Tâche pro n°1]
  • -
  • [Tâche pro n°2]
  • -
  • [Tâche perso importante]
  • -
-
- -
-

Organisation & Budget

-
    -
  • Planifier le repas du soir
  • -
  • Point rapide sur les comptes
  • -
-
- -
-

Foyer & Routine du soir

-
    -
  • Ranger l'espace de travail (5 min)
  • -
  • Préparer les affaires pour demain
  • -
-
- -
-

Loisirs & Note du jour

-

Un moment pour soi, une pensée, une petite victoire :

- -
- - \ No newline at end of file diff --git a/src/modele/samedi.mdx b/src/modele/samedi.mdx deleted file mode 100644 index a865d43..0000000 --- a/src/modele/samedi.mdx +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: "Daily Log - 24 Janvier 2026" -publishDate: 2026-01-24 -tags: ["Daily", "Weekend", "Organisation"] ---- -import Key from '~/components/bujo/Key.astro'; - -
-

Ancrage & Bien-être

-
    -
  • Routine du matin (douche, dents...)
  • -
  • Activité physique douce (étirements, marche...)
  • -
  • Qualité du sommeil (1-5) : __
  • -
  • Humeur du jour (1-5) : __
  • -
-
- -
-

Objectifs du Samedi

-

Une ou deux choses pour profiter de la journée et se sentir bien.

-
    -
  • [Objectif principal]
  • -
  • [Autre petite tâche]
  • -
-
- -
-

Foyer & Organisation

-
    -
  • Session de rangement (15 min)
  • -
  • Tâche ménagère au choix (lessive, vaisselle...)
  • -
-
- -
-

Loisirs & Note du jour

-

Un moment pour soi, une pensée, une petite victoire :

- -
- - \ No newline at end of file diff --git a/src/modele/vendredi.mdx b/src/modele/vendredi.mdx deleted file mode 100644 index 43309e9..0000000 --- a/src/modele/vendredi.mdx +++ /dev/null @@ -1,60 +0,0 @@ ---- -title: "Daily Log - 23 Janvier 2026" -publishDate: 2026-01-23 -tags: ["Daily", "Work", "Organisation"] ---- -import Key from '~/components/bujo/Key.astro'; - -
-

Ancrage & Bien-être

-
    -
  • Routine du matin (douche, dents...)
  • -
  • Activité physique douce (étirements, marche...)
  • -
  • Qualité du sommeil (1-5) : __
  • -
  • Humeur du jour (1-5) : __
  • -
-
- -
-

Priorités du Jour (Pro & Perso)

-

Se concentrer sur 1 à 3 tâches essentielles pour avancer.

-
    -
  • [Tâche pro n°1]
  • -
  • [Tâche pro n°2]
  • -
  • [Tâche perso importante]
  • -
-
- -
-

Organisation & Budget

-
    -
  • Planifier le repas du soir
  • -
  • Point rapide sur les comptes
  • -
-
- -
-

Foyer & Routine du soir

-
    -
  • Ranger l'espace de travail (5 min)
  • -
  • Préparer les affaires pour demain
  • -
-
- -
-

Loisirs & Note du jour

-

Un moment pour soi, une pensée, une petite victoire :

- -
- - \ No newline at end of file diff --git a/src/pages/atelier.astro b/src/pages/atelier.astro deleted file mode 100644 index 2d2b5bc..0000000 --- a/src/pages/atelier.astro +++ /dev/null @@ -1,48 +0,0 @@ ---- -import GameLayout from '../layouts/GameLayout.astro'; -import ParchmentCard from '../components/ui/ParchmentCard.astro'; ---- - - -

🏜️ Le Sanctuaire des Grains

-

- 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. -

- -

Le Façonnage du Sable : Les Arts Techniques

-

- 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. -

-

Pourquoi Three.js ?

-

Three.js 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.

-

Pourquoi Blender ?

-

Si Three.js est l'art du mouvement, Blender 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.

- -

Le Kit du Pèlerin : Outils de Prédilection

-

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.

-
-
Visual Studio Code : Mon Grimoire de Rituels
-
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.
- -
Lenovo Yoga 530 (Ubuntu) : Ma Pierre de Méditation
-
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.
- -
Wacom One, GIMP & Krita : Ma Toile de Sable et mes Pigments de Songe
-
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.
- -
Obsidian & Carnet à dessin : Ma Carte des Étoiles et mon Journal de Piste
-
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.
- -
Raspberry Pi : Mon Foyer de Pèlerin
-
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 :
-
-
    -
  • Docker : 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.
  • -
  • Nginx Proxy Manager : Le gardien des carrefours, qui guide les visiteurs égarés vers la bonne histoire, le bon outil.
  • -
  • Nextcloud & Wallabag : 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.
  • -
  • Dolibarr & Superset : 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.
  • -
-
-
-
-
\ No newline at end of file diff --git a/src/pages/auteur.astro b/src/pages/auteur.astro deleted file mode 100644 index a6120c3..0000000 --- a/src/pages/auteur.astro +++ /dev/null @@ -1,56 +0,0 @@ ---- -import GameLayout from '../layouts/GameLayout.astro'; -import ParchmentCard from '../components/ui/ParchmentCard.astro'; ---- - - - -

🐸 L'Artisan derrière le Pèlerin

-

- 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. -

-

- Il se nomme Nicolas Latchimy. 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. -

- -

Hatjan Krâpo, le Cousin du grung

-

- Avant que je n'existe, un autre batracien est né de son crayon : Hatjan Krâpo. 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. -

- -

Mosaic Chantilly, l'Armateur d'Art

-

- Le 14 septembre 2024, un autre chemin s'est ouvert. Sous le nom de Mosaic Chantilly, 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. -

- -

Du Pinceau au Code

-

- 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. -

- -

Retrouver l'Artisan

-

Pour suivre ses autres pérégrinations, qu'elles soient dessinées ou codées :

- -
- - -

📖 Le Journal de Bord de l'Artisan

-

- Au-delà des chroniques et des lignes de code, il y a le quotidien. Une quête d'équilibre entre la vie, la passion et la discipline. Ce journal de bord est une tentative de cartographier ce voyage intérieur. -

- -
-
- - \ No newline at end of file diff --git a/src/pages/boussole.astro b/src/pages/boussole.astro deleted file mode 100644 index a55267f..0000000 --- a/src/pages/boussole.astro +++ /dev/null @@ -1,19 +0,0 @@ ---- -import GameLayout from '../layouts/GameLayout.astro'; -import ParchmentCard from '../components/ui/ParchmentCard.astro'; ---- - - - -

⚖️ La Boussole Éthique

-

- 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. -

- -

Les Sables de Vie : Les Chemins à Suivre

-

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.

- -

Les Marécages de Sable Noir : Les Chemins à Éviter

-

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.

-
-
\ No newline at end of file diff --git a/src/pages/bujo/[...slug].astro b/src/pages/bujo/[...slug].astro deleted file mode 100644 index d3840d4..0000000 --- a/src/pages/bujo/[...slug].astro +++ /dev/null @@ -1,132 +0,0 @@ ---- -import { getCollection, render } from 'astro:content'; -import LifeLayout from '../../layouts/LifeLayout.astro'; - -// Import des composants de page pour les garder modulaires -import BujoIndex from '../../components/bujo/BujoIndex.astro'; -import BujoKeys from '../../components/bujo/BujoKeys.astro'; -import MonthlyLog from '../../components/bujo/MonthlyLog.astro'; -import BujoFutureLog from '../../components/bujo/BujoFutureLog.astro'; -import CollectionTracker from '../../components/bujo/CollectionTracker.astro'; -import CollectionObjectifs from '../../components/bujo/CollectionObjectifs.astro'; -import CollectionBooks from '../../components/bujo/CollectionBooks.astro'; -import CollectionPlaceholder from '../../components/bujo/CollectionPlaceholder.astro'; -import CollectionFilms from '../../components/bujo/CollectionFilms.astro'; - -export async function getStaticPaths() { - const bujoEntries = await getCollection('bujo'); - const paths = bujoEntries.map(entry => { - const slug = entry.id.replace(/\.(md|mdx)$/, ''); - return { params: { slug } }; - }); - // Ajouter les routes statiques/virtuelles - paths.push({ params: { slug: undefined } }); // Index - paths.push({ params: { slug: 'keys' } }); - paths.push({ params: { slug: 'future-log' } }); - paths.push({ params: { slug: 'collections/livres-a-lire' } }); - paths.push({ params: { slug: 'collections/trackers-mensuels' } }); - paths.push({ params: { slug: 'collections/objectifs-du-mois' } }); - paths.push({ params: { slug: 'collections/suivi-depenses' } }); - paths.push({ params: { slug: 'collections/gratitude' } }); - paths.push({ params: { slug: 'collections/brain-dump' } }); - paths.push({ params: { slug: 'collections/bucket-list' } }); - paths.push({ params: { slug: 'collections/films-a-voir' } }); - - // Ajouter les routes pour les mois - const uniqueMonths = new Set(); - bujoEntries.forEach(log => { - const [year, month] = log.id.split('/'); - if (year && month && !isNaN(parseInt(year)) && !isNaN(parseInt(month))) { - uniqueMonths.add(`${year}/${month}`); - } - }); - uniqueMonths.forEach(monthPath => { - paths.push({ params: { slug: monthPath } }); - }); - - return paths; -} - -const { slug } = Astro.params; - -// 1. Gérer la page d'index (/bujo) -if (slug === undefined) { - const allLogs = await getCollection('bujo'); - const uniqueMonths = new Set(); - allLogs.forEach(log => { - const [year, month] = log.id.split('/'); - if (year && month && !isNaN(parseInt(year)) && !isNaN(parseInt(month))) { - uniqueMonths.add(`${year}/${month}`); - } - }); - Astro.props.page = 'index'; - Astro.props.months = Array.from(uniqueMonths); -} -// 2. Gérer les pages statiques (clés, etc.) -else if (slug === 'keys') { - Astro.props.page = 'keys'; -} -else if (slug === 'future-log') { - Astro.props.page = 'bujo-future-log'; -} -// 3. Gérer les collections -else if (slug.startsWith('collections/')) { - if (slug === 'collections/trackers-mensuels') { - Astro.props.page = 'collection-tracker'; - } else if (slug === 'collections/livres-a-lire') { - Astro.props.page = 'collection-books'; - } else if (slug === 'collections/objectifs-du-mois') { - Astro.props.page = 'collection-objectifs'; - } else if (slug === 'collections/films-a-voir') { - Astro.props.page = 'collection-films'; - } - else { - Astro.props.page = 'collection-placeholder'; - Astro.props.collectionTitle = slug.split('/')[1].replace(/-/g, ' '); - } -} -// 4. Gérer les logs mensuels (ex: /bujo/2026/01) -else if (slug.match(/^\d{4}\/\d{2}$/)) { - const [year, month] = slug.split('/'); - const monthlyLogs = await getCollection('bujo', ({ id }) => id.startsWith(slug)); - Astro.props.page = 'monthly-log'; - Astro.props.logs = monthlyLogs; - Astro.props.year = year; - Astro.props.month = month; -} -// 5. Gérer les entrées de contenu (Daily Logs) -else { - const bujoEntries = await getCollection('bujo'); - const entry = bujoEntries.find(e => e.id.replace(/\.(md|mdx)$/, '') === slug); - if (entry) { - const { Content } = await render(entry); - Astro.props.page = 'entry'; - Astro.props.entry = entry; - Astro.props.Content = Content; - } -} - -const { page, entry, Content, months, logs, year, month, collectionTitle } = Astro.props; -const title = page === 'index' ? 'Journal de Bord' : (entry ? entry.data.title : collectionTitle || 'Journal'); ---- - - - {page === 'index' && } - {page === 'keys' && } - {page === 'bujo-future-log' && } - - {page === 'collection-tracker' && } - {page === 'collection-objectifs' && } - {page === 'collection-books' && } - {page === 'collection-films' && } - {page === 'collection-placeholder' && } - - {page === 'monthly-log' && } - - {page === 'entry' && Content && ( -
-

{entry.data.title}

- -
- )} -
\ No newline at end of file diff --git a/src/pages/codex/[...slug].astro b/src/pages/codex/[...slug].astro deleted file mode 100644 index f460299..0000000 --- a/src/pages/codex/[...slug].astro +++ /dev/null @@ -1,152 +0,0 @@ ---- -import { getCollection, type CollectionEntry } from "astro:content"; -import GameLayout from "../../layouts/GameLayout.astro"; - -export async function getStaticPaths() { - const codexEntries = await getCollection("codex"); - return codexEntries.map((entry) => ({ - params: { slug: entry.slug }, - })); -} - -const { slug } = Astro.params; -const codexEntries = await getCollection("codex"); - -const entry = codexEntries.find((entry) => entry.slug === slug); - -if (!entry) { - return Astro.redirect("/404"); -} - -const { Content } = await entry.render(); ---- - - -
-
-
-

{entry.data.title}

-

{entry.data.subtitle}

-

- Savoir acquis le : { - entry.data.publishDate.toLocaleDateString("fr-FR", { - year: "numeric", - month: "long", - day: "numeric", - }) - } -

-
- -
-
-
Ancien Monde (2D)
-
Mécanique
-
Monde de Demain (3D)
-
-
-
{entry.data.concept2D}
-
{entry.data.mecanique}
-
{entry.data.vision3D}
-
-
- - {entry.data.tags && ( -
- {entry.data.tags.map((tag) => ( - {tag} - ))} -
- )} - -
- -
- - ← Retourner au Codex -
-
-
- - \ No newline at end of file diff --git a/src/pages/codex/index.astro b/src/pages/codex/index.astro deleted file mode 100644 index 81d751b..0000000 --- a/src/pages/codex/index.astro +++ /dev/null @@ -1,28 +0,0 @@ ---- -import { getCollection } from "astro:content"; -import GameLayout from "../../layouts/GameLayout.astro"; -import ContentSearch from "../../components/ContentSearch.astro"; - -// 1. Récupérer toutes les entrées du codex -const codexEntries = await getCollection("codex"); - -// 2. Trier les entrées par date de publication -const sortedEntries = codexEntries.sort( - (a, b) => b.data.publishDate.valueOf() - a.data.publishDate.valueOf() -); - -// 3. Extraire tous les domaines uniques pour les catégories -const allDomains = [...new Set(codexEntries.map(entry => entry.data.domain))]; ---- - - -

Le Codex de la Substance

-

- Le laboratoire où le pèlerin dissèque les mécanismes du réel (le code) - pour insuffler le "souffle de vie" (Hebel) à ses créations. -

- - - - -
\ No newline at end of file diff --git a/src/pages/codex/tag/[tag].astro b/src/pages/codex/tag/[tag].astro deleted file mode 100644 index 6f81bea..0000000 --- a/src/pages/codex/tag/[tag].astro +++ /dev/null @@ -1,38 +0,0 @@ ---- -import { getCollection } from "astro:content"; -import GameLayout from "../../../layouts/GameLayout.astro"; -import CodexCard from "../../../components/ui/CodexCard.astro"; - -export async function getStaticPaths() { - const allCodexEntries = await getCollection("codex"); - const allTags = allCodexEntries.flatMap((entry) => entry.data.tags); - const uniqueTags = [...new Set(allTags)]; - - return uniqueTags.map((tag) => { - return { - params: { tag: tag.toLowerCase() }, - props: { tag }, - }; - }); -} - -const { tag } = Astro.props; - -const allCodexEntries = await getCollection("codex"); - -const filteredEntries = allCodexEntries.filter((entry) => - entry.data.tags.map(t => t.toLowerCase()).includes(Astro.params.tag) -); ---- - - -
-

Domaine : {tag}

-

- Liste de tous les savoirs et mécaniques liés au domaine "{tag}". -

-
- {filteredEntries.map((entry) => )} -
-
-
\ No newline at end of file diff --git a/src/pages/index.astro b/src/pages/index.astro deleted file mode 100644 index aabcdef..0000000 --- a/src/pages/index.astro +++ /dev/null @@ -1,65 +0,0 @@ ---- -import GameLayout from "../layouts/GameLayout.astro"; -import GoldButton from "../components/ui/GoldButton.astro"; ---- - - -

Bienvenue sur le projet JDR Sweet Journey !

-

L'Ambition

-

- L'objectif est de créer un clone entièrement web de l'application mobile AFK Journey. Ce projet sera une vitrine technologique utilisant : -

-
    -
  • - La modélisation 3D et l'animation (2D et 3D) réalisées avec Blender. -
  • -
  • - La retranscription de ces éléments dans le navigateur grâce à Three.js. -
  • -
-
    - -
-

- 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 ! -

- -

Le Voyage

-

- Ce site est aussi un levier pour maîtriser les paradigmes technologiques - de demain. Explorez le journal d'aventure pour suivre la - quête, ou consultez les logs de construction pour voir les - coulisses techniques. -

- -
    - - - -
- -

Quelle ambition, jeune batracien...

-
diff --git a/src/pages/journal/[...slug].astro b/src/pages/journal/[...slug].astro index 452c48f..94b403b 100644 --- a/src/pages/journal/[...slug].astro +++ b/src/pages/journal/[...slug].astro @@ -1,45 +1,147 @@ --- -import { getCollection } from 'astro:content'; -import GameLayout from '../../layouts/GameLayout.astro'; -import ParchmentCard from '../../components/ui/ParchmentCard.astro'; +// 1. Ajoute "render" dans ton import +import { getCollection, render } from "astro:content"; +import GameLayout from "../../layouts/GameLayout.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, - })); + const journalEntries = await getCollection("journal"); + return journalEntries.map((entry) => ({ + params: { slug: entry.id }, + props: { entry }, + })); } -// 2. Récupère les props de l'article correspondant -const post = Astro.props; -const { Content } = await post.render(); +const { entry } = Astro.props; + +if (!entry) { + return Astro.redirect("/404"); +} + +// 2. Utilise la fonction render(entry) au lieu de entry.render() +const { Content } = await render(entry); --- - - -

{post.data.title}

-
- Par {post.data.author} • Le {post.data.publishDate.toLocaleDateString('fr-FR')} -
- {post.data.tags && ( -
- {post.data.tags.map((tag) => ( - {tag} - ))} -
- )} -
- -
-
+ +
+
+
+

{entry.data.title}

+

+ Savoir acquis le : { + entry.data.publishDate.toLocaleDateString("fr-FR", { + year: "numeric", + month: "long", + day: "numeric", + }) + } +

+
+ + { + entry.data.tags && ( +
+ {entry.data.tags.map((tag) => ( + + {tag} + + ))} +
+ ) + } + +
+ +
+ + + ← Retourner au Journal + +
+
\ No newline at end of file + .codex-entry-container { + max-width: 900px; + margin: 0 auto; + padding: 2rem 1rem; + } + + .parchment-card { + background: linear-gradient(145deg, #fefbf3, #f8f1e4); + border: 2px solid #dcd0b9; + border-radius: 15px; + padding: 2rem 3rem; + box-shadow: 0 4px 15px rgba(0, 0, 0, 0.05); + } + + .header { + text-align: center; + margin-bottom: 2rem; + } + + .header h1 { + margin-bottom: 0.5rem; + } + .header h2 { + font-family: "EB Garamond", serif; + font-style: italic; + font-size: 1.4rem; + color: #4a4130; + margin-top: 0; + } + /* On retire l'ornement pour le h2 de la carte */ + .header h2::after { + content: none; + } + + .publish-date { + font-style: italic; + opacity: 0.7; + } + + .transmutation-table { + margin: 2rem 0; + font-size: 0.9rem; + background-color: rgba(253, 246, 232, 0.5); + border: 1px solid #dcd0b9; + border-radius: 8px; + overflow: hidden; + } + + .table-row { + display: grid; + grid-template-columns: 1fr 1.5fr 1.5fr; + gap: 1rem; + padding: 0.75rem 1rem; + } + + .table-row.header { + background-color: rgba(220, 208, 185, 0.4); + } + + .table-row:not(.header) { + border-top: 1px solid #dcd0b9; + } + + .col-title { + font-family: "Cinzel", serif; + font-weight: bold; + color: #4a4130; + } + + .back-link { + display: inline-block; + margin-top: 3rem; + font-family: "Cinzel", serif; + color: #b8860b; + text-decoration: none; + transition: all 0.2s ease; + } + .back-link:hover { + transform: translateX(-5px); + } + diff --git a/src/pages/journal/tags/[tag].astro b/src/pages/journal/tags/[tag].astro index b9a8625..4fe20c8 100644 --- a/src/pages/journal/tags/[tag].astro +++ b/src/pages/journal/tags/[tag].astro @@ -1,19 +1,23 @@ --- -import { getCollection } from 'astro:content'; -import GameLayout from '../../../layouts/GameLayout.astro'; -import GoldButton from '../../../components/ui/GoldButton.astro'; +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 || []))]; + 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 }, - }; - }); + return allTags.map((tag) => { + const filteredPosts = allPosts.filter((post) => + post.data.tags?.includes(tag), + ); + return { + params: { tag }, + props: { posts: filteredPosts }, + }; + }); } const { tag } = Astro.params; @@ -21,19 +25,23 @@ const { posts } = Astro.props; --- -

Récits avec la balise : {tag}

+

Récits avec la balise : {tag}

-
- { - posts.map((post) => ( - - )) - } -
+
+ { + posts.map((post) => ( + + )) + } +
\ No newline at end of file + .tag-title { + color: #c89b3c; + } + diff --git a/src/pages/logs/[...slug].astro b/src/pages/logs/[...slug].astro deleted file mode 100644 index 52d940b..0000000 --- a/src/pages/logs/[...slug].astro +++ /dev/null @@ -1,47 +0,0 @@ ---- -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(); ---- - - - -

{post.data.title}

-
- Publié le {post.data.publishDate.toLocaleDateString('fr-FR')} -
- {post.data.tags && ( -
- {post.data.tags.map((tag) => ( - {tag} - ))} -
- )} -
- -
-
-
- - \ No newline at end of file diff --git a/src/pages/logs/index.astro b/src/pages/logs/index.astro deleted file mode 100644 index 039d38e..0000000 --- a/src/pages/logs/index.astro +++ /dev/null @@ -1,25 +0,0 @@ ---- -import { getCollection } from 'astro:content'; -import GameLayout from '../../layouts/GameLayout.astro'; -import ContentSearch from '../../components/ContentSearch.astro'; - -// 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 || []))]; ---- - - -

⚙️ Logs de Construction

-

- Les coulisses techniques du projet. Utilisez la barre de recherche pour trouver un log. -

- - - - -
diff --git a/src/pages/logs/tags/[tag].astro b/src/pages/logs/tags/[tag].astro deleted file mode 100644 index a009cf7..0000000 --- a/src/pages/logs/tags/[tag].astro +++ /dev/null @@ -1,39 +0,0 @@ ---- -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; ---- - - -

Logs avec la balise : {tag}

- -
- { - posts.map((post) => ( - - )) - } -
-
- - \ No newline at end of file diff --git a/src/pages/observatoire.astro b/src/pages/observatoire.astro deleted file mode 100644 index 0bca8a7..0000000 --- a/src/pages/observatoire.astro +++ /dev/null @@ -1,32 +0,0 @@ ---- -import GameLayout from '../layouts/GameLayout.astro'; -import ParchmentCard from '../components/ui/ParchmentCard.astro'; ---- - - - -

🔭 L'Observatoire des Songes

-

- 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. -

- -

Les Tisseurs de Rêves : Artistes & Développeurs

-

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.

- -

Mes Compagnons de Quête

-

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 :

-
    -
  • Orson, le Gardien du Froid : 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.
  • -
  • Gurdill "Cul Brillant" : 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.
  • -
  • Bulle aux Mains d’Or : 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.
  • -
  • Jinn le Mélodiste : 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.
  • -
  • Nyrae la Guérisseuse : 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.
  • -
- -

Les Murmures du Vent

- -

Les Chroniques d'Autres Mondes

-
-
- - \ No newline at end of file