Skip to content
~/knowledge-base/portfolio-as-an-operating-system
Knowledge base
Jul 2, 2026 2 min read

Why I built my portfolio as an operating system

A resume flattened onto a webpage says 'I can write HTML.' I wanted the medium to be the message, so this site is a workstation you can actually drive.

Design EngineeringNext.jsProduct

Most engineering portfolios are a resume in a nicer font. That's a missed opportunity: the site itself is the one artifact a visitor is guaranteed to experience. If I claim to build products and engineer AI systems, the portfolio should feel like software, not describe it.

So I built this one as an operating system.

One content registry, six surfaces

The core decision was a single typed content registry, validated with Zod at build time. Every surface reads from it:

  • the pages you're browsing
  • the command palette (⌘K)
  • the terminal and its virtual filesystem
  • unified search
  • the AI assistant's retrieval
  • the generated OpenGraph images

Six ways to reach the same facts, zero drift. When I ship a new project, I add one object and it appears everywhere, launcher, projects command, search index, and the assistant can answer questions about it.

ts
// The whole site renders from this shape.
export interface Project {
  slug: string;
  name: string;
  oneLiner: string;
  pipeline: { stage: string; detail: string }[];
  decisions: { call: string; why: string }[];
  // ...
}

The AI assistant works with no key

The assistant is backed by a free, OpenAI-compatible LLM API (Groq by default), but it degrades gracefully. With no API key configured, it still answers, purely from retrieval over the content registry. The LLM makes answers conversational; retrieval makes them true. A visitor never hits a dead end, and the site is honest about which mode it's in.

Motion that means something

Every animation has a job: the boot sequence establishes the OS metaphor, the palette and terminal spring in to signal "a tool opened," page content reveals on scroll to guide reading order. Nothing bounces for attention. And all of it collapses under prefers-reduced-motion.

The point

A portfolio should demonstrate, not assert. This one lets you open a terminal and type help, hit ⌘K to fly between pages, and ask an AI about my work in plain English. That's the argument, built, not written.

If you're reading this, you're already inside the demo. Try the terminal.