Prompting Masterclass for Web App Development
Your prompts are the single biggest lever on the quality of what AI produces for you. A vague prompt gets vague code. A structured, specific prompt gets production-ready code on the first try. This chapter teaches you exactly how to think and write prompts like a professional.
Why Your Prompts Matter More Than You Think
AI models like Claude and ChatGPT are not search engines. They do not look up answers — they generate responses based on the exact context you give them. The model's output quality is directly proportional to the quality of your input.
Result: Generic form with inline CSS, no error handling, no TypeScript, no Supabase, no redirect after login. You have to ask 5 follow-up questions to fix it.
Result: Production-ready code on the first try. Correct imports, proper error handling, loading states, right redirect, matching your exact stack.
🧰 The Anatomy of a Perfect Dev Prompt
Every great developer prompt has the same six ingredients. You do not need all six every time — but knowing them lets you add the right ones for the right task.
-
ROLE
Tell the AI who to be
Set the expertise level and perspective.
"Act as a senior Next.js developer"or"You are an expert in Supabase RLS policies". This primes the model to use the right vocabulary, make senior-level decisions, and skip beginner explanations.ExamplesAct as a senior full-stack developer specialising in Next.js and Supabase. Act as a UI/UX designer who writes production React code. Act as a security engineer reviewing authentication code. You are an expert in Stripe webhook handling and subscription billing. -
TASK
State exactly what you want built
One sentence, one clear deliverable. Avoid combining multiple unrelated tasks.
"Build a user profile edit form"not"make me a profile thing and also fix the login and add dark mode".ExamplesBuild a user profile edit form component. Write a Supabase RLS policy for the orders table. Create a Stripe checkout API route for monthly subscriptions. Design a responsive sidebar navigation component. -
STACK
Specify your exact technology stack
This is the most commonly forgotten ingredient. Without it, the AI guesses — and it might give you class components when you want hooks, or JavaScript when you need TypeScript.
Stack Declaration TemplateStack: - Framework: Next.js 14 App Router - Language: TypeScript - Styling: Tailwind CSS + shadcn/ui - Backend: Supabase (PostgreSQL + Auth) - State: React hooks only (no Redux) - Package manager: npm -
SPEC
List the specific requirements
Bullet points work best. Each requirement is a feature, a behaviour, or a constraint. Be precise: instead of "good error handling" say "show an inline red error message below the field that caused it".
Requirements FormatRequirements: - Email and password fields with HTML5 validation - Password strength indicator (weak/medium/strong) - Show/hide password toggle button - Loading spinner on the submit button during API call - Inline error message from Supabase (e.g. "Invalid credentials") - On success: redirect to /dashboard using Next.js router - On mobile: full-width button, larger touch targets (44px min) -
DESIGN
Describe the visual direction
Reference real products you like as shorthand. "Apple, Linear, Stripe" tells Claude more than "clean and modern". Add constraints: "no gradients", "dark mode required", "border-radius 12px", "monochrome colour palette".
Design Direction ExamplesDesign: Apple Human Interface Guidelines aesthetic. Ultra-clean, lots of whitespace, no decorative elements. Use system font stack. No gradients. Subtle borders only. Design: Stripe Dashboard inspired. Dark sidebar, white main area, data-dense but not cluttered. Accent colour: #0072CE. Dark mode supported. Design: Linear.app style. Near-black background, minimal chrome, keyboard-first feel. Monospace font for code/data. Micro-animations on hover. -
OUTPUT
Specify the output format
Tell the AI what to give you: a single file, multiple files, explanation only, code only, or code with comments. This prevents getting a wall of text when you just needed the function.
Output Format InstructionsOutput: Single TypeScript file. No explanation needed, code only. Output: Separate files for component, types, and API route. Show each. Output: Just the SQL migration. No explanation. Output: Code with inline comments explaining each decision. Output: First explain your approach in 3 sentences, then give the code.
7 Power Techniques That Get Better Code
These are the specific patterns that separate developers who get great AI output from those who get generic output. Each one is immediately usable.
Give Context About Your Existing Code
The most powerful thing you can do is tell the AI what already exists. Paste your current code, your file structure, or your database schema. Without this, the AI invents assumptions that conflict with your project.
Use "Before / After" Framing for Edits
When asking for modifications, show what exists now and describe what you want it to become. This eliminates ambiguity completely.
Step-By-Step Thinking for Complex Tasks
For multi-step implementations (like setting up Stripe billing), ask the AI to plan first, then implement. This prevents it from rushing into code that misses steps.
Provide Negative Constraints (What NOT to Do)
Telling AI what to avoid is just as important as telling it what to do. This prevents common AI bad habits like over-engineering, adding unwanted dependencies, or changing things you did not ask about.
Reference Real Products for Design Direction
Describing visual style in abstract terms ("clean", "modern", "professional") gives AI nothing to work with. Naming real products it has seen is the most precise design language that exists.
| What You Want | How to Say It |
|---|---|
| Clean, minimal white UI | "Apple Human Interface Guidelines aesthetic. Linear.app style." |
| Data-dense dashboard | "Stripe Dashboard. Vercel Dashboard. GitHub style." |
| Dark developer tool | "Linear.app dark mode. Raycast. Warp terminal aesthetic." |
| Bold, colourful SaaS | "Notion. Figma. Loom landing page style." |
| Enterprise / corporate | "Salesforce Lightning. Microsoft Fluent Design." |
| Aviation / operations | "Boeing EFB style. Aviator-dark. High-contrast data readability." |
The Debugging Prompt Formula
When something is broken, structure your debug prompt with four elements: what you expected, what actually happened, the error message, and the relevant code. Miss any one and you get a generic unhelpful answer.
Iterate in Layers, Not All at Once
Beginners try to get everything in one prompt. Professionals build in layers: structure first, then logic, then styling, then edge cases. Each layer is a separate prompt. This produces much better results at each stage.
📄 Copy-Paste Prompt Templates for Every Dev Task
Fill in the brackets and send. These are structured to get production-ready results on the first try.
🎨 UI Component Prompt
🗄 Database Schema Prompt
🔐 Auth Feature Prompt
💳 Stripe Integration Prompt
🐞 Debug Prompt
💡 Real Before & After — Rasika's Own Prompts Improved
Here is the exact transformation from a basic prompt to a professional one, using the kind of requests you have been sending.
Issues with current design:
- Cards feel too cramped
- Status colours are hard to read
- No visual hierarchy
Direction: Stripe Dashboard style. White cards, more padding, status as colour-coded pills, section headers in uppercase 11px grey. Dark mode must work."
Stack: Next.js 14, TypeScript, Supabase (profiles table has stripe_customer_id column already).
Need:
1. /api/stripe/checkout POST route that creates a Checkout Session for price_xxx
2. /api/stripe/webhook POST route handling checkout.session.completed and subscription.deleted
3. A Subscribe button component
Do NOT change my existing Supabase auth setup. Output all three files separately."
EXPECTED: After signIn(), redirect to /dashboard
ACTUAL: Page stays on /login, no error shown
ERROR: None in console. Network tab shows 200 response from Supabase.
CODE: [paste the signIn function]
TRIED: router.push() — no redirect. window.location.href — also nothing.
Stack: Next.js 14 App Router, @supabase/ssr."
⚡ Prompting Quick Reference
Bookmark this. Check it before you send any prompt to Claude or ChatGPT.
Set the Role
"Act as a senior Next.js developer" before every technical prompt
Name Your Stack
Always say: Next.js 14, TypeScript, Tailwind, Supabase, shadcn/ui
List Requirements
Bullet points, not paragraphs. One requirement per line
Add Constraints
"Do NOT add packages / rewrite existing code / use class components"
Name a Design Ref
Apple, Linear, Stripe, Vercel, Notion — not "clean and modern"
Specify Output Format
"Code only" / "Show all files separately" / "Explain first, then code"
Paste Existing Code
Always paste what you have. Never describe it abstractly
One Task Per Prompt
Do not mix UI + auth + database in one message. Split them
Build in Layers
Structure → Logic → Styling → Edge cases. Four prompts, not one
Which App Do You Use to Build?
First question every new AI developer asks: do you build inside Claude.ai? Inside ChatGPT? Do you need a separate coding app? Here is the direct, honest answer.
🤖 ChatGPT — chatgpt.com
🔗 chatgpt.comNo dedicated dev environment. GPT-4o writes code you paste into Cursor. OpenAI has a "Codex" CLI tool in beta but it is not a full IDE. ChatGPT Canvas lets you iterate on code in a side panel — handy but still not a real editor with file management.
🎨 Claude.ai — You are here
🔗 claude.aiClaude.ai is where you design UI, generate React components, write copy, and prototype ideas. The Artifacts panel previews HTML and React in real time — ideal for prototyping and visual iteration. But you cannot run servers, manage project files, or commit to GitHub from here.
💻 Cursor Pro — Your Main IDE
🔗 cursor.comBuilt on VS Code with AI built in at every layer. Agent mode reads your entire codebase and edits multiple files at once. This is where you write code, run your local server, connect to Supabase, commit to GitHub, and deploy to Vercel. Use this every day.
📄 VS Code — Free Alternative
🔗 code.visualstudio.comThe free version of Cursor without the built-in AI. Add GitHub Copilot as an extension for AI assistance. Good for learning but less powerful than Cursor's Agent mode. Start with Cursor if budget allows.
✓ The Correct Daily Workflow
All three AI tools work together. Here is how they connect:
Complete macOS Developer Setup
Clean installation of every tool you need, in the correct order. Open Terminal with Cmd+Space → Terminal → Enter and copy-paste each command below.
Step 1 — Homebrew (macOS Package Manager)
Homebrew lets you install developer tools with one command. Install this first, before everything else.
🔗 brew.shStep 2 — Node.js via nvm
nvm lets you switch Node versions between projects. Install nvm, then use it to install Node.
🔗 nodejs.org 🔗 nvm on GitHubStep 3 — Git
macOS includes an old version of Git. Install the latest via Homebrew and configure your identity.
🔗 git-scm.comStep 4 — Cursor Pro (Your IDE)
Download the macOS app. This is your primary development environment.
🔗 cursor.com — Download for MacStep 5 — GitHub CLI + SSH Key
🔗 github.com — Create account 🔗 GitHub CLIStep 6 — Vercel CLI
🔗 vercel.com — Create account 🔗 Vercel CLI docsStep 7 — Supabase CLI
🔗 supabase.com — Create account 🔗 CLI docsStep 8 — Stripe CLI (Payment Testing)
🔗 stripe.com — Create account 🔗 Stripe CLI docsStep 9 — Create First Next.js Project
🔗 nextjs.org/docsFull Stack Architecture
How every layer of your app connects. Every piece here is covered in detail in the chapters below.
Your Professional Tech Stack
Every tool, its official site, its cost, and exactly why it is in the stack.
ChatGPT (GPT-4o)
Architecture, database design, debugging logic, test writing. Use when you need strong reasoning about how to structure something.
🔗 chatgpt.comClaude (Sonnet 4.5)
Premium UI generation, React components, landing pages, copy writing. Live preview in Artifacts. Best frontend code quality of any model.
🔗 claude.aiCursor Pro
AI-first code editor. Agent mode edits multiple files at once. Your daily driver for all coding, debugging, and git operations.
🔗 cursor.comNext.js 14
React framework with App Router, server components, API routes, image optimisation, and edge rendering. Standard for modern full-stack apps.
🔗 nextjs.org 🔗 DocsSupabase
PostgreSQL + Auth + Storage + Realtime from one dashboard. Open-source. Free tier handles your first app completely.
🔗 supabase.com 🔗 DocsVercel
Zero-config deploy from GitHub. Every PR gets a preview URL. Custom domains, analytics, edge functions. Most personal apps are free.
🔗 vercel.com 🔗 DocsGitHub
Version control and CI/CD. Every push to main auto-deploys via Vercel. Free for unlimited public and private repos.
🔗 github.com 🔗 DocsStripe
Industry standard payments. Subscriptions, one-time, Apple Pay, Google Pay. No monthly fee — pay only when you earn money.
🔗 stripe.com 🔗 DocsUpstash Redis
Serverless Redis for caching, rate limiting, and session storage. Charged per request, scales to zero. Perfect caching layer above Supabase.
🔗 upstash.com 🔗 DocsUsing AI Tools Effectively
The developer who ships fastest knows exactly what to ask each AI, and what not to ask it.
🤖 Right AI for the Right Task
| Task | Best Tool | Why |
|---|---|---|
| Plan database schema | ChatGPT | Strong relational reasoning |
| Design a dashboard UI | Claude | Cleanest Apple-like UI output |
| Implement a feature | Cursor Agent | Edits multiple files at once |
| Write unit tests | ChatGPT | Good at structured repetitive code |
| Landing page copy | Claude | More natural, persuasive writing |
| Debug runtime errors | Cursor Tab | Sees your actual code in context |
| Complex SQL queries | ChatGPT | Excellent SQL reasoning |
| React component from scratch | Claude | Consistent, accessible output |
Prompting ChatGPT for Architecture
Prompting Claude for UI
💻 Cursor Pro — Agent Mode Workflow
Agent mode reads your full codebase and implements features across multiple files at once.
-
1
Open project:
cursor my-project/Cursor indexes your entire codebase for AI context. The more context it has, the better its suggestions.
-
2
Open Agent with Cmd+I
Different from Cmd+L (chat). Agent can create, edit, and delete files. Chat only suggests changes you apply manually.
-
3
Write a specific feature request
Good example:
"Add a profile page at /app/profile/page.tsx that fetches user data from Supabase profiles table, shows avatar/name/email, and has an edit form with optimistic updates and toast notifications on save" -
4
Review every diff before accepting
Cursor shows colour-coded diffs of every file change. Read each one. Accept good changes with ✓, reject or edit bad ones.
-
5
Test and commit
npm run dev→ test manually in browser →git add . && git commit -m "feat: user profile page"
🔗 How to Connect All Tools — Real Example
The exact sequence from idea to live paying product, using every tool at the right moment.
-
1
ChatGPT → database schema
Prompt ChatGPT to design your tables. Copy the output SQL.
ChatGPT Output → supabase/migrations/001_init.sqlCREATE TABLE profiles ( id UUID REFERENCES auth.users PRIMARY KEY, full_name TEXT, avatar_url TEXT, stripe_customer_id TEXT, plan TEXT DEFAULT 'free', created_at TIMESTAMPTZ DEFAULT NOW() ); ALTER TABLE profiles ENABLE ROW LEVEL SECURITY; CREATE POLICY "Own data only" ON profiles FOR ALL USING (auth.uid() = id); -
2
Supabase → run the migration
Paste SQL in Supabase Dashboard → SQL Editor → Run. Or via CLI:
supabase db push -
3
Claude.ai → generate the UI component
Prompt Claude for a React profile card. See it live in the Artifacts panel. Copy the code.
-
4
Cursor Agent → wire component to data
Paste the component into
components/ProfileCard.tsx. Then in Agent mode:Cursor Agent PromptI pasted a ProfileCard component into components/ProfileCard.tsx Wire it up to Supabase: - Fetch the current user's profile from 'profiles' - Add TypeScript types for the profile object - Show a skeleton loader while fetching - Show an error state if fetch fails - Connect the edit button to an edit modal -
5
GitHub + Vercel → ship it
git push origin main→ Vercel detects the push → builds → deploys to production URL in ~30 seconds. No manual steps. -
6
Stripe → add billing
Create products in Stripe Dashboard. Implement Checkout API route in Cursor. Test with
stripe trigger checkout.session.completed. Switch to live keys to accept real payments.
Database Strategy
Choosing the wrong database type is the most common early mistake. Here is exactly when to use what.
Database Types Compared
| Type | Best For | Tools | Scale |
|---|---|---|---|
| Relational SQL | Structured data, relationships, transactions | PostgreSQL (Supabase) | 100M+ rows |
| Document NoSQL | Flexible schemas, nested JSON | MongoDB, Firestore | Good; joins costly |
| Vector DB | AI similarity search, embeddings | Pinecone, pgvector | Billions of vectors |
| Key-Value Cache | Sessions, rate limiting, counters | Redis, Upstash | Millions ops/sec |
| Time-Series | Metrics, analytics, IoT | TimescaleDB | Trillions of points |
📊 Large-Scale Database Patterns
Indexing Strategy
Single biggest performance win for tables with millions of rows.
Cursor Pagination
Never use OFFSET on large tables — it scans all previous rows.
Redis Caching
🔗 upstash.comConnection Pooling
Serverless functions create a new DB connection per request. Use Supabase's PgBouncer pooler to avoid hitting connection limits.
Authentication System A→Z
Complete implementation: registration, login, logout, Google OAuth, 2FA TOTP, and Passkeys using Supabase Auth.
Install & Configure
Register / Login / Google / Logout
Auth Callback Route (required for OAuth & email confirm)
🛡 2FA (TOTP) + Passkeys (WebAuthn)
TOTP — Google Authenticator / Authy
Passkeys — Face ID / Touch ID
🔗 simplewebauthn.devStripe Payments — Complete Integration
Subscriptions, one-time payments, webhooks, and customer portal from scratch.
npm install stripe @stripe/stripe-js. Add STRIPE_SECRET_KEY and STRIPE_WEBHOOK_SECRET to .env.local.Checkout Session API Route
🔔 Webhooks
Without webhooks your database will not update when users pay or cancel. This is the most critical part.
stripe listen --forward-to localhost:3000/api/stripe/webhook then in a second tab: stripe trigger checkout.session.completedGitHub & GitLab — Version Control + Upload Your App
GitHub and GitLab are where your code lives in the cloud. They act as the source of truth that every deployment platform (Cloudflare, Vercel, Netlify) pulls from. Here is how to upload your W5-PNL Generator and manage it properly.
🔗 github.com 🔗 gitlab.com 🔗 GitHub docsGitHub vs GitLab — Which Should You Use?
| Feature | GitHub | GitLab |
|---|---|---|
| Popularity | ★ Industry standard, largest community | Strong in enterprise |
| Cloudflare integration | ✓ Direct built-in Connect GitHub button | ✓ Also supported, Connect GitLab button |
| Vercel integration | ✓ Native, one-click | ✓ Supported |
| Free private repos | Unlimited | Unlimited |
| Built-in CI/CD | GitHub Actions | GitLab CI/CD (more powerful) |
| Best for | Solo devs, open source, most tutorials | Teams, self-hosted, advanced pipelines |
🚀 Upload Your W5-PNL Generator to GitHub — Step by Step
Your app currently runs on Cloudflare but its source code probably only exists on your computer. GitHub is where you store and version that code so Cloudflare can pull it automatically on every update.
-
1
Create a GitHub account and new repository
Go to github.com → Sign up (free) → New Repository → Name it
w5-pnl-generator→ Set to Private → Do NOT add README yet → Create repository. -
2
Open Terminal in your project folder
In Finder, navigate to the folder containing your W5 HTML/JS files. Right-click the folder → New Terminal at Folder. Or:
cd /path/to/your/w5-project -
3
Initialise Git and connect to GitHub
Terminal — run once per project# Initialise git in your project folder git init # Stage all your files git add . # Create first commit git commit -m "initial commit: W5 PNL Generator" # Link to your GitHub repo # (copy this URL from GitHub after creating the repo) git remote add origin git@github.com:YourUsername/w5-pnl-generator.git # Push to GitHub git branch -M main git push -u origin main -
4
Verify on GitHub
Go to github.com → your repo. You should see all your files listed. Every future change:
git add . && git commit -m "description" && git push
Daily Git Workflow
Cloudflare Workers & Pages
Your W5-PNL Generator already runs on Cloudflare. Here is exactly what Cloudflare is, what you are using, and how to connect your GitHub repo so deployments happen automatically.
🔗 cloudflare.com 🔗 Workers docs 🔗 Pages docsWhat Is Cloudflare? Two Products You Need to Know
Cloudflare Workers
Serverless JavaScript that runs at the edge (in 300+ data centres worldwide). Like AWS Lambda but faster and with a very generous free tier. Your W5 app likely runs as a Worker or is served via Workers.
Cloudflare Pages
Static site and JAMstack hosting. Connects directly to GitHub/GitLab. Every git push auto-deploys. Every PR gets a preview URL. This is what the screenshot you shared is showing — Create a Worker in Pages.
⚖ Cloudflare vs GitHub — They Are Not Competitors
This is the most important thing to understand: GitHub stores your code. Cloudflare runs your code. They work together, not against each other.
| Platform | What It Does | Your Code Lives Here? | Runs Your App? |
|---|---|---|---|
| GitHub | Stores, versions, and backs up your source code | ✓ Yes — source of truth | ✕ No |
| GitLab | Same as GitHub, different platform | ✓ Yes (alternative) | ✕ No |
| Cloudflare | Deploys and serves your app to users globally | ✕ Pulls from GitHub | ✓ Yes — runs it |
| Vercel | Alternative to Cloudflare for deploying apps | ✕ Pulls from GitHub | ✓ Yes — runs it |
Should You Switch from Cloudflare to GitHub? Do You Need To?
| Feature | Cloudflare Pages | Vercel |
|---|---|---|
| Free tier | Unlimited requests, 500 builds/mo | 100GB bandwidth, fair usage |
| Edge network | 300+ locations worldwide | ~70 regions |
| Static site hosting | Excellent — purpose-built | Excellent |
| Next.js full-stack | Supported but some caveats | Native, zero-config |
| Serverless functions | Workers (extremely fast cold starts) | Vercel Functions |
| Custom domains + SSL | Free, built into Cloudflare DNS | Free |
| Best for | Static apps, single-page apps like W5 | Next.js full-stack apps |
🔗 Connect GitHub to Cloudflare — Exactly as Shown in Your Screenshot
This is the screen you photographed: Create a Worker → Ship something new. Here is the exact step-by-step to link your GitHub W5 repo.
-
1
First: push W5 to GitHub
Complete the GitHub upload steps in Chapter 8 above. Your W5 files must be in a GitHub repo before Cloudflare can find them.
-
2
Go to Cloudflare Dashboard → Workers & Pages
Log in at dash.cloudflare.com → Left sidebar → Workers & Pages → Create button → Pages tab (for static sites like W5).
-
3
Click "Connect GitHub" (as in your screenshot)
Click the Connect GitHub button. Cloudflare opens GitHub's OAuth page. Click Authorize Cloudflare Pages. Select which repos to grant access to — choose your W5 repo (or all repos).
-
4
Select your repository
Back in Cloudflare, you will see your GitHub repos listed. Click on
w5-pnl-generator→ Begin setup. -
5
Configure build settings
For a plain HTML file (no build step needed):
Cloudflare Pages Build SettingsProject name: w5-pnl-generator Production branch: main Framework preset: None Build command: (leave empty) Build output dir: / (or . for root) Root directory: / (leave as root)If your file is named
index.htmlin the root, Cloudflare serves it automatically. If it is namedW5-PNL_Generator_v10.html, either rename it toindex.htmlor set the output path. -
6
Save & Deploy
Click Save and Deploy. Cloudflare pulls your code from GitHub and deploys it. You get a URL like
w5-pnl-generator.pages.dev. -
7
Every git push now auto-deploys
From now on: edit your file locally in Cursor →
git push→ Cloudflare automatically detects the push and deploys the new version within 60 seconds. No manual uploads needed.
📄 Alternative: Upload Static Files Directly (No GitHub)
You also see "Upload your static files" in the screenshot. This is the simplest option but has no auto-deploy — you manually upload each time you update.
🔗 Connect GitLab to Cloudflare (same process, different button)
The screenshot shows both Connect GitHub and Connect GitLab buttons side by side. If you use GitLab instead:
- 1
Push your code to GitLab
Same as GitHub:
git remote add origin git@gitlab.com:YourUsername/w5-pnl-generator.gitthengit push -u origin main - 2
Click "Connect GitLab" on the Cloudflare screen
Cloudflare opens GitLab's OAuth page. Authorize → select your repo → configure build settings (same as above). Everything else is identical to the GitHub flow.
Vercel Deployment
Zero-config deployment connected to GitHub. Every push to main deploys automatically in 30 seconds.
🔗 vercel.com 🔗 Vercel docs- 1
Connect GitHub repo
vercel.com → New Project → Import Git Repository → select repo. Vercel auto-detects Next.js — zero config needed.
- 2
Add environment variables
Project Settings → Environment Variables. Copy everything from .env.local here. Encrypted at rest.
- 3
Push and watch it deploy
git push origin main→ Vercel builds → deploys. Every PR also gets its own preview URL. - 4
Add custom domain
Project Settings → Domains. Vercel handles SSL certificates automatically via Let's Encrypt.
⚡ Performance Best Practices
Always use next/image
Auto resizes, compresses, serves WebP/AVIF. Never use a raw img tag.
Default to Server Components
Only add 'use client' for interactivity. Less JS shipped = faster pages.
Cache expensive queries
Use unstable_cache for reads. Call revalidatePath after mutations.
Analyse your bundle
Run npx @next/bundle-analyzer to see what is bloating your JS. Use dynamic imports for heavy libraries.
Build These Projects
Practice everything in this handbook by building these in order. Each introduces new concepts and builds on the last.
Photography Client Portal
Clients log in, view galleries, approve shots. Auto-invoice on approval. File uploads with Supabase Storage.
Airport Ops Dashboard
Real-time flight status for ground operations. Role-based access, shift handover notes, Realtime subscriptions.
AI Chat App
ChatGPT-style app with streaming responses, history in Supabase, multiple models, usage limits per tier.
W5 PNL Generator SaaS
Your existing tool as multi-tenant SaaS. Organisation accounts, team members, subscription billing, PDF export.
6-Month Learning Roadmap
Realistic month-by-month progression from zero to shipping paid products.
-
Month 1
Foundation — macOS Setup, Git, GitHub, Vercel
Complete Chapter 1 of this handbook. Create your first repo, deploy a Next.js site to Vercel, build a portfolio site. The goal: a live URL you can share.
GitGitHubVercelNext.js basics -
Month 2
Frontend — React, TypeScript, Tailwind, Cursor Pro
React hooks (useState, useEffect, useContext). TypeScript types. Tailwind utility classes. Master Cursor Agent mode. Build UI components from Claude.ai prompts.
ReactTypeScriptTailwindCursor -
Month 3
Full Stack — Next.js App Router, API Routes, Server Actions
Server vs client components. API routes. Server Actions for form submissions. Dynamic routes. Connect your first Supabase database. Build a simple data-driven app.
App RouterAPI RoutesServer Actions -
Month 4
Backend — Supabase, Auth, Storage, RLS
Full auth system (email, Google, 2FA). Row-Level Security policies. File uploads via Storage. Build the Photography Portal project end-to-end.
SupabaseRLSAuthStorage -
Month 5
Monetisation — Stripe, Subscriptions, Webhooks
Stripe Checkout. Subscription tiers. Webhook handler. Customer Portal. Gate features behind plan. Take your first real payment from a customer.
StripeWebhooksSubscriptions -
Month 6
Launch — AI Features, Performance, Mobile
Integrate OpenAI or Claude API for AI features. Optimise performance scores. Add React Native / Expo for mobile. Launch your SaaS publicly and acquire first customers.
OpenAI APIReact NativeLaunch 🚀