← All Guides·Vol. 435 min read

Vibe Coding — Building Software with AI

How to ship real software with no CS degree, no co-founder, and no permission — using AI as your development partner.

Written by Joshua Bostic·Founder, SocialMate·© Gilgamesh Enterprise LLC

Preface

I am not a software engineer. I don't have a CS degree. I couldn't have written a React component from scratch two years ago. Today I run a live SaaS platform — multi-platform social media scheduler, AI tools, payments, background jobs, the whole thing — that I built at a deli counter and shipped from a laptop at midnight.

The thing that changed everything wasn't a bootcamp. It wasn't a YouTube series. It was learning to work with AI the right way — not as a search engine, not as a code generator, but as a development partner that moves as fast as you can think.

"Vibe coding" is a term some people use mockingly. I use it earnestly. It means: you understand what you want to build, you can communicate it clearly, and you can iterate and debug until it works — even if you can't write the underlying syntax from memory. Vision over syntax. Clarity over credentials.

This guide is everything I learned. What stack to use, how to prompt, what to do when it breaks, and the mental game of shipping imperfect things into the world on purpose. Let's go.

Chapter 1

What Vibe Coding Actually Is

The Real Definition

Vibe coding is not a shortcut. It is not "have AI write everything while you sit back." That approach produces unusable garbage fast, and you won't understand it when it breaks — and it will break.

Vibe coding is a discipline: you hold the architecture in your head, you understand what each piece does at the functional level (even if not the syntactic level), and you use AI to accelerate the execution of your vision. You are the product manager, the architect, and the QA lead. AI is your senior engineer who never sleeps.

✗ What fails

  • "Write me an app that does X" — too vague
  • Copy-pasting AI output without reading it
  • Not understanding what a function does
  • Skipping testing because "AI wrote it"
  • No version control, no rollback plan

✓ What works

  • Specific, scoped tasks with clear requirements
  • Reading every line before you accept it
  • Understanding the "why" of each change
  • Testing every feature in a real browser
  • Committing frequently, branching for every change

What You Actually Need to Know

You don't need to memorize syntax. You do need to understand concepts:

How the web works

Client vs. server. What happens when you hit a URL. What an API is. What JSON is. You can learn all of this in a few hours — it's not optional.

Data flow

Where does data come from, where does it go, who can see it. If you can draw this for your app on a whiteboard, you can build it.

Functions and state

A function takes input and returns output. State is data that changes over time. That's 80% of what you need to know about programming at the conceptual level.

What a database does

It stores things persistently. A table is a spreadsheet. A row is a record. SQL is just asking questions about the spreadsheet in a specific language.

Errors are feedback

A red error message is not a failure. It's the computer telling you exactly what's wrong. Learn to read them. They're specific and they're honest.

The Permission Fallacy

The old gatekeeping argument was: "You can't build real software without a CS degree." That argument existed to protect a scarcity that no longer exists. AI tools didn't lower the bar — they redistributed the bottleneck. The bottleneck is no longer syntax knowledge. It's now clarity of vision, quality of communication, and willingness to iterate.

If you can describe exactly what you want to build, explain why it needs to work a certain way, and communicate what's broken when something goes wrong — you can build software. That's the whole unlock.

Chapter 2

The Stack — What I Actually Use

I'm going to tell you exactly what I use to run a live production SaaS. I'm not going to recommend anything I haven't personally shipped with. Every free tier noted.

Framework

Next.js (App Router)

Yes — open source

Full-stack in one codebase. API routes + frontend + server components. Deploys to Vercel in one click. The AI tools know it better than any other framework — you'll get better completions.

Language

TypeScript

Yes — open source

Types catch bugs before they happen. When AI generates code with types, you can read the shape of data without running the app. More readable, more debuggable.

Database + Auth

Supabase

Free tier: 500MB DB, 1GB storage, 50MB file uploads

