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 les fichiers
.mddedocs/en React côté serveur. Utilisé dansapp/docs/[...slug]/page.tsx, sansdangerouslySetInnerHTML(tout le contenu est écrit par le propriétaire du site, mais autant éviter l'injection de HTML brut par principe). - @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.), consommé via
eslint.config.mjs. - @eslint/eslintrc — Couche de compatibilité permettant d'utiliser
eslint-config-next(encore fourni au format.eslintrcclassique) dans la config plate (eslint.config.mjs) d'ESLint 9+. - 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.