Sekarang kita CODING! Part 3 mengajarkan cara mengeksekusi design menjadi working code dengan AI assistant: prompt patterns yang menghasilkan kode production-quality, workflow feature-by-feature, live coding dari Prisma schema ke working kanban board, code review dengan AI, Git workflow, dan error handling patterns. Ini adalah jantung dari Vibe Coding — dimana AI berubah dari advisor menjadi pair programmer.
Vibe Coding Workflow — Feature-by-feature, bukan file-by-file
Prompt Patterns — 7 pola prompt yang menghasilkan kode terbaik
Live Coding: Task API — Dari schema ke working endpoint
Live Coding: Kanban Board UI — React component + drag-drop
Live Coding: Time Tracker — Real-time timer + database
Code Review dengan AI — Security, performance, best practices
Git Workflow — Branching, commits, PRs
Error Handling Patterns — Graceful failures di setiap layer
Common Pitfalls — Kesalahan saat coding dengan AI
Checklist & Ringkasan
🔄
1. Vibe Coding Workflow — Feature-by-Feature
Jangan coding file-by-file. Coding FEATURE-by-feature: schema + API + UI + test per fitur.
Kesalahan umum: menulis semua API routes dulu, lalu semua components, lalu menghubungkan. Ini menghasilkan kode yang sulit di-test dan banyak bugs saat integrasi. Vibe Coding workflow: kerjakan satu fitur end-to-end (database + API + UI + test), pastikan working, lalu pindah ke fitur berikutnya. Ini disebut vertical slicing — setiap "slice" adalah fitur yang bisa di-demo.
Vibe Coding Workflow — Vertical Slice per Feature
🎯
2. Prompt Patterns — 7 Pola yang Menghasilkan Kode Terbaik
Bukan asal prompt — ini pola yang terbukti menghasilkan kode production-quality
#
Pattern
Kapan Pakai
Contoh Prompt
1
Context-First
Setiap kali mulai task baru
"Given CLAUDE.md context, implement the Task creation API..."
2
Spec-Driven
API endpoints, DB schemas
"Implement this endpoint exactly per the API design doc: POST /api/tasks..."
3
Test-First (TDD)
Critical business logic
"Write tests first for task status transitions, then implement to make tests pass"
4
Refactor
Improve existing code
"Refactor this component to extract reusable hooks. Keep same behavior."
5
Fix-and-Explain
Debugging
"This error occurs on line 42. Fix it and explain why it happened."
6
Complete-the-Pattern
Repetitive work
"Here's the Task API. Now create the Board API following the same pattern."
7
Review-and-Improve
Code review
"Review this code for security vulnerabilities, performance issues, and best practices."
💻
3. Live Coding: Task CRUD API
Dari Prisma schema ke working API endpoint — step by step
src/server/tasks.ts — Task Server Actions
"use server";
import { prisma } from"@/lib/db";
import { z } from"zod";
import { getServerSession } from"next-auth";
import { revalidatePath } from"next/cache";
// Zod schema: input validation (WAJIB!)const CreateTaskSchema = z.object({
title: z.string().min(3).max(100),
description: z.string().max(2000).optional(),
boardId: z.string().uuid(),
assigneeId: z.string().uuid().optional(),
dueDate: z.string().datetime().optional(),
});
/**
* Create a new task on a board.
* Validates input, checks auth, creates in DB, revalidates cache.
*/export async functioncreateTask(formData: FormData) {
// 1. Auth checkconst session = awaitgetServerSession();
if (!session?.user) {
return { error: "Unauthorized" };
}
// 2. Input validationconst raw = Object.fromEntries(formData);
const parsed = CreateTaskSchema.safeParse(raw);
if (!parsed.success) {
return { error: parsed.error.flatten() };
}
// 3. Authorization: user must be in the board's teamconst board = await prisma.board.findUnique({
where: { id: parsed.data.boardId },
include: { team: { include: { members: true } } },
});
if (!board?.team.members.some(m => m.email === session.user.email)) {
return { error: "Not a member of this team" };
}
// 4. Create tasktry {
const task = await prisma.task.create({
data: {
title: parsed.data.title,
description: parsed.data.description,
boardId: parsed.data.boardId,
assigneeId: parsed.data.assigneeId,
dueDate: parsed.data.dueDate ? new Date(parsed.data.dueDate) : null,
},
});
// 5. Revalidate board page cacherevalidatePath(`/boards/${parsed.data.boardId}`);
return { data: task };
} catch (err) {
console.error("Failed to create task:", err);
return { error: "Failed to create task. Please try again." };
}
}
Perhatikan Pattern di Kode di Atas
Setiap server action mengikuti 5 langkah standar: (1) Auth check, (2) Input validation (Zod), (3) Authorization check, (4) Database operation (try/catch), (5) Cache revalidation. Pattern ini WAJIB konsisten di semua endpoints — dan CLAUDE.md memastikan AI mengikutinya.
🎨
4. Live Coding: Kanban Board UI
React component dengan drag-drop menggunakan @dnd-kit
Automated testing: unit tests (Vitest), integration tests, E2E (Playwright), security scanning, dan AI-generated test suites. Pastikan kode tidak hanya "works" tapi "works correctly".