This Website
My personal corner of the internet, an Astro 7 site with dynamic OG images, live Spotify islands, real-time view counts, and a playable 3D game.
- Year
- 2026
- Role
- Design, development, everything in between
- Astro
- TypeScript
- React
- Tailwind CSS
- Turso
- Vercel
The problem
I wanted a home on the web that doesn’t feel like a template, a place that shows what I enjoy building, sounds and moves a little, and stays fast while doing it. Most portfolio sites are static brochures. Mine should feel alive.
The approach
The site is built with Astro and deliberately ships almost no JavaScript for the static parts, while the interactive corners hydrate as islands:
- Server islands render the “Now playing” Spotify widget and per-post view counters at request time, while every page stays fully prerendered.
- View counts live in a Turso libSQL database, queried with Drizzle and incremented through a typed Astro Action, with bot filtering and slug validation so the numbers stay honest.
- Dynamic OG images are generated on the fly for every page with
@vercel/og, post titles, category colors, and reading time baked into the social preview. I wrote about it in Dynamic OG Images with Vercel . - The contact form runs through an Astro Action with Zod validation, Cloudflare Turnstile, and Resend for delivery.
- Fonts are subset variable fonts served through Astro’s Fonts API; images ride Cloudinary with hand-built responsive srcsets.
- And there’s a three.js stacking game , because a portfolio should have at least one thing that exists purely for fun.
The outcome
A site that scores where it should on performance, has personality in the details, sounds, dark mode, a multilingual greeting, and doubles as my playground for whatever the web platform ships next. The full rebuild from Astro 5 to Astro 7 (framework migration, database swap, actions, fonts) landed as seventeen reviewable commits in a single day.