BCC-OS

This portfolio, built as a desktop operating system in the browser. A real window manager, not a theme.

Role
Sole developer — architecture, window manager, apps, CMS
Year
2026
Status
live
  • Next.js
  • React
  • TypeScript
  • Tailwind CSS
  • Motion
  • Supabase
  • Vercel

Live site

The site you are reading this on. Not a landing page with a desktop theme, but a window manager that happens to contain a portfolio.

Why the window manager is hand-written

The libraries that do this bring their own state model, and it is never the one you want. Drag and resize are about 120 lines of pointer events. Writing them means a window's position lives in one place with everything else: stacking order, focus, minimise, and the unsaved-work flag that stops the CMS closing on you. The whole desktop is one object you can read.

Adding an app takes three steps

Copy the template, implement the contract, add one entry to the registry. That entry is all six surfaces need: the desktop icon, the taskbar, the command palette, the deep link, the folder listing, and the terminal. If any of them needed wiring by hand, the design would be wrong.

Performance rules that are rules

No React state updates during a drag. The pointer writes the transform directly and the store is told once, at the end, so a drag costs one render rather than sixty a second.

No backdrop blur while anything moves. The surprising part is where the cost lives: not on the window being dragged, but on the bars it passes underneath. Measured at roughly a fifth of the frame rate on a full desktop.

Every app is told whether it is focused, and has to stop animating when it is not. That is what makes a game safe to leave open behind three other windows.

A desktop is hostile to search engines, so it is not the only thing here

Every project and document also exists as a plain, server-rendered page that shares its components with the window version. Those are what Google indexes, what unfurls in a chat app, and what someone with JavaScript disabled sees.

It behaves like a real desktop

Windows are proper dialogs with labelled titles. Focus moves in when one opens and comes back when it closes. Escape closes the focused window, icons are reachable by keyboard, and reduced-motion settings turn every animation off. Mobile gets a genuinely different interface rather than a shrunken desktop.

What is in it

A file browser with a terminal over it, a projects browser, a markdown reader, a command palette, a kaleidoscope you can draw in whose output can become the wallpaper, a one-button flying game over the desktop's own landscape, and a small resident character that follows whatever window you open.

Behind it, Postgres with row-level security, and a CMS that runs as an app inside the desktop rather than on a separate admin route, because a post in one window and its preview in another is a genuine way to work.

Open this in the desktop