💻 The Complete Vibe Coding Framework

7,200 hours condensed: Framework + All prompts + Tools + 48-hour checklist

📊 Proven Results:

  • €5.48M+ closed, helped by using these tools
  • 6x lead flow for clients
  • 7,200+ hours of experience

Everything you need is in this post: No downloads, no waitlists. Just copy-paste and ship.


🧠 Phase 1: Thinking (50 min)

Step 1: Deep Research (20 min)

Copy this prompt into Claude or ChatGPT:

Research demand and competitors for: [YOUR IDEA]

PHASE 1: DEMAND VALIDATION
1. Who needs this?
   - Target audience (ICP)
   - Pain points this solves
   - Willingness to pay
   - Market size estimate

2. Existing solutions
   - Direct competitors (5-10)
   - How they solve it
   - Pricing models
   - What they're missing

3. Unique angle
   - What can I do better/different?
   - Why would someone choose mine?
   - Gap I can own

DELIVERABLE:
GO/NO-GO recommendation with:
- Confidence level (High/Medium/Low)
- Biggest risk
- One sentence unique value prop

Keep under 500 words.

⚠️ Why: I skipped this on my first 3 builds. All three died.

Step 2: PRD (15 min)

Copy this prompt:

Write a PRD for: [YOUR IDEA]

