spinny:~/writing $ vim create-demo-claude-code-vibecoding.md
1~2**Vibecoding** adalah paradigma pengembangan perangkat lunak baru di mana programmer memandu agen AI melalui instruksi bahasa alami, membiarkan kecerdasan buatan menulis kode sebenarnya. Istilah ini diciptakan oleh Andrej Karpathy (salah satu pendiri OpenAI dan mantan Direktur AI di Tesla) dalam sebuah tweet terkenal pada Februari 2025: _"Ada jenis coding baru yang saya sebut vibecoding, di mana Anda sepenuhnya menyerah pada vibes, merangkul eksponensial, dan melupakan bahwa kode itu bahkan ada."_3~4Dalam artikel ini, kita akan melihat cara membuat demo lengkap dan berfungsi menggunakan **Claude Code** sebagai agen AI, **Supabase** sebagai backend (database, autentikasi, API), dan **Vercel** untuk deployment - semuanya memanfaatkan secara eksklusif **tier gratis** dari layanan-layanan ini.5~6## 1. Apa Itu Vibecoding dan Mengapa Revolusioner7~8Vibecoding merepresentasikan pergeseran paradigma fundamental dalam pengembangan perangkat lunak. Alih-alih menulis kode baris per baris, pengembang:9~101. **Mendeskripsikan** apa yang mereka inginkan dalam bahasa alami.112. **Agen AI** menghasilkan kode lengkap.123. **Pengembang** meninjau, menguji, dan mengiterasi.13~14### Mengapa Ini Berhasil15~16- **Kecepatan**: proyek yang membutuhkan berhari-hari bisa dibangun dalam hitungan jam.17- **Aksesibilitas**: bahkan pengembang non-ahli bisa membangun produk yang berfungsi.18- **Iterasi cepat**: Anda bisa menguji ide dan pivot jauh lebih cepat.19- **Fokus produk**: Anda berkonsentrasi pada _apa_ bukan _bagaimana_.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### Kapan Menggunakan Vibecoding32~33Vibecoding sempurna untuk:34~35- **Demo dan MVP**: membangun prototipe dengan cepat untuk memvalidasi ide.36- **Hackathon**: membuat produk yang berfungsi hanya dalam beberapa jam.37- **Proyek sampingan**: mengeksplorasi teknologi baru tanpa investasi berminggu-minggu.38- **Proof of Concept**: mendemonstrasikan kelayakan teknis kepada pemangku kepentingan atau investor.39~40> **Peringatan:** Vibecoding sangat bagus untuk demo dan prototipe. Untuk aplikasi tingkat produksi dengan persyaratan keamanan dan skalabilitas tinggi, tinjauan menyeluruh terhadap kode yang dihasilkan tetap penting.41~42## 2. Tech Stack: Claude Code + Supabase + Vercel43~44### Claude Code45~46Claude Code adalah agen coding AI dari Anthropic. Ia bekerja langsung di terminal Anda dan dapat:47~48- Membaca dan memahami seluruh codebase.49- Membuat, memodifikasi, dan menghapus file.50- Menjalankan perintah terminal.51- Berinteraksi dengan API dan layanan eksternal.52- Mengelola versioning dengan Git.53- Mengiterasi secara otonom pada error dan bug.54~55```bash56# Install Claude Code57npm install -g @anthropic-ai/claude-code58~59# Start in a project directory60cd my-project61claude62```63~64### Supabase (Tier Gratis)65~66Supabase adalah alternatif open-source untuk Firebase yang menawarkan:67~68- **Database PostgreSQL**: database relasional lengkap.69- **Autentikasi**: login dengan email, Google, GitHub, dll.70- **API REST dan Realtime**: dihasilkan secara otomatis dari schema Anda.71- **Storage**: untuk file dan gambar.72- **Edge Functions**: fungsi serverless.73~74Tier gratis mencakup:75~76| Sumber Daya | Batas Gratis |77|----------|-----------|78| Database | 500 MB |79| Storage | 1 GB |80| Bandwidth | 5 GB |81| Pemanggilan Edge Function | 500K/bulan |82| Pengguna terautentikasi | Tak terbatas |83| Proyek | 2 proyek aktif |84~85### Vercel (Tier Gratis)86~87Vercel adalah platform deployment sempurna untuk aplikasi Next.js:88~89- **Deployment otomatis** dari GitHub.90- **Preview deployment** untuk setiap branch dan PR.91- **CDN global** untuk performa optimal.92- **Serverless Functions** termasuk.93- **Analitik dasar** gratis.94~95Tier gratis mencakup:96~97| Sumber Daya | Batas Gratis |98|----------|-----------|99| Bandwidth | 100 GB/bulan |100| Eksekusi Serverless Function | 100 GB-jam/bulan |101| Build | 6.000 menit/bulan |102| Proyek | Tak terbatas |103| Deployment | Tak terbatas |104~105## 3. Setup Awal: Mempersiapkan Lingkungan106~107### Prasyarat108~109Sebelum memulai, pastikan Anda memiliki:110~111- **Node.js 18+** terinstal.112- **Git** terkonfigurasi.113- Akun **GitHub**.114- Akun **Supabase** (gratis di [supabase.com](https://supabase.com)).115- Akun **Vercel** (gratis di [vercel.com](https://vercel.com)).116- **Claude Code** terinstal (`npm install -g @anthropic-ai/claude-code`).117~118### Langkah 1: Buat Proyek119~120Buka terminal dan mulai Claude Code:121~122```bash123mkdir my-demo-app && cd my-demo-app124claude125```126~127Sekarang Anda bisa mulai memberikan instruksi bahasa alami kepada Claude Code: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 akan secara otomatis menjalankan: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### Langkah 2: Konfigurasi Supabase143~1441. Kunjungi [supabase.com](https://supabase.com) dan buat proyek baru.1452. Catat **Project URL** dan **anon key** dari Settings > API.1463. Kembali ke terminal dengan 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 akan membuat konfigurasi lengkap: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. Membangun Demo: Aplikasi Manajemen Tugas196~197Mari kita bangun demo konkret: sebuah **aplikasi manajemen tugas** dengan autentikasi, CRUD lengkap, dan antarmuka modern.198~199### Mendefinisikan Schema Database200~201Berikan instruksi kepada Claude Code untuk membuat schema: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 akan menghasilkan migrasi lengkap: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~296Anda bisa menjalankan migrasi ini langsung dari dashboard Supabase (SQL Editor) atau melalui CLI.297~298### Generate Tipe TypeScript299~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### Membangun Antarmuka Pengguna309~310Sekarang datang bagian paling powerful dari vibecoding. Berikan Claude Code instruksi tingkat tinggi: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 akan membangun seluruh antarmuka, komponen demi komponen.326~327### Menambahkan Autentikasi328~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 akan mengkonfigurasi middleware Next.js dan halaman autentikasi: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. Pola Vibecoding Tingkat Lanjut387~388### Prompting Iteratif389~390Rahasia vibecoding yang efektif adalah **iterasi**. Jangan mencoba mendeskripsikan semuanya dalam satu prompt. Lanjutkan bertahap:391~392```393Step 1: "Create the base layout with header and sidebar"394Step 2: "Add the project list in the sidebar with a button to create new ones"395Step 3: "Create the Kanban view in the main area"396Step 4: "Add drag & drop between columns"397Step 5: "Implement the modal to create new tasks"398Step 6: "Add toast notifications for user feedback"399```400~401> **Tip:** Semakin spesifik dan kontekstual prompt, semakin baik hasilnya. Claude Code memiliki akses ke seluruh codebase, jadi bisa mengintegrasikan fitur baru secara koheren.402~403### Penanganan Error404~405Ketika sesuatu tidak berfungsi (dan pasti akan terjadi), Anda bisa langsung bilang: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 akan menganalisis kode, mengidentifikasi masalah, dan memperbaikinya.413~414### Refactoring dengan AI415~416```417You: The Dashboard component has become too large. Split it into smaller,418reusable components while maintaining the same functionality.419```420~421### Pengujian422~423```424You: Add tests with Vitest for utility functions and Playwright tests for425the authentication and task creation flow.426```427~428## 6. Deploy ke Vercel: Dari Kode ke Dunia429~430### Langkah 1: Push ke 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### Langkah 2: Hubungkan Vercel444~4451. Kunjungi [vercel.com](https://vercel.com) dan klik "Add New Project."4462. Impor repository GitHub yang baru saja Anda buat.4473. Tambahkan variabel environment:448 - `NEXT_PUBLIC_SUPABASE_URL`449 - `NEXT_PUBLIC_SUPABASE_ANON_KEY`4504. Klik "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### Langkah 3: Konfigurasi Domain Kustom (Opsional)461~462Vercel menyediakan URL gratis seperti `my-demo-app.vercel.app`. Untuk domain kustom:463~464```465You: Add the configuration for a custom domain in vercel.json466```467~468### Preview Deployment469~470Setiap kali Anda membuka Pull Request di GitHub, Vercel akan secara otomatis membuat **preview deployment** dengan URL unik. Sempurna untuk menunjukkan perubahan sebelum merge.471~472## 7. Optimasi untuk Demo Anda473~474### Performa475~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### Realtime dengan Supabase485~486Fitur yang selalu mengesankan di demo adalah **realtime**: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### Mode Gelap544~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. Praktik Terbaik untuk Vibecoding yang Efektif551~552### 1. Spesifik dalam Prompt Anda553~554```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```559~560### 2. Berikan Konteks561~562```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```568~569### 3. Iterasi dalam Langkah Kecil570~571Jangan mencoba membangun semuanya dalam satu prompt. Lanjutkan secara bertahap:572~5731. Layout dasar5742. Satu fitur dalam satu waktu5753. Styling dan polesan5764. Penanganan error5775. Pengujian578~579### 4. Tinjau Kode yang Dihasilkan580~581Vibecoding bukan berarti tidak membaca kode. Selalu tinjau:582~583- **Keamanan**: kebijakan RLS, validasi input, sanitasi data.584- **Performa**: query N+1, komponen client-side yang tidak perlu.585- **Praktik terbaik**: struktur proyek, konvensi penamaan.586~587### 5. Gunakan Git Secara Strategis588~589```590You: Commit the changes with a descriptive message after each completed feature.591```592~593Ini memungkinkan Anda untuk revert jika terjadi kesalahan.594~595## 9. Biaya: Apakah Benar-Benar Semuanya Gratis?596~597Berikut rincian biaya untuk setiap layanan:598~599| Layanan | Paket Gratis | Kapan Anda Membayar |600|---------|-----------|-------------|601| **Claude Code** | Memerlukan paket Anthropic (mulai $20/bulan) atau kunci API | Segera, tapi nilainya luar biasa |602| **Supabase** | Tier gratis yang murah hati (2 proyek, 500MB DB) | Melebihi batas tier gratis |603| **Vercel** | Tier gratis untuk proyek pribadi | Untuk tim atau penggunaan komersial |604| **GitHub** | Gratis untuk repo publik dan privat | Fitur enterprise |605~606> **Catatan:** Claude Code memerlukan langganan atau kredit API, tetapi pengembalian investasi dalam hal kecepatan pengembangan luar biasa. Untuk demo atau MVP, total biaya berkisar $20.607~608### Alternatif AI Gratis609~610Jika Anda ingin biaya benar-benar nol, Anda bisa menggunakan:611~612- **Cursor** (tier gratis dengan batasan).613- **GitHub Copilot** (gratis untuk pelajar dan open source).614- **Codeium/Windsurf** (tier gratis yang murah hati).615~616## 10. Dari Demo ke Produk: Langkah Selanjutnya617~618Setelah demo Anda live, berikut cara melanjutkan: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. **Kumpulkan feedback**: bagikan demo dengan pengguna potensial dan kumpulkan pendapat.6322. **Iterasi cepat**: gunakan vibecoding untuk mengimplementasikan perubahan yang diminta.6333. **Pantau metrik**: Vercel Analytics dan Supabase Dashboard memberikan data penting.6344. **Skalakan saat diperlukan**: upgrade ke paket berbayar hanya setelah permintaan tervalidasi.635~636~637## Kesimpulan638~639Vibecoding dengan Claude Code, Supabase, dan Vercel merepresentasikan kombinasi yang powerful untuk membangun demo dan MVP dalam waktu rekor. Apa yang dulu membutuhkan berminggu-minggu pengembangan sekarang bisa diselesaikan hanya dalam beberapa jam, dengan tingkat kualitas yang mengejutkan.640~641Kuncinya adalah mendekati vibecoding dengan mindset yang tepat: ini bukan tentang "tidak bisa coding" tetapi tentang **memperkuat kemampuan Anda** dengan alat AI. Semakin banyak yang Anda ketahui tentang teknologi yang mendasari (React, SQL, autentikasi, deployment), semakin efektif Anda dalam memandu agen AI menuju hasil yang diinginkan.642~643Masa depan pengembangan perangkat lunak ada di sini, dan biaya untuk memulai tidak pernah serendah ini. Buat demo Anda, validasi dengan pengguna nyata, dan bangun produk besar berikutnya.644~645> **Checklist untuk demo pertama Anda:**646>647> - [x] Claude Code terinstal dan terkonfigurasi648> - [x] Proyek Supabase dibuat dengan schema database649> - [x] Proyek Next.js diinisialisasi dengan shadcn/ui650> - [x] Autentikasi terkonfigurasi651> - [x] CRUD lengkap diimplementasikan652> - [x] UI modern dan responsif653> - [x] Di-deploy ke Vercel654> - [x] URL yang bisa dibagikan siap untuk feedback655~
NORMAL · create-demo-claude-code-vibecoding.md [readonly]655 lines · :q to close