spinny:~/writing $ vim create-demo-claude-code-vibecoding.md
1~2Le **vibecoding** est un nouveau paradigme de développement logiciel dans lequel le programmeur guide un agent IA à travers des instructions en langage naturel, laissant l'intelligence artificielle écrire le code effectif. Le terme a été inventé par Andrej Karpathy (co-fondateur d'OpenAI et ancien Director of AI chez Tesla) dans un célèbre tweet de février 2025 : _« Il y a un nouveau type de coding que j'appelle vibecoding, où tu t'abandonnes complètement aux vibes, tu embrasses les exponentielles et tu oublies que le code existe. »_3~4Dans cet article, nous verrons comment construire une démo complète et fonctionnelle en utilisant **Claude Code** comme agent IA, **Supabase** comme backend (base de données, authentification, API) et **Vercel** pour le déploiement - le tout en exploitant exclusivement les **tiers gratuits** de ces services.5~6## 1. Qu'est-ce que le Vibecoding et pourquoi est-il révolutionnaire7~8Le vibecoding représente un changement de paradigme fondamental dans le développement logiciel. Au lieu d'écrire du code ligne par ligne, le développeur :9~101. **Décrit** ce qu'il veut en langage naturel.112. **L'agent IA** génère le code complet.123. **Le développeur** revoit, teste et itère.13~14### Pourquoi ça fonctionne15~16- **Rapidité** : un projet qui nécessiterait des jours peut être construit en quelques heures.17- **Accessibilité** : même les non-développeurs expérimentés peuvent construire des produits fonctionnels.18- **Itération rapide** : vous pouvez tester des idées et pivoter beaucoup plus rapidement.19- **Focus sur le produit** : vous vous concentrez sur le _quoi_ plutôt que sur le _comment_.20~21```mermaid22flowchart LR23 A[Idea] --> B[Prompt in linguaggio naturale]24 B --> C[Claude Code genera il codice]25 C --> D[Review e test]26 D --> E[Iterazione]27 E --> B28 D --> F[Deploy su Vercel]29```30~31### Quand utiliser le vibecoding32~33Le vibecoding est parfait pour :34~35- **Démos et MVP** : construire rapidement un prototype pour valider une idée.36- **Hackathons** : créer un produit fonctionnel en quelques heures.37- **Side projects** : explorer de nouvelles technologies sans y investir des semaines.38- **Proof of Concept** : démontrer la faisabilité technique à des parties prenantes ou investisseurs.39~40> **Attention :** Le vibecoding est excellent pour les démos et prototypes. Pour des applications de production avec des exigences élevées en matière de sécurité et de scalabilité, une révision approfondie du code généré reste indispensable.41~42## 2. La stack technologique : Claude Code + Supabase + Vercel43~44### Claude Code45~46Claude Code est l'agent de coding IA d'Anthropic. Il fonctionne directement dans votre terminal et peut :47~48- Lire et comprendre l'ensemble du codebase.49- Créer, modifier et supprimer des fichiers.50- Exécuter des commandes dans le terminal.51- Interagir avec des API et services externes.52- Gérer le versioning avec Git.53- Itérer de manière autonome sur les erreurs et bugs.54~55```bash56# Installazione di Claude Code57npm install -g @anthropic-ai/claude-code58~59# Avvio in una directory di progetto60cd my-project61claude62```63~64### Supabase (Tier gratuit)65~66Supabase est une alternative open source à Firebase qui propose :67~68- **Base de données PostgreSQL** : une base de données relationnelle complète.69- **Authentification** : connexion par e-mail, Google, GitHub, etc.70- **API REST et Realtime** : générées automatiquement à partir de votre schéma.71- **Storage** : pour les fichiers et images.72- **Edge Functions** : fonctions serverless.73~74Le tier gratuit comprend :75~76| Ressource | Limite gratuite |77|---------|----------------|78| Database | 500 Mo |79| Storage | 1 Go |80| Bandwidth | 5 Go |81| Edge Function invocations | 500K/mois |82| Utilisateurs authentifiés | Illimités |83| Projets | 2 projets actifs |84~85### Vercel (Tier gratuit)86~87Vercel est la plateforme de déploiement parfaite pour les applications Next.js :88~89- **Déploiement automatique** depuis GitHub.90- **Preview deployments** pour chaque branche et PR.91- **CDN global** pour des performances optimales.92- **Serverless Functions** incluses.93- **Analytics** de base gratuites.94~95Le tier gratuit comprend :96~97| Ressource | Limite gratuite |98|---------|----------------|99| Bandwidth | 100 Go/mois |100| Serverless Function execution | 100 Go-heures/mois |101| Builds | 6 000 minutes/mois |102| Projets | Illimités |103| Déploiements | Illimités |104~105## 3. Configuration initiale : préparer l'environnement106~107### Prérequis108~109Avant de commencer, assurez-vous d'avoir :110~111- **Node.js 18+** installé.112- **Git** configuré.113- Un compte **GitHub**.114- Un compte **Supabase** (gratuit sur [supabase.com](https://supabase.com)).115- Un compte **Vercel** (gratuit sur [vercel.com](https://vercel.com)).116- **Claude Code** installé (`npm install -g @anthropic-ai/claude-code`).117~118### Étape 1 : Créer le projet119~120Ouvrez le terminal et lancez Claude Code :121~122```bash123mkdir my-demo-app && cd my-demo-app124claude125```126~127Vous pouvez maintenant donner des instructions à Claude Code en langage naturel :128~129```130Vous : Crée un projet Next.js 15 avec App Router, TypeScript, Tailwind CSS et131shadcn/ui. Initialise aussi un dépôt Git.132```133~134Claude Code exécutera automatiquement :135~136```bash137npx create-next-app@latest . --typescript --tailwind --eslint --app --src-dir138npx shadcn@latest init139git init && git add . && git commit -m "Initial commit"140```141~142### Étape 2 : Configurer Supabase143~1441. Rendez-vous sur [supabase.com](https://supabase.com) et créez un nouveau projet.1452. Notez le **Project URL** et la **anon key** dans la section Settings > API.1463. Retournez au terminal avec Claude Code :147~148```149Vous : Ajoute Supabase au projet. Crée un fichier .env.local avec les variables150NEXT_PUBLIC_SUPABASE_URL et NEXT_PUBLIC_SUPABASE_ANON_KEY. Configure le client151Supabase avec support SSR pour Next.js App Router.152```153~154Claude Code créera la configuration complète :155~156```typescript157// src/lib/supabase/client.ts158import { createBrowserClient } from '@supabase/ssr';159~160export function createClient() {161 return createBrowserClient(162 process.env.NEXT_PUBLIC_SUPABASE_URL!,163 process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!164 );165}166```167~168```typescript169// src/lib/supabase/server.ts170import { createServerClient } from '@supabase/ssr';171import { cookies } from 'next/headers';172~173export async function createClient() {174 const cookieStore = await cookies();175~176 return createServerClient(177 process.env.NEXT_PUBLIC_SUPABASE_URL!,178 process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,179 {180 cookies: {181 getAll() {182 return cookieStore.getAll();183 },184 setAll(cookiesToSet) {185 cookiesToSet.forEach(({ name, value, options }) =>186 cookieStore.set(name, value, options)187 );188 },189 },190 }191 );192}193```194~195## 4. Construire la démo : une app de gestion de tâches196~197Construisons une démo concrète : une **application de gestion de tâches** avec authentification, CRUD complet et interface moderne.198~199### Définir le schéma de la base de données200~201Donnez des instructions à Claude Code pour créer le schéma :202~203```204Vous : Crée une migration SQL pour Supabase avec les tables suivantes :205~2061. profiles : id (uuid, FK vers auth.users), username (text), avatar_url (text),207 created_at2082. projects : id (uuid), name (text), description (text), owner_id (uuid, FK209 vers profiles), created_at2103. tasks : id (uuid), title (text), description (text), status (enum :211 todo/in_progress/done), priority (enum : low/medium/high), project_id (uuid,212 FK vers projects), assigned_to (uuid, FK vers profiles), due_date (timestamp),213 created_at, updated_at214~215Active Row Level Security sur toutes les tables et crée les policies appropriées.216```217~218Claude Code générera une migration complète :219~220```sql221-- Crea i tipi enum222CREATE TYPE task_status AS ENUM ('todo', 'in_progress', 'done');223CREATE TYPE task_priority AS ENUM ('low', 'medium', 'high');224~225-- Tabella profiles226CREATE TABLE profiles (227 id UUID REFERENCES auth.users ON DELETE CASCADE PRIMARY KEY,228 username TEXT UNIQUE,229 avatar_url TEXT,230 created_at TIMESTAMPTZ DEFAULT NOW()231);232~233-- Tabella projects234CREATE TABLE projects (235 id UUID DEFAULT gen_random_uuid() PRIMARY KEY,236 name TEXT NOT NULL,237 description TEXT,238 owner_id UUID REFERENCES profiles(id) ON DELETE CASCADE NOT NULL,239 created_at TIMESTAMPTZ DEFAULT NOW()240);241~242-- Tabella tasks243CREATE TABLE tasks (244 id UUID DEFAULT gen_random_uuid() PRIMARY KEY,245 title TEXT NOT NULL,246 description TEXT,247 status task_status DEFAULT 'todo',248 priority task_priority DEFAULT 'medium',249 project_id UUID REFERENCES projects(id) ON DELETE CASCADE NOT NULL,250 assigned_to UUID REFERENCES profiles(id),251 due_date TIMESTAMPTZ,252 created_at TIMESTAMPTZ DEFAULT NOW(),253 updated_at TIMESTAMPTZ DEFAULT NOW()254);255~256-- Abilita RLS257ALTER TABLE profiles ENABLE ROW LEVEL SECURITY;258ALTER TABLE projects ENABLE ROW LEVEL SECURITY;259ALTER TABLE tasks ENABLE ROW LEVEL SECURITY;260~261-- Policy per profiles262CREATE POLICY "Users can view own profile"263 ON profiles FOR SELECT USING (auth.uid() = id);264CREATE POLICY "Users can update own profile"265 ON profiles FOR UPDATE USING (auth.uid() = id);266~267-- Policy per projects268CREATE POLICY "Users can view own projects"269 ON projects FOR SELECT USING (auth.uid() = owner_id);270CREATE POLICY "Users can create projects"271 ON projects FOR INSERT WITH CHECK (auth.uid() = owner_id);272CREATE POLICY "Users can update own projects"273 ON projects FOR UPDATE USING (auth.uid() = owner_id);274CREATE POLICY "Users can delete own projects"275 ON projects FOR DELETE USING (auth.uid() = owner_id);276~277-- Policy per tasks278CREATE POLICY "Users can view tasks in their projects"279 ON tasks FOR SELECT USING (280 project_id IN (SELECT id FROM projects WHERE owner_id = auth.uid())281 );282CREATE POLICY "Users can create tasks in their projects"283 ON tasks FOR INSERT WITH CHECK (284 project_id IN (SELECT id FROM projects WHERE owner_id = auth.uid())285 );286CREATE POLICY "Users can update tasks in their projects"287 ON tasks FOR UPDATE USING (288 project_id IN (SELECT id FROM projects WHERE owner_id = auth.uid())289 );290CREATE POLICY "Users can delete tasks in their projects"291 ON tasks FOR DELETE USING (292 project_id IN (SELECT id FROM projects WHERE owner_id = auth.uid())293 );294```295~296Vous pouvez exécuter cette migration directement depuis le tableau de bord Supabase (SQL Editor) ou via la CLI.297~298### Générer les types TypeScript299~300```301Vous : Génère les types TypeScript depuis la base de données Supabase et sauvegarde-les dans src/types/database.ts302```303~304```bash305npx supabase gen types typescript --project-id YOUR_PROJECT_ID > src/types/database.ts306```307~308### Construire l'interface utilisateur309~310Voici la partie la plus puissante du vibecoding. Donnez des instructions de haut niveau à Claude Code :311~312```313Vous : Crée une page dashboard pour l'app de gestion de tâches avec :314~3151. Sidebar avec navigation entre les projets3162. Vue Kanban avec 3 colonnes (Todo, In Progress, Done) avec drag & drop3173. Modal pour créer/modifier des tâches3184. Header avec avatar utilisateur et déconnexion3195. Design moderne avec shadcn/ui et Tailwind320~321Utilise les données de Supabase avec React Server Components où possible322et Client Components uniquement là où l'interactivité est nécessaire.323```324~325Claude Code construira l'ensemble de l'interface, composant par composant.326~327### Ajouter l'authentification328~329```330Vous : Ajoute un système d'authentification complet avec :331~3321. Page de connexion avec email/mot de passe et connexion via GitHub3332. Page d'inscription3343. Middleware pour protéger les routes authentifiées3354. Redirection automatique pour les utilisateurs non authentifiés3365. Création automatique du profil après l'inscription337```338~339Claude Code configurera le middleware Next.js et les pages d'authentification :340~341```typescript342// src/middleware.ts343import { createServerClient } from '@supabase/ssr';344import { NextResponse, type NextRequest } from 'next/server';345~346export async function middleware(request: NextRequest) {347 let supabaseResponse = NextResponse.next({ request });348~349 const supabase = createServerClient(350 process.env.NEXT_PUBLIC_SUPABASE_URL!,351 process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,352 {353 cookies: {354 getAll() {355 return request.cookies.getAll();356 },357 setAll(cookiesToSet) {358 cookiesToSet.forEach(({ name, value }) =>359 request.cookies.set(name, value)360 );361 supabaseResponse = NextResponse.next({ request });362 cookiesToSet.forEach(({ name, value, options }) =>363 supabaseResponse.cookies.set(name, value, options)364 );365 },366 },367 }368 );369~370 const { data: { user } } = await supabase.auth.getUser();371~372 if (!user && !request.nextUrl.pathname.startsWith('/auth')) {373 const url = request.nextUrl.clone();374 url.pathname = '/auth/login';375 return NextResponse.redirect(url);376 }377~378 return supabaseResponse;379}380~381export const config = {382 matcher: ['/((?!_next/static|_next/image|favicon.ico|auth).*)'],383};384```385~386## 5. Patterns avancés de vibecoding387~388### Le prompting itératif389~390Le secret d'un vibecoding efficace est l'**itération**. N'essayez pas de tout décrire dans un seul prompt. Procédez par étapes :391~392```393Étape 1 : "Crée le layout de base avec header et sidebar"394Étape 2 : "Ajoute la liste des projets dans la sidebar avec un bouton pour en créer de nouveaux"395Étape 3 : "Crée la vue Kanban dans la zone principale"396Étape 4 : "Ajoute le drag & drop entre les colonnes"397Étape 5 : "Implémente le modal pour créer de nouvelles tâches"398Étape 6 : "Ajoute les notifications toast pour le feedback utilisateur"399```400~401> **Astuce :** Plus le prompt est spécifique et contextualisé, meilleur sera le résultat. Claude Code a accès à l'ensemble du codebase et peut donc intégrer de nouvelles fonctionnalités de manière cohérente.402~403### Gestion des erreurs404~405Quand quelque chose ne fonctionne pas (et ça arrivera), vous pouvez simplement dire :406~407```408Vous : J'ai cette erreur dans la console : "TypeError: Cannot read property 'map' of undefined"409dans le composant TaskList. Corrige-la.410```411~412Claude Code analysera le code, identifiera le problème et le résoudra.413~414### Refactoring avec l'IA415~416```417Vous : Le composant Dashboard est devenu trop volumineux. Divise-le en composants418plus petits et réutilisables, en conservant les mêmes fonctionnalités.419```420~421### Testing422~423```424Vous : Ajoute des tests avec Vitest pour les fonctions utilitaires et des tests425avec Playwright pour le flux d'authentification et la création de tâches.426```427~428## 6. Déploiement sur Vercel : du code au monde entier429~430### Étape 1 : Pousser sur GitHub431~432```433Vous : Crée un .gitignore approprié, committe tout et pousse sur un nouveau434dépôt GitHub appelé "my-demo-app".435```436~437```bash438git add .439git commit -m "feat: complete task management demo"440gh repo create my-demo-app --public --push --source=.441```442~443### Étape 2 : Connecter Vercel444~4451. Rendez-vous sur [vercel.com](https://vercel.com) et cliquez sur « Add New Project ».4462. Importez le dépôt GitHub que vous venez de créer.4473. Ajoutez les variables d'environnement :448 - `NEXT_PUBLIC_SUPABASE_URL`449 - `NEXT_PUBLIC_SUPABASE_ANON_KEY`4504. Cliquez sur « Deploy ».451~452```mermaid453flowchart LR454 A[GitHub Push] --> B[Vercel Build]455 B --> C[Deploy Automatico]456 C --> D[URL Pubblico]457 D --> E[CDN Globale]458```459~460### Étape 3 : Configurer le domaine (optionnel)461~462Vercel fournit une URL gratuite de type `my-demo-app.vercel.app`. Pour un domaine personnalisé :463~464```465Vous : Ajoute la configuration pour un domaine personnalisé dans vercel.json466```467~468### Preview Deployments469~470Chaque fois que vous ouvrez une Pull Request sur GitHub, Vercel créera automatiquement un **preview deployment** avec une URL unique. Parfait pour montrer les modifications avant le merge.471~472## 7. Optimisations pour la démo473~474### Performance475~476```477Vous : Optimise les performances de l'app :4781. Ajoute des loading states avec Suspense et skeleton4792. Implémente le caching avec unstable_cache de Next.js4803. Optimise les images avec next/image4814. Ajoute les metadata SEO pour chaque page482```483~484### Realtime avec Supabase485~486Une fonctionnalité qui impressionne toujours dans les démos est le **realtime** :487~488```489Vous : Ajoute la synchronisation realtime pour les tâches en utilisant Supabase Realtime.490Quand un utilisateur met à jour une tâche, tous les autres utilisateurs doivent voir491le changement en temps réel sans rafraîchir la page.492```493~494```typescript495'use client';496~497import { useEffect, useState } from 'react';498import { createClient } from '@/lib/supabase/client';499import type { Task } from '@/types/database';500~501export function useRealtimeTasks(projectId: string) {502 const [tasks, setTasks] = useState<Task[]>([]);503 const supabase = createClient();504~505 useEffect(() => {506 const channel = supabase507 .channel('tasks-changes')508 .on(509 'postgres_changes',510 {511 event: '*',512 schema: 'public',513 table: 'tasks',514 filter: `project_id=eq.${projectId}`,515 },516 (payload) => {517 if (payload.eventType === 'INSERT') {518 setTasks((prev) => [...prev, payload.new as Task]);519 } else if (payload.eventType === 'UPDATE') {520 setTasks((prev) =>521 prev.map((t) =>522 t.id === payload.new.id ? (payload.new as Task) : t523 )524 );525 } else if (payload.eventType === 'DELETE') {526 setTasks((prev) =>527 prev.filter((t) => t.id !== payload.old.id)528 );529 }530 }531 )532 .subscribe();533~534 return () => {535 supabase.removeChannel(channel);536 };537 }, [projectId, supabase]);538~539 return tasks;540}541```542~543### Dark mode544~545```546Vous : Ajoute le support du dark mode avec un toggle dans le header.547Utilise les classes dark de Tailwind et sauvegarde la préférence dans localStorage.548```549~550## 8. Bonnes pratiques pour un vibecoding efficace551~552### 1. Soyez spécifique dans vos prompts553~554```555❌ "Fais une belle page"556✅ "Crée une landing page avec une hero section avec un dégradé violet-bleu, une section557 features avec 3 cards avec icônes, et un CTA avec un bouton orange"558```559~560### 2. Donnez du contexte561~562```563❌ "Ajoute l'authentification"564✅ "Ajoute l'authentification avec Supabase Auth. Le projet utilise Next.js 15 App565 Router avec TypeScript. Je veux un login avec email/mot de passe et OAuth avec GitHub.566 Utilise le pattern SSR avec @supabase/ssr"567```568~569### 3. Itérez par petites étapes570~571N'essayez pas de tout construire en un seul prompt. Procédez par incréments :572~5731. Layout de base5742. Une fonctionnalité à la fois5753. Styling et finitions5764. Gestion des erreurs5775. Testing578~579### 4. Révisez le code généré580~581Le vibecoding ne signifie pas ne pas lire le code. Révisez toujours :582~583- **Sécurité** : politiques RLS, validation des entrées, assainissement des données.584- **Performance** : requêtes N+1, composants inutilement côté client.585- **Bonnes pratiques** : structure du projet, conventions de nommage.586~587### 5. Utilisez Git de manière stratégique588~589```590Vous : Committe les modifications avec un message descriptif après chaque fonctionnalité complétée.591```592~593Cela vous permet de revenir en arrière si quelque chose tourne mal.594~595## 9. Coûts : vraiment tout gratuit ?596~597Voici un récapitulatif des coûts pour chaque service :598~599| Service | Plan gratuit | Quand payer |600|----------|---------------|----------------|601| **Claude Code** | Nécessite un abonnement Anthropic (à partir de 20 $/mois) ou une clé API | Immédiatement, mais la valeur est énorme |602| **Supabase** | Tier gratuit généreux (2 projets, 500 Mo DB) | Au-delà des limites du tier gratuit |603| **Vercel** | Tier gratuit pour les projets personnels | Pour les équipes ou l'usage commercial |604| **GitHub** | Gratuit pour les dépôts publics et privés | Fonctionnalités enterprise |605~606> **Note :** Claude Code nécessite un abonnement ou des crédits API, mais le retour sur investissement en termes de vitesse de développement est extraordinaire. Pour une démo ou un MVP, le coût total est de l'ordre de 20 $.607~608### Alternatives gratuites pour l'IA609~610Si vous souhaitez maintenir le coût à zéro absolu, vous pouvez utiliser :611~612- **Cursor** (tier gratuit avec limitations).613- **GitHub Copilot** (gratuit pour les étudiants et l'open source).614- **Codeium/Windsurf** (tier gratuit généreux).615~616## 10. De la démo au produit : prochaines étapes617~618Une fois votre démo en ligne, voici comment poursuivre :619~620```mermaid621flowchart TD622 A[Demo Live] --> B{Feedback Utenti}623 B --> C[Iterazione sul Prodotto]624 C --> D[Product-Market Fit]625 D --> E[Scaling]626 E --> F[Supabase Pro Plan]627 E --> G[Vercel Pro Plan]628 E --> H[Dominio Personalizzato]629```630~6311. **Recueillez du feedback** : partagez la démo avec des utilisateurs potentiels et recueillez leurs avis.6322. **Itérez rapidement** : utilisez le vibecoding pour implémenter les modifications demandées.6333. **Surveillez les métriques** : Vercel Analytics et le tableau de bord Supabase vous fournissent des données essentielles.6344. **Montez en charge quand c'est nécessaire** : passez aux plans payants uniquement quand vous avez validé la demande.635~636~637## Conclusion638~639Le vibecoding avec Claude Code, Supabase et Vercel représente une combinaison extrêmement puissante pour construire des démos et MVP en un temps record. Ce qui nécessitait auparavant des semaines de développement peut désormais être réalisé en quelques heures, avec un niveau de qualité surprenant.640~641La clé est d'aborder le vibecoding avec le bon état d'esprit : il ne s'agit pas de « ne pas savoir programmer », mais d'**amplifier vos capacités** avec des outils IA. Plus vous maîtrisez les technologies sous-jacentes (React, SQL, authentification, déploiement), plus vous serez efficace pour guider l'agent IA vers le résultat souhaité.642~643L'avenir du développement logiciel est là, et le coût pour commencer n'a jamais été aussi bas. Créez votre démo, validez-la auprès d'utilisateurs réels et construisez le prochain grand produit.644~645> **Checklist pour votre première démo :**646>647> - [x] Claude Code installé et configuré648> - [x] Projet Supabase créé avec schéma de base de données649> - [x] Projet Next.js initialisé avec shadcn/ui650> - [x] Authentification configurée651> - [x] CRUD complet implémenté652> - [x] Interface moderne et responsive653> - [x] Déploiement sur Vercel effectué654> - [x] URL partageable prête pour le feedback655~
NORMAL · create-demo-claude-code-vibecoding.md [readonly]655 lines · :q to close