Linux & desktop
BaseArch Linux, KDE Plasma on Wayland
Servicessystemd user units and timers
BootGRUB chainloading a unified kernel image, with snapshots before changes
Systems project
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.
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.
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.
Grouped by what each part is for, rather than listed for its own sake.
BaseArch Linux, KDE Plasma on Wayland
Servicessystemd user units and timers
BootGRUB chainloading a unified kernel image, with snapshots before changes
ToolingGit, Docker, Python
AssistantsClaude Code and Codex, used daily and openly
TestingDesktop-integration work gets tested on the real desktop, not simulated
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 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
Three real ones, and what changed afterwards.
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.
This page describes how the machine is set up and why, not how to reach it. Addresses, ports and credentials are deliberately left out.