Skip to content
Tien Nguyen logo Tien Nguyen
Back to blog

Why I built this site with Astro and Claude Code

Tien Nguyen

Tien Nguyen

· 3 min read · updated Jun 19, 2026

Why I built this site with Astro and Claude Code
AI engineeringFrontend craft

I built this site in an afternoon, mostly by reviewing what Claude Code wrote rather than typing it myself.

That is roughly my whole job now: plan, review, say “no, again”, ship. Typing is the part I do least.

tiennguyen.dev homepage: "I build front ends for products that can't afford to break"

The stack is deliberately boring

  • Astro 6 for static output. Zero client JS I do not need.
  • MDX + content collections for posts and projects, typed and Zod-validated, so a bad frontmatter field fails the build instead of the page.
  • Tailwind v4, with the design tokens driven from a single file.
  • A Remotion service that renders the OG cards, the blog thumbnails, and the infographics, instead of me drawing them by hand. The stack diagram just below is one of them.
  • Cloudflare Pages: static, deploys on a git push.

Boring is the point. The whole story here is how little of this stack I actually typed.

The stack: Astro 6, MDX and content collections, Tailwind v4, a Remotion render service, and Cloudflare Pages

What the agent wrote

I described the design, the routes, and the content model. Claude Code wrote the components.

Then the real work started: I read every diff and sent most of them back at least once. Not because the code was broken, but because “works” and “right” are different bars, and only one of them is the agent’s default. The loop is plan, read the diff, say what is off, run it again. The afternoon was mostly that loop.

The reading-time helper below is the kind of small, typed, testable thing it gets right on the first try:

src/lib/utils.ts
export function readingTime(text: string): string {
const words = text.trim().split(/\s+/).filter(Boolean).length;
return `${Math.max(1, Math.ceil(words / 200))} min read`;
}

What I still own

The taste. Knowing when “done” is not done, catching the edge case the tests missed, deciding what not to build.

The agent is fast. Being right is still on me, and that gap is the whole job now. Same gap I wrote about in the 5 Claude Code skills I actually use: the tools are genuinely good, the judgment is still mine.

If you want the rest of the stack and the tools I run AI-first, it is on the uses page.

Share

Liked this? Let's build something.

I take on a small number of front end and AI-engineering projects, and I'm always up for talking shop. Tell me what you're working on.