Portfolio Website
My portfolio site, with a Markdown blog, project case studies and a protected contact form.

What it does
Built with Next.js 15, TypeScript and Tailwind CSS. Most pages are server-rendered; the project index, consent controls and contact form add client-side interactions.
Decisions
- Keep projects in typed records
- Each project lives in a TypeScript data module. The same record supplies the archive, its case study and route metadata.
- Publish from Markdown
- A shared content catalog validates frontmatter and publication status before posts appear in the blog, RSS or sitemap.
- Protect contact requests on the server
- The API validates form data, checks a honeypot, verifies reCAPTCHA and enforces request limits before sending mail.
- Load analytics only with consent
- The optional analytics script is added after the visitor accepts and is not loaded by default.
Screens
Full notes
More on the implementation and challenges.
Next project

Code & Tech
A Next.js tech blog rebuilt around recovered WordPress articles.
Working on something similar? Get in touch.