09.01 — Stack VitePress + Sugar Theme + plugins maison

09.01 — Stack VitePress + Sugar Theme + plugins maison#

package.json#

{
  "dependencies": {
    "@sugarat/theme": "0.5.17"
  },
  "devDependencies": {
    "@commitlint/config-conventional": "20.5.0",
    "@commitlint/cz-commitlint": "20.5.1",
    "@eslint/js": "10.0.1",
    "@types/node": "25.6.0",
    "commitizen": "4.3.1",
    "editorconfig": "3.0.2",
    "eslint": "10.2.1",
    "eslint-plugin-import-x": "4.16.2",
    "eslint-plugin-perfectionist": "5.9.0",
    "eslint-plugin-unused-imports": "4.4.1",
    "globals": "17.5.0",
    "husky": "9.1.7",
    "inquirer": "9.0.0",
    "is-ci": "4.1.0",
    "lint-staged": "16.4.0",
    "pagefind": "1.5.2",
    "prettier": "3.8.3",
    "sass-embedded": "1.99.0",
    "typescript": "6.0.3",
    "typescript-eslint": "8.59.0",
    "vitepress": "2.0.0-alpha.17",
    "vitepress-plugin-image-optimize": "1.5.1",
    "vue": "3.5.33"
  },
  "engines": {
    "node": "^24.x",
    "pnpm": "11.x"
  }
}
LibRôle
vitepress 2.0.0-alpha.17SSG framework, basé sur Vite
@sugarat/themeTheme blog tier-1 (templates, sidebar auto, cover images)
vue 3.5.33Requis par VitePress
vitepress-plugin-image-optimizeOptimisation des images au build
pagefind 1.5.2Moteur de recherche statique (full-text, side-CDN)
sass-embeddedCompile SCSS (utilisé par @sugarat/theme)
Husky / lint-staged / commitlintMêmes outils que les autres dépôts (Conventional Commits)

docs/.vitepress/config.mts#

import { defineConfig } from 'vitepress';
import path from 'path';
import fs from 'fs';

import { generateSkills } from './plugins/skills';
import { generateLlms } from './plugins/llm';
import { generatePub } from './plugins/pub';
import { blogTheme } from './blog-theme';
import webpConfig from './plugins/webp';

const base = process.env.GITHUB_ACTIONS === 'true' ? '/ocarina-holy-book/' : '/';

export default defineConfig({
  locales: {
    root: {
      themeConfig: {
        outline: { label: 'Table of content' },
        skipToContentLabel: 'Skip to content',
        sidebarMenuLabel: 'Related articles',
        returnToTopLabel: 'Return to top',
        lastUpdatedText: 'Last update:'
      },
      description: "Ocarina is Igor's automated web browser testing framework.",
      title: 'The Ocarina Holy Book',
      label: 'English',
      lang: 'en'
    },
    fr: {
      themeConfig: {
        outline: { label: 'Sommaire', level: [2, 3] },
        returnToTopLabel: 'Retour en haut de page',
        lastUpdatedText: 'Dernière mise à jour :',
        skipToContentLabel: 'Passer au contenu',
        sidebarMenuLabel: 'Voir aussi'
      },
      title: "Le livre sacré d'Ocarina",
      label: 'Français',
      lang: 'fr'
    }
    ru: {
      themeConfig: {
        outline: {
          label: 'Оглавление',
          level: [2, 3]
        },
        skipToContentLabel: 'Перейти к содержанию',
        lastUpdatedText: 'Последнее обновление:',
        returnToTopLabel: 'Вернуться вверх',
        sidebarMenuLabel: 'Смотрите также'
      },
      title: 'Священная Книга Ocarina',
      label: 'Русский',
      lang: 'ru'
    }
  },
  vite: { ... },
  ...
});

1. base#

const base =
  process.env.GITHUB_ACTIONS === "true" ? "/ocarina-holy-book/" : "/";

→ En CI (GitHub Actions) : base = /ocarina-holy-book/ (préfixe GitHub Pages).
→ En local : / (sert depuis la racine du dev server).

09.02 — I18n FR/EN/RU

09.02 — I18n FR/EN/RU#

Toutes les pages du Holy Book existent en trois versions. EN à la racine de docs/, FR sous docs/fr/, RU sous docs/ru/. VitePress route automatiquement.

Structure des fichiers#

docs/
├── index.md                                                        # EN home
├── what-is-it.md
├── first-feedbacks.md
├── setup.md
├── scenarios-composability.md
├── datasets-smoke-tests-setup-teardown-proxy-api-and-caching.md
├── handling-flakiness.md
├── extensibility.md
├── using-ocarina-with-ai.md
│
├── fr/
│   ├── index.md                                                    # FR home
│   ├── what-is-it.md
│   ├── first-feedbacks.md
│   ├── setup.md
│   ├── scenarios-composability.md
│   ├── datasets-smoke-tests-setup-teardown-proxy-api-and-caching.md
│   ├── handling-flakiness.md
│   ├── extensibility.md
│   └── using-ocarina-with-ai.md
│
├── ru/
│   ├── index.md                                                    # RU home
│   ├── what-is-it.md
│   ├── first-feedbacks.md
│   ├── setup.md
│   ├── scenarios-composability.md
│   ├── datasets-smoke-tests-setup-teardown-proxy-api-and-caching.md
│   ├── handling-flakiness.md
│   ├── extensibility.md
│   └── using-ocarina-with-ai.md
│
├── public/
│   ├── favicon.ico
│   ├── logo.png
│   ├── robots.txt
│   ├── .nojekyll
│   ├── .spa
│   └── assets/
│       └── content/
│           └── ...                                                 # images partagées EN+FR+RU
│
└── .vitepress/
    ├── config.mts
    ├── blog-theme.ts
    ├── shims.d.ts
    ├── plugins/
    │   ├── llm.ts
    │   ├── pub.ts
    │   ├── skills.ts
    │   └── webp.ts
    └── theme/
        ├── index.ts
        ├── style.css
        ├── user-theme.css
        ├── components/
        │   ├── Pagination.vue
        │   ├── BlogHomeBanner.vue
        │   └── NotFound.vue
        └── assets/
            └── bg.png

