Dépendances du projet
Ce document liste les librairies déclarées dans package.json : ce qu'elles font, et pourquoi elles sont utilisées ici précisément (pas juste leur description générique).
Framework
- next — Le framework lui-même : App Router, rendu statique (
app/page.tsxest entièrement prérendu), optimisation d'images (next/image, utilisé pour le portrait dans le header) et de polices (next/font/google), et les conventions de fichiers pour le SEO (app/robots.ts,app/sitemap.ts,app/opengraph-image.tsx, l'APIMetadatadansapp/layout.tsx). - react / react-dom — Dépendances requises par Next.js ; la librairie UI sous-jacente.
Style
- tailwindcss — Utilitaire CSS utilisé pour la quasi-totalité du style du site, ainsi que le système de tokens (
@themedansapp/globals.css: couleurs, polices, échelle typographique dédiée à la feuille CV imprimée). - @tailwindcss/postcss — Plugin PostCSS qui compile Tailwind v4 (remplace l'ancien
tailwind.config.jsdes versions précédentes de Tailwind). - postcss — Moteur de transformation CSS requis pour faire tourner le plugin ci-dessus (
postcss.config.mjs).
Utilitaires UI
- class-variance-authority — Gère les variantes de className de façon typée. Utilisé dans
components/ui/button.tsxpour définir les variantessolid/outlineet les taillesmd/smdu bouton sans empiler des conditions manuelles. - clsx — Concatène des classNames conditionnellement. Utilisé dans
lib/utils.tscomme brique de base du helpercn(). - tailwind-merge — Résout les classes Tailwind en conflit (ex. deux
px-*différents) en gardant la dernière plutôt que de les empiler bêtement. Combiné àclsxdanscn(), ça permet à n'importe quel composant (ex.SectionLabel) d'accepter un propclassNamequi surcharge proprement ses classes par défaut. - lucide-react — Bibliothèque d'icônes. Utilisée pour l'icône d'impression dans
components/ui/print-button.tsx.
Documentation (/docs)
- react-markdown — Rend le Markdown en React côté serveur : les fichiers de
docs/, les articles du blog et l'aperçu de l'éditeur admin, tous via le composant partagécomponents/markdown.tsx. SansdangerouslySetInnerHTML(tout le contenu est écrit par le propriétaire du site, mais autant éviter l'injection de HTML brut par principe). - remark-gfm — Plugin de react-markdown qui ajoute la syntaxe GitHub : surtout les tableaux (sans lui, ils sortent comme un paragraphe de
|— par exemple dansdocs/blog-content-format.md), mais aussi le texte barré, les liens automatiques et les listes de tâches. Branché une seule fois, danscomponents/markdown.tsx. - @tailwindcss/typography — Fournit les classes
prosepour une mise en forme lisible du Markdown rendu (titres, listes, liens) sans styliser chaque balise à la main. Activé via@plugin "@tailwindcss/typography";dansapp/globals.css.
Blog & admin (voir docs/adr/0011-blog-admin-architecture.md)
- next-auth (
@beta, Auth.js v5) — Authentification de la zone/admin, via le provider LinkedIn, restreint au seul profil du propriétaire du site. Stratégie de session en JWT, sans adaptateur de base de données. - @octokit/rest — Client de l'API GitHub (Contents API), utilisé côté serveur uniquement par les server actions de l'admin pour committer/mettre à jour les fichiers Markdown des articles dans ce repo.
- gray-matter — Parsing et génération du frontmatter YAML des fichiers
content/blog/*.md(titre, date, tags, statut brouillon/publié), consommé parlib/blog.ts.
Qualité de code & outillage
- typescript — Typage statique sur l'ensemble du code.
- eslint — Linter.
- eslint-config-next — Le ruleset ESLint officiel de Next.js (règles Core Web Vitals, hooks React, etc.). Depuis la v16, il expose directement des configs plates (
eslint-config-next/core-web-vitals,eslint-config-next/typescript) consommées telles quelles danseslint.config.mjs— plus besoin de couche de compatibilité.eslintrc. - eslint-plugin-jsx-a11y — N'était jusqu'ici qu'une dépendance transitive d'
eslint-config-next(6 règles enwarn), non résolvable directement depuis la racine. Déclarée en dépendance directe pour pouvoir importer son presetstrict(33 règles, en erreur) danseslint.config.mjs— voirdocs/adr/0016-accessibility-strategy.md. - playwright — Pilote un navigateur réel pour
scripts/a11y.mjs(pnpm a11y) : charge le site servi à 1280 px et à 320 px, ouvre le menu mobile, parcourt blog/docs/404. N'est utilisé que pour cette vérification, pas comme suite de tests. En CI, le Chromium de Playwright est installé parplaywright install chromium; en local,PLAYWRIGHT_CHANNEL=chromeréutilise le Chrome du système. - @axe-core/playwright — Intègre axe-core (le moteur de règles WCAG de Deque) à une page Playwright. Détecte ce que
eslint-plugin-jsx-a11yne peut pas voir sur le code seul : landmarks réels, noms accessibles calculés, contraste, zones défilantes sans accès clavier. Voirdocs/adr/0016-accessibility-strategy.md. - prettier — Formateur de code.
- prettier-plugin-tailwindcss — Trie automatiquement les classes Tailwind dans un ordre canonique à l'intérieur des
className, pour que les diffs restent lisibles et cohérents peu importe qui édite un composant. - husky — Gère le hook Git
pre-commit(.husky/pre-commit) qui déclenchelint-stagedavant chaque commit. - lint-staged — N'exécute prettier/eslint que sur les fichiers réellement stagés d'un commit (config dans le champ
lint-stageddepackage.json) — c'est ce qui a reformaté automatiquement les fichiers à chaque commit de ce projet. - @types/node, @types/react, @types/react-dom — Définitions de types TypeScript pour Node.js, React et ReactDOM, aucune de ces trois librairies ne fournissant ses propres types.