Vibe Coding
The art of AI-first software development. Build faster, ship more, iterate relentlessly.
What is Vibe Coding?
Vibe coding is a development methodology where you describe what you want in natural language and let AI write the code. Rather than writing detailed specifications, you have a conversation. Rather than debugging line by line, you explain the problem and let the AI fix it.
The term was coined by Andrej Karpathy, but the practice has exploded since tools like Claude Code made it practical for real-world development. I've built over 100 projects this way, from VST plugins to healthcare software to Roblox games.
The Core Principle:
Don't fight the AI. Give it context, let it plan, verify it worked, iterate. Working code is the specification.
The Origin: Andrej Karpathy
Andrej Karpathy coined the term "vibe coding" in February 2025. This isn't some random influencer - Karpathy is a legendary AI researcher: former Director of AI at Tesla, founding member of OpenAI, Stanford PhD. When he names something, the industry listens.
Karpathy's definition:
"There's a new kind of coding I call 'vibe coding', where you fully give in to the vibes, embrace exponentials, and forget that the code even exists... I just see stuff, say stuff, run stuff, and copy paste stuff, and it mostly works."
Karpathy described what many of us were already doing - letting AI handle the implementation while we focus on direction and verification. He legitimized a methodology that felt almost too easy to be real engineering.
From Theory to Production:
Brian Edwards has taken Karpathy's concept and pushed it to the extreme - building 100+ production projects with vibe coding. From VST audio plugins to healthcare platforms, from Roblox games to this very website. Not toy demos. Real software, shipping to real users.
The methodology works. The results speak for themselves. And now you can learn it too.
Claude Code CLI Tips
$ /init
Scans your codebase and generates a CLAUDE.md file with project context. Always start here.
$ /clear
Clear context between tasks. Prevents token waste and confusion. Use frequently.
$ Press # to add instructions
Add context that persists across the session. Great for project-specific rules.
$ Ctrl+B
Background an agent or shell command. Continue working while it runs.
Pro Tip:
Keep CLAUDE.md under 150 instructions. Too much context wastes tokens and confuses the model. Be concise.
The RALPH Pattern
RALPH (named after Ralph Wiggum) is a pattern for autonomous development loops. You define a task with clear completion criteria, and Claude iterates until done.
/ralph-loop "Build a REST API for todos.
Requirements: CRUD operations, input validation, tests.
Output <promise>COMPLETE</promise> when done."
--completion-promise "COMPLETE"
--max-iterations 50
The model keeps iterating until it outputs the completion promise or hits max iterations. Great for well-defined tasks with automatic verification (like "all tests pass").
Warning:
RALPH can get expensive. Set max-iterations as a safety net. $50-100+ is possible for large codebases with many iterations.
Git Worktrees for Parallel Development
Multiple Claude sessions conflict when sharing one git checkout. Git worktrees let you check out multiple branches simultaneously in separate directories.
# Create worktree for a feature
git worktree add ../feature-auth feature-auth
cd ../feature-auth
claude # Start isolated session
Each worktree has its own working directory but shares the same .git database. Perfect for running multiple Claude agents on different features simultaneously.
Effective Prompts
Real prompts I've used that produced great results:
"Create interactive web site hosted on cloudflare pages, with cloudflare workers ai integration. [Detailed requirements follow...]"
This prompt built this entire portfolio site.
"Git submodule all repos since September 2025. Calculate file counts and sizes. Rank by total file size."
Organized 100+ repos automatically.
"Ask me many multiple choice questions to help you understand my taste and help you proceed."
Claude's AskUserQuestion tool handles preferences gathering.
"Create HUMAN-*.md files in root for what you need from me. Report and STOP!"
Structured handoff points for human input.
Prompts That Ship
Real prompts from real sessions. These aren't theoretical - each one shipped working code.
Building This Site
$ claude
> Create interactive web site hosted on cloudflare pages,
with cloudflare workers ai integration.
[Detailed requirements follow...]
Organizing 100+ Repos
$ claude
> Git submodule all repos since September 2025.
Calculate file counts and sizes.
Rank by total file size.
Preference Discovery
$ claude
> Ask me many multiple choice questions to help you
understand my taste and help you proceed.
Structured Handoffs
$ claude
> Create HUMAN-*.md files in root for what you need from me.
Report and STOP!
RALPH Autonomous Loop
$ /ralph-loop "Build a REST API for todos.
Requirements: CRUD operations, input validation, tests.
Output <promise>COMPLETE</promise> when done."
--completion-promise "COMPLETE"
--max-iterations 50
The Pattern:
Be specific about outcomes. Let Claude handle implementation. Verify it worked. Iterate. These prompts work because they describe what success looks like, not how to get there.
Code Showcase
See vibe coding in action. These examples show the prompt, the generated code, and the output. Click the copy button to grab any code snippet.
Example 1: React Hook from Natural Language
# User prompt to Claude Code:
Create a React hook that fetches data with loading and error states.
Should support cancellation and automatic retry on failure.
TypeScript, clean code, no external dependencies. import { useState, useEffect, useCallback } from 'react';
interface UseFetchResult<T> {
data: T | null;
loading: boolean;
error: Error | null;
refetch: () => void;
}
export function useFetch<T>(
url: string,
options?: RequestInit,
retries = 3
): UseFetchResult<T> {
const [data, setData] = useState<T | null>(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState<Error | null>(null);
const fetchData = useCallback(async (
controller: AbortController,
attempt = 0
) => {
try {
const response = await fetch(url, {
...options,
signal: controller.signal,
});
if (!response.ok) throw new Error(response.statusText);
const json = await response.json();
setData(json);
setError(null);
} catch (err) {
if (err instanceof Error && err.name !== 'AbortError') {
if (attempt < retries) {
await new Promise(r => setTimeout(r, 1000 * attempt));
return fetchData(controller, attempt + 1);
}
setError(err);
}
} finally {
setLoading(false);
}
}, [url, options, retries]);
// Auto-fetch on mount with cleanup
useEffect(() => {
const controller = new AbortController();
fetchData(controller);
return () => controller.abort();
}, [fetchData]);
return { data, loading, error, refetch: () => fetchData(new AbortController()) };
} Example 2: Shell Script Automation
# User prompt to Claude Code:
Write a bash script to back up all postgres databases,
compress them, upload to S3, and clean up files older than 7 days.
Include error handling and logging. #!/bin/bash
set -euo pipefail
# Configuration
BACKUP_DIR="/var/backups/postgres"
S3_BUCKET="s3://my-backups/postgres"
RETENTION_DAYS=7
LOG_FILE="/var/log/pg-backup.log"
DATE=$(date +%Y-%m-%d_%H%M%S)
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"; }
log "Starting PostgreSQL backup..."
mkdir -p "$BACKUP_DIR"
# Backup all databases
for db in $(psql -U postgres -t -c "SELECT datname FROM pg_database;"); do
FILENAME="${db}_${DATE}.sql.gz"
log "Backing up database: $db"
if pg_dump -U postgres "$db" | gzip > "$BACKUP_DIR/$FILENAME"; then
log "Successfully backed up $db"
# Upload to S3
if aws s3 cp "$BACKUP_DIR/$FILENAME" "$S3_BUCKET/$FILENAME"; then
log "Uploaded $FILENAME to S3"
else
log "ERROR: Failed to upload to S3"
exit 1
fi
else
log "ERROR: Failed to backup $db"
exit 1
fi
done
# Clean up old backups
log "Cleaning up backups older than $RETENTION_DAYS days..."
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +"$RETENTION_DAYS" -delete
log "Backup complete!" Example 3: Cloudflare Worker API
# User prompt to Claude Code:
Create a Cloudflare Worker endpoint for user registration.
Validate email and password, hash the password, store in D1.
Return proper error responses. TypeScript. interface Env {
DB: D1Database;
}
interface RegisterBody {
email: string;
password: string;
}
const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
async function hashPassword(password: string): Promise<string> {
const encoder = new TextEncoder();
const data = encoder.encode(password);
const hash = await crypto.subtle.digest('SHA-256', data);
return Array.from(new Uint8Array(hash))
.map(b => b.toString(16).padStart(2, '0'))
.join('');
}
function jsonResponse(data: object, status = 200): Response {
return new Response(JSON.stringify(data), {
status,
headers: { 'Content-Type': 'application/json' },
});
}
export default {
async fetch(request: Request, env: Env): Promise<Response> {
if (request.method !== 'POST') {
return jsonResponse({ error: 'Method not allowed' }, 405);
}
let body: RegisterBody;
try {
body = await request.json();
} catch {
return jsonResponse({ error: 'Invalid JSON' }, 400);
}
// Validate email
if (!body.email || !EMAIL_REGEX.test(body.email)) {
return jsonResponse({ error: 'Invalid email' }, 400);
}
// Validate password
if (!body.password || body.password.length < 8) {
return jsonResponse({
error: 'Password must be 8+ characters'
}, 400);
}
// Check if user exists
const existing = await env.DB
.prepare('SELECT id FROM users WHERE email = ?')
.bind(body.email.toLowerCase())
.first();
if (existing) {
return jsonResponse({ error: 'Email exists' }, 409);
}
// Create user
const hashed = await hashPassword(body.password);
const result = await env.DB
.prepare('INSERT INTO users (email, password) VALUES (?, ?)')
.bind(body.email.toLowerCase(), hashed)
.run();
return jsonResponse({
success: true,
userId: result.meta.last_row_id
}, 201);
},
}; The Magic of Vibe Coding:
Notice how the prompts describe what, not how. Claude handles boilerplate, error handling, edge cases, and best practices automatically. You focus on intent; Claude handles implementation.
Free Resources
Free how-to books transforming real coding sessions into step-by-step guides. Topics include Roblox game development, healthcare platforms, RSS readers, and more.
Aggregated long-form journalism and analysis from diverse publications. 148+ pages of indexed content across tech, policy, science, and culture.
VST3/CLAP audio plugin built with Rust. Part of the audio-forge-rs ecosystem for high-performance music production tools.
"And, But, So - what's your function?" Interactive web game teaching kids (ages 7-10) proper conjunction usage with real-time LLM feedback.
Featured:
"Magnitude 9 Earthquake" - 13,700+ words on the AI transformation reshaping software development.
Learn From The Best
Stay sharp on AI development by following these YouTube channels and industry voices. They cover everything from deep technical interviews to practical AI news.
Deep technical interviews with AI researchers, founders, and thinkers. Long-form conversations that go beyond surface-level takes.
Clear, accessible breakdowns of AI news and research papers. Excellent for staying current on model capabilities and industry developments.
Physics and AI interviews that explore the intersection of intelligence, computation, and reality. Thoughtful long-form discussions with leading researchers.
Machine Learning, AI, and Data landscape coverage from a VC perspective. Great for understanding where the industry is heading commercially.
Leads Claude Code at Anthropic. Follow for insights on AI-assisted development and the future of programming tools straight from the source.
Anthropic researcher working on frontier AI systems. Technical insights on model training, capabilities, and safety research.
Prominent voice in the vibe coding community. Known for documenting AI-assisted development workflows and practical techniques.
Why Follow These Voices?
Vibe coding is moving fast. These creators and researchers are at the frontier, helping you understand not just how to use AI tools, but where they're going next.
See It In Action
Watch vibe coding workflows in real-time. From idea to deployed application, see how AI-first development actually works in practice.
Building a Full App in One Session
Watch an entire web application come together from a single prompt. Authentication, database, UI - all in one continuous session.
From Idea to Deployed in 30 Minutes
A real speed run: concept to production deployment on Cloudflare Pages. No editing, no shortcuts - just vibe coding at full speed.
Live Coding with Claude Code
Deep dive into Claude Code CLI tricks and techniques. Learn /init, /clear, worktrees, and the RALPH pattern in action.
Debugging with AI Assistance
Real debugging session with a gnarly production bug. See how to describe problems and let AI find the fix.
Subscribe for Updates
Video content is in production. Follow along as these demos get recorded and published. Real sessions, real projects, real results.
Ready to vibe code?
I can train your team or build your project for you.