Systems project

Midnight-PC

The workstation as a project — and the workflow built around it.

My primary Linux workstation. It was put together deliberately rather than left on defaults, and everything else in this portfolio was built, tested and broken here. The interesting part isn't the parts list — it's what it took to make the machine behave predictably.

  • Arch Linux
  • KDE Plasma · Wayland
  • AMD GPU
  • Local AI

01 Why the machine is the project

A workstation you fully control is a different thing from a computer you use. Once you own the boot chain, the session, the services and the network path, every problem becomes yours to diagnose — and there's nowhere to hand it off to.

That's the appeal. It also means the failures are real: a boot that came up with no login screen because the default systemd target was set to multi-user instead of graphical, a local model that took the desktop down with it, a bootloader change that could have left nothing to boot into. Each of those taught me something specific about how the system actually fits together, which is the part I couldn't have got from a tutorial.

I use AI assistants heavily to build things on this machine, and I'd rather say so plainly than imply otherwise. What's mine is deciding what to build, working out why something is broken, and checking that a fix actually holds.

02 How it fits together

The workstation is the platform. Things live on it, and things get built on it — those are two different relationships, and the diagram keeps them separate. Access arrives from a private direction rather than from the open internet, which is deliberate.

MY DEVICES THE WORKSTATION WHAT IT PRODUCES my devices laptop · phone private network no public ports Midnight-PC Remote access remote desktop · host firewall Desktop & graphics Arch Linux · KDE Plasma (Wayland) Development Git · containers · AI assistants Local AI model runtime · local chat UI Monitoring & automation health checks · timers · alerts Kairo built here Hermes runs here alerts to my phone

03 The stack

Grouped by what each part is for, rather than listed for its own sake.

Linux & desktop

BaseArch Linux, KDE Plasma on Wayland

Servicessystemd user units and timers

BootGRUB chainloading a unified kernel image, with snapshots before changes

Development

ToolingGit, Docker, Python

AssistantsClaude Code and Codex, used daily and openly

TestingDesktop-integration work gets tested on the real desktop, not simulated

Local AI

RuntimeOllama, running an 8B model at a 64K context window

InterfaceA local chat UI for everyday use

TuningQuantised KV cache and a short idle unload, so GPU memory is returned rather than held

Remote & automation

Remote desktopSunshine on the workstation, Moonlight on whatever I'm holding

NetworkTailscale, with the host firewall scoped to that private network — nothing exposed publicly

SchedulingTimer-driven health checks and push notifications

04 Things that broke

Three real ones, and what changed afterwards.

05 Working with AI here

I use two coding assistants on this machine — Claude Code and Codex — and each one started every session knowing nothing about the project in front of it. In practice that meant re-explaining the same conventions and the same current state, repeatedly, to whichever tool I'd opened.

The fix was small and has two halves. Each project carries a written guide that both assistants read, so conventions are recorded once instead of re-typed — with a second filename symlinked to the first, because the tools look for different names. Alongside that, a small local service both assistants can query gives them the same two read-only answers: what this project is, and what has changed in Git recently.

What this is not: a sandbox, or shared autonomous memory between the assistants. Nothing here grants them extra reach, and they don't carry state between sessions. It's a shared, normalised source of evidence and one common interface, so two different tools start from the same facts instead of from whatever I remembered to paste. The benefit is mundane and worth it — less time re-establishing context, and less drift between tools working on the same codebase.

07 Operating principles

08 Status

RolePrimary workstation and test bench
OSArch Linux
SessionKDE Plasma (Wayland)
Used forDevelopment, local AI, remote access, gaming
StatusActive — continuously changing
Config repoPrivate, for now

This page describes how the machine is set up and why, not how to reach it. Addresses, ports and credentials are deliberately left out.