Postgres database, row-level security, auth, file storage, and real-time subscriptions — all managed, all with a generous free tier. You don't manage servers. The AI knows Supabase extremely well.

Styling

Tailwind CSS

Yes — open source

Write styles in the HTML. No separate CSS files to manage. AI generates Tailwind perfectly. Dark mode, responsive design, animations — all built-in utilities.

Deployment

Vercel

Free tier: unlimited personal projects, 100GB bandwidth/mo

Push to GitHub, it deploys. Preview URLs for every PR. Environment variables in a UI. Domain management. Zero DevOps. Free tier is genuinely usable for early products.

Payments

Stripe

No monthly fee — 2.9% + 30¢ per transaction

The industry standard. Subscriptions, one-time payments, webhooks, customer portal. The docs are excellent. AI can write Stripe integration from a description.

Background Jobs

Inngest

Free tier: 50k function runs/month

Scheduled functions, event-driven workflows, retries, observability. Critical for anything that needs to run on a schedule (like scheduled posts). Free tier is solid.

AI

Google Gemini API

Free tier: 15 RPM on Flash model

Extremely cheap per token. Generous free tier. 1M+ context window. Good for generation tasks. For coding assistance itself, use Claude.

Email

Resend

Free tier: 100 emails/day, 3,000/month

Developer-first transactional email. Clean API. React email templates. Dead simple to wire up for welcome emails, notifications, etc.

AI Coding Tool

Claude Code

Subscription — worth every dollar if you're building seriously

This is the one. Not a browser copilot — an agentic CLI that reads your whole codebase, edits files, runs commands, opens PRs. It's how I built everything in this stack at 2am.

Total monthly cost when starting out

Infrastructure: $0. The free tiers on this stack can handle your first 1,000 users comfortably. The only non-optional cost is Stripe's transaction fee on revenue. I spent $0/month on infrastructure for the first 6 months of SocialMate's life.

Chapter 3

The Workflow — How a Build Session Actually Goes

Before You Open Your Editor

The most expensive mistake in vibe coding is starting to build before you know what you're building. AI moves fast. If your direction is wrong, you'll be fast in the wrong direction — and unwinding AI-generated code is harder than writing it.

Before every feature, I answer three questions on paper (or in a note):

  1. What is the user experience? Describe every click, input, and state change from the user's perspective. No code, just behavior.
  2. What data is involved? What do I need to store? Where does it come from? Who can see it?
  3. What's the simplest version? What's the minimum that could ship tonight? Strip everything that's not essential to the core function.

The Build Loop

1. Write the DB schema first

Before a single line of frontend code, define your table. What columns do you need? What types? What relationships? Run it in Supabase. If the data model is wrong, everything built on top of it is wrong.

2. Build the API route

What does the server need to receive? What does it return? Wire the database query. Test it with a raw fetch() call in the browser console before touching the UI.

3. Build the UI last

Now that data flows correctly, connect the frontend. The UI is the least important part to get right first — it's also the easiest to change.

4. Test in a real browser

Not in the AI's imagination. Not in a unit test. In Chrome, with real clicks, on the actual page. AI can generate tests — but it cannot feel whether the UX is confusing.

5. Commit and move on

Small commits. Descriptive messages. Every working state is a checkpoint you can return to. Never accumulate three weeks of changes before committing.

Context is Everything

The single biggest performance difference between vibe coders is how well they manage AI context. A tool like Claude Code reads your whole codebase — it knows your patterns, your variable names, your existing components. This context makes every subsequent prompt smarter.

Things that kill context quality:

  • Switching topics mid-session without resetting
  • Asking questions that are too vague ("fix this")
  • Not telling the AI about your existing patterns ("use the same auth pattern as in /api/posts")
  • Letting a session go too long without a checkpoint commit

Practical habit

Keep a CLAUDE.md file in your repo root. Put your tech stack, gotchas, coding rules, and key architectural decisions in it. Claude Code reads this automatically every session — it's like a project brief that you only write once.

