The challenge
A portfolio can easily become either a static brochure or an overbuilt personal CMS. I wanted something different: a site that could present finished work clearly, evolve over time, and support real operational needs like publishing, project case studies, writing, videos, CV updates, and application-specific materials.
The site needed to feel personal and visually distinct while still being maintainable, testable, and useful as an ongoing publishing system.
What I built
I built the portfolio as a Next.js 15 application with React, TypeScript, Tailwind, MongoDB-backed content models, and private CMS routes. The site includes public pages for projects, blog posts, videos, CV timeline, contact, privacy, and application-specific pages.
The CMS supports:
- Project entries with skills, tools, links, summaries, and MDX content
- Blog posts with tags, categories, SEO fields, and MDX content
- Video entries with related content linking
- Timeline entries for CV/work history
- API-key authenticated CRUD endpoints
- On-demand revalidation
- Admin editing surfaces
The project also includes testing and operational tooling: Vitest unit tests, Playwright e2e tests, deployment scripts, SEO utilities, resume/application tooling, and database seed scripts.
Result
The portfolio is not just a public website. It is a personal publishing and career operating system. It gives me one place to present work, write, publish video content, maintain CV data, and create richer job-application materials.
This case positions the site as a practical example of building your own tools when off-the-shelf systems are either too rigid or too generic.
Proof points
- Project index and case-study pages
- Blog/video publishing model
- Admin CMS forms
- CV timeline
- MongoDB models and CMS API structure
- Testing/deployment setup