Back to projects

Portfolio Website

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

Portfolio Website project screenshot

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

Featured projects on an earlier version of the homepage.
Blog archive.
Projects archive screenshot.
Contact page and form.

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.