I’ve been meaning to rebuild my personal site for a while. Most portfolio templates feel too corporate — too many gradients, too many cards, not enough writing. What I wanted was something closer to a personal notebook that happens to live on the internet.
Why Astro
Astro ships zero JavaScript by default. That’s the whole pitch for a site like this. I don’t need a virtual DOM to render a list of links and some markdown.
The content collections API is also genuinely nice:
const notes = await getCollection('notes');
const sorted = notes.sort(
(a, b) => b.data.pubDate.valueOf() - a.data.pubDate.valueOf()
);
Type-safe frontmatter, Zod validation, automatic slug generation. It just works.
Typography choices
I went with Source Serif 4 for body text. Serif fonts have better readability for long-form content — there’s a reason books still use them. JetBrains Mono handles code and metadata, providing clear visual separation between prose and technical bits.
What I skipped
- React or any client-side framework
- Tailwind (vanilla CSS is fine for ~200 lines)
- Dark mode toggle (dark by default, no toggle needed)
- Analytics (I don’t need to know)
- Comments (email me)
The result is a site that loads in under a second and feels like mine.