Claude Code s’apprend par la pratique : ces 5 projets vont du prototype web au serveur MCP personnalisé, en enseignant prototypage, logique interactive, mobile, full‑stack et intégration d’outils. Suivez l’ordre proposé pour monter en compétences rapidement et deployer des cas concrets.
Comment démarrer un prototype web avec Claude Code ?
On commence par définir un besoin simple, générer la structure du projet puis itérer en testant chaque composant.
1) Définir l’objectif du prototype. Page produit avec image, description et formulaire de contact simple. Page Single-Page Application (SPA) : application web qui charge une seule page HTML et met à jour dynamiquement le contenu. Formulaire basique pour valider l’ergonomie et le flux réseau.
Avant la scaffold, voici les commandes courantes pour démarrer un projet :
- Créer un projet React via create-react-app (CLI = interface en ligne de commande) :
npx create-react-app mon-prototype
- Ou utiliser Vite pour un démarrage plus rapide :
npm create vite@latest mon-prototype -- --template react
- Ou démarrer minimal avec npm init :
mkdir mon-prototype && cd mon-prototype
npm init -y
2) Flux de travail avec Claude Code. Générer les fichiers initiaux, demander un diff (diff = différences entre versions de fichiers) pour relire les changements, exécuter des tests unitaires basiques. Demander à Claude Code d’écrire un fichier, puis garder la revue humaine pour vérifier sécurité et dépendances.
3) Comment demander à Claude Code de corriger un bug et créer un commit. Fournir le contexte, l’erreur exacte et les sorties de console. Exemple de prompt : « Fichier X contient l’erreur Y, voici le stacktrace. Propose une correction et génère le patch git avec message ‘fix: formulaire submit crash’. » Demander ensuite l’application du patch et un test local.
Exemples de fichiers courts à inclure :
{
"name": "mon-prototype",
"version": "0.0.1",
"scripts": { "start": "vite", "test": "jest" },
"dependencies": {}
}
import React from 'react'; import { createRoot } from 'react-dom/client'; import App from './App';
createRoot(document.getElementById('root')).render( );
// App.jsx (Stateless)
import React from 'react';
export default function App(){ return (Produit
); }
// App.test.js (Jest)
import React from 'react';
import { render } from '@testing-library/react';
import App from './App';
test('Affiche Produit', ()=>{ const { getByText } = render( ); expect(getByText('Produit')).toBeTruthy(); });
Erreurs fréquentes et corrections via Claude Code. Dépendances manquantes : indiquer au modèle l’erreur « Module not found » pour ajouter le package. Problèmes de build : fournir le log pour diagnostiquer la version de Node. Tests qui échouent : fournir le stacktrace et demander une correction ciblée du test ou du composant.
| Objectif | Commandes clés | Validations | Compétences acquises |
| Page produit + contact | npx create-react-app / npm create vite / npm init | Page rendue, formulaire soumis, test Jest passant | Scaffolding, tests unitaires, revue de patch |
Comment créer un jeu 2D rétro avec Claude Code ?
On écrit la logique de jeu incrémentale (mouvement, collisions, règles) et on laisse Claude Code générer et itérer sur le front pour obtenir retours rapides.
Choix de la librairie : Phaser 3 pour un cadre jeu complet (scènes, physique légère, pooling) ou p5.js pour une approche très légère et pédagogique.
Architecture du projet : point d’entrée index.html, fichier principal main.js qui initialise la game loop (Phaser gère update()), dossier assets pour images/sprites/sons et un petit gestionnaire d’assets préchargés.
Exemples de code à créer :
- Index.html : inclusion de Phaser.
<!doctype html>
<html><head><meta charset="utf-8"><script src="https://cdn.jsdelivr.net/npm/phaser@3/dist/phaser.min.js"></script></head><body>
<script src="main.js"></script>
</body></html>
- Main.js : configuration, vaisseau, tir, collisions.
// Configuration minimale
const config = { type: Phaser.AUTO, width: 640, height: 480, scene: { preload, create, update } };
const game = new Phaser.Game(config);
function preload(){ this.load.image('ship','assets/ship.png'); this.load.image('bullet','assets/bullet.png'); }
function create(){
this.ship = this.physics.add.sprite(320,420,'ship').setCollideWorldBounds(true);
this.bullets = this.physics.add.group({ classType: Phaser.GameObjects.Image, runChildUpdate: true });
this.input.keyboard.on('keydown-SPACE',()=>{ shoot.call(this); });
this.enemies = this.physics.add.group();
this.physics.add.collider(this.bullets,this.enemies,hitEnemy,null,this);
}
function update(){ const cursors = this.input.keyboard.createCursorKeys(); if(cursors.left.isDown) this.ship.x -= 3; if(cursors.right.isDown) this.ship.x += 3; }
function shoot(){ const b = this.bullets.get(this.ship.x,this.ship.y-20,'bullet'); if(b){ b.setActive(true).setVisible(true); b.body.velocity.y = -300; }}
function hitEnemy(b,e){ b.destroy(); e.destroy(); }
Test manuel rapide : déplacer le vaisseau gauche/droite, tirer, vérifier que les balles touchent et détruisent ennemis. Tester à 60s FPS et mesurer latence d’entrée visuelle.
Demander à Claude Code d’optimiser : fournir le snippet, donner métriques observées (fps, GC spikes), puis demander pooling d’objets, réduction de draw calls et throttling des mises à jour non visibles.
Debugging : utiliser console.log pour valeurs clés, snapshots visuels via graphics temporaires, et profiler navigateur pour CPU/FPS.
| Itération | Métriques | Compétences acquises |
| 1 Basique | 60 FPS, latence entrée <50ms | Mouvement, boucle |
| 2 Collisions | Stabilité collisions, pas d’overlap | Physique, gestion group |
| 3 Optim | FPS stable, GC réduit | Pooling, perf |
| 4 Itération UI | UX réactif, latency input | Front-end, debug |
Comment prototyper une appli mobile React Native avec Expo ?
On utilise Expo pour prototyper vite, créer écrans et navigation, puis tester sur appareil réel via Expo Go.
1) Création du projet.
- Initialisation rapide avec la commande suivante (Expo CLI) :
npx expo init MonProto
cd MonProto
npx expo start
2) Structure recommandée.
- Fichier racine App.js, dossier screens/ pour les écrans, et navigation/ pour la configuration de React Navigation.
- React Navigation permet la navigation entre écrans ; il s’agit d’une bibliothèque largement utilisée pour gérer les piles (stack), onglets (tab) et drawers.
3) Exemples de code.
App.js avec NavigationContainer et Stack.Navigator :
import React from 'react';
import { NavigationContainer } from '@react-navigation/native';
import { createStackNavigator } from '@react-navigation/stack';
import HomeScreen from './screens/HomeScreen';
const Stack = createStackNavigator();
export default function App() {
return (
);
}
Écran d’accueil simple, layout responsive :
import React from 'react';
import { View, Text, StyleSheet, Dimensions } from 'react-native';
export default function HomeScreen() {
const { width } = Dimensions.get('window'); // Expliquer : récupère largeur écran
return (
400 && styles.wide]}>
Accueil
);
}
const styles = StyleSheet.create({
container: { flex: 1, alignItems: 'center', justifyContent: 'center', padding: 16 },
wide: { paddingHorizontal: 40 },
title: { fontSize: 24 },
});
Gestion d’état local et appel API mock :
import React, { useState, useEffect } from 'react';
import { View, Text, ActivityIndicator } from 'react-native';
export default function DataScreen() {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
useEffect(() => {
fetch('https://jsonplaceholder.typicode.com/todos/1')
.then(r => r.json())
.then(json => setData(json))
.finally(() => setLoading(false));
}, []);
return (
<View>
{loading ? <ActivityIndicator /> : <Text>{JSON.stringify(data)}</Text>}
</View>
);
}
4) Tests sur appareil, ergonomie et contraintes.
- Tester via Expo Go en scannant le QR code depuis expo start.
- Prendre en compte tailles d’écran, orientations, et permissions (caméra, localisation).
- Optimiser la charge réseau et limiter les re-render pour les performances.
5) Utiliser Claude Code.
- Demander à Claude Code de générer la structure d’écran en précisant composants et props.
- Soumettre les screenshots pour qu’il propose des corrections de mise en page CSS/StyleSheet.
- Faire rédiger des messages de commit clairs (format conventional commits) et des PR descriptions.
Accessibilité et performances : utiliser des roles/accessibilityLabel, taille de hit-target ≥ 44px, lazy-loading d’images et profiler pour éviter sur-rendu.
| Commandes | Validations sur device | Points ergonomiques | Compétences acquises |
| npx expo init / npx expo start | Navigation, rendu responsive, permissions | Taille écrans, toucher 44px, feedback visuel | Expo, React Navigation, debugging mobile |
Comment construire et deployer une application full stack ?
On combine frontend, backend, base de données et authentification, puis on déploie sur une plateforme cloud en surveillant sécurité et CI/CD.
Choix de la stack. On peut choisir React pour le frontend, Node/Express pour le backend et PostgreSQL pour la base de données. On peut aussi utiliser Supabase (service géré qui fournit DB + auth) pour accélérer le développement.
- Architecture et diagramme logique. API REST ou GraphQL selon besoin : définir endpoints (GET /items, POST /items, PUT /items/:id, DELETE /items/:id) et schéma DB (tables users, items, relations).
- Exemples de code à créer. Ci‑dessous des snippets essentiels.
// Express CRUD minimal
const express = require('express');
const app = express();
app.use(express.json());
// Simuler DB
let items = [];
app.get('/items', (req, res) => res.json(items));
app.post('/items', (req, res) => { const it = {...req.body, id: Date.now()}; items.push(it); res.status(201).json(it); });
app.put('/items/:id', (req, res) => { items = items.map(i => i.id==req.params.id ? {...i,...req.body} : i); res.sendStatus(204); });
app.delete('/items/:id', (req, res) => { items = items.filter(i => i.id!=req.params.id); res.sendStatus(204); });
app.listen(3000);
-- Script SQL table utilisateurs
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
password_hash VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT now()
);
// JWT simple (JSON Web Token)
const jwt = require('jsonwebtoken');
const token = jwt.sign({ userId: 1 }, process.env.JWT_SECRET, { expiresIn: '1h' });
const payload = jwt.verify(token, process.env.JWT_SECRET);
# GitHub Actions workflow (simplifié)
name: CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with: { 'node-version': '18' }
- run: npm ci && npm run build
Commandes de build/deploy. Pour Vercel : npm run build && vercel –prod. Pour Heroku : git push heroku main. Pour Render : git push origin main (déploy automatisé).
- Tests à automatiser. Unitaires backend (Jest/Mocha), tests E2E via Playwright (scénarios utilisateurs).
- Débogage avec Claude Code. Utiliser logs structurés (JSON), reproduire localement avec la même DB et variables d’environnement, partager traces et requêtes pour analyse.
- Checklist sécurité avant déploiement. Masquer secrets via variables d’environnement, configurer CORS strict, activer rate limiting, valider saisies pour éviter injections.
Mise à l’échelle — bonnes pratiques. Prévoir séparation des services (API stateless), utilisation de connection pooling pour PostgreSQL, cache (Redis) pour charges élevées et monitoring (Prometheus/Grafana).
| Composant | Commandes clés | Tests | Critères production |
| Frontend | npm run build; vercel –prod | Playwright E2E | Bundle < 500KB, LCP < 2.5s |
| Backend | npm run test; git push | Jest unit + integration | Uptime 99.9%, 95th p95 latency |
| DB | psql migrations | Migration tests | Backups, connexion pool |
| Auth | Rotate secrets, env vars | Auth flows E2E | Tokens expirés, MFA si sensible |
Comment étendre Claude Code avec un serveur MCP personnalisé ?
On crée un serveur MCP pour exposer APIs, bases et outils afin que Claude Code puisse interagir directement avec des ressources externes.
Qu’est‑ce qu’un MCP et pourquoi l’utiliser : MCP signifie Model Connector Protocol, un pont léger qui expose fonctions, données et outils via des endpoints HTTP afin que le modèle puisse demander actions et recevoir résultats. Ce pattern évite de donner un accès direct à la base et permet d’appliquer contrôles, journalisation et quotas.
Architecture d’un serveur MCP : Le serveur contient un manifest décrivant les capacités, des endpoints requis (auth, execute, status) et des couches de sécurité (authentification, validation des inputs).
- Manifest : Sert à déclarer actions, paramètres et scopes.
- Endpoints : Auth pour échange de jetons, Execute pour exécuter commandes, Status pour santé.
- Sécurité : Validation d’input, rate limiting, chiffrement en transit.
Exemples de code :
{
"name": "my-mcp",
"version": "1.0.0",
"actions": [
{"id":"sql.query","description":"Exécute une requête SQL paramétrée","scope":"db:read"}
],
"auth": {"type":"jwt"}
}
// Express minimal (extraits)
// npm install express jsonwebtoken pg
const express = require('express');
const app = express();
app.use(express.json());
app.post('/auth', (req,res)=>{ /* échange credentials -> JWT */ });
app.post('/execute', (req,res)=>{ /* vérifie JWT, scope, route vers action */ });
app.get('/status', (req,res)=>res.json({ok:true}));
app.listen(3000);
// Exemple d'intégration SQL (node-postgres)
const {Pool} = require('pg');
const pool = new Pool();
app.post('/execute/sql.query', async (req,res)=>{
const {sql, params} = req.body;
const result = await pool.query(sql, params);
res.json(result.rows);
});
Authentification et validation : Utiliser des API keys pour services internes simples, JWT pour sessions signées, et scopes pour limiter actions. Valider schémas d’entrée (JSON Schema) et appliquer des quotas par clé.
Tests et débogage : Simuler Claude avec des requêtes curl/Postman, créer mocks qui répondent comme le modèle, écrire tests unitaires pour /execute et scénarios d’erreur, inspecter logs et traces distribuées.
Implications légales et sécurité : Limiter exposition des données sensibles, chiffrer en transit et au repos, nettoyer ou anonymiser journaux, documenter durée de rétention pour conformité (ex : RGPD).
| Endpoints | Auth, Execute, Status, Actions spécifiques (ex: sql.query) |
| Schéma manifest | name, version, actions[], auth.type, scopes |
| Tests à effectuer | Auth valide/invalid, scopes manquants, injection SQL bloquée, latence/quotas |
| Compétences acquises | Design d’API sécurisée, JWT/API key, SQL paramétré, tests & monitoring |
Prêt à monter en compétences avec Claude Code et ces 5 projets ?
Ces cinq projets forment une progression pratique : prototype web pour apprendre le flux de travail, jeu 2D pour maîtriser la logique interactive, application mobile pour tester l’ergonomie cross‑platform, application full‑stack pour intégrer backend, base et déploiement, et serveur MCP pour étendre Claude Code aux outils externes. En suivant cet ordre, vous gagnez des compétences concrètes immédiatement utilisables en production. Le bénéfice : réduire le temps d’apprentissage tout en construisant des livrables testables et déployables.
FAQ
-
Quelles compétences sont nécessaires pour commencer ces projets avec Claude Code ?
Une base en JavaScript/HTML/CSS suffit pour le prototype web et le jeu 2D. Pour le mobile, connaissance de React Native aide. Le full‑stack requiert notions de backend (Node/Express) et SQL. Le serveur MCP demande des compétences backend et sécurité API. -
Combien de temps pour réaliser chaque projet ?
Selon l’expérience : prototype web 1–3 jours, jeu 2D 3–7 jours, app mobile 3–10 jours, full‑stack 1–3 semaines, serveur MCP 1–4 semaines. L’utilisation de Claude Code accélère les itérations. -
Peut‑on déployer en production les projets aidés par Claude Code ?
Oui, si vous appliquez les bonnes pratiques : tests automatisés, revue de sécurité, gestion des secrets et pipeline CI/CD. Claude Code facilite la génération de code et les corrections mais la validation humaine reste requise. -
Qu’apporte un serveur MCP personnalisé ?
Un MCP permet à Claude Code d’appeler directement vos APIs, bases et outils internes, automatisant workflows et enrichissant les capacités de l’agent au‑delà des actions locales. C’est utile pour intégrations métier et automatisations sécurisées. -
Quels risques de sécurité faut‑il anticiper ?
Principaux risques : fuite de clés/API, exécution non souhaitée de commandes, exposition de données sensibles. Mitiger par scopes minimaux, authentification solide (JWT/API keys), validation des entrées et journaux d’audit.
A propos de l’auteur
Franck Scandolera — expert & formateur en tracking server‑side, Analytics Engineering, automatisation No/Low Code (n8n), intégration d’IA en entreprise et SEO/GEO. Responsable de l’agence webAnalyste et fondateur de Formations Analytics. Références : Logis Hôtel, Yelloh Village, BazarChic, Fédération Française de Football, Texdecor. Dispo pour aider les entreprises => contactez moi.
⭐ Analytics engineer, Data Analyst et Automatisation IA indépendant ⭐
- Ref clients : Logis Hôtel, Yelloh Village, BazarChic, Fédération Football Français, Texdecor…
Mon terrain de jeu :
- Data Analyst & Analytics engineering : tracking avancé (GTM server, e-commerce, CAPI, RGPD), entrepôt de données (BigQuery, Snowflake, PostgreSQL, ClickHouse), modèles (Airflow, dbt, Dataform), dashboards décisionnels (Looker, Power BI, Metabase, SQL, Python).
- Automatisation IA des taches Data, Marketing, RH, compta etc : conception de workflows intelligents robustes (n8n, App Script, scraping) connectés aux API de vos outils et LLM (OpenAI, Mistral, Claude…).
- Engineering IA pour créer des applications et agent IA sur mesure : intégration de LLM (OpenAI, Mistral…), RAG, assistants métier, génération de documents complexes, APIs, backends Node.js/Python.






