Portfolio Website
- Year
- 2026

The site you're on. I first built it in 2023 with Next.js and AWS Amplify, then rebuilt it in 2026 around one idea: adding a blog post or project should be as easy as writing a Markdown file.
What's in it
- Content as files: Posts and projects are Markdown files in the repository, with their images in the same folder. Velite validates every file at build time and generates typed data, resized images and blur placeholders, so a typo in a post fails the build instead of breaking the page.
- Pre-rendered pages: Every page is generated at build time with Next.js 16, with fonts loaded through next/font and responsive images.
- Design system: A small set of colour tokens in Tailwind CSS drives both light and dark themes from CSS variables, with one accent colour and no flash of the wrong theme on load.
- Blog features: Syntax-highlighted code that follows the theme, reading time, an RSS feed, a sitemap and social preview metadata.
- Contact form: A server action sends messages through Resend, with clear success and error states.
Stack
| Area | Tools |
|---|---|
| Framework | Next.js, React, TypeScript |
| Styling | Tailwind CSS, Geist |
| Content | Markdown, Velite, rehype-pretty-code |
| Resend, React Email | |
| Hosting | Vercel |
- next.js
- typescript
- tailwind css
- velite
- markdown