← All sessionsHomeSearch
AI Catalyst C3·Basecamp·2:44:06

Basecamp 2: Vibe Coding

Harshit Trainer — Program director, Catalyst; founder of an AI agency (name garbled, heard as 'Agent device'); LinkedIn Learning instructor (AI, Claude Code, RAG; ~500k students, courses rated 4.7+); O'Reilly Media instructor · Abhishek Program manager, Catalyst program (LMS/logistics intro; heard as 'Ashik'; Niharika is ongoing cohort manager)

Session map

APP ANATOMYTHE FRAMEWORKBUILD & GRADUATEFront end vs back endthe movie analogyAPIs & endpointsthe communication bridgeServers & hostinglocalhost → cloudThe vibe-coding frameworkresearch → MVP → PRD → promptMVP2 core + 1 AI differentiatorPlan cheap, build costlyChatGPT plans, Lovable burns creditsLovable Cloud vs Supabasethe live pivotRLS securitydon't leak your tables.env & secretsnever on GitHubGraduation pathGitHub → VS Code → Claude Code
App anatomyThe frameworkBuild & graduate
click a node — its card pops up (drag it anywhere, × to close)
Concept

The map reads left to right — app anatomy flow into the framework, then into build & graduate. Click any node to open that idea here; every timestamp jumps into the recording.

The short version

  1. Every application is front end (what users see) plus back end (logic, storage, processing) — taught via an extended movie-production analogy covering databases, authentication vs authorization, API endpoints, third-party integrations, SDKs, and servers.
  2. The vibe-coding framework: competitor research via pricing-page screenshots → ChatGPT extracts and de-duplicates the feature universe → define an MVP (2 core features + 1 AI differentiator) → generate a PRD → convert it into a tool-specific prompt using the vendor's own prompting guide → build.
  3. Plan and iterate in ChatGPT/Claude where iterations are free; only move the finalized plan into Lovable/Replit/Emergent, because every interaction there burns credits.
  4. Built 'Task AI' (AI-native project management app) live and deliberately messy: Supabase wiring (org/project, keys, RLS, SQL editor) fought Lovable's push toward Lovable Cloud, so the build pivoted mid-session — the decision-making under friction was the lesson.
  5. Graduation path: MVP on Lovable → sync to GitHub → git clone into VS Code → continue with Claude Code/Cursor locally once the idea is validated; don't build production apps on vibe-coding platforms.

The concepts

01

Front end vs back end (movie analogy)

0:15:42

Every app you've ever used is two things: the movie the audience watches, and the production machinery nobody sees.

The front end is the finished film — everything the user sees and touches. It splits into UI (the interface: layout, buttons, colors) and UX (the experience: how you move through it). Instagram's feed, likes, explore page and profile are all front end.

The back end is the production system behind the film: where data is stored, logic runs, and requests get processed. Instagram's storage of your photos, its login checks, its APIs — all back end. The reason this split matters to a non-programmer is that every vibe-coding decision you'll make lands on one side or the other, and the platforms price and fail differently on each side.

Worked example · from the session

The session's running example: Instagram. What you scroll is the movie; the databases, authentication and APIs underneath are the crew, sets and editing suite that made it.

Why it matters

This is the vocabulary every later concept hangs on — auth, APIs, databases, hosting are all 'which part of the production is this?' questions. Get the split and vibe-coding stops feeling like magic.

People get this wrong

The app IS what I see on screen.

What you see is roughly half. Storage, logic, identity and processing live in a back end you never see — and it's where most vibe-coding failures happen.

Front end — the movie everything the user sees and touches UI layout · buttons · look UX flow · navigation · feel Instagram: feed · likes · explore · profile what you scroll Back end — the production where logic, storage and processing live Database your data Auth who are you APIs the bridge storage · login checks · processing · servers what makes the scroll possible Every vibe-coding decision lands on one side of this line — and the platforms price each side differently.
The movie and the production — what users see vs where the work happens
Front end is the movie that is shown to you... Back end is the production system behind the movie.0:17:43
For your projects

The KB itself splits the same way: the rendered pages are front end, build_site.py plus the YAML corpus is the back end. That the site is static — no server logic at all — is exactly why it's cheap and unbreakable.

Go deeper

In one line: Front end is what the user sees and experiences (UI + UX — the finished movie); back end is where logic, storage, processing, and coordination happen (the production system behind it).

Instagram example: feed, likes, explore, profile = front end; storage, auth, APIs = back end (0:21:46)

UI = interface/layout, UX = experience/navigation; both combine into front end

Try it now

Open any app you use daily and narrate the split out loud: name three front-end things you can see and three back-end things that must exist for them to work.

▶ Watch this taught: 0:15:42

Check yourself

Answer from memory first — the recall attempt is what makes it stick. Then reveal.

What's the difference between UI and UX?

UI is the interface — layout, buttons, visual design. UX is the experience — how you navigate and how it feels. Together they make up the front end.

Instagram's like button, its photo storage, its login check: which side is each on?

Like button: front end. Photo storage and login check: back end.

02

Authentication vs authorization

0:23:49

Two different questions guard every app: 'are you really you?' and 'what are you allowed to do?' — and mixing them up causes real design mistakes.

Authentication is identity validation: proving you're a legitimate user at all — the login, the email verification, the password check. Authorization is access level: given that you're valid, which tier of features do you get?

The cleanest everyday example is ChatGPT itself: logging in is authentication; whether you're on Free, Plus, Pro or Enterprise — and therefore which models and limits you get — is authorization. Every app with tiers, roles or admin panels is running both checks on every request.

