NestJS, Next.js, Laravel, DevOps — applications du cycle Explore → Plan → Code → Verify avec prompts exacts.
Ce que vous saurez faire
01Générer une API REST + tests avec Claude Code (NestJS)
02Refactorer un composant Next.js avec Cursor
03Mener une migration DB en Spec-Driven (Laravel)
04Bâtir un pipeline CI avec revue IA automatisée
Lab 1 — NestJS : API REST avec Auth JWT
Durée : 2-3 h · Niveau : intermédiaire · Prérequis : NestJS installé, Module 3 lu · Livrable : module auth avec tests E2E
Setup du contexte
<!-- CLAUDE.md pour ce lab -->
# Lab NestJS Auth## Stack- NestJS 10, TypeScript 5.3, TypeORM + PostgreSQL 15
- Passport.js + @nestjs/jwt, class-validator
- Tests : Jest + Supertest
## Conventions- Architecture : Module / Controller / Service / Repository
- DTOs typés (jamais d'entité retournée directement)
- Erreurs : HttpException avec messages clairs
- IMPORTANT: bcrypt avec cost ≥ 10, jamais de password en clair en mémoire après hash
Phase EXPLORE
Prompt
[ANALYSE UNIQUEMENT — PAS DE CODE]
Explore la structure du projet NestJS.
Identifie :
1. Les modules existants et leur organisation
2. Comment la config est gérée (ConfigModule ?)
3. La structure TypeORM (entities, migrations)
4. Si un système d'auth existe déjà, même partiel
Livre un rapport de 10-15 lignes.
Phase PLAN
Prompt
Je veux une authentification JWT avec : register, login, refresh, logout,
guard JWT réutilisable et une route protégée /me.
Sur la base de l'exploration : génère un plan d'implémentation étape par
étape. Format : Étape | Fichiers | Critère de validation.
Ne génère pas de code encore.
Phase CODE
Prompt
Implémente l'étape 1 du plan. Arrête-toi après pour validation.
Une fois validée, j'envoie « étape suivante » pour continuer.
Ne dicte pas la structure ligne par ligne. Le plan validé en phase
précédente fait foi — la phase CODE applique ce plan, étape par étape,
avec validation humaine entre chaque.
Phase VERIFY
Prompt
Agis en QA Engineer senior. Génère des tests E2E (Supertest + Jest)
couvrant ces 5 scénarios essentiels :
1. Register → 201 + tokens / email déjà utilisé → 409
2. Login bon mot de passe → 200 / mauvais → 401
3. /me sans token → 401 / avec token valide → 200
4. Refresh avec token valide → nouveaux tokens
5. Logout → refresh suivant retourne 401
Utilise une DB éphémère (TypeORM avec better-sqlite3 ou PostgreSQL test
container). Pas de mock d'ORM.
Lab 2 — Next.js : Refactoring avec Context Engineering
Durée : 30-45 min · Niveau : intermédiaire · Prérequis : projet Next.js existant, Module 4 lu · Livrable : composant migré Class → Functional + hooks, tests verts
Setup CLAUDE.md
# Lab Next.js Refactoring## Stack- Next.js 14 (App Router), TypeScript 5, React 18
- Tailwind CSS 3
- Tests : Vitest + React Testing Library
- State : Zustand (pas de Redux)
## Conventions composants- Functional components uniquement
- Props interface (pas de type alias) : interface ButtonProps {}
- Export named uniquement (pas de default export pour les composants)
- Fichiers : ComponentName.tsx + ComponentName.test.tsx dans le même dossier
## Anti-patterns à éviter- Pas de useEffect pour fetch (utiliser React Query ou Server Components)
- Pas de prop drilling > 2 niveaux (utiliser Zustand)
- Pas de inline styles (Tailwind uniquement)
Workflow de refactoring
Prompt
# EXPLORE
[ANALYSE UNIQUEMENT]
Analyse le composant @src/components/UserProfile.tsx
Identifie :
- Le type de composant (class ou functional ?)
- Les props et leur typage actuel
- L'état local et son usage
- Les effets de bord
- Les tests existants
# PLAN
Propose le plan de migration vers :
- Functional component avec hooks
- Props interface TypeScript stricte
- Zustand si état partagé nécessaire
Format : liste d'étapes avec estimations
# CODE (atomique)
Implémente le composant refactorisé selon le plan.
Respecte STRICTEMENT les conventions du CLAUDE.md.
Maintiens la même API externe (props identiques).
# VERIFY
Agis en QA.
1. Lance npm run test -- UserProfile
2. Si des tests échouent, identifie pourquoi
3. Génère les tests manquants pour les nouveaux hooks
4. Vérifie que l'accessibilité n'a pas régressé (aria-*)
Lab 3 — Laravel : Migration et Soft Delete
Durée : 30-45 min · Niveau : intermédiaire · Prérequis : Laravel 11 installé, Module 3 lu · Livrable : migration deleted_at, modèle SoftDeletes, tests Pest verts
# CLAUDE.md Laravel## Stack- Laravel 11, PHP 8.3
- Eloquent ORM + MySQL 8
- Tests : Pest (pas PHPUnit)
- API Resources pour les réponses
## Conventions- Repository Pattern (interface + implémentation)
- Form Requests pour la validation
- API Resources pour la transformation
- Soft deletes via SoftDeletes trait Eloquent
## Commandes
php artisan serve # Dev
php artisan test # Tests (Pest)
php artisan migrate # Migrations
./vendor/bin/pint # Linter
Lab : Implémenter le soft delete sur User
Prompt
# EXPLORE
Analyse le modèle User et UserRepository.
Identifie : la méthode delete actuelle, les scopes existants,
les relations qui pourraient être affectées, les tests existants.
# PLAN
Plan pour migrer vers SoftDeletes Eloquent :
1. Migration : ajouter deleted_at à users
2. Modèle : ajouter SoftDeletes trait
3. Repository : adapter les méthodes (withTrashed, onlyTrashed, restore)
4. Tests : ajouter les scénarios soft delete
# CODE
Étape 1 : Génère la migration Laravel pour ajouter deleted_at.
Arrête et attends validation.
# VERIFY (Pest)
Génère des feature tests Pest :
- Soft delete → user non retourné dans les queries normales
- withTrashed → user visible
- restore → user revient dans les queries normales
- forceDelete → suppression physique
- Cascade sur les relations si applicable
Lab 4 — DevOps : Pipeline CI/CD avec revue IA
Durée : 45-60 min · Niveau : intermédiaire · Prérequis : projet sur GitHub, Module 6 lu · Livrable : workflow .github/workflows/ai-review.yml avec 3 jobs (quality, ai-security-review, changelog)
Prompt
# EXPLORE
Analyse le repo GitHub Actions existant si présent (.github/workflows/).
Identifie les jobs actuels et ce qui manque.
# PLAN
Je veux un pipeline en 3 jobs :
1. quality : lint + test + coverage check (>80%)
2. ai-security-review : sur les PRs uniquement
3. changelog-update : sur merge en main uniquement
Plan : quels jobs, quelles dépendances entre eux, quelles permissions.
# CODE — Job par job
## Job 1 : quality
Génère le workflow quality avec :
- Node.js setup + cache
- npm ci (pas npm install)
- lint strict (exit 1 si erreurs)
- test avec coverage
- fail si coverage < 80%
## Job 2 : ai-security-review
Voir le template du Module 6 et adapte-le pour ce projet.
Ajoute la logique de posting de commentaire uniquement si problèmes trouvés.
## Job 3 : changelog
Sur chaque push main, utilise Claude pour générer les notes de release
depuis les commits Conventional Commits depuis le dernier tag.
# VERIFY
Checklist manuelle :
- [ ] Secrets dans GitHub Secrets (pas dans le YAML)
- [ ] Permissions minimales sur chaque job
- [ ] Cache configuré pour node_modules
- [ ] Jobs parallélisés quand possible
- [ ] Notifications en cas d'échec
# CLAUDE.md (extrait spécifique au lab)## Stack- Python 3.12, FastAPI 0.115+
- SQLAlchemy 2.x **async** uniquement (pas de Session synchrone)
- Pydantic v2 pour les schémas
- pytest + pytest-asyncio + httpx pour les tests
## Conventions- Fichiers par feature : `app/<feature>/{router,schemas,models,service}.py`- Routes ne contiennent JAMAIS de logique métier — tout passe par `service.py`- Dépendances FastAPI : injection via `Depends()`, jamais de globals
- Async partout : pas de `requests`, utiliser `httpx.AsyncClient`## Tests- Une base SQLite en mémoire par test
- Fixtures dans `conftest.py`, factory-boy pour les seeds
- Marker `@pytest.mark.asyncio` obligatoire sur les tests async
## Anti-patterns
IMPORTANT: SQLAlchemy 2.x style uniquement (`Mapped`, `mapped_column`, `select().where()`) — pas de raw SQL ni de syntaxe v1.
Phase EXPLORE
Prompt
[ANALYSE UNIQUEMENT — PAS DE CODE]
Explore la structure du projet.
Identifie :
1. Comment les routes existantes sont organisées (par feature ? par couche ?)
2. Comment SQLAlchemy est initialisé (engine, sessionmaker, dépendance FastAPI)
3. Comment Pydantic est utilisé (schémas In/Out séparés ou unifiés ?)
4. Quels fixtures existent dans conftest.py
Livre un rapport de 10-15 lignes.
Phase PLAN
Prompt
Je veux ajouter un endpoint `POST /api/v2/articles` qui :
- Reçoit un payload `{title, body, tags: string[]}`
- Crée un article en DB
- Lie ou crée les tags
- Retourne l'article créé avec ses tags
Sur la base de ton exploration, propose un plan en étapes numérotées.
Format : Étape | Fichier(s) | Action | Critère de validation.
Identifie les edge cases :
- Tag vide ou trop long
- Tag dupliqué dans la liste
- Conflit de slug si auto-généré
Ne génère pas de code encore.
Phase CODE
Prompt
Implémente l'étape 1 du plan : ajout du modèle Article + relation many-to-many vers Tag.
Contraintes :
- SQLAlchemy 2.x style (Mapped, mapped_column)
- Annotations de types complètes
- Une migration Alembic auto-générée
Arrête-toi après cette étape pour validation.
Phase VERIFY
Prompt
L'implémentation est terminée.
Agis maintenant en QA Engineer.
1. Lance pytest sur app/articles : `pytest app/articles -v`
2. Lance le linter : `ruff check app/articles`
3. Lance mypy : `mypy app/articles`
4. Génère les tests manquants pour les edge cases identifiés en phase PLAN
5. Lance les tests modifiés et vérifie qu'ils passent
6. Lance `httpx` test contre `POST /api/v2/articles` avec 3 payloads :
- Cas nominal
- Payload invalide (titre vide)
- Tag inexistant
Rapport : tests passés | warnings ruff/mypy | tests manquants ajoutés.
Lab 6 — Production Incident Response avec Sentry MCP
Durée : 30-45 min · Niveau : senior · Prérequis : projet en prod connecté à Sentry, MCP Sentry configuré · Livrable : PR avec fix + test + post-mortem une page
Apprendre à utiliser Claude Code en mode incident commander : récupérer les infos Sentry, formuler une hypothèse, valider, proposer un fix, documenter le post-mortem.
[LECTURE SEULE] Via le MCP Sentry, cartographie le top 5 des issues non
résolues des 24 dernières heures (titre, première/dernière occurrence,
utilisateurs affectés, release). Pas de fix encore.
Phase 2 — Triage
Prompt
[LECTURE SEULE] Pour l'issue à plus fort impact : récupère le détail
(stack trace, breadcrumbs, requête), identifie fichier:ligne, lis le code
autour (max 50 lignes). Formule 2-3 hypothèses classées par probabilité,
chacune avec sa méthode de validation.
Phase 3 — Fix
Prompt
On valide l'hypothèse n°1 : [description].
Fix minimal (pas de refactoring opportuniste) + test qui reproduit le bug
(rouge avant fix). Vérifie que le test passe. Ne touche à aucun autre
fichier.
Phase 4 — Post-mortem
Prompt
Génère le post-mortem INC-[date]-[id] avec le template Module 7 §8.
Cherche le trailer `AI-Assisted:` dans le commit d'origine. Conclus par
au moins une action qui modifie le contexte ou un prompt — pour que ce
type de bug ne repasse plus. Une page A4 max.
Ressources complémentaires
Templates à reprendre
Le Starter Pack du playbook est sur la page dédiée /templates :
un fichier de contexte (AGENTS.md) qui marche pour tous les outils, une
configuration Claude Code avec des permissions sécurisées par défaut, un
hook qui bloque l'écriture de fichiers contenant des secrets, et trois
slash commands (/audit-security, /test-gen, /release-notes). Tout
est aligné avec les modules 3, 4, 5 et 8.
Pour le reste — Skills spécialisés, serveurs MCP, agents prêts à l'emploi —
le catalogue de référence est aitmpl.com. C'est
un catalogue communautaire de plus de 1000 composants pour Claude Code,
soutenu par Vercel, Neon et Anthropic. La page Templates signale les
composants qu'on recommande spécifiquement.