spinny:~/writing $ less create-demo-claude-code-vibecoding.md
12**Vibecoding** este o noua paradigma de dezvoltare software in care programatorul ghideaza un agent AI prin instructiuni in limbaj natural, lasand inteligenta artificiala sa scrie codul propriu-zis. Termenul a fost inventat de Andrej Karpathy (co-fondator OpenAI si fost Director de AI la Tesla) intr-un tweet celebru din februarie 2025: _"Exista un nou fel de programare pe care il numesc vibecoding, in care te lasi complet in voia vibratiilor, accepti exponentialele si uiti ca exista cod."_34In acest articol, vom vedea cum sa construim un demo complet si functional folosind **Claude Code** ca agent AI, **Supabase** ca backend (baza de date, autentificare, API) si **Vercel** pentru deployment - totul folosind exclusiv **nivelurile gratuite** ale acestor servicii.56## 1. Ce este Vibecoding si de ce este revolutionar78Vibecoding-ul reprezinta o schimbare fundamentala de paradigma in dezvoltarea software. In loc sa scrie cod linie cu linie, dezvoltatorul:9101. **Descrie** ce doreste in limbaj natural.112. **Agentul AI** genereaza codul complet.123. **Dezvoltatorul** revizuieste, testeaza si itereaza.1314### De ce functioneaza1516- **Viteza**: un proiect care ar dura zile poate fi construit in ore.17- **Accesibilitate**: chiar si dezvoltatorii mai putin experimentati pot construi produse functionale.18- **Iteratie rapida**: poti testa idei si pivota mult mai rapid.19- **Focus pe produs**: te concentrezi pe _ce_ in loc de _cum_.2021```mermaid22flowchart LR23 A[Idea] --> B[Natural language prompt]24 B --> C[Claude Code generates code]25 C --> D[Review and test]26 D --> E[Iteration]27 E --> B28 D --> F[Deploy to Vercel]29```3031### Cand sa folosesti Vibecoding3233Vibecoding-ul este perfect pentru:3435- **Demo-uri si MVP-uri**: construirea rapida a unui prototip pentru validarea unei idei.36- **Hackathoane**: crearea unui produs functional in doar cateva ore.37- **Proiecte secundare**: explorarea unor tehnologii noi fara a investi saptamani.38- **Proof of Concept**: demonstrarea fezabilitatii tehnice pentru parti interesate sau investitori.3940> **Atentie:** Vibecoding-ul este excelent pentru demo-uri si prototipuri. Pentru aplicatii de nivel productie cu cerinte ridicate de securitate si scalabilitate, o revizuire amanuntita a codului generat este inca esentiala.4142## 2. Stack-ul tehnic: Claude Code + Supabase + Vercel4344### Claude Code4546Claude Code este agentul AI de programare al Anthropic. Functioneaza direct in terminalul tau si poate:4748- Citi si intelege intreaga baza de cod.49- Crea, modifica si sterge fisiere.50- Executa comenzi in terminal.51- Interactiona cu API-uri si servicii externe.52- Gestiona versionarea cu Git.53- Itera autonom asupra erorilor si bug-urilor.5455```bash56# Install Claude Code57npm install -g @anthropic-ai/claude-code5859# Start in a project directory60cd my-project61claude62```6364### Supabase (Nivel gratuit)6566Supabase este o alternativa open-source la Firebase care ofera:6768- **Baza de date PostgreSQL**: o baza de date relationala completa.69- **Autentificare**: login cu email, Google, GitHub, etc.70- **API-uri REST si Realtime**: generate automat din schema ta.71- **Stocare**: pentru fisiere si imagini.72- **Edge Functions**: functii serverless.7374Nivelul gratuit include:7576| Resursa | Limita gratuita |77|----------|-----------|78| Baza de date | 500 MB |79| Stocare | 1 GB |80| Latime de banda | 5 GB |81| Invocari Edge Function | 500K/luna |82| Utilizatori autentificati | Nelimitati |83| Proiecte | 2 proiecte active |8485### Vercel (Nivel gratuit)8687Vercel este platforma perfecta de deployment pentru aplicatii Next.js:8889- **Deployment automat** din GitHub.90- **Preview deployments** pentru fiecare branch si PR.91- **CDN global** pentru performanta optima.92- **Serverless Functions** incluse.93- **Analize de baza** gratuite.9495Nivelul gratuit include:9697| Resursa | Limita gratuita |98|----------|-----------|99| Latime de banda | 100 GB/luna |100| Executie Serverless Function | 100 GB-ore/luna |101| Build-uri | 6.000 minute/luna |102| Proiecte | Nelimitate |103| Deployments | Nelimitate |104105## 3. Configurare initiala: Pregatirea mediului106107### Cerinte preliminare108109Inainte de a incepe, asigura-te ca ai:110111- **Node.js 18+** instalat.112- **Git** configurat.113- Un cont **GitHub**.114- Un cont **Supabase** (gratuit pe [supabase.com](https://supabase.com)).115- Un cont **Vercel** (gratuit pe [vercel.com](https://vercel.com)).116- **Claude Code** instalat (`npm install -g @anthropic-ai/claude-code`).117118### Pasul 1: Creeaza proiectul119120Deschide terminalul si porneste Claude Code:121122```bash123mkdir my-demo-app && cd my-demo-app124claude125```126127Acum poti incepe sa dai instructiuni Claude Code in limbaj natural:128129```130You: Create a Next.js 15 project with App Router, TypeScript, Tailwind CSS,131and shadcn/ui. Also initialize a Git repository.132```133134Claude Code va executa automat:135136```bash137npx create-next-app@latest . --typescript --tailwind --eslint --app --src-dir138npx shadcn@latest init139git init && git add . && git commit -m "Initial commit"140```141142### Pasul 2: Configureaza Supabase1431441. Mergi la [supabase.com](https://supabase.com) si creeaza un proiect nou.1452. Noteaza **URL-ul proiectului** si **cheia anon** din Settings > API.1463. Intoarce-te la terminal cu Claude Code:147148```149You: Add Supabase to the project. Create a .env.local file with the variables150NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_ANON_KEY. Configure the151Supabase client with SSR support for Next.js App Router.152```153154Claude Code va crea configuratia completa:155156```typescript157// src/lib/supabase/client.ts158import { createBrowserClient } from '@supabase/ssr';159160export function createClient() {161 return createBrowserClient(162 process.env.NEXT_PUBLIC_SUPABASE_URL!,163 process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!164 );165}166```167168```typescript169// src/lib/supabase/server.ts170import { createServerClient } from '@supabase/ssr';171import { cookies } from 'next/headers';172173export async function createClient() {174 const cookieStore = await cookies();175176 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```194195## 4. Construirea demo-ului: O aplicatie de gestionare a sarcinilor196197Sa construim un demo concret: o **aplicatie de gestionare a sarcinilor** cu autentificare, CRUD complet si o interfata moderna.198199### Defineste schema bazei de date200201Da instructiuni Claude Code pentru a crea schema:202203```204You: Create a SQL migration for Supabase with the following tables:2052061. profiles: id (uuid, FK to auth.users), username (text), avatar_url (text),207 created_at2082. projects: id (uuid), name (text), description (text), owner_id (uuid, FK209 to 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 to projects), assigned_to (uuid, FK to profiles), due_date (timestamp),213 created_at, updated_at214215Enable Row Level Security on all tables and create appropriate policies.216```217218Claude Code va genera o migrare completa:219220```sql221-- Create enum types222CREATE TYPE task_status AS ENUM ('todo', 'in_progress', 'done');223CREATE TYPE task_priority AS ENUM ('low', 'medium', 'high');224225-- Profiles table226CREATE 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);232233-- Projects table234CREATE 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);241242-- Tasks table243CREATE 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);255256-- Enable RLS257ALTER TABLE profiles ENABLE ROW LEVEL SECURITY;258ALTER TABLE projects ENABLE ROW LEVEL SECURITY;259ALTER TABLE tasks ENABLE ROW LEVEL SECURITY;260261-- Profiles policies262CREATE 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);266267-- Projects policies268CREATE 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);276277-- Tasks policies278CREATE 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```295296Poti rula aceasta migrare direct din panoul Supabase (SQL Editor) sau prin CLI.297298### Genereaza tipuri TypeScript299300```301You: Generate TypeScript types from the Supabase database and save them to src/types/database.ts302```303304```bash305npx supabase gen types typescript --project-id YOUR_PROJECT_ID > src/types/database.ts306```307308### Construieste interfata utilizatorului309310Acum vine cea mai puternica parte a vibecoding-ului. Da instructiuni de nivel inalt lui Claude Code:311312```313You: Create a dashboard page for the task management app with:3143151. Sidebar with navigation between projects3162. Kanban view with 3 columns (Todo, In Progress, Done) with drag & drop3173. Modal to create/edit tasks3184. Header with user avatar and logout3195. Modern design with shadcn/ui and Tailwind320321Use data from Supabase with React Server Components where possible322and Client Components only where interactivity is needed.323```324325Claude Code va construi intreaga interfata, componenta cu componenta.326327### Adauga autentificarea328329```330You: Add a complete authentication system with:3313321. Login page with email/password and GitHub login3332. Registration page3343. Middleware to protect authenticated routes3354. Automatic redirect for unauthenticated users3365. Automatic profile creation after registration337```338339Claude Code va configura middleware-ul Next.js si paginile de autentificare:340341```typescript342// src/middleware.ts343import { createServerClient } from '@supabase/ssr';344import { NextResponse, type NextRequest } from 'next/server';345346export async function middleware(request: NextRequest) {347 let supabaseResponse = NextResponse.next({ request });348349 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 );369370 const { data: { user } } = await supabase.auth.getUser();371372 if (!user && !request.nextUrl.pathname.startsWith('/auth')) {373 const url = request.nextUrl.clone();374 url.pathname = '/auth/login';375 return NextResponse.redirect(url);376 }377378 return supabaseResponse;379}380381export const config = {382 matcher: ['/((?!_next/static|_next/image|favicon.ico|auth).*)'],383};384```385386## 5. Modele avansate de Vibecoding387388### Prompting iterativ389390Secretul vibecoding-ului eficient este **iteratia**. Nu incerca sa descrii totul intr-un singur prompt. Procedeaza pas cu pas:391392```393Pasul 1: "Create the base layout with header and sidebar"394Pasul 2: "Add the project list in the sidebar with a button to create new ones"395Pasul 3: "Create the Kanban view in the main area"396Pasul 4: "Add drag & drop between columns"397Pasul 5: "Implement the modal to create new tasks"398Pasul 6: "Add toast notifications for user feedback"399```400401> **Sfat:** Cu cat promptul este mai specific si contextualizat, cu atat rezultatul este mai bun. Claude Code are acces la intreaga baza de cod, deci poate integra functionalitati noi in mod coerent.402403### Gestionarea erorilor404405Cand ceva nu functioneaza (si se va intampla), poti spune pur si simplu:406407```408You: I'm getting this error in the console: "TypeError: Cannot read property409'map' of undefined" in the TaskList component. Fix it.410```411412Claude Code va analiza codul, va identifica problema si o va rezolva.413414### Refactorizare cu AI415416```417You: The Dashboard component has become too large. Split it into smaller,418reusable components while maintaining the same functionality.419```420421### Testare422423```424You: Add tests with Vitest for utility functions and Playwright tests for425the authentication and task creation flow.426```427428## 6. Deploy pe Vercel: De la cod la lume429430### Pasul 1: Push pe GitHub431432```433You: Create an appropriate .gitignore, commit everything, and push to a new434GitHub repository called "my-demo-app".435```436437```bash438git add .439git commit -m "feat: complete task management demo"440gh repo create my-demo-app --public --push --source=.441```442443### Pasul 2: Conecteaza Vercel4444451. Mergi la [vercel.com](https://vercel.com) si apasa "Add New Project."4462. Importa repository-ul GitHub pe care tocmai l-ai creat.4473. Adauga variabilele de mediu:448 - `NEXT_PUBLIC_SUPABASE_URL`449 - `NEXT_PUBLIC_SUPABASE_ANON_KEY`4504. Apasa "Deploy."451452```mermaid453flowchart LR454 A[GitHub Push] --> B[Vercel Build]455 B --> C[Automatic Deploy]456 C --> D[Public URL]457 D --> E[Global CDN]458```459460### Pasul 3: Configureaza un domeniu personalizat (Optional)461462Vercel ofera un URL gratuit precum `my-demo-app.vercel.app`. Pentru un domeniu personalizat:463464```465You: Add the configuration for a custom domain in vercel.json466```467468### Preview Deployments469470De fiecare data cand deschizi un Pull Request pe GitHub, Vercel va crea automat un **preview deployment** cu un URL unic. Perfect pentru a arata modificarile inainte de merge.471472## 7. Optimizari pentru demo-ul tau473474### Performanta475476```477You: Optimize the app's performance:4781. Add loading states with Suspense and skeletons4792. Implement caching with Next.js unstable_cache4803. Optimize images with next/image4814. Add SEO metadata for each page482```483484### Realtime cu Supabase485486O functionalitate care impresioneaza intotdeauna in demo-uri este **realtime**:487488```489You: Add realtime synchronization for tasks using Supabase Realtime.490When a user updates a task, all other users should see the change491in real time without refreshing.492```493494```typescript495'use client';496497import { useEffect, useState } from 'react';498import { createClient } from '@/lib/supabase/client';499import type { Task } from '@/types/database';500501export function useRealtimeTasks(projectId: string) {502 const [tasks, setTasks] = useState<Task[]>([]);503 const supabase = createClient();504505 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();533534 return () => {535 supabase.removeChannel(channel);536 };537 }, [projectId, supabase]);538539 return tasks;540}541```542543### Mod inchis (Dark Mode)544545```546You: Add dark mode support with a toggle in the header.547Use Tailwind dark classes and save the preference in localStorage.548```549550## 8. Bune practici pentru Vibecoding eficient551552### 1. Fii specific in prompt-uri553554```555❌ "Make a nice page"556✅ "Create a landing page with a hero section with a purple-blue gradient,557 a features section with 3 cards with icons, and an orange CTA button"558```559560### 2. Ofera context561562```563❌ "Add authentication"564✅ "Add authentication with Supabase Auth. The project uses Next.js 15 App565 Router with TypeScript. I want email/password login and OAuth with GitHub.566 Use the SSR pattern with @supabase/ssr"567```568569### 3. Itereaza in pasi mici570571Nu incerca sa construiesti totul intr-un singur prompt. Procedeaza incremental:5725731. Layout de baza5742. O functionalitate pe rand5753. Stilizare si finisare5764. Gestionarea erorilor5775. Testare578579### 4. Revizuieste codul generat580581Vibecoding nu inseamna sa nu citesti codul. Revizuieste intotdeauna:582583- **Securitate**: politici RLS, validarea input-ului, sanitizarea datelor.584- **Performanta**: interogari N+1, componente client-side inutile.585- **Bune practici**: structura proiectului, conventii de denumire.586587### 5. Foloseste Git strategic588589```590You: Commit the changes with a descriptive message after each completed feature.591```592593Acest lucru iti permite sa revii la o versiune anterioara daca ceva merge prost.594595## 9. Costuri: Este totul cu adevarat gratuit?596597Iata o defalcare a costurilor pentru fiecare serviciu:598599| Serviciu | Plan gratuit | Cand platesti |600|---------|-----------|-------------|601| **Claude Code** | Necesita un plan Anthropic (de la $20/luna) sau cheie API | Imediat, dar valoarea este enorma |602| **Supabase** | Nivel gratuit generos (2 proiecte, 500MB DB) | Dincolo de limitele nivelului gratuit |603| **Vercel** | Nivel gratuit pentru proiecte personale | Pentru echipe sau uz comercial |604| **GitHub** | Gratuit pentru repo-uri publice si private | Functionalitati Enterprise |605606> **Nota:** Claude Code necesita un abonament sau credite API, dar randamentul investitiei in termeni de viteza de dezvoltare este extraordinar. Pentru un demo sau MVP, costul total este in jurul a $20.607608### Alternative AI gratuite609610Daca vrei sa mentii costurile la zero absolut, poti folosi:611612- **Cursor** (nivel gratuit cu limitari).613- **GitHub Copilot** (gratuit pentru studenti si open source).614- **Codeium/Windsurf** (nivel gratuit generos).615616## 10. De la demo la produs: Pasii urmatori617618Odata ce demo-ul tau este live, iata cum sa procedezi:619620```mermaid621flowchart TD622 A[Live Demo] --> B{User Feedback}623 B --> C[Product Iteration]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[Custom Domain]629```6306311. **Colecteaza feedback**: partajeaza demo-ul cu utilizatori potentiali si aduna opinii.6322. **Itereaza rapid**: foloseste vibecoding pentru a implementa modificarile cerute.6333. **Monitorizeaza metrici**: Vercel Analytics si Supabase Dashboard iti ofera date esentiale.6344. **Scaleaza cand este necesar**: treci la planuri platite doar cand ai validat cererea.635636637## Concluzie638639Vibecoding-ul cu Claude Code, Supabase si Vercel reprezinta o combinatie puternica pentru construirea demo-urilor si MVP-urilor in timp record. Ceea ce obisnuia sa dureze saptamani de dezvoltare poate fi acum realizat in doar cateva ore, cu un nivel surprinzator de ridicat de calitate.640641Cheia este sa abordezi vibecoding-ul cu mentalitatea potrivita: nu este vorba despre "a nu sti sa programezi", ci despre **amplificarea capabilitatilor tale** cu instrumente AI. Cu cat cunosti mai bine tehnologiile de baza (React, SQL, autentificare, deployment), cu atat vei fi mai eficient in ghidarea agentului AI catre rezultatul dorit.642643Viitorul dezvoltarii software este aici, iar costul de a incepe nu a fost niciodata mai mic. Creeaza-ti demo-ul, valideaza-l cu utilizatori reali si construieste urmatorul mare produs.644645> **Lista de verificare pentru primul tau demo:**646>647> - [x] Claude Code instalat si configurat648> - [x] Proiect Supabase creat cu schema bazei de date649> - [x] Proiect Next.js initializat cu shadcn/ui650> - [x] Autentificare configurata651> - [x] CRUD complet implementat652> - [x] UI modern si responsiv653> - [x] Deployment pe Vercel654> - [x] URL partajabil gata pentru feedback655
:Cum sa construiesti un demo cu Claude Code: Vibecoding cu Supabase si Vercellines 1-655 (END) — press q to close