Overview
The site you are reading is a project in its own right. It is built to be fast, accessible and easy to update, and its source is open so others can read or reuse it.
The problem
A portfolio goes stale. Updating it should take minutes, content should not be locked in a database or a web editor, and anything an AI helps draft should never publish without a person approving it.
Context and motivation
I wanted a site I could keep current while studying, and one that shows how I build, not only what I have built.
My role
Design, front end, content model, security review and deployment.
Approach
Content lives in Markdown and JSON files in the repository, validated by schemas at build time. A change goes through a pull request, so every update is reviewed and every change is in the history.
Technical architecture
Next.js with TypeScript and Tailwind, rendered ahead of time. Content is read from files. The only server code is a small contact-form endpoint. Notion drafts are pulled in by a script that writes proposed files for review; nothing is published automatically.
Implementation
See the repository's docs/ folder for the architecture, security model and publishing guide.
Trade-offs and decisions
| Option | Trade-off | Chosen |
|---|---|---|
| Files in Git | No admin UI, but simple, reviewable and portable | Yes |
| Headless CMS | Friendlier editing, but more moving parts and a new attack surface | No |
| Auto-publish from Notion | Faster, but removes the human approval step | No |
Results and impact
In progress.
Lessons learned
To write.
What's next
Connect the Notion workflow, add real projects and writing, and launch on a custom domain.
Links and resources
Source code on GitHub (link to confirm).