Worked example · from the session

ChatGPT Plus vs Pro vs Enterprise: same login (authentication), different capabilities (authorization). The session used the tiers everyone in the cohort already pays for as the teaching case.

Why it matters

When you spec an app — or read what a vibe-coding platform generated — you need to ask both questions separately. 'Users can log in' says nothing about who can see whose data; that's the authorization design, and it's where leaks happen.

People get this wrong

If users have to log in, the data is protected.

Login only proves identity. Without authorization rules (like RLS on every table), any valid user can potentially fetch anyone's rows.

Go deeper

In one line: Authentication is identity validation (are you a valid user); authorization is access level (what tiers/features you may use — e.g. ChatGPT Plus vs Pro vs Enterprise).

▶ Watch this taught: 0:23:49

Check yourself

Answer from memory first — the recall attempt is what makes it stick. Then reveal.

Authentication vs authorization in one line each?

Authentication: are you a valid user? Authorization: what are you allowed to access?

A logged-in user can see another user's tasks. Which check failed?

Authorization. Their identity was fine — the app never restricted what that identity may access (in Supabase terms: missing row-level security).

03

APIs and endpoints

0:25:52

Every button in every app is secretly a web address — press it and a request travels to a URL, code runs, and an answer comes back.

An API is the bridge between front end and back end, and endpoints are its addresses. Every function an app offers — post a reel, like, comment — has its own URL. Pressing the button sends an HTTP request there with a payload (your video, your caption) and your auth details; the back end runs its checks and code, and returns a response the front end turns into 'Posted!'.

Once you see this, the AI economy makes sense too: a model API is just another endpoint. OpenAI exposes its models at a URL, your app sends a request with a key, and you pay per call from console credits. The 'AI feature' in any app you build is one more endpoint conversation.

Worked example · from the session

The Instagram 'post a reel' walk-through: request with payload and auth hits a dedicated URL, the checks clear, the response confirms publish — the same round-trip pattern behind every feature in every app.

Why it matters

APIs are where front end and back end actually meet, which makes them where things break, where costs accrue (per-call billing), and where your app plugs in AI. You can't reason about any of those without this picture.

People get this wrong

APIs are an advanced topic only developers touch.

You use dozens of them every hour — every tap in every app. Building with them mostly means telling your coding agent which endpoint to call.

For your projects

Also the mental model under every MCP server from BC5: tools wrap endpoints. When a Cowork connector misbehaves, 'which endpoint did that hit and what came back' is the debugging question.

Go deeper

In one line: APIs are the communication bridge between front end and back end: every function (post a reel, like, comment) has a web address (endpoint) that receives an HTTP request, runs code, and returns a response.

Instagram 'post a reel' walk-through: request with payload + auth details hits a dedicated URL, checks clear, response confirms publish (0:27:55)

Model APIs work the same way: a URL exposes GPT-class models, you pay via console credits

▶ Watch this taught: 0:25:52

Check yourself

Answer from memory first — the recall attempt is what makes it stick. Then reveal.

What happens, step by step, when you press 'post' on a reel?

The front end sends an HTTP request — payload plus your auth details — to that function's endpoint URL; back-end code runs the checks and the write; a response comes back and the UI shows it published.

How is calling GPT from your app the same mechanism?

A model API is an endpoint like any other: a URL, a request with a key, a per-call cost, a response. AI features are endpoint conversations.

04

Third-party integrations

0:29:56

Nobody builds their own VFX studio for one film — and nobody should build their own auth, database or design system for one app.

Third-party integrations are the off-the-shelf services and libraries you slot in instead of building everything: Supabase or Convex for the managed back end (database, auth, storage, edge functions), Tailwind CSS and shadcn/ui for the front-end look. The movie analogy: you rent the VFX house, you don't found one per film.

The session's most practical corollary: naming these in your prompt is what separates experienced builders' output from generic output. Every unstyled vibe-coded app ships with the same purple-gradient look; say "use Tailwind and shadcn/ui" — or screenshot a UI you admire and ask for it in those terms — and the same platform produces something that passes as production.

Worked example · from the session

The 'purple gradient' problem, solved in one prompt line: the difference between a default Lovable build and one that looks professional is literally whether the prompt names Tailwind + shadcn/ui.

Why it matters

Integrations are leverage: every service you name is thousands of hours of someone else's work your prompt just inherited. Knowing the names is the skill.

Go deeper

In one line: Off-the-shelf services and libraries used instead of building everything yourself (movie VFX analogy) — present on both front end and back end.

Supabase/Convex = managed back end (database, auth, storage, edge functions)

Tailwind CSS + shadcn/ui = styling frameworks that fix the 'same purple gradient' default look of vibe-coded apps (0:31:57)

Naming the libraries in your prompt is what separates experienced builders' output from generic output

Try it now

Screenshot a landing page you love, give it to your chat tool, and ask which frameworks and component libraries would reproduce it — then keep that list for your next build prompt.

▶ Watch this taught: 0:29:56

Check yourself

Answer from memory first — the recall attempt is what makes it stick. Then reveal.

Why do so many vibe-coded apps look identical?

Nobody named a design system, so the platform falls back to its default look. Naming Tailwind + shadcn/ui in the prompt is the fix.

What does Supabase actually replace?

The whole hand-built back end: database, authentication, file storage and server-side functions, managed for you with a generous free tier.

05

SDKs and developer libraries

0:35:59

