How I Build Client Websites in 3 Days with Astro
How I Build Client Websites in 3 Days with Astro
Three days sounds aggressive. It’s not — not when your stack is tight and your process is repeatable.
I’ve shipped more than two dozen client sites in the past two years using this method. Here’s exactly how it works.
Why Astro
Before the process, the tool choice matters. Astro ships zero JavaScript by default. That single constraint forces good decisions:
- No heavy React component trees for things that don’t need to be interactive
- No hydration cost on initial load
- Sub-200ms first contentful paint on a RM 20/month VPS
Clients don’t care about the framework. They care that Google ranks their site and visitors don’t leave before it loads. Astro handles both.
Day 1: Foundation
The first day is entirely setup and structure — no visible UI.
Morning: Scaffold and configure
pnpm create astro@latest client-site -- --template minimal
cd client-site
pnpm astro add react tailwind sitemap
I also set up:
astro.config.mjswith the client’s domain- Tailwind v4 CSS tokens for their brand colours
SEOHead.astrocomponent that takes title, description, and structured data as propsBaseLayout.astrowrapping every page- The Cloudflare adapter (deployment target)
Afternoon: Content structure
Before writing a single line of page code, I map out:
- Every page and its primary keyword
- The content collection schemas (blog posts, services, testimonials)
- The internal linking plan
This takes 2–3 hours but saves the same amount later.
Day 2: Pages
Day 2 is full-build mode. I work page by page, top of the site to bottom.
Order matters: build shared components first (header, footer, nav), then the home page, then service pages, then blog index and dynamic routes.
Each page follows the same SEO checklist:
- Unique title under 60 characters
- Unique meta description under 160 characters with a CTA
- One H1 containing the primary keyword
- Minimum 800 words of real content
- Internal links to 3+ other pages
- JSON-LD structured data appropriate for the page type
I don’t write placeholder content. Every word on every page is real, researched, and written for the human reading it — not the algorithm.
Day 3: Polish and deploy
Morning is for everything I couldn’t do while moving fast:
- Mobile layout review on an actual phone
- Image optimisation (Astro’s built-in
<Image>component handles WebP conversion automatically) - Turso database setup if there’s a contact form
robots.txtand sitemap verification
Afternoon is deployment:
# Cloudflare Pages — connect the repo and it deploys automatically
# First push triggers a build. Subsequent pushes auto-deploy.
Cloudflare’s free tier covers almost every client site. Global CDN, automatic SSL, and edge caching for the static assets.
The real reason it’s fast
The process isn’t magic. It’s repeatable decisions removed from the critical path.
I don’t decide on my typography system per client. I use Geist Variable with the same scale. I don’t decide on my colour approach per client. I swap tokens. I don’t decide how to handle SEO per client. I have a component for that.
Every decision you make is time you don’t have on a 3-day build. Build your defaults once, ship faster forever.
Want a site built this way? Get in touch and I’ll tell you what’s possible for your project.
Written by Mohd Hanafiah
Freelance developer and automation specialist from Malaysia. I build Astro sites, Flutter apps, AI automation workflows, and coach developers.
Work with me →