Personal Portfolio and CV Builder

TL;DR

Built a content-driven Next.js portfolio with an integrated CV builder that supports selectable experience and projects, editable copy, configurable styling, shareable versions, local drafts, and print-to-PDF output.

Motivation

A conventional portfolio and a conventional CV solve different parts of the same problem. The portfolio can preserve detail and context, while each application needs a concise document tailored to a particular audience. I wanted both to draw from the same body of work without maintaining many disconnected files by hand.

Portfolio

The site is built with Next.js, TypeScript, MDX, and Tailwind CSS. Project pages are stored as structured MDX content and feed the project archive, tag filters, individual detail pages, metadata, and the CV builder.

The design intentionally accommodates projects from different parts of my life: research, software, robotics, entrepreneurship, visual work, and smaller hands-on experiments. Searchable tags and project counts make the growing archive navigable without forcing everything into one narrow professional identity.

CV builder

The integrated CV builder can:

  • Select individual education, experience, and project entries
  • Edit profile information and section text
  • Configure colors, typography, separators, and other layout details
  • Save drafts locally
  • Export and import the underlying data
  • Encode a customized version into a shareable link
  • Load stable recipient-specific presets
  • Produce an A4 document through the browser's print-to-PDF workflow

Long customized states are compressed before they are placed in a URL, while static presets provide shorter, stable public links. View-only versions can be reopened in the editor without losing their exact content.

What I learned

This project combined content modeling, interface design, browser storage, URL-safe serialization, responsive UI work, and the particular constraints of reliable print layouts. It also forced me to think carefully about how the same experience should be described differently for a website visitor, a recruiter, and a specific application.