You never read a vendor's SDK documentation anymore — you paste its URL into your coding agent and say 'build the feature'.

An SDK (software development kit) is how a vendor's product becomes usable inside your app: OpenAI, Anthropic and Gemini all ship one, and 'add AI to my app' concretely means 'wire in one of these'. Libraries like LangChain and LangGraph sit a level deeper — they're the code layer that tools like n8n are built on top of.

The workflow shift the session teaches: as a non-technical builder you don't study any of this. You paste the documentation URL into Claude Code or Cursor and ask it to build the feature against those docs. The agent reads the SDK; you review the result. Hand-building LangChain pipelines is explicitly what you should not be doing.

Worked example · from the session

The trainer's own marketing SaaS wires Meta/Google/TikTok ad APIs through an MCP layer — built by pointing coding agents at vendor documentation, not by reading it himself.

Why it matters

This is the deepest workflow change vibe coding brings: documentation is now agent food. Your job moves up a level — choosing which SDK, and judging whether the built feature works.

Go deeper

In one line: Software development kits let you use a vendor's product inside your app (OpenAI, Anthropic, Gemini SDKs); modern workflow is pasting the documentation URL into your coding agent and asking it to build the feature.

LangChain/LangGraph explained as the code layer under tools like n8n; non-technical builders should not hand-build LangChain (0:38:01)

▶ Watch this taught: 0:35:59

Check yourself

Answer from memory first — the recall attempt is what makes it stick. Then reveal.

What's the modern way to use an unfamiliar SDK?

Paste its documentation URL into your coding agent and ask it to build the feature against those docs. The agent reads; you review.

Where do LangChain and LangGraph sit in the stack?

Under the friendly tools — they're the code layer beneath things like n8n's AI features. Know they exist; don't hand-build them.

06

Servers, localhost, and cloud deployment

0:40:03

A server is just a computer that's always on — your laptop can be one for an audience of you; the cloud is renting one for an audience of everyone.

The back end has to physically run somewhere, and that machine is the server — the editing suite in the movie analogy. While you're developing, your own laptop plays the role: 'localhost' is your machine serving the app to itself. The moment other people need to reach it, you rent an always-on machine from AWS or GCP instead.

Vibe-coding platforms quietly bundle this: the reason your build is instantly live at a *.lovable.app URL is that Lovable is hosting it on their machines. Convenient — and one more form of the platform lock-in this session keeps flagging, which is why the serious stack graduates to Vercel or Railway on a repo you own.

Worked example · from the session

Every Lovable build going straight to a shareable *.lovable.app URL — hosting you didn't set up, on machines you don't control, which is both the magic and the catch.

Why it matters

Localhost-vs-deployed explains half of beginner confusion: 'it works on my machine' and 'why can't my friend open it' are the same lesson. And knowing hosting is bundled tells you what you give up by staying on the platform.

People get this wrong

A server is special, exotic hardware.

It's 'just a headless computer' running 24/7 — the same idea BC5 uses to explain MCP servers. Your laptop qualifies, briefly.

Go deeper

In one line: The server is the machine where back-end code runs (movie editing-suite analogy). Your laptop can serve on localhost; for the world you rent machines from AWS/GCP — vibe-coding platforms bundle this hosting, which is why apps live at *.lovable.app-style URLs (0:44:07).

▶ Watch this taught: 0:40:03

Check yourself

Answer from memory first — the recall attempt is what makes it stick. Then reveal.

What is localhost?

Your own machine serving the app to itself during development — an audience of one.

Why is your Lovable app instantly on the internet when you never deployed anything?

The platform bundles hosting — it runs on their machines at their URL. That's also why leaving means deploying somewhere you control, like Vercel.

07

The vibe-coding framework (research → MVP → PRD → prompt → build)

how-to0:46:09

The framework is the session: never start building — start researching, and let the pricing pages of your competitors write your spec.

When you have an app idea, the untrained move is to open a builder and type. The framework inserts four free steps first. Research: your competitors' pricing pages are a goldmine, because those comparison tables are each company's own answer to 'what will customers pay for'. Screenshot them, let ChatGPT extract and de-duplicate the whole feature universe. MVP: pick 2 core features plus 1 AI differentiator. PRD: have ChatGPT write the spec a product manager would hand engineers. Prompt: feed the PRD plus the vendor's own prompting guide back to ChatGPT so it emits a first prompt in the dialect your builder wants.

Only then do you build. The sequence works in any domain with any tool because it separates thinking (free, in chat) from execution (metered, in the builder) — and produces a paper trail you can reuse when you switch platforms.

Worked example · from the session

Built live for 'Task AI': Trello/Asana/monday pricing screenshots → ChatGPT feature map → MVP (projects+tasks, board views, AI project generator) → PRD → Lovable-ready prompt via Lovable's published guide → build.

Do it in this order

GotchasEvery step before the last is free — do them in ChatGPT/Claude where iteration costs nothing. Starting in Lovable 'to explore' burns credits on thinking the chat tool would have done for free. Scope the first prompt to the MVP only; you can always add.

Why it matters

This one habit is most of the difference between people who ship focused MVPs cheaply and people who burn credits wandering. It's also completely tool-agnostic — the framework survives every platform on the shelf.

People get this wrong

Vibe coding means describing your idea to a builder and iterating until it's right.

Iterating in the builder is the expensive way. The framework front-loads research, scoping and spec-writing where iteration is free, and hands the builder a finished plan.