## CONTEXT
[What this does, who it's for, core value — 1 paragraph]

## USER FLOW
1. User arrives
2. User does X
3. User gets Y
(3-5 steps max)

## MVP FEATURES (Must-Have Only)
1. [Feature 1] - why essential
2. [Feature 2] - why essential
3. [Feature 3] - why essential
(Stop at 3-5. More = building too much)

## SUCCESS METRICS
- How do I know this works?
- One number that matters

## OUT OF SCOPE (V1)
[Features you're NOT building yet]

Under 2 pages. If longer, cut scope.

📝 Reality: I wrote 12 terrible PRDs before shipping. Ship broken, learn fast.

Step 3: Tech Design (15 min)

Copy this prompt:

Based on this PRD:
[PASTE YOUR PRD]

Recommend tech stack:

1. VIBE CODING TOOL
   - Beginner: Bolt, Lovable
   - Advanced: Cursor, Claude Code
   - Your recommendation + why

2. BACKEND
   - Database (default: Supabase)
   - Auth (Supabase Auth or Clerk)
   - Storage (if needed)

3. DEPLOYMENT
   - Web: Vercel
   - Mobile: App/Play Store
   - Special considerations

4. APIS/INTEGRATIONS
   - External services needed
   - API keys required

CONSTRAINT: Ship in 48 hours. Keep simple.

🛠️ Tool Decision Tree

If You're... Use This Why
Brand new to coding Bolt.new Instant preview, no setup, visual UI
Building simple web app Lovable Great for landing pages, forms, simple flows
Building complex app Cursor Full IDE, better for multi-file projects
Want best natural language Claude Code Best thinking → code translation (my favorite)
Building with AI/RAG Claude Code + Cursor Need both planning (Claude) + implementation (Cursor)

⚠️ Don't: Spend 3 weeks comparing tools (I did this). Tool matters less than thinking clearly.


⚙️ Phase 2: Execution (1-3 hrs)

Step 4: Agent Setup (2 min)

Create this file: agents.md

# agents.md

## PROJECT: [Your App Name]

## CONTEXT
[One paragraph from PRD: what, who, why]

## TECH STACK
- Tool: [Claude Code/Cursor/Bolt/Lovable]
- Backend: [Supabase/Firebase]
- Deploy: [Vercel/Netlify]
- APIs: [List external APIs]

## BUILD RULES
1. Follow PRD exactly
2. Ship broken, iterate fast — NO gold-plating
3. MVP only — new features need approval
4. Ask before adding dependencies
5. Test core flow before polish

## FILE STRUCTURE
```
/src
  /components  (UI)
  /pages       (routes)
  /api         (backend)
  /db          (schemas)
  /utils       (helpers)
```

## NEXT STEPS
1. [First thing to build]
2. [Second thing]
3. [Third thing]

## MAINTENANCE
Support for: [6 months minimum]
Plan: [How to handle bugs/requests]

💡 This is what makes it work: Without agents.md = prompting. With it = orchestrating.

Step 5: Build (1-3 hrs)

Backend Guide (Supabase)

Step-by-step:

  1. Go to supabase.com → Create new project
  2. Copy credentials from Settings → API:
    • Project URL
    • anon/public key
  3. Use this prompt in your vibe coding tool:
Set up Supabase backend for:
[PASTE YOUR PRD]

Create:
1. Database schema (tables, relationships, RLS)
2. Auth config (email/password or OAuth)
3. API client (environment variables)
4. Type definitions (if TypeScript)

Best practices:
- Row Level Security enabled
- Indexes on foreign keys
- Timestamps (created_at, updated_at)

Give me:
- SQL to run in Supabase dashboard
- .env variables
- Client init code
  1. Copy SQL → Supabase SQL Editor → Run
  2. Add env variables to .env.local:
    NEXT_PUBLIC_SUPABASE_URL=your-project-url
    NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
  3. Done. Backend ready in 5 minutes.

📊 Real talk: I rebuilt my backend 4 times. Always came back to Supabase. 90% of you need Supabase.

Vector Storage (If Building with AI)

Pinecone Setup (5 minutes):

  1. Go to pinecone.io → Create free account
  2. Create index:
    • Name: your-app-vectors
    • Dimensions: 1536 (for OpenAI embeddings)
    • Metric: cosine
  3. Copy API key from dashboard
  4. Use this prompt:
Set up Pinecone for:
[DESCRIBE USE CASE: semantic search, RAG, etc.]

Provide:
1. Index config (already created)
2. Embedding pipeline
   - Model: OpenAI text-embedding-3-small
   - Batch size: 100
3. Query code (search + filter)
4. Error handling

Environment:
PINECONE_API_KEY=[your-key]
PINECONE_INDEX=your-app-vectors

Core Build Prompt

Build this app following agents.md:
[PASTE OR LINK agents.md]

Start with:
1. Project scaffold
2. Core user flow (PRD Step 1 → 2 → 3)
3. MVP features only

Test after each feature:
- Works end-to-end?
- User can complete core action?

Ship broken, iterate later.

Start with feature #1 from PRD.

Deploy to Vercel (10 min)

  1. Push code to GitHub (if not already)
  2. Go to vercel.com → Import repository
  3. Add environment variables:
    • Supabase URL + key
    • Pinecone key (if using)
    • Any API keys
  4. Deploy → Live in 2 minutes

Or use this prompt:

Deploy to Vercel:

1. Set up project
2. Configure env variables:
   [LIST YOUR VARIABLES]
3. Build settings (if custom)
4. Deploy production

Provide:
- vercel.json config (if needed)
- Build commands
- Post-deploy checks

Goal: Live URL in 10 minutes.

⚠️ Critical: Deployment = 10% of work. Half my tools died from no maintenance. Don't build what you won't support 6+ months.


🚀 Git Quickstart

If starting from scratch:

git init
git add .
git commit -m "Initial commit"
gh repo create your-app-name --public --source=. --remote=origin
git push -u origin main

If using a template:

# Next.js + Supabase
npx create-next-app@latest your-app --typescript --tailwind --app
cd your-app
npm install @supabase/supabase-js

# Or Vite + React
npm create vite@latest your-app -- --template react-ts
cd your-app
npm install @supabase/supabase-js

📊 Pre-Built Supabase Schemas

Copy-paste these into Supabase SQL Editor for common app types:

SaaS App (User + Teams)

-- Users table (extends Supabase auth.users)
create table public.profiles (
  id uuid references auth.users on delete cascade primary key,
  email text unique not null,
  full_name text,
  avatar_url text,
  created_at timestamptz default now(),
  updated_at timestamptz default now()
);

-- Teams/Organizations
create table public.teams (
  id uuid default gen_random_uuid() primary key,
  name text not null,
  slug text unique not null,
  created_at timestamptz default now(),
  updated_at timestamptz default now()
);

-- Team members
create table public.team_members (
  team_id uuid references public.teams on delete cascade,
  user_id uuid references public.profiles on delete cascade,
  role text not null check (role in ('owner', 'admin', 'member')),
  created_at timestamptz default now(),
  primary key (team_id, user_id)
);

-- RLS Policies
alter table public.profiles enable row level security;
alter table public.teams enable row level security;
alter table public.team_members enable row level security;

-- Users can read/update their own profile
create policy "Users can view own profile" on public.profiles
  for select using (auth.uid() = id);
create policy "Users can update own profile" on public.profiles
  for update using (auth.uid() = id);

-- Team members can view their teams
create policy "Team members can view teams" on public.teams
  for select using (
    exists (
      select 1 from public.team_members
      where team_id = teams.id and user_id = auth.uid()
    )
  );

-- Indexes
create index profiles_email_idx on public.profiles(email);
create index team_members_user_id_idx on public.team_members(user_id);
create index team_members_team_id_idx on public.team_members(team_id);

Content/Blog Platform

-- Posts
create table public.posts (
  id uuid default gen_random_uuid() primary key,
  title text not null,
  slug text unique not null,
  content text,
  excerpt text,
  author_id uuid references auth.users on delete cascade,
  published boolean default false,
  published_at timestamptz,
  created_at timestamptz default now(),
  updated_at timestamptz default now()
);

-- Tags
create table public.tags (
  id uuid default gen_random_uuid() primary key,
  name text unique not null,
  slug text unique not null,
  created_at timestamptz default now()
);

-- Post tags (many-to-many)
create table public.post_tags (
  post_id uuid references public.posts on delete cascade,
  tag_id uuid references public.tags on delete cascade,
  primary key (post_id, tag_id)
);

-- RLS
alter table public.posts enable row level security;
alter table public.tags enable row level security;

-- Anyone can read published posts
create policy "Anyone can view published posts" on public.posts
  for select using (published = true);

-- Authors can manage their own posts
create policy "Authors can manage own posts" on public.posts
  for all using (auth.uid() = author_id);

-- Indexes
create index posts_author_id_idx on public.posts(author_id);
create index posts_published_idx on public.posts(published);
create index posts_slug_idx on public.posts(slug);

E-commerce/Marketplace

-- Products
create table public.products (
  id uuid default gen_random_uuid() primary key,
  name text not null,
  slug text unique not null,
  description text,
  price decimal(10,2) not null,
  image_url text,
  seller_id uuid references auth.users on delete cascade,
  active boolean default true,
  created_at timestamptz default now(),
  updated_at timestamptz default now()
);

-- Orders
create table public.orders (
  id uuid default gen_random_uuid() primary key,
  buyer_id uuid references auth.users on delete cascade,
  total decimal(10,2) not null,
  status text not null check (status in ('pending', 'paid', 'shipped', 'completed', 'cancelled')),
  created_at timestamptz default now(),
  updated_at timestamptz default now()
);

-- Order items
create table public.order_items (
  id uuid default gen_random_uuid() primary key,
  order_id uuid references public.orders on delete cascade,
  product_id uuid references public.products on delete restrict,
  quantity int not null,
  price decimal(10,2) not null,
  created_at timestamptz default now()
);

-- RLS
alter table public.products enable row level security;
alter table public.orders enable row level security;
alter table public.order_items enable row level security;

-- Anyone can view active products
create policy "Anyone can view active products" on public.products
  for select using (active = true);

-- Users can view their own orders
create policy "Users can view own orders" on public.orders
  for select using (auth.uid() = buyer_id);

-- Indexes
create index products_seller_id_idx on public.products(seller_id);
create index orders_buyer_id_idx on public.orders(buyer_id);
create index order_items_order_id_idx on public.order_items(order_id);

💡 Pro tip:

Mix and match tables. Need posts + teams? Combine the schemas. Need products + user profiles? Merge them. These are starting points, not rigid templates.


📋 Maintenance Plan Template

Copy this into your project README or agents.md:

# Maintenance Plan

## COMMITMENT
I will support this app for: **[6 months minimum / 1 year / indefinite]**

## WEEKLY TASKS (15 min)
- [ ] Check error logs (Vercel/Supabase dashboard)
- [ ] Review user feedback (if any)
- [ ] Test core user flow (does it still work?)
- [ ] Check dependencies for security updates

## MONTHLY TASKS (30 min)
- [ ] Update dependencies (`npm update` or `npm audit fix`)
- [ ] Review analytics (if tracking: what's working? what's not?)
- [ ] Respond to support requests/issues
- [ ] Check database size (free tier limits)

## SUPPORT CHANNELS
- Email: [your-email]
- GitHub Issues: [repo-url]
- Discord/Slack: [invite-link]
- Response time goal: [24 hours / 48 hours / 1 week]

## SHUTDOWN CRITERIA
I will shut down this app if:
- [ ] No usage for 3+ months
- [ ] Can't commit to weekly checks anymore
- [ ] Costs exceed [budget amount]
- [ ] Security issues I can't fix

## SHUTDOWN PROCESS
If shutting down:
1. Email all users 30 days in advance
2. Offer data export
3. Archive GitHub repo (don't delete)
4. Write postmortem (what worked, what didn't, lessons)

## ESCALATION
If something breaks:
- **P0 (Critical):** Fix within 24 hours (auth down, data loss, security)
- **P1 (High):** Fix within 3 days (core feature broken)
- **P2 (Medium):** Fix within 2 weeks (minor bugs, UX issues)
- **P3 (Low):** Backlog (nice-to-haves, polish)

## USAGE GOALS
Success metrics (check monthly):
- [ ] [Metric 1]: [Target number]
- [ ] [Metric 2]: [Target number]
- [ ] [Metric 3]: [Target number]

If below targets for 3+ months → reevaluate project.

---
Last updated: [DATE]

⚠️ Why this matters:

Half my tools died because I didn't have this. Writing it down = commitment. No plan = slow abandonment.


📅 48-Hour Ship Loop

The exact checklist I use to ship MVPs in 48 hours:

Day 1: Thinking + Setup (Evening, 2-3 hrs)

✅ Task Time
☐ Run deep research prompt 20 min
☐ Write PRD (get GO decision) 15 min
☐ Choose tech stack 15 min
☐ Create Supabase project + copy creds 5 min
☐ Write agents.md 5 min
☐ Set up database schema in Supabase 10 min
☐ Init project + push to GitHub 5 min

End of Day 1: You have PRD, backend ready, project scaffolded.

Day 2: Build + Ship (Morning/Afternoon, 3-4 hrs)

✅ Task Time
☐ Build Feature #1 (MVP core) 45 min
☐ Test Feature #1 end-to-end 10 min
☐ Build Feature #2 30 min
☐ Test Feature #2 10 min
☐ Build Feature #3 30 min
☐ Full user flow test (start → finish) 15 min
☐ Deploy to Vercel 10 min
☐ Test on production URL 10 min
☐ Share with 3 people for feedback 5 min

End of Day 2: Live MVP. Broken, but shipped.

💡 The Secret:

Day 1 = 100% thinking. Day 2 = 100% execution. No switching contexts. This is why it's fast.


⏱️ Full Timeline

Phase Step Time
PHASE 1: THINKING
1. Deep Research 20 min
2. PRD 15 min
3. Tech Design 15 min
PHASE 2: EXECUTION
4. Agent Setup 2 min
5. Build (Backend + Features + Deploy) 1-3 hrs
TOTAL MVP TIME 2-4 hours

💡 Lessons from 7,200 Hours

What I Did Wrong What I Learned
Skipped research → 3 dead builds Validate demand BEFORE building
Wrote 12 terrible PRDs Ship broken, iterate fast
Wasted 3 weeks comparing tools Tool doesn't matter, thinking does
Rebuilt backend 4 times Supabase is enough for 90%
Half my tools died from neglect Only build what you'll support 6+ months

The real secret: Don't chase perfect. Chase shipped.


More AI Operator content:
@mikemeansbusiness_ai

Day 5 of AI Operators Series | March 2026