Chapter 4

Prompting That Ships

Prompting is a skill. Vague prompts produce vague code. Specific prompts produce specific code. Here's how I think about it.

The Anatomy of a Good Prompt

Example: Adding a feature

Context: "I have a posts table with columns id, content, user_id, scheduled_at, status."

What I want: "Add a retry button to failed posts in the queue page. When clicked, it should reset status to 'scheduled' and set scheduled_at to 5 minutes from now."

Constraints: "Use the existing PATCH /api/posts/[id] route. Match the existing button style in the queue. Don't break the published posts section."

Edge cases: "Show a spinner while the request is in flight. Show a success toast after. Don't show the retry button if status is 'published'."

Prompt Patterns That Work

"Use the same pattern as..."

Point to existing working code. "Use the same auth check as in /api/posts/publish" tells the AI to follow your established patterns instead of inventing new ones.

"Don't touch X"

Explicitly protect working parts. "Don't modify the Stripe webhook handler" or "don't change the sidebar layout" prevents well-intentioned but destructive edits.

"The simplest possible version"

AI tends to over-engineer. Explicitly asking for the simplest approach prevents abstraction you don't need yet.

"Step by step"

For complex features, ask the AI to explain its plan before writing code. Catching a wrong architectural decision in the plan stage is free. Catching it after 200 lines of code is expensive.

"This is what the error says exactly"

Paste the full error message, not your interpretation of it. The AI can diagnose from the raw output better than from your paraphrase.

What to Never Do

  • Never ask for everything at once. "Build me a full social media scheduler" is not a prompt. Break it into: auth, then post creation, then scheduling, then publishing. One thing at a time.
  • Never skip reading the output. Every line of AI-generated code is a line you're responsible for. Read it. Understand what it does. If you can't explain it, you don't own it yet.
  • Never ignore warnings. TypeScript errors, console warnings, deprecation notices — these are the AI's way of telling you something is fragile. Fix them before moving on.
  • Never assume correctness. The AI will confidently generate code that does the wrong thing. Your job is to test every feature as if you expect it to be broken.
Chapter 5

When It Breaks — Debugging Without Panic

Everything breaks. Your job isn't to prevent breakage — it's to fix it fast. Here's the framework.

The Debugging Hierarchy

Is it a syntax error?

The error message tells you the file and line number. Go there. Read the line above and below. 80% of syntax errors are a missing bracket, comma, or semicolon.

Is it a runtime error?

Open the browser console (F12). Read the error. Copy the full stack trace into Claude Code. Paste the relevant code. Ask "what's wrong?" with the specific error.

Is the data wrong?

console.log() everything. Log the API response before you render it. Log the database query result before you return it. Don't guess — observe.

Is it a build error?

Run the build locally. npm run build tells you every TypeScript error with file and line number. Fix one at a time, starting from the top — later errors often cascade from earlier ones.

Is it a deployment error?

Check your environment variables first. Missing env vars are responsible for ~40% of "works locally, broken in prod" issues. Second: check the deployment logs in Vercel for the actual server error.

The Nuclear Option: Git Reset

This is why you commit frequently. If you've been working for 30 minutes and something is deeply broken and you can't figure out what the AI changed to break it — roll back. git diff HEAD shows every change since your last commit. git stash saves your current state temporarily. git checkout -- . discards all changes and returns to the last commit.

The rule that saves sessions

Every time a feature works — commit immediately. "feat: X working" is a valid commit message at midnight. You can clean it up later. The working state is what matters. Every commit is a checkpoint. Every checkpoint is irreversible protection.

Knowing When to Stop Fighting

If you've been debugging the same issue for more than 45 minutes and you're going in circles — stop. Write down exactly what the error is and what you've already tried. Sleep on it, or come back after a break. Your brain will have processed it. The error will look different.