FREE — iterate all day in ChatGPT / Claude 1 · Research competitor pricing pages 2 · MVP 2 core + 1 AI differentiator 3 · PRD the spec, written by AI 4 · Tool-compliant prompt PRD + the vendor’s own prompting guide METERED — credits burn here 5 · Build Lovable / Replit / Base44 receives ONE finished prompt not your rough drafts Plan where iteration is free; spend credits only on construction.
Research → MVP → PRD → prompt → build — plan free, spend late
For your projects

The framework transfers beyond apps: 'research competitors → define the 2+1 scope → write the spec → convert to the executor's dialect' is exactly how the KB itself was designed (design-lab → approved exemplar → extraction protocol → sittings).

Go deeper

In one line: The session's core teachable: when you have an idea, first validate and research competitors, then define the MVP, produce a PRD, convert it into a tool-compliant prompt, and only then start building. Applicable to any domain and any coding tool.

Pricing pages are the research goldmine: competitors' comparison tables encode what customers find valuable — screenshot Trello, Asana, monday.com tables (0:50:11)

ChatGPT extracts all features from screenshots, groups into categories, de-duplicates, and tags basic vs advanced vs AI-differentiator (0:54:17)

PRD = the document PMs give engineers; here ChatGPT writes it for the coding agent (1:02:27)

Feed the vendor's own prompting guide (Lovable's, published 2025-01-16) plus the PRD to ChatGPT to get a 'Lovable-ready' first prompt scoped to MVP only (1:04:28)

Try it now

Pick any product idea you've had, screenshot three competitors' pricing pages, and run just steps 3-4. Twenty minutes gets you a feature map and an MVP definition you didn't have this morning.

▶ Watch this taught: 0:46:09

Check yourself

Answer from memory first — the recall attempt is what makes it stick. Then reveal.

Why pricing pages specifically, rather than feature pages or reviews?

The comparison table on a pricing page is the company's own ranked statement of what customers find valuable enough to pay for — pre-digested market research.

What are the five stages, in order?

