Portfolio personnel / CV en ligne accessible sur gauthierpainteaux.fr.
- Framework : Next.js 16 (App Router, standalone output)
- Langage : TypeScript (strict)
- Styling : Tailwind CSS 4
- Linting / Formatting : Biome
- Package manager : Bun
- Runtime : Node LTS Krypton
bun install
bun devLe serveur de dev (Turbopack) tourne sur localhost:3000.
bun run build
bun start| Commande | Description |
|---|---|
bun dev |
Serveur de dev avec Turbopack |
bun run build |
Build de production (run requis, bun build reserve) |
bun start |
Serveur de production (standalone) |
bun prod |
Build + start |
bun lint |
next typegen + tsc + Biome check + Biome format |
bun tsc |
Type-check TypeScript (tsc --noEmit) |
bun biome:check |
Lint Biome (lecture seule) |
bun biome:check:write |
Lint Biome + autofix |
bun biome:format |
Format Biome (lecture seule) |
bun biome:format:write |
Format Biome + autofix |
bun biome:write |
Lint + format Biome avec autofix |
docker build -t portfolio .
docker run -p 3000:3000 portfolioL'image utilise un build multi-stage avec node:krypton-alpine et tourne avec un utilisateur non-root.
Le workflow GitHub Actions (.github/workflows/build.yml) se declenche sur les tags v*.*.* et :
- Build le projet
- Upload les artefacts
- Build et push l'image Docker sur
ghcr.io
app/
├── layout.tsx # Layout racine, metadata, JSON-LD
├── page.tsx # Page unique (CV)
├── globals.css # Styles globaux + tokens Tailwind
├── error.tsx # Page d'erreur
└── not-found.tsx # Page 404
components/
├── Container.tsx # Conteneur de section
└── Divider.tsx # Separateur decoratif
public/
└── photo.webp # Photo de profil