spinny:~/writing $ vim create-demo-claude-code-vibecoding.md
1~2**Vibecoding** är ett nytt mjukvaruutvecklingsparadigm där programmeraren guidar en AI-agent genom instruktioner på naturligt språk och låter den artificiella intelligensen skriva den faktiska koden. Termen myntades av Andrej Karpathy (medgrundare av OpenAI och tidigare Director of AI på Tesla) i en berömd tweet från februari 2025: _"There's a new kind of coding I call vibecoding, where you fully give in to the vibes, embrace the exponentials, and forget that the code even exists."_3~4I den här artikeln ser vi hur man bygger en komplett, fungerande demo med **Claude Code** som AI-agent, **Supabase** som backend (databas, autentisering, API) och **Vercel** för deployment - allt med uteslutande **gratistjänster**.5~6## 1. Vad Är Vibecoding och Varför Det Är Revolutionerande7~8Vibecoding representerar ett fundamentalt paradigmskifte inom mjukvaruutveckling. Istället för att skriva kod rad för rad gör utvecklaren:9~101. **Beskriver** vad de vill ha på naturligt språk.112. **AI-agenten** genererar den kompletta koden.123. **Utvecklaren** granskar, testar och itererar.13~14### Varför Det Fungerar15~16- **Hastighet**: ett projekt som skulle ta dagar kan byggas på timmar.17- **Tillgänglighet**: även icke-expert utvecklare kan bygga fungerande produkter.18- **Snabb iteration**: du kan testa idéer och pivotera mycket snabbare.19- **Produktfokus**: du koncentrerar dig på _vad_ istället för _hur_.20~21```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```30~31### När Ska Man Använda Vibecoding32~33Vibecoding är perfekt för:34~35- **Demos och MVP:er**: snabbt bygga en prototyp för att validera en idé.36- **Hackathons**: skapa en fungerande produkt på bara några timmar.37- **Sidoprojekt**: utforska nya teknologier utan att investera veckor.38- **Proof of Concept**: demonstrera teknisk genomförbarhet för intressenter eller investerare.39~40> **Varning:** Vibecoding är utmärkt för demos och prototyper. För produktionsklara applikationer med höga säkerhets- och skalbarhetskrav är en noggrann granskning av den genererade koden fortfarande nödvändig.41~42## 2. Teknikstacken: Claude Code + Supabase + Vercel43~44### Claude Code45~46Claude Code är Anthropics AI-kodningsagent. Den fungerar direkt i din terminal och kan:47~48- Läsa och förstå hela kodbasen.49- Skapa, ändra och ta bort filer.50- Köra terminalkommandon.51- Interagera med API:er och externa tjänster.52- Hantera versionshantering med Git.53- Autonomt iterera på fel och buggar.54~55```bash56# Install Claude Code57npm install -g @anthropic-ai/claude-code58~59# Start in a project directory60cd my-project61claude62```63~64### Supabase (Gratis Tier)65~66Supabase är ett Firebase-alternativ med öppen källkod som erbjuder:67~68- **PostgreSQL-databas**: en komplett relationsdatabas.69- **Autentisering**: inloggning med e-post, Google, GitHub, etc.70- **REST och Realtime API:er**: automatiskt genererade från ditt schema.71- **Lagring**: för filer och bilder.72- **Edge Functions**: serverlösa funktioner.73~74Gratisnivån inkluderar:75~76| Resurs | Gratis Gräns |77|----------|-----------|78| Databas | 500 MB |79| Lagring | 1 GB |80| Bandbredd | 5 GB |81| Edge Function-anrop | 500K/månad |82| Autentiserade användare | Obegränsat |83| Projekt | 2 aktiva projekt |84~85### Vercel (Gratis Tier)86~87Vercel är den perfekta deployment-plattformen för Next.js-applikationer:88~89- **Automatisk deployment** från GitHub.90- **Preview deployments** för varje branch och PR.91- **Globalt CDN** för optimal prestanda.92- **Serverless Functions** inkluderade.93- **Grundläggande analytics** gratis.94~95Gratisnivån inkluderar:96~97| Resurs | Gratis Gräns |98|----------|-----------|99| Bandbredd | 100 GB/månad |100| Serverless Function-körning | 100 GB-timmar/månad |101| Byggen | 6 000 minuter/månad |102| Projekt | Obegränsat |103| Deployments | Obegränsat |104~105## 3. Initial Setup: Förbereda Miljön106~107### Förutsättningar108~109Innan du börjar, se till att du har:110~111- **Node.js 18+** installerat.112- **Git** konfigurerat.113- Ett **GitHub**-konto.114- Ett **Supabase**-konto (gratis på [supabase.com](https://supabase.com)).115- Ett **Vercel**-konto (gratis på [vercel.com](https://vercel.com)).116- **Claude Code** installerat (`npm install -g @anthropic-ai/claude-code`).117~118### Steg 1: Skapa Projektet119~120Öppna terminalen och starta Claude Code:121~122```bash123mkdir my-demo-app && cd my-demo-app124claude125```126~127Nu kan du ge Claude Code instruktioner på naturligt språk:128~129```130You: Create a Next.js 15 project with App Router, TypeScript, Tailwind CSS,131and shadcn/ui. Also initialize a Git repository.132```133~134Claude Code kommer automatiskt köra: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### Steg 2: Konfigurera Supabase143~1441. Gå till [supabase.com](https://supabase.com) och skapa ett nytt projekt.1452. Notera **Project URL** och **anon key** från Settings > API.1463. Gå tillbaka till terminalen med Claude Code:147~148```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```153~154Claude Code skapar den kompletta konfigurationen: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. Bygga Demon: En Uppgiftshanteringsapp196~197Låt oss bygga en konkret demo: en **uppgiftshanteringsapp** med autentisering, fullständig CRUD och ett modernt gränssnitt.198~199### Definiera Databasschemat200~201Ge Claude Code instruktioner för att skapa schemat:202~203```204You: Create a SQL migration for Supabase with the following tables:205~2061. 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_at214~215Enable Row Level Security on all tables and create appropriate policies.216```217~218Claude Code genererar en komplett migrering:219~220```sql221-- Create enum types222CREATE TYPE task_status AS ENUM ('todo', 'in_progress', 'done');223CREATE TYPE task_priority AS ENUM ('low', 'medium', 'high');224~225-- 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);232~233-- 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);241~242-- 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);255~256-- Enable RLS257ALTER TABLE profiles ENABLE ROW LEVEL SECURITY;258ALTER TABLE projects ENABLE ROW LEVEL SECURITY;259ALTER TABLE tasks ENABLE ROW LEVEL SECURITY;260~261-- 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);266~267-- 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);276~277-- 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```295~296Du kan köra denna migrering direkt från Supabase-dashboarden (SQL Editor) eller via CLI:n.297~298### Generera TypeScript-typer299~300```301You: Generate TypeScript types from the Supabase database and save them to src/types/database.ts302```303~304```bash305npx supabase gen types typescript --project-id YOUR_PROJECT_ID > src/types/database.ts306```307~308### Bygg Användargränssnittet309~310Nu kommer den mest kraftfulla delen av vibecoding. Ge Claude Code instruktioner på hög nivå:311~312```313You: Create a dashboard page for the task management app with:314~3151. 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 Tailwind320~321Use data from Supabase with React Server Components where possible322and Client Components only where interactivity is needed.323```324~325Claude Code bygger hela gränssnittet, komponent för komponent.326~327### Lägg Till Autentisering328~329```330You: Add a complete authentication system with:331~3321. 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```338~339Claude Code konfigurerar Next.js middleware och auth-sidor: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. Avancerade Vibecoding-mönster387~388### Iterativ Prompting389~390Hemligheten bakom effektiv vibecoding är **iteration**. Försök inte beskriva allt i en enda prompt. Gå steg för steg:391~392```393Steg 1: "Create the base layout with header and sidebar"394Steg 2: "Add the project list in the sidebar with a button to create new ones"395Steg 3: "Create the Kanban view in the main area"396Steg 4: "Add drag & drop between columns"397Steg 5: "Implement the modal to create new tasks"398Steg 6: "Add toast notifications for user feedback"399```400~401> **Tips:** Ju mer specifik och kontextualiserad prompten är, desto bättre blir resultatet. Claude Code har tillgång till hela kodbasen, så det kan integrera nya funktioner koherent.402~403### Felhantering404~405När något inte fungerar (och det kommer att hända), kan du helt enkelt säga:406~407```408You: I'm getting this error in the console: "TypeError: Cannot read property409'map' of undefined" in the TaskList component. Fix it.410```411~412Claude Code analyserar koden, identifierar problemet och åtgärdar det.413~414### Refaktorering med AI415~416```417You: The Dashboard component has become too large. Split it into smaller,418reusable components while maintaining the same functionality.419```420~421### Testning422~423```424You: Add tests with Vitest for utility functions and Playwright tests for425the authentication and task creation flow.426```427~428## 6. Deploya till Vercel: Från Kod till Världen429~430### Steg 1: Pusha till GitHub431~432```433You: Create an appropriate .gitignore, commit everything, and push to a new434GitHub repository called "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### Steg 2: Anslut Vercel444~4451. Gå till [vercel.com](https://vercel.com) och klicka på "Add New Project."4462. Importera GitHub-repot du just skapade.4473. Lägg till miljövariabler:448 - `NEXT_PUBLIC_SUPABASE_URL`449 - `NEXT_PUBLIC_SUPABASE_ANON_KEY`4504. Klicka på "Deploy."451~452```mermaid453flowchart LR454 A[GitHub Push] --> B[Vercel Build]455 B --> C[Automatic Deploy]456 C --> D[Public URL]457 D --> E[Global CDN]458```459~460### Steg 3: Konfigurera en Egen Domän (Valfritt)461~462Vercel tillhandahåller en gratis URL som `my-demo-app.vercel.app`. För en egen domän:463~464```465You: Add the configuration for a custom domain in vercel.json466```467~468### Preview Deployments469~470Varje gång du öppnar en Pull Request på GitHub skapar Vercel automatiskt en **preview deployment** med en unik URL. Perfekt för att visa ändringar innan merge.471~472## 7. Optimeringar för Din Demo473~474### Prestanda475~476```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```483~484### Realtid med Supabase485~486En funktion som alltid imponerar i demos är **realtid**:487~488```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```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### Mörkt Läge544~545```546You: Add dark mode support with a toggle in the header.547Use Tailwind dark classes and save the preference in localStorage.548```549~550## 8. Bästa Praxis för Effektiv Vibecoding551~552### 1. Var Specifik i Dina Prompter553~554```555Nej: "Make a nice page"556Ja: "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```559~560### 2. Ge Kontext561~562```563Nej: "Add authentication"564Ja: "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```568~569### 3. Iterera i Små Steg570~571Försök inte bygga allt i en enda prompt. Gå stegvis:572~5731. Grundlayout5742. En funktion i taget5753. Styling och finish5764. Felhantering5775. Testning578~579### 4. Granska Den Genererade Koden580~581Vibecoding betyder inte att man inte läser koden. Granska alltid:582~583- **Säkerhet**: RLS-policyer, indatavalidering, datasanering.584- **Prestanda**: N+1-frågor, onödigt klientsidiga komponenter.585- **Bästa praxis**: projektstruktur, namnkonventioner.586~587### 5. Använd Git Strategiskt588~589```590You: Commit the changes with a descriptive message after each completed feature.591```592~593Detta låter dig återställa om något går fel.594~595## 9. Kostnader: Är Det Verkligen Helt Gratis?596~597Här är en kostnadsöversikt per tjänst:598~599| Tjänst | Gratis Plan | När Du Betalar |600|---------|-----------|-------------|601| **Claude Code** | Kräver en Anthropic-plan (från $20/månad) eller API-nyckel | Omedelbart, men värdet är enormt |602| **Supabase** | Generös gratisnivå (2 projekt, 500MB DB) | Utöver gratisgränserna |603| **Vercel** | Gratisnivå för personliga projekt | För team eller kommersiellt bruk |604| **GitHub** | Gratis för offentliga och privata repos | Enterprise-funktioner |605~606> **Notera:** Claude Code kräver en prenumeration eller API-kredit, men avkastningen i utvecklingshastighet är extraordinär. För en demo eller MVP ligger totalkostnaden runt $20.607~608### Gratis AI-alternativ609~610Om du vill hålla kostnaderna på absolut noll kan du använda:611~612- **Cursor** (gratisnivå med begränsningar).613- **GitHub Copilot** (gratis för studenter och öppen källkod).614- **Codeium/Windsurf** (generös gratisnivå).615~616## 10. Från Demo till Produkt: Nästa Steg617~618När din demo är live, här är hur du går vidare:619~620```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```630~6311. **Samla feedback**: dela demon med potentiella användare och samla åsikter.6322. **Iterera snabbt**: använd vibecoding för att implementera begärda ändringar.6333. **Övervaka mätvärden**: Vercel Analytics och Supabase Dashboard ger dig väsentlig data.6344. **Skala vid behov**: uppgradera till betalplaner först när du har validerat efterfrågan.635~636~637## Slutsats638~639Vibecoding med Claude Code, Supabase och Vercel representerar en kraftfull kombination för att bygga demos och MVP:er på rekordtid. Det som tidigare tog veckor av utveckling kan nu åstadkommas på bara några timmar, med en överraskande hög kvalitetsnivå.640~641Nyckeln är att närma sig vibecoding med rätt inställning: det handlar inte om att "inte kunna koda" utan om att **förstärka dina förmågor** med AI-verktyg. Ju mer du vet om de underliggande teknologierna (React, SQL, autentisering, deployment), desto effektivare blir du på att guida AI-agenten mot önskat resultat.642~643Framtiden för mjukvaruutveckling är här, och kostnaden för att komma igång har aldrig varit lägre. Skapa din demo, validera den med riktiga användare och bygg nästa fantastiska produkt.644~645> **Checklista för din första demo:**646>647> - [x] Claude Code installerat och konfigurerat648> - [x] Supabase-projekt skapat med databasschema649> - [x] Next.js-projekt initierat med shadcn/ui650> - [x] Autentisering konfigurerad651> - [x] Fullständig CRUD implementerad652> - [x] Modern och responsiv UI653> - [x] Deployad till Vercel654> - [x] Delbar URL redo för feedback655~
NORMAL · create-demo-claude-code-vibecoding.md [readonly]655 lines · :q to close