Building This Portfolio with Astro
Building This Portfolio with Astro
I wanted a personal site that was fast, minimal, and easy to maintain. After evaluating several frameworks, I landed on Astro 5 — and I’m glad I did.
Why Astro?
Astro ships zero JavaScript by default. For a content-heavy site like this, that’s a huge win. Every page is pre-rendered to static HTML at build time, which means:
- Instant page loads — no framework runtime to download or parse
- Perfect Lighthouse scores — no JS bundle means no main thread blocking
- Simple hosting — deploy to any CDN for free
The stack
- Astro 5 — static site generator with content collections
- Tailwind CSS v4 — utility-first CSS with the new CSS-first config
- MDX — Markdown with embedded components for blog posts
- Cloudflare Pages — free hosting with global CDN
Content management
Instead of a database, all content lives as Markdown files in the repo. Blog posts go in src/content/blog/, projects in src/content/works/. Git is my CMS — every commit is a content update.
This means I can write posts in my editor, preview locally, and deploy with a git push. No admin panels, no authentication, no complexity.
Design
The design is intentionally minimal — warm cream background, system fonts for instant text rendering, and a single orange accent color for links. The goal was to feel like a personal letter, not a SaaS landing page.