spinny:~/writing $ vim create-demo-claude-code-vibecoding.md
1~2**Vibecoding**, programcının doğal dil talimatları aracılığıyla bir AI ajanını yönlendirdiği ve yapay zekanın gerçek kodu yazmasına izin verdiği yeni bir yazılım geliştirme paradigmasıdır. Terim, Andrej Karpathy (OpenAI kurucu ortağı ve Tesla'nın eski AI Direktörü) tarafından Şubat 2025'teki ünlü bir tweette türetildi: _"Vibecoding dediğim yeni bir tür kodlama var, burada tamamen vibelara teslim oluyorsunuz, üstelleri kucaklıyorsunuz ve kodun var olduğunu bile unutuyorsunuz."_3~4Bu yazıda, **Claude Code**'u AI ajanı olarak, **Supabase**'i backend (veritabanı, kimlik doğrulama, API) olarak ve **Vercel**'i dağıtım için kullanarak nasıl eksiksiz, çalışan bir demo oluşturulacağını göreceğiz - tamamı bu hizmetlerin **ücretsiz katmanlarından** yararlanarak.5~6## 1. Vibecoding Nedir ve Neden Devrimsel7~8Vibecoding, yazılım geliştirmede temel bir paradigma değişimini temsil eder. Satır satır kod yazmak yerine geliştirici:9~101. Ne istediğini doğal dilde **tanımlar**.112. **AI ajanı** tam kodu üretir.123. **Geliştirici** inceler, test eder ve iterasyon yapar.13~14### Neden İşe Yarıyor15~16- **Hız**: günler sürecek bir proje saatler içinde oluşturulabilir.17- **Erişilebilirlik**: uzman olmayan geliştiriciler bile çalışan ürünler oluşturabilir.18- **Hızlı iterasyon**: fikirleri test edip çok daha hızlı pivot yapabilirsiniz.19- **Ürün odağı**: _nasıl_ yerine _ne_ üzerinde yoğunlaşırsınız.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### Vibecoding Ne Zaman Kullanılır32~33Vibecoding şunlar için mükemmeldir:34~35- **Demolar ve MVP'ler**: bir fikri doğrulamak için hızlıca prototip oluşturmak.36- **Hackathonlar**: sadece birkaç saat içinde çalışan bir ürün yaratmak.37- **Yan projeler**: haftalarca yatırım yapmadan yeni teknolojileri keşfetmek.38- **Kavram Kanıtı**: paydaşlara veya yatırımcılara teknik fizibiliteyi göstermek.39~40> **Uyarı:** Vibecoding demolar ve prototipler için mükemmeldir. Yüksek güvenlik ve ölçeklenebilirlik gereksinimleri olan üretim düzeyindeki uygulamalar için üretilen kodun kapsamlı incelenmesi hâlâ gereklidir.41~42## 2. Teknoloji Yığını: Claude Code + Supabase + Vercel43~44### Claude Code45~46Claude Code, Anthropic'in AI kodlama ajanıdır. Doğrudan terminalinizde çalışır ve şunları yapabilir:47~48- Tüm kod tabanını okuyup anlamak.49- Dosya oluşturmak, değiştirmek ve silmek.50- Terminal komutları çalıştırmak.51- API'ler ve harici hizmetlerle etkileşmek.52- Git ile versiyon yönetimi yapmak.53- Hata ve buglar üzerinde otonom olarak iterasyon yapmak.54~55```bash56# Install Claude Code57npm install -g @anthropic-ai/claude-code58~59# Start in a project directory60cd my-project61claude62```63~64### Supabase (Ücretsiz Katman)65~66Supabase, şunları sunan açık kaynaklı bir Firebase alternatifidir:67~68- **PostgreSQL Veritabanı**: eksiksiz bir ilişkisel veritabanı.69- **Kimlik Doğrulama**: e-posta, Google, GitHub vb. ile giriş.70- **REST ve Realtime API'ler**: şemanızdan otomatik oluşturulur.71- **Depolama**: dosyalar ve görseller için.72- **Edge Functions**: sunucusuz fonksiyonlar.73~74Ücretsiz katman şunları içerir:75~76| Kaynak | Ücretsiz Limit |77|----------|-----------|78| Veritabanı | 500 MB |79| Depolama | 1 GB |80| Bant genişliği | 5 GB |81| Edge Function çağrıları | 500K/ay |82| Kimliği doğrulanmış kullanıcılar | Sınırsız |83| Projeler | 2 aktif proje |84~85### Vercel (Ücretsiz Katman)86~87Vercel, Next.js uygulamaları için mükemmel dağıtım platformudur:88~89- GitHub'dan **otomatik dağıtım**.90- Her dal ve PR için **önizleme dağıtımları**.91- Optimum performans için **küresel CDN**.92- **Serverless Functions** dahil.93- Ücretsiz **temel analitik**.94~95Ücretsiz katman şunları içerir:96~97| Kaynak | Ücretsiz Limit |98|----------|-----------|99| Bant genişliği | 100 GB/ay |100| Serverless Function çalıştırma | 100 GB-saat/ay |101| Derlemeler | 6.000 dakika/ay |102| Projeler | Sınırsız |103| Dağıtımlar | Sınırsız |104~105## 3. İlk Kurulum: Ortamı Hazırlamak106~107### Ön Koşullar108~109Başlamadan önce şunlara sahip olduğunuzdan emin olun:110~111- **Node.js 18+** kurulu.112- **Git** yapılandırılmış.113- Bir **GitHub** hesabı.114- Bir **Supabase** hesabı ([supabase.com](https://supabase.com)'da ücretsiz).115- Bir **Vercel** hesabı ([vercel.com](https://vercel.com)'da ücretsiz).116- **Claude Code** kurulu (`npm install -g @anthropic-ai/claude-code`).117~118### Adım 1: Projeyi Oluşturun119~120Terminali açın ve Claude Code'u başlatın:121~122```bash123mkdir my-demo-app && cd my-demo-app124claude125```126~127Artık Claude Code'a doğal dilde talimatlar vermeye başlayabilirsiniz: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 otomatik olarak şunları çalıştıracaktır: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### Adım 2: Supabase'i Yapılandırın143~1441. [supabase.com](https://supabase.com)'a gidin ve yeni bir proje oluşturun.1452. Settings > API'den **Project URL** ve **anon key**'i not edin.1463. Claude Code'un olduğu terminale dönün: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 tam yapılandırmayı oluşturacaktır: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. Demoyu Oluşturmak: Görev Yönetimi Uygulaması196~197Somut bir demo oluşturalım: kimlik doğrulama, tam CRUD ve modern arayüze sahip bir **görev yönetimi uygulaması**.198~199### Veritabanı Şemasını Tanımlamak200~201Şemayı oluşturmak için Claude Code'a talimatlar verin: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 eksiksiz bir migrasyon oluşturacaktır: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~296Bu migrasyonu doğrudan Supabase panelinden (SQL Editor) veya CLI üzerinden çalıştırabilirsiniz.297~298### TypeScript Tipleri Oluşturma299~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### Kullanıcı Arayüzünü Oluşturmak309~310Şimdi vibecoding'in en güçlü kısmı gelir. Claude Code'a üst düzey talimatlar verin: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 tüm arayüzü bileşen bileşen oluşturacaktır.326~327### Kimlik Doğrulama Ekleme328~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, Next.js middleware ve auth sayfalarını yapılandıracaktır: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. İleri Düzey Vibecoding Kalıpları387~388### İteratif Prompting389~390Etkili vibecoding'in sırrı **iterasyondur**. Tek bir promptta her şeyi tanımlamaya çalışmayın. Adım adım ilerleyin: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> **İpucu:** Prompt ne kadar spesifik ve bağlamsallaştırılmışsa, sonuç o kadar iyi olur. Claude Code tüm kod tabanına erişim sağlar, böylece yeni özellikleri tutarlı bir şekilde entegre edebilir.402~403### Hata İşleme404~405Bir şey çalışmadığında (ve çalışmayacaktır), basitçe şöyle diyebilirsiniz: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 kodu analiz edecek, sorunu belirleyecek ve düzeltecektir.413~414### AI ile Yeniden Yapılandırma415~416```417You: The Dashboard component has become too large. Split it into smaller,418reusable components while maintaining the same functionality.419```420~421### Test422~423```424You: Add tests with Vitest for utility functions and Playwright tests for425the authentication and task creation flow.426```427~428## 6. Vercel'e Dağıtım: Koddan Dünyaya429~430### Adım 1: GitHub'a Push431~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### Adım 2: Vercel'i Bağlayın444~4451. [vercel.com](https://vercel.com)'a gidin ve "Add New Project"a tıklayın.4462. Az önce oluşturduğunuz GitHub deposunu içe aktarın.4473. Ortam değişkenlerini ekleyin:448 - `NEXT_PUBLIC_SUPABASE_URL`449 - `NEXT_PUBLIC_SUPABASE_ANON_KEY`4504. "Deploy"a tıklayın.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### Adım 3: Özel Alan Adı Yapılandırın (İsteğe Bağlı)461~462Vercel `my-demo-app.vercel.app` gibi ücretsiz bir URL sağlar. Özel alan adı için:463~464```465You: Add the configuration for a custom domain in vercel.json466```467~468### Önizleme Dağıtımları469~470GitHub'da her Pull Request açtığınızda, Vercel benzersiz bir URL ile otomatik olarak bir **önizleme dağıtımı** oluşturacaktır. Birleştirmeden önce değişiklikleri göstermek için mükemmel.471~472## 7. Demonuz İçin Optimizasyonlar473~474### Performans475~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### Supabase ile Gerçek Zamanlı485~486Demolarda her zaman etkileyen bir özellik **gerçek zamanlıdır**: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### Karanlık Mod544~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. Etkili Vibecoding İçin En İyi Uygulamalar551~552### 1. Promptlarınızda Spesifik Olun553~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. Bağlam Sağlayın561~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. Küçük Adımlarla İterasyon Yapın570~571Tek bir promptta her şeyi oluşturmaya çalışmayın. Kademeli olarak ilerleyin:572~5731. Temel düzen5742. Bir seferde bir özellik5753. Stil ve cilalama5764. Hata işleme5775. Test578~579### 4. Üretilen Kodu İnceleyin580~581Vibecoding, kodu okumamak anlamına gelmez. Her zaman inceleyin:582~583- **Güvenlik**: RLS politikaları, girdi doğrulama, veri temizleme.584- **Performans**: N+1 sorgular, gereksiz istemci tarafı bileşenler.585- **En iyi uygulamalar**: proje yapısı, isimlendirme kuralları.586~587### 5. Git'i Stratejik Kullanın588~589```590You: Commit the changes with a descriptive message after each completed feature.591```592~593Bu, bir şeyler ters gittiğinde geri almanıza olanak tanır.594~595## 9. Maliyetler: Gerçekten Hepsi Ücretsiz mi?596~597Her hizmet için maliyet analizi:598~599| Hizmet | Ücretsiz Plan | Ne Zaman Ödeme Yaparsınız |600|---------|-----------|-------------|601| **Claude Code** | Anthropic planı (aylık $20'dan başlayan) veya API anahtarı gerektirir | Hemen, ama değeri muazzam |602| **Supabase** | Cömert ücretsiz katman (2 proje, 500MB DB) | Ücretsiz katman limitlerini aşınca |603| **Vercel** | Kişisel projeler için ücretsiz katman | Takımlar veya ticari kullanım için |604| **GitHub** | Genel ve özel depolar için ücretsiz | Kurumsal özellikler |605~606> **Not:** Claude Code bir abonelik veya API kredisi gerektirir, ancak geliştirme hızı açısından yatırım getirisi olağanüstüdür. Bir demo veya MVP için toplam maliyet $20 civarındadır.607~608### Ücretsiz AI Alternatifleri609~610Maliyetleri mutlak sıfırda tutmak istiyorsanız:611~612- **Cursor** (sınırlamalı ücretsiz katman).613- **GitHub Copilot** (öğrenciler ve açık kaynak için ücretsiz).614- **Codeium/Windsurf** (cömert ücretsiz katman).615~616## 10. Demodan Ürüne: Sonraki Adımlar617~618Demonuz canlı olduktan sonra nasıl ilerleyeceğiniz: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. **Geri bildirim toplayın**: demoyu potansiyel kullanıcılarla paylaşın ve görüşleri toplayın.6322. **Hızlı iterasyon yapın**: talep edilen değişiklikleri uygulamak için vibecoding kullanın.6333. **Metrikleri izleyin**: Vercel Analytics ve Supabase Dashboard size gerekli verileri sağlar.6344. **Gerektiğinde ölçeklendirin**: talebi doğruladıktan sonra ücretli planlara geçin.635~636~637## Sonuç638~639Claude Code, Supabase ve Vercel ile vibecoding, rekor sürede demo ve MVP oluşturmak için güçlü bir kombinasyonu temsil eder. Eskiden haftalarca geliştirme gerektiren şeyler artık şaşırtıcı derecede yüksek kalitede sadece birkaç saatte başarılabilir.640~641Anahtar, vibecoding'e doğru zihniyetle yaklaşmaktır: bu "kod yazmayı bilmemek" değil, AI araçlarıyla **yeteneklerinizi güçlendirmektir**. Temel teknolojiler (React, SQL, kimlik doğrulama, dağıtım) hakkında ne kadar çok bilirseniz, AI ajanını istenen sonuca yönlendirmede o kadar etkili olursunuz.642~643Yazılım geliştirmenin geleceği burada ve başlama maliyeti hiç bu kadar düşük olmamıştı. Demonuzu oluşturun, gerçek kullanıcılarla doğrulayın ve bir sonraki büyük ürünü inşa edin.644~645> **İlk demonuz için kontrol listesi:**646>647> - [x] Claude Code kuruldu ve yapılandırıldı648> - [x] Veritabanı şemasıyla Supabase projesi oluşturuldu649> - [x] shadcn/ui ile Next.js projesi başlatıldı650> - [x] Kimlik doğrulama yapılandırıldı651> - [x] Tam CRUD uygulandı652> - [x] Modern ve duyarlı UI653> - [x] Vercel'e dağıtıldı654> - [x] Geri bildirim için paylaşılabilir URL hazır655~
NORMAL · create-demo-claude-code-vibecoding.md [readonly]655 lines · :q to close