I'm Mat, a Solutions Architect who thinks in systems, writes about intentional living, and recently shipped my personal site: matbanik.info.
This is my first DEV post, so I figured I'd share the stack and lessons from building it. Maybe it'll help someone starting their own portfolio.
The Tech Stack
| Layer | Choice |
|---|---|
| Framework | Astro |
| Hosting | Cloudflare Pages |
| Backend | Cloudflare Workers |
| Bot Protection | Cloudflare Turnstile |
| Analytics | Cloudflare Web Analytics |
| Newsletter | Buttondown (via Workers) |
| Resend (via Workers) | |
| Search | Pagefind |
Total hosting cost: $0/month
Why Astro?
I evaluated Next.js, Hugo, and 11ty before landing on Astro. Here's why:
- Content Collections — Type-safe Markdown with Zod schemas. My blog posts validate at build time.
- Zero JS by default — Ships HTML/CSS only. JavaScript is opt-in per component.
-
File-based i18n — I just duplicate pages under
/es/for Spanish. No complex routing config. - Island Architecture — Interactive components hydrate independently (though I barely needed this).
Results
High Lighthouse Score for Performance, Accessibility, Best Practices, SEO
First Contentful Paint in ~0.5s
Build time ~15 seconds
What I'd Do Differently
Start with Pagefind earlier — Client-side search is a great UX addition
Use CSS Custom Properties from day one — Makes theming and dark mode trivial
Set up CSP in report-only mode first — I'm still validating before enforcing
Top comments (0)