Routing#

PageURL ENURL FRURL RU
Page d’accueil//fr//ru/
Pitch/what-is-it/fr/what-is-it/ru/what-is-it
Coup de gueule/first-feedbacks/fr/first-feedbacks/ru/first-feedbacks
Setup/setup/fr/setup/ru/setup

VitePress crée automatiquement le switcher de langue (en haut à droite). Cliquer sur « FR » depuis /setup → /fr/setup.

09.04 — CLAUDE.md et CLAUDE.slim.md

09.04 — CLAUDE.md et CLAUDE.slim.md#

Le Holy Book publie activement les fichiers CLAUDE.md. Cela permet à un LLM de récupérer la doc projet sans passer par le repo.

Les deux fichiers#

ai/
├── CLAUDE.md       # version complète (règles + organisation projet)
└── CLAUDE.slim.md  # version courte (règles uniquement)

URLs publiques#

https://mojo-molotov.github.io/ocarina-holy-book/CLAUDE.md
https://mojo-molotov.github.io/ocarina-holy-book/CLAUDE.slim.md

Citation du Holy Book (chapitre « Utiliser Ocarina avec l’IA ») :

Slim quand le contexte est chargé ; complet pour l’onboarding et les revues. En cas de divergence, le complet l’emporte.

09.05 — Génération de PDF (generate-books)

09.05 — Génération de PDF (generate-books)#

Les PDFs publics (ocarina-ru.pdf, ocarina-en.pdf, ocarina-fr.pdf…) sont générés par IA à partir du dossier docs/, d’un script Python et d’un prompt Markdown.

Arborescence#

prompts/generate-books/
├── prompt.md                     # spec (lu par l'IA)
├── script.py                     # implémentation Python
├── NotoSans-Regular.ttf
├── NotoSans-Bold.ttf
├── NotoSans-Italic.ttf
├── NotoSans-BoldItalic.ttf
├── NotoSansMath-Regular.ttf
├── NotoSansMono-Regular.ttf
├── NotoSansSymbols2-Regular.ttf
├── NotoNaskhArabic-Regular.ttf
└── NotoColorEmoji-Regular.ttf

1. Un prompt.md + un script.py#

prompt.md :

Ocarina PDF Generator#

What this is#

A system that turns a VitePress docs/ folder (Markdown + images) into three polished A4 PDFs — one Russian, one English, one French. The system is two files: this prompt (the spec) and script.py (the implementation). They are designed to be used together in an agentic environment.

09.06 — Ressources publiques

09.06 — Ressources publiques#

Tableau complet des URLs publiques exposées par le Holy Book. Pour les humains, les LLMs, les scrapers.

Listing (potentiellement non exhaustif)#

URLContenuPublic cible
https://mojo-molotov.github.io/ocarina-holy-book/Page d’accueil (EN)Humain
https://mojo-molotov.github.io/ocarina-holy-book/fr/Page d’accueil (FR)Humain
https://mojo-molotov.github.io/ocarina-holy-book/ru/Page d’accueil (RU)Humain
https://mojo-molotov.github.io/ocarina-holy-book/what-is-itArticle (EN)Humain
https://mojo-molotov.github.io/ocarina-holy-book/fr/what-is-itArticle (FR)Humain
https://mojo-molotov.github.io/ocarina-holy-book/ru/what-is-itArticle (RU)Humain
… (autres pages doc en EN+FR+RU)Humain
https://mojo-molotov.github.io/ocarina-holy-book/llms.txtIndex minimaliste pour LLMsLLM
https://mojo-molotov.github.io/ocarina-holy-book/llms-full.txtTout le contenu en plaintextLLM, scraper
https://mojo-molotov.github.io/ocarina-holy-book/CLAUDE.mdRègles projet complètesLLM, humain (onboarding)
https://mojo-molotov.github.io/ocarina-holy-book/CLAUDE.slim.mdRègles projet courtesLLM (context budget)
https://mojo-molotov.github.io/ocarina-holy-book/ocarina-en.pdfDoc en PDF A4 (EN)Humain (offline)
https://mojo-molotov.github.io/ocarina-holy-book/ocarina-fr.pdfDoc en PDF A4 (FR)Humain (offline)
https://mojo-molotov.github.io/ocarina-holy-book/ocarina-ru.pdfDoc en PDF A4 (RU)Humain (offline)
https://mojo-molotov.github.io/ocarina-holy-book/skills/<name>Page d’un skill IAHumain, LLM
https://mojo-molotov.github.io/ocarina-holy-book/assets/content/...Images, sons (covers d’articles, illustrations)Humain (rendu inline)

llms.txt (standard émergent)#

Spec : https://llmstxt.org/ (proposé en 2024).