Some bugs also need a completely different approach — not a fix to the current approach, but abandoning it. If AI-generated solution A keeps breaking, ask for a completely different implementation strategy for the same outcome.

Chapter 6

Going Live — The First Deploy

The Minimum Viable Deploy

You don't need to be "ready" to go live. You need to be safe enough that you're not going to hurt anyone or leak data. The bar is lower than you think.

Auth works

Users can sign up, sign in, and sign out. Their data is isolated. Row-level security is enabled in Supabase.

No exposed secrets

API keys are in environment variables, not in code. Your repo is private or secrets are in .gitignore.

Payments work (if charging)

Run a real $1 test charge through Stripe. Don't soft-launch with payments you haven't personally tested end-to-end.

The core loop works

The one thing your app is supposed to do — it actually does it, reliably, in production. Not just locally.

You can recover from a crash

If everything breaks, can you roll back? Do you have your last working commit? Do you know how to redeploy the previous version?

Ship Imperfect on Purpose

The most dangerous thing you can do is wait until it's perfect. It will never be perfect. Every day you delay is a day you're not getting real feedback from real users.

SocialMate launched with a broken Twitter integration, a UI that was half-finished on mobile, and zero marketing. Those things got fixed because real users hit them and reported them. The things I thought were problems before launch — most of them weren't. The real problems I couldn't have predicted from inside my own head.

The feedback loop advantage

A polished product with zero users gives you zero feedback. A rough product with 10 real users gives you 10 feedback loops. Each loop tightens your next build iteration. Ship the rough thing. Fix fast. That compounding feedback is worth more than any amount of pre-launch polishing.

Domain, Analytics, Error Tracking

  • Domain: Get a real domain from Porkbun or Namecheap ($10–$15/year). Vercel handles SSL automatically. Point your domain to Vercel's nameservers in 10 minutes.
  • Analytics: Vercel Analytics is built-in and free. Install it. Know how many people are actually using each page before you decide what to build next.
  • Error tracking: Sentry has a free tier. Wire it in on day one. You want to know when something breaks in production before a user emails you about it.
Chapter 7

The Mindset

The Comparison Trap

At some point you will compare your code to a "real engineer's" code and feel like a fraud. The code will look different. It will be structured differently. A trained engineer would have done it differently.

Here's the thing about that: does it work? Does it ship? Does it serve real users? Does it handle edge cases? Is it secure? If the answers are yes — the "elegance" of the implementation is academic. Software's only job is to work correctly for the people using it.

There is a kind of snobbery in software engineering that equates method with outcome. Ignore it. Judge your work by outcomes, not by how a CS curriculum would grade it.

Building in Stolen Hours

Most of SocialMate was built between 10pm and 2am. I have a full-time job. I have a life. I don't have the luxury of 8-hour build sessions. What I have is consistency: show up to the keyboard when you said you would. Even if it's 45 minutes. Even if you're tired. Especially if you're tired, because tired builds are what separate people who ship from people who talk about shipping.

One small thing shipped is worth more than ten big things planned. The person with a live, imperfect product beats the person with a perfect wireframe every time.

What AI Actually Changes

AI didn't make me a software engineer. It made the software engineering part of my vision executable without me becoming a software engineer first.

The creative work — figuring out what to build, how to position it, what problem it actually solves, what the user experience should feel like — that's still entirely human. AI handles execution. You still have to have the vision worth executing.

If you have a real idea, a genuine problem you want to solve, and the patience to iterate — you can build it now. The tools exist. The free tiers exist. The knowledge exists. The only thing that was ever actually in the way was the belief that you needed permission.

You don't need a CS degree. You need a clear vision and the will to iterate.

That's the whole unlock. The rest is just building.

Resources

All Resources — Bookmarked

Power to the people.

The tools exist. The knowledge exists. The only thing that was ever actually in the way was the belief that you needed permission. You don't.