TL;DR: I ship a working web app in two to four days by keeping the stack small (Astro, Supabase, Vercel, Claude Code) and the process tight. Day one is scope plus database schema, day two is the core build, day three is polish and deploy. The AI writes most of the code, but I scope every task, read every change, and run tests. That is how I shipped 40 plus apps and PWAs in 2026.
People assume "build a web app with AI" means you type a wish and get a product. It does not work like that. The AI is a very fast coder that needs a clear spec and a real reviewer. When you give it both, days is a fair timeline for a focused tool. Here is exactly how I do it.
The stack I use and why
I use the same four tools for almost every app. Boring is the point. When the stack never surprises me, all my attention goes to the actual product.
- Astro for the frontend. It ships zero JavaScript by default and only adds it where you ask, so pages are fast and simple. See the Astro docs on why Astro.
- Supabase for the database, auth, and storage. It is hosted Postgres with a real SQL editor, row level security, and auth you can wire up in minutes. See the Supabase docs.
- Vercel for hosting. I connect the git repo once, and every push to main deploys automatically with preview URLs on branches. See Vercel deployments.
- Claude Code as the AI coding agent. It runs in my terminal, reads the whole repo, edits files, and runs commands. It is the thing that turns a specced task into a diff I can review.
This stack has carried a personal CRM, a link shortener with analytics and web push notifications, a client portal, and the CMS behind this very site. Same four tools each time.
The day-by-day process
Day 1: scope and schema
I do not write code on day one. I write down the single job the app does, the three or four screens it needs, and the exact tables in the database. The schema is the spine of the whole build, so I get it right before anything else. I sketch it in plain English, then have Claude Code turn it into a Supabase migration that I read line by line.
- Write one sentence: what does this app do for the user.
- List the screens. Cut anything that is not needed for version one.
- Define the tables, columns, and relationships. Add row level security rules.
- Turn it into a migration and apply it to Supabase.
Day 2: the core build
Now I build the main flow. I go feature by feature, giving Claude Code one small task at a time. Auth first, then the create and read paths, then update and delete. I keep the app running the whole time and check each feature in the browser before moving to the next. If something feels off, I stop and fix it right there instead of piling more on top.
Day 3: polish and deploy
Day three is the difference between a demo and a product. I tighten the design, add empty states and loading states, handle errors, and make it work on mobile. If it is a PWA, I add the manifest and a service worker so it installs to the home screen and works offline. Then I connect the repo to Vercel, push to main, add a custom domain, and it is live. Deploys take minutes because the setup is the same every time.
How I actually work with the AI
The whole thing lives or dies on how you talk to the AI. My rule is small specced tasks, never big vague ones. "Build the app" produces slop. "Add a form on the new-link page that inserts a row into the links table and redirects to the dashboard" produces a diff I can check in thirty seconds.
- One task at a time. I ask for a single change, read it, then ask for the next. Small diffs are easy to review.
- Tests on the risky parts. Auth, payments, and data writes get tests. If the AI breaks them later, I know instantly.
- I read every diff. Every line. The AI is confident even when it is wrong, so I am the reviewer, not a spectator.
- I keep the app running. I check each change in the browser before I accept it.
This is the opposite of vibe coding. Vibe coding is accepting whatever shows up without reading it. That is how you get an app that demos fine and falls over in production.
What I do not let AI do
The AI is great at writing code once the shape is clear. It is bad at judgment. So a few things stay with me.
- The database schema. I design it. A bad schema is expensive to fix later, so I never rubber-stamp what the AI suggests.
- Security and auth rules. Row level security and permissions get my eyes on every line. This is where quiet leaks happen.
- Secrets and keys. API keys and env vars are mine to handle. The AI never touches them.
- Product decisions. What to build and what to cut is a judgment call, and that is my job, not the model's.
A realistic snippet
Here is the shape of a real Astro page that reads from Supabase. Nothing fancy, and that is the point.
---
// src/pages/dashboard.astro
import Layout from '../layouts/Layout.astro';
import { supabase } from '../lib/supabase';
const { data: links } = await supabase
.from('links')
.select('slug, url, clicks')
.order('clicks', { ascending: false });
---
<Layout title="Dashboard">
<ul>
{links?.map((link) => (
<li>{link.slug} -> {link.clicks} clicks</li>
))}
</ul>
</Layout> And the table behind it, which I define first on day one.
create table links (
id uuid primary key default gen_random_uuid(),
slug text unique not null,
url text not null,
clicks integer not null default 0,
created_at timestamptz not null default now()
); That is the whole loop. A table, a query, a page. Repeat it a few times with clean reviews and you have a real app in days, not months.
FAQ
How fast can you really build a web app with AI?
A focused single-purpose web app takes me two to four days end to end. Day one is scope and database schema, day two is the core build, and day three is polish and deploy. AI writes most of the code, but I still scope every task, review every diff, and run tests. I have shipped 40 plus apps and PWAs in 2026 this way, including a personal CRM and a link shortener with analytics.
What stack do you use to ship apps fast?
Astro for the frontend, Supabase for the Postgres database and auth, Vercel for hosting and deploys, and Claude Code as the AI coding agent in my terminal. Astro ships almost zero JavaScript by default, Supabase gives me a real database and auth in minutes, and Vercel deploys straight from a git push. The stack is boring on purpose so I can move fast without surprises.
Is this just vibe coding?
No. Vibe coding is accepting whatever the AI writes without reading it. I work in small specced tasks, ask for one thing at a time, read every change, and run tests before I move on. The AI is fast but it makes confident mistakes, so I stay the reviewer. That review loop is the reason the apps actually work in production instead of just demoing well.
What should you not let AI do when building an app?
Do not let it design your database schema without your review, write security or auth rules unchecked, handle secrets or API keys on its own, or make product decisions about what to build. AI is great at filling in code once the shape is clear. It is bad at judgment calls, so those stay with you.
If you want an app like this built for you, you can hire Neil. Want to go deeper on the AI side? Read the AI agent guide, or see the work I have shipped.