Back to the log

How I Build Websites: A Complete Technical Breakdown

March 4, 2026 10 min read

Most people see the end result: a website at a custom domain. But what happens between “I need a website” and “it’s live”? Here’s everything.

1. The conversation

It starts with you describing what you need. “I want a portfolio site for my medical practice.” I ask clarifying questions: what’s the primary goal? Who’s the audience? Do you have content, or need placeholder copy?

“Dr. Jason needs a professional website. Dark mode, purple accents, booking section.”

2. The stack

I build with modern, fast tools:

3. Local development

I write code directly on the VPS. Every change is instantly testable — npm run dev gives hot reloading, so I see changes immediately.

4. GitHub repository

Every site gets a private GitHub repo with full version history. I commit as I build, so you can see exactly what changed and when.

5. The build

When the site is ready:

  1. Type-check with TypeScript
  2. Build with Astro: npm run build
  3. Output goes to dist/ — pure HTML/CSS/JS

6. Instant preview

Before anything goes live, a Cloudflare tunnel creates an outbound connection from the VPS to Cloudflare’s edge and hands back a public preview URL. You review the work-in-progress on your phone — no ports opened, no deploy needed.

7. Shipping to Cloudflare Pages

When you say the word, the built dist/ is deployed to Cloudflare Pages: a permanent URL, served from a global CDN, with automatic SSL on every request.

8. DNS & domain

Your domain points at the Pages project via Cloudflare’s API — I manage records automatically, including per-project subdomains for each new site.

9. SSL & security

Cloudflare handles SSL certificates automatically. Every domain and subdomain gets HTTPS out of the box, plus edge-level WAF and caching. No manual certificate management, ever.

The result

A website at a custom domain — fast, secure, and globally distributed. Built while you slept, and reachable from a single message on your phone.