The Pragmatic Programmer suggests treating your skills like a financial portfolio: invest regularly, diversify, and review what you hold. It calls this a knowledge portfolio.
Most people read that as "keep learning." The part that stuck with me was that the learning should be deliberate and documented, not random. You get better through small, consistent investments, and each one makes the next topic easier to pick up.
This site is my attempt to make that idea visible. It is not a page I update once a semester. It is a place where projects evolve and writing accumulates.
Why not just a resume?
A resume summarizes. A knowledge portfolio explains.
A resume can tell you I know FastAPI. A portfolio can show:
- the APIs I designed and why I shaped them that way
- the architectural decisions I made
- the mistakes I hit along the way
- the performance problems I found and fixed
That tells a recruiter or engineer how I think, which a skills list cannot. It also helps future me, who will not remember any of it in six months.
Why MDX
I wanted publishing to cost almost nothing. A traditional CMS solves real problems, but it is another system to run and maintain.
I already use Git every day, so plain text files were the natural choice. MDX adds just enough on top of Markdown to embed components when I need them.
A post is one .mdx file in the repository. That means:
- no database
- no admin dashboard
- no changes to the deployment pipeline
Git already provides version history and backups.
Why Next.js (App Router)
The framework earns its place for practical reasons:
- Static generation: posts are built ahead of time, so pages stay fast as the archive grows.
- Metadata API: SEO tags are generated per page instead of hand-written.
- Dynamic routes: a new file becomes a new page.
- Server Components: less JavaScript is shipped to the browser.
I don't want the site to get slower just because I publish more.
Structure
Content lives apart from application code, so adding a post never means touching a React component.
content/
├── blog/
│ └── building-a-knowledge-portfolio.mdx
└── projects/
├── nexus.mdx
├── ciphervault.mdx
└── portfolio.mdx
public/
└── images/The site discovers new files on its own.
Readable code
Technical writing includes code, and poorly highlighted code is hard to read. The site uses Shiki through the MDX pipeline, which highlights with the same grammars as VS Code.
type Project = {
title: string;
featured: boolean;
};
const featuredProjects = projects.filter((project) => project.featured);Documentation for myself
Documentation is not only for teams. After a project ships, the reasoning fades quickly:
- Why SQLite instead of PostgreSQL?
- Why was this component split into several files?
- Why is this response cached?
Writing the decision down once means I don't have to rediscover it later.
Projects have stories
Every finished repository hides a history: authentication bugs, deployment failures, architecture changes, experiments that didn't work. Those parts teach more than the final code does.
That is why each project here has a write-up and not just screenshots and a GitHub link.
Writing is debugging for understanding
When I write a technical explanation, I regularly hit a question I can't answer. That is useful, because it gives me a specific thing to go investigate. If I can't explain a topic clearly, I probably don't understand it as well as I thought.
Consistency over intensity
Some weeks I can put dozens of hours into building. Other weeks are taken by exams and other responsibilities. I would rather make small, steady progress than rely on occasional bursts: one commit, one paragraph, one solved problem.
Where this goes
This portfolio will keep changing. New projects will replace old ones, and some technologies will drop out of my toolkit.
The goal is not a perfect portfolio. It is a record I can look back on to see how my thinking evolved, not just what I built but what I learned while building it.
If you are thinking about making your own, go beyond a list of skills and document your experiments and lessons too.
A resume tells people where you are today. A knowledge portfolio shows how you got there, and where you are headed next.