Research (competitor pricing screenshots) → MVP (2+1) → PRD → tool-compliant prompt (via the vendor's own guide) → build.

Why feed the vendor's own prompting guide into the prompt step?

Each builder has a dialect it responds to best; the vendor's guide encodes it, so the generated prompt lands as the platform expects instead of generically.

08

MVP: 2 core features + 1 AI differentiator

0:58:20

Two core features plus one AI differentiator — that's the whole recipe, and everything beyond it is scope creep wearing ambition's clothes.

The feature map from your research will be huge — that's the point of making it, and the trap. An MVP deliberately ships almost none of it: two core features that make the product usable at all, plus one AI differentiator that answers 'why this instead of the incumbents'.

For Task AI: projects-and-tasks structure, board/list status views, and an AI project generator that turns messy input — meeting notes, transcripts — into structured projects and tasks. The third item is load-bearing: without it you've built 'just another project management software'; with it you're in the AI-native category where the ecosystem is heading.

Worked example · from the session

Task AI's 2+1: projects/tasks, board views, and the AI generator that converts a pasted transcript into a structured project — the differentiator that justifies the app existing.

Why it matters

Validation speed. Two-plus-one is buildable in a session, testable with real users in a week, and cheap to throw away if wrong — the whole logic of the MVP stage.

People get this wrong

The MVP should include every feature competitors consider basic.

That's the roadmap, not the MVP. Ship the minimum that proves the differentiator; parity features come after validation.

Go deeper

In one line: Don't copy the whole feature universe — for 'Task AI': projects + tasks structure, board/list status views, and an AI project generator that turns messy input (notes, transcripts) into structured projects and tasks.

The AI differentiator is what keeps it from being 'just another project management software' — AI-native apps are where the ecosystem is going (1:24:59)

▶ Watch this taught: 0:58:20

Check yourself

Answer from memory first — the recall attempt is what makes it stick. Then reveal.

What's the MVP formula, and why the third element?

2 core features + 1 AI differentiator. The differentiator is what stops the product being a worse copy of the incumbents — it's the reason to exist.

You've got a 40-feature map from research. How many go in the MVP?

Three. The map tells you what the market values and what to build later — not what to build now.

09

Plan in ChatGPT/Claude, build in credit-based tools

1:00:24

Thinking is free in one kind of tool and metered in the other — so never pay credit prices for work a chat tool does for nothing.

ChatGPT and Claude let you iterate endlessly at no marginal cost: refine the feature map ten times, rewrite the PRD, argue about scope. Lovable, Replit and Emergent charge credits for every interaction — including the exploratory ones that produce nothing.

So the discipline is architectural: all research, planning and PRD work happens in the chat tool; only the finalized plan crosses over. The builder receives a finished prompt and spends its credits on what it's uniquely good at — producing the app. Cross that boundary sloppily and you pay builder prices for thinking.

Worked example · from the session

The session's Task AI build: every screenshot analysis, feature debate and PRD draft happened in ChatGPT for free; Lovable's credits only started burning when the finished prompt landed.

Why it matters

Credits are the real currency of vibe coding — most beginners exhaust free tiers on conversation, not construction. This one habit roughly doubles what a free tier builds.

Once the planning is done in ChatGPT... then you take the final plan and put it in Lovable to do the coding for you. You're saving the tokens. You're saving your credits.1:00:24
For your projects

You already run this split: Fable does the expensive judgment work in planned sittings, while free/cheap surfaces handle exploration. Same economics, different currency.

Go deeper

In one line: ChatGPT/Claude allow unlimited iteration at no marginal cost; Lovable/Replit/Emergent charge credits per interaction — so do all research, planning, and PRD work in the chat tool and hand over only the finalized plan.

▶ Watch this taught: 1:00:24

Check yourself

Answer from memory first — the recall attempt is what makes it stick. Then reveal.

What's the only thing that should ever be pasted into a credit-based builder?

The finalized, tool-compliant prompt (and its follow-up build instructions). All thinking happens where iteration is free.

Why does this rule exist at all?

Because the two tool classes price differently: chat tools have zero marginal cost per iteration, builders meter every interaction.

10

Lovable Cloud vs external Supabase

1:12:37

The most honest moment of the session: the planned Supabase build fought back, and the trainer pivoted to Lovable Cloud live — on purpose, mess and all.

Lovable used to partner with Supabase; now it bundles its own back end — database, auth, storage, edge functions, even AI models — as Lovable Cloud, and actively pushes it. External Supabase still works, but the wiring is deliberately harder: in the live build, secrets wouldn't stick and edge-function deploys demanded a terminal, until the trainer moved the whole build to Lovable Cloud mid-session.

The trade-off is clean: Lovable Cloud buys speed and zero setup for MVP validation, at the price of margin on every call and ecosystem lock-in; your own Supabase costs setup friction and buys control plus a generous free tier. Every platform — Bolt, Replit, Emergent — is running the same play for the non-technical majority, so this decision recurs no matter which builder you choose.

Worked example · from the session

The pivot itself (1:52-1:54): after fighting Supabase secrets, the build moved wholesale to Lovable Cloud — 'this was the goal, to show you how messy everything can be.'

Why it matters

You will face exactly this fork in your first serious build. Knowing it's a strategy (platforms monetizing the back end), not a technical verdict, lets you choose deliberately: platform cloud to validate, own infrastructure to keep.

People get this wrong

The platform's bundled back end and an external one are interchangeable — pick whichever is easier today.

They differ in who owns your data layer and what leaving costs. Bundled = fastest validation; external = portable app. Choose by which phase you're in.

Actually, this was the goal — to show you how messy everything can be when you go about building something, and these are all the actions that you have to take.1:54:05
Go deeper

In one line: Lovable now bundles database/auth/storage/edge-functions/AI as 'Lovable Cloud' (formerly a Supabase partnership) and actively pushes it; external Supabase still works but the wiring is deliberately harder.

Live pivot: after Supabase secrets wouldn't stick and edge-function deploys demanded a terminal, the build moved wholesale to Lovable Cloud (1:52:04–1:54:05)

Trade-off: Lovable Cloud = speed and zero setup for MVP/validation, but margin on every call and ecosystem lock-in; own Supabase = control, generous free tier (1:14:39)

Platforms (Lovable, Bolt, Replit, Emergent) all pushing their own clouds for the non-technical majority (1:56:14)

▶ Watch this taught: 1:12:37

Check yourself

Answer from memory first — the recall attempt is what makes it stick. Then reveal.

What does Lovable Cloud bundle, and what does it cost you?

Database, auth, storage, edge functions and AI models with zero setup — paid for in per-call margin and lock-in to Lovable's ecosystem.

When is external Supabase worth the friction?

The moment the app matters: real users, real data, or any future beyond the platform. Free tier plus control beats convenience once validation is done.

Why did the trainer keep the messy pivot in the session?

Deliberately — the decision-making under friction WAS the lesson. Real builds hit walls; the skill is choosing a path with clear eyes.

11

Row-level security (RLS)

1:18:53

Without row-level security, any logged-in user can read every row in your table — and real vibe-coded apps have leaked real user data exactly this way.

A Supabase table without RLS answers queries from anyone with your project URL and a valid session — which, in a vibe-coded app, means any user can fetch the whole users table: names, phone numbers, emails. The front end not *showing* the data is no protection; the endpoint still serves it.

The fix costs one checkbox: enable automatic RLS at project creation, and every table starts protected, with access defined by explicit policies. The session's warning wasn't hypothetical — Lovable-built apps have shipped with open tables and leaked data. This is the authorization half of the auth lesson, made concrete.

Worked example · from the session

The session's scare story, delivered over a live table: without RLS, the users table with phone numbers and emails is one query away from any authenticated stranger.

Why it matters

This is the single most damaging mistake a non-technical builder can ship. It's invisible in the UI, catastrophic in consequence, and prevented by one setting you now know exists.

People get this wrong

Security is something to add once the app has users.

The leak ships on day one with the first table. RLS is a creation-time checkbox, not a later hardening step.

Go deeper

In one line: Supabase table-level protection; without RLS anyone can fetch sensitive rows (users, phone numbers, emails) from the front end. Enable automatic RLS at project creation — real Lovable apps have leaked data this way (1:33:06).

Try it now

If you have any Supabase project, open it now and check RLS status on every table. Any table without it: that's your afternoon.

▶ Watch this taught: 1:18:53

Check yourself

Answer from memory first — the recall attempt is what makes it stick. Then reveal.

The UI never displays other users' data. Are you safe without RLS?

No. The endpoint serves whatever the table allows; the UI is decoration. Without RLS, any valid session can query everything.

What's the cheap prevention?

Enable automatic RLS at Supabase project creation — every table starts protected and you write policies to open access deliberately.

12

Secrets: .env, .env.example, .gitignore

how-to1:39:12

Your API keys are money — a leaked key is someone else's app running on your bill — and the whole protection system is three small files and one reflex.

.env is where real secrets live: API keys, service-role tokens, database credentials. .gitignore lists it so git can never ship it to GitHub. .env.example is the public twin — it names every key the app needs with placeholders, so a collaborator (or a coding agent) knows what to supply without ever seeing values.

The reflex completes the system: when a key leaks anyway — and the session leaked one live, pasting the Supabase service-role key into chat — you don't hope, you rotate. New key in the dashboard, old one dead. Since a service-role key bypasses RLS entirely, that reflex is the difference between an oops and a breach.

Worked example · from the session

Mid-build, the service-role key landed in the chat window; it was flagged as dangerous on the spot and the fix stated plainly — rotate it in the Supabase dashboard, because that key ignores every RLS policy you set.

Do it in this order

GotchasThe session's live demonstration: the Supabase service-role key got pasted into chat mid-build and had to be flagged and rotated. Leaks happen casually, not dramatically — the rotate reflex matters more than perfection.

Why it matters

Vibe coding hands secrets to more surfaces than traditional dev ever did — chat windows, build logs, generated code. The three-file pattern plus the rotate reflex is the entire defense, and it's learnable in ten minutes.

People get this wrong

My repo is private, so committing .env is fine.

Private repos get shared, cloned, made public, and scanned. The habit is absolute: secrets never enter version control, anywhere.

Go deeper

In one line: .env holds real keys and must never reach GitHub (list it in .gitignore); .env.example documents which keys are needed without values; share real secrets via a password manager.

Mid-build leak caught live: service-role key pasted in chat flagged as dangerous — rotate it in the Supabase dashboard (1:43:14)

▶ Watch this taught: 1:39:12

Check yourself

Answer from memory first — the recall attempt is what makes it stick. Then reveal.

What do .env, .env.example and .gitignore each do?

.env holds real secrets; .gitignore keeps it out of git; .env.example documents which keys are needed, valuelessly.

A key just appeared in a chat log. What now?

Rotate it in the provider's dashboard immediately. The old value is burned regardless of who you think saw it.

Why is the service-role key especially dangerous?

It bypasses row-level security completely — whoever holds it reads and writes every table.

13

Graduation path: Lovable → GitHub → local (VS Code + Claude Code)

how-to2:11:15

The moment your idea gets serious, the browser platform becomes the expensive place to work — and the exit is three clicks and one command.

The graduation path is the deliberate end of the vibe-coding story: Lovable's GitHub connect creates a real repository from your project; git clone brings it to your machine; VS Code opens it; Claude Code continues the work. From that point the platform is optional — you iterate locally where marginal cost is your subscription, not per-interaction credits.

This is also the lock-in antidote for everything else in the session: Lovable Cloud, bundled hosting, credit pricing all lose their grip once the code lives in a repo you own. The platforms know it too, which is why the sync exists but is never the button they point you at.

Worked example · from the session

Demonstrated live to the cohort: repo created from the Lovable project, clone URL copied from the green button, git clone run in the VS Code terminal, project open locally — with the ZIP download shown as fallback when the Outskill account's GitHub connect was blocked.

Do it in this order

GotchasDo this BEFORE credits run out, not after — the sync is free and instant, and once the repo exists every future move is covered. A coding agent can also do the clone for you on request.

Why it matters

'A GitHub account is non-negotiable' was the session's flattest imperative. The graduation path is why: it converts every platform experiment into an asset you keep.

People get this wrong

Apps built on vibe-coding platforms are stuck there.

Only if you never sync. The GitHub connect makes the platform a starting point, not a residence — that's the whole strategic design of the course's stack.

Lovable MVP built in the browser credits metered connect to GitHub → GitHub a repository YOU own green button → clone URL “non-negotiable” Your machine git clone <url> in the VS Code terminal (ZIP download = fallback) Claude Code iterate locally subscription, not credits the platform is now optional Graduate the moment the idea gets serious — the sync is free insurance Lock-in antidote: Lovable Cloud, bundled hosting and credit pricing all lose their grip once the code is in your repo.
The escape hatch — browser platform to code you own
For your projects

This is the same pattern as your media archive philosophy: platform access lapses, owned copies don't. Repo = V: drive for code.

Go deeper

In one line: Connect the Lovable project to GitHub (creates a repository), git clone locally, open in VS Code/Cursor, and continue building with Claude Code — the escape hatch when credits get expensive or the idea gets serious.

git clone <url> demonstrated in the VS Code terminal; coding agents can also clone on request (2:13:16)

ZIP download of the code base is the fallback when GitHub connect is blocked (2:25:28)

Dedicated GitHub/local-dev session comes later in the program

▶ Watch this taught: 2:11:15

Check yourself

Answer from memory first — the recall attempt is what makes it stick. Then reveal.

What are the four stations of the graduation path?

Lovable → GitHub (connect creates the repo) → local machine (git clone) → VS Code with Claude Code continuing the build.

When should you graduate?

When the idea is validated or the credits start mattering — whichever comes first. The sync itself should happen immediately; it's free insurance.

What's the fallback if GitHub connect fails?

Download the code base as a ZIP — less elegant, same escape.

Every concept, three clicks deep

The same concepts as a quick reference: the closed row is the glance, open is the study card, and every timestamp jumps into the recording.

01Front end vs back end (movie analogy)Front end is what the user sees and experiences (UI + UX — the finished movie);0:15:42

Front end is what the user sees and experiences (UI + UX — the finished movie); back end is where logic, storage, processing, and coordination happen (the production system behind it).

Instagram example: feed, likes, explore, profile = front end; storage, auth, APIs = back end (0:21:46)

UI = interface/layout, UX = experience/navigation; both combine into front end

02Authentication vs authorizationAuthentication is identity validation (are you a valid user);0:23:49

Authentication is identity validation (are you a valid user); authorization is access level (what tiers/features you may use — e.g. ChatGPT Plus vs Pro vs Enterprise).

03APIs and endpointsAPIs are the communication bridge between front end and back end: every function (post a reel, like, commen…0:25:52

APIs are the communication bridge between front end and back end: every function (post a reel, like, comment) has a web address (endpoint) that receives an HTTP request, runs code, and returns a response.

Instagram 'post a reel' walk-through: request with payload + auth details hits a dedicated URL, checks clear, response confirms publish (0:27:55)

Model APIs work the same way: a URL exposes GPT-class models, you pay via console credits

04Third-party integrationsOff-the-shelf services and libraries used instead of building everything yourself (movie VFX analogy) — pre…0:29:56

Off-the-shelf services and libraries used instead of building everything yourself (movie VFX analogy) — present on both front end and back end.

Supabase/Convex = managed back end (database, auth, storage, edge functions)

Tailwind CSS + shadcn/ui = styling frameworks that fix the 'same purple gradient' default look of vibe-coded apps (0:31:57)

Naming the libraries in your prompt is what separates experienced builders' output from generic output

05SDKs and developer librariesSoftware development kits let you use a vendor's product inside your app (OpenAI, Anthropic, Gemini SDKs);0:35:59

Software development kits let you use a vendor's product inside your app (OpenAI, Anthropic, Gemini SDKs); modern workflow is pasting the documentation URL into your coding agent and asking it to build the feature.

LangChain/LangGraph explained as the code layer under tools like n8n; non-technical builders should not hand-build LangChain (0:38:01)

06Servers, localhost, and cloud deploymentThe server is the machine where back-end code runs (movie editing-suite analogy).0:40:03

The server is the machine where back-end code runs (movie editing-suite analogy). Your laptop can serve on localhost; for the world you rent machines from AWS/GCP — vibe-coding platforms bundle this hosting, which is why apps live at *.lovable.app-style URLs (0:44:07).

07The vibe-coding framework (research → MVP → PRD → prompt → build)The session's core teachable: when you have an idea, first validate and research competitors, then define t…0:46:09

The session's core teachable: when you have an idea, first validate and research competitors, then define the MVP, produce a PRD, convert it into a tool-compliant prompt, and only then start building. Applicable to any domain and any coding tool.

Pricing pages are the research goldmine: competitors' comparison tables encode what customers find valuable — screenshot Trello, Asana, monday.com tables (0:50:11)

ChatGPT extracts all features from screenshots, groups into categories, de-duplicates, and tags basic vs advanced vs AI-differentiator (0:54:17)

PRD = the document PMs give engineers; here ChatGPT writes it for the coding agent (1:02:27)

Feed the vendor's own prompting guide (Lovable's, published 2025-01-16) plus the PRD to ChatGPT to get a 'Lovable-ready' first prompt scoped to MVP only (1:04:28)

08MVP: 2 core features + 1 AI differentiatorDon't copy the whole feature universe — for 'Task AI': projects + tasks structure, board/list status views,…0:58:20

Don't copy the whole feature universe — for 'Task AI': projects + tasks structure, board/list status views, and an AI project generator that turns messy input (notes, transcripts) into structured projects and tasks.

The AI differentiator is what keeps it from being 'just another project management software' — AI-native apps are where the ecosystem is going (1:24:59)

09Plan in ChatGPT/Claude, build in credit-based toolsChatGPT/Claude allow unlimited iteration at no marginal cost;1:00:24

ChatGPT/Claude allow unlimited iteration at no marginal cost; Lovable/Replit/Emergent charge credits per interaction — so do all research, planning, and PRD work in the chat tool and hand over only the finalized plan.

10Lovable Cloud vs external SupabaseLovable now bundles database/auth/storage/edge-functions/AI as 'Lovable Cloud' (formerly a Supabase partner…1:12:37

Lovable now bundles database/auth/storage/edge-functions/AI as 'Lovable Cloud' (formerly a Supabase partnership) and actively pushes it; external Supabase still works but the wiring is deliberately harder.

Live pivot: after Supabase secrets wouldn't stick and edge-function deploys demanded a terminal, the build moved wholesale to Lovable Cloud (1:52:04–1:54:05)

Trade-off: Lovable Cloud = speed and zero setup for MVP/validation, but margin on every call and ecosystem lock-in; own Supabase = control, generous free tier (1:14:39)

Platforms (Lovable, Bolt, Replit, Emergent) all pushing their own clouds for the non-technical majority (1:56:14)

11Row-level security (RLS)Supabase table-level protection;1:18:53

Supabase table-level protection; without RLS anyone can fetch sensitive rows (users, phone numbers, emails) from the front end. Enable automatic RLS at project creation — real Lovable apps have leaked data this way (1:33:06).

12Secrets: .env, .env.example, .gitignore.env holds real keys and must never reach GitHub (list it in .gitignore);1:39:12

.env holds real keys and must never reach GitHub (list it in .gitignore); .env.example documents which keys are needed without values; share real secrets via a password manager.

Mid-build leak caught live: service-role key pasted in chat flagged as dangerous — rotate it in the Supabase dashboard (1:43:14)

13Graduation path: Lovable → GitHub → local (VS Code + Claude Code)Connect the Lovable project to GitHub (creates a repository), git clone locally, open in VS Code/Cursor, an…2:11:15

Connect the Lovable project to GitHub (creates a repository), git clone locally, open in VS Code/Cursor, and continue building with Claude Code — the escape hatch when credits get expensive or the idea gets serious.

git clone <url> demonstrated in the VS Code terminal; coding agents can also clone on request (2:13:16)

ZIP download of the code base is the fallback when GitHub connect is blocked (2:25:28)

Dedicated GitHub/local-dev session comes later in the program

Tools referenced

ToolCoverageMomentContext
ChatGPTdemonstrated0:54:17Whole planning layer: feature extraction from pricing screenshots, MVP definition, PRD, and Lovable-ready prompt generation; trainer's current brainstorming default over Claude
Lovabledemonstrated1:08:32Built 'Task AI' end-to-end: scaffold, auth with email validation, secrets prompts, code view, GitHub connect, credit billing view; declined-then-adopted Lovable Cloud
Supabasedemonstrated1:16:52Org/project creation, password, automatic RLS, project URL + publishable/service-role keys, SQL editor migration run creating profiles/projects/tasks tables — then abandoned for Lovable Cloud when wiring fought back
Lovable Clouddemonstrated1:52:04Mid-session pivot target; full back end + AI models out of the box; 'what they are pushing so badly'
OpenAI APIdemonstrated1:22:56Key creation in console, credits top-up, powers the AI project generator; total spend for the session's feature ~3-4 cents (2:29:42)
GitHubdemonstrated2:09:05Repo sync from Lovable, repository concept, green-button clone URL; 'a GitHub account is non-negotiable'
VS Codedemonstrated2:13:16Terminal, git clone, opening the cloned project; trainer's daily editor (free) with Claude Code inside
Trello / Asana / monday.comdemonstrated0:50:11Pricing pages screenshotted live as the competitive-research corpus for the feature map
Claude Codeexplained2:38:04The post-MVP tool: trainer's team runs three $200 subscriptions, 3-4 parallel sessions (business/content/dev); can clone repos and take over Lovable projects
Tailwind CSSexplained0:31:57Fix for the identical 'purple gradient' Lovable look; name it in prompts or reverse-engineer screenshots of UIs you like
shadcn/uiexplained0:33:58With Tailwind, the combo that makes vibe-coded apps look like production apps
LangChain / LangGraphexplained0:35:59Code layer under n8n-style tools; agents via LangGraph; non-technical builders should point coding agents at the docs instead of hand-building
Cursormentioned1:33:06Local alternative alongside Claude Code; has its own fast model; free tier usable as plain editor
Antigravitymentioned1:35:08Grouped with Cursor/Claude Code as local coding tools; don't pay for multiple subscriptions at once
Replit / Bolt / Emergentmentioned1:54:05Peer web vibe-coding platforms, all pushing their own cloud ecosystems; learner Syed graduated from Emergent to Claude Code/Cursor/Codex
Ollamamentioned2:31:44Q&A: local open-source inference; RAM-hungry, trainer found 7B slow on an 18GB MacBook; building against it still needs a paid coding agent
Vercel / Railwaymentioned2:36:03Trainer's agency deploys client MVPs here and shares hosted links for feedback loops
Perplexitymentioned2:17:21Screenshot-a-problem debugging companion alongside ChatGPT

Session materials

Archived locally on V: — click to open. Companion pages link to the LMS.

Action items

Resources mentioned

Resources
  • docLovable prompting guide (official, published 2025-01-16 — feed it to ChatGPT to generate tool-compliant prompts) 1:04:28
  • docCompetitor pricing pages as research corpus (Trello, Asana, monday.com comparison tables) 0:50:11
  • docSession code base — ZIP download promised to learners (GitHub sync blocked on the Outskill account) 2:25:28
  • docTrainer's generated images/prompt set shared at close 2:23:27

Extraction notes

This page was built from an auto-generated transcript, which garbles product and people's names. Those were corrected silently in everything above and logged here for transparency. The warnings flag claims that were true on the recording day but change fast.

Transcript corrections applied

The transcript saysThe trainer actually means
white coding / wide coding / by coding / pipe holding / wipe codevibe coding
ChargeGPD / Chargegbt / Chargeberry / chat GPD / Charge GBDChatGPT
SuperBase / super base / Superway / Subabase / supervisorSupabase
Cloud Code / cloud code / CloudQuote / plot code / claw / Cloud QuoteClaude Code
ShadCM / chat scene / chassis / Shad c n / CSMshadcn/ui
statement CSS / tailwind, CSSTailwind CSS
replet / replicate (as tool name)Replit
codecsCodex (OpenAI)
Alama / Alava / Olamah / Olava / Rava / OlaOllama
VersalVercel
land chain / LandgraaffLangChain / LangGraph
n a 10 / any 10 / any event / Landflown8n (and LangFlow)
dot e m v.env
Bolt / Bold / BlueBolt (and 'We Blue' likely 'Bolt' or product name, uncertain)
Harshid / Harshik / Harshad / Ashik (for the host)Harshit (trainer); Abhishek (host)
Agent devicetrainer's AI agency name (garbled, unverified)
Messi (in 'Messi, LM Studio, and Rava')uncertain — likely MLX or llama.cpp, in a local-inference question with LM Studio and Ollama
5.5 / GPT 5.5GPT model version as stated in session (point-in-time claim)

True on recording day — verify before relying