U41-42

Arzaroth

I started in DevOps and ended up a CISO. I still write plenty of code, and most of it runs on my own machines.

I self-host whatever I can. That's part of why there's a 42U rack in my living room.

U37-39

Apps people actually use

Built for friends first, then opened up. Each one runs on the rack, or on your phone.

Nostragoalus

A score-prediction game. Friends predict match scores, earn points for how close they get, and fight over per-competition and global leaderboards. Live crowd totals, bookmaker odds frozen at kickoff, one x2 joker per round, league chat. Football by default, and rugby union works too.

TypeScript, Nuxt, Node or Bun

La Coincherie

Play coinche with your friends when you live 800 km apart. Cameras on, your house rules.

TypeScript, Svelte

Yaek

Pulls Thai text apart so you can read what someone wrote to you. Offline dictionary, tones derived from the spelling, and no network request you did not ask for.

TypeScript, Expo, React Native

BlosSom

Scan a document with your phone, then share, save or print it as one PDF or as photos. No account, and nothing leaves the phone unless you send it.

TypeScript, Expo, React Native
U34-35

Three binaries, one edge

Rust binaries for the desktop. The two gauges draw panels on KDE Plasma, GNOME, Waybar and Quickshell, and remuda keeps your Claude Code and Codex logins. They are unrelated, but they install and update themselves the same way. That shared code is selvedge.

TokenGauge

Shows usage limits, costs and token counts for Claude, Codex, Kimi, Grok, GLM and a few more. It predicts where each limit will be at reset and totals spend across all your machines. With remuda, every stored login gets its own meter.

Waybar, Plasma, GNOME, Quickshell, TUI

remuda

A remuda is the herd of spare horses a rider picks a fresh mount from. This one holds Claude Code and Codex logins, and switches the one each CLI uses without logging out. History, settings and MCP logins stay shared, and a timer keeps the resting logins fresh. Its page shows the usage TokenGauge reads for the login in use.

CLI, systemd timer

TailGauge

Puts Tailscale and NetBird in your panel, and switches between them when both are installed. Turn the VPN on and off, and copy any machine's address. Tailscale also gets exit nodes, Mullvad regions and Taildrop. On NetBird you can join and leave networks. There's no daemon, it calls each provider's CLI.

Plasma, GNOME, Quickshell, TUI

selvedge

A selvedge is the woven edge that stops cloth from unravelling. This crate stops a binary and the QML and JavaScript it feeds from drifting apart. Both ship in one archive and update together.

  • Fetches the latest release from GitHub
  • Replaces the running binary in place
  • Reinstalls every desktop frontend from the same archive
  • Keeps old command names alive as symlinks

Was 1,400 lines in each gauge.

CodeGauge

Same family name, different job. It walks a repository's git history, counts every line once per day, and charts production code against test code over time. The dashboard is built into one static binary, and git doesn't need to be installed.

Rust, gitoxide
U31-32

Around Claude Code

Small tools for the parts of Claude Code that get in the way: sharing a session, moving conversations around.

c2c-conv

Share one Claude Code session with a second person. They watch it live, and when you let them, they type into it as if they were you. The Cs in c2c could be Claude, Codex... or even clown. Ever heard of clown to clown conversation?

TypeScript

resumove

Moves a Claude Code conversation to another folder, so claude --resume finds it from there. It rewrites the recorded paths, and refuses to touch a conversation that is still open.

Python

t3cc

Moves conversation history between Claude Code and T3 Code, both ways, without the limits of T3's own importer. An imported thread resumes the same Claude session, so the model keeps its context.

Python
U28-29

On the workbench

Not public yet. They will be when they are ready.

Tacite

Tracks contracts, subscriptions and warranties. It works out the legal deadlines, warns you while you can still act, and drafts the cancellation or warranty letter.

TypeScript, Fastify, Postgres

Pouce Vert

A plant care app for the phone. Care sheets for common houseplants, pet toxicity with sources, watering reminders, and a diagnosis from a photo of the sad leaf.

Expo, React Native

Sheaf

An open-source Android client for paperless-ngx, built against the v3 API so a server update does not break it. Document scanner with auto-crop, upload from any app's share sheet, offline-first with a draft queue, bulk inbox triage, and a real UI for server-side mail rules. Works behind reverse proxies, with self-signed certificates, mTLS, OIDC and several servers.

Android first, iOS in development
U25-26

Under wraps

Racked and cabled, with the blanking panel still on. For now the names are all there is to know.

Magister

Rackmancy

U20-23

ouroboros

What happens when a script that draws one small figure never gets told to stop. The first commit draws a lattice glyph in eight lines of Python. The latest one draws the same glyph.

8first commit
25,192today, one file
  1. ReferenceOne digest per order. Every other tier is tested against it.
  2. A language for the glyphA program computes the figure, through nineteen layers that include monads, a pass manager and an event-sourced rasteriser.
  3. LLVMLowers the bytecode to LLVM IR, JIT-compiles it and links a native ELF.
  4. A second languageGeneral enough to write a compiler in. Its compiler is written in itself, and a three-generation fixpoint proves the build.
  5. The closed loopThe first front end, rewritten in the second language. Both emit the same bytes for any program.
  6. Machine codeHand-encoded x86-64, aarch64 and riscv64 in a static ELF of about a kilobyte. No assembler, linker or libc.
  7. WebAssemblyThe same module as a wasm reactor that imports nothing.
  8. No kernelOne boot sector walks the machine from 16-bit real mode to 64-bit and runs the glyph with nothing underneath.

A differential fuzzer checks that every tier agrees.

Read all 25,192 lines
U16-18

Self-hosted, by stubbornness

If it can run at home, it runs at home. Every app on this page runs on the rack, next to the photos, passwords and documents the household uses every day.

Git forge
CI runners
Single sign-on
Mesh VPN
Password vault
Photo library
Document archive
Notes sync
Video calls
Team chat
Media server
Local LLM chat
SIEM
Uptime checks
Metrics
Backups
Update watcher
Nostragoalus
La Coincherie
Yaek
APT mirror
Magenta for plumbing, red for keeping watch, blue for apps

DEB Party

Turns a short list of GitHub projects into a tidy .deb mini-mirror. Picks the right release asset, repackages bare binaries, prunes old versions and publishes through Aptly. The gauges ship through it.

Python, Aptly

Code lives at home too

Every repository here lives on a Forgejo instance on the rack. Server-side mirrors push it to GitHub, which is only the shop window.

Forgejo, Forgejo Actions

dotfiles

Zsh, Emacs, tmux and prompt configuration as GNU Stow packages. Arch on the desk, Debian on the servers.

Emacs Lisp, shell
U13-14

Other people's code

Friends' projects I contribute to, and patches sent upstream.

Sent upstream
authentik1 PR, 2026
ente1 PR, 2026
acme2certifier2 PRs, 2026
laravel/framework2 PRs, 2022-23
spot23 PRs, 2017-20
hfig/MAPI3 PRs, 2020-24
php-shellcommand2 PRs, 2018
php-gettext1 PR, 2020
phpbench1 PR, 2022
sendria1 PR, 2021
weeNetsoul2 PRs, 2014
U2-5

The early years

Sorted by last commit. Still online for whoever uses them.

  1. 2014virtualnetworkA small tool for understanding how networks work.Python
  2. 2014simple_flooderA tiny TCP flooder in C.C
  3. 2014-15RODecoOverride any function inside a Python module at run time, when you do not like how it works.Python
  4. 2015Pon3ArkExtracts the ark data files of the mobile game My Little Pony.Python
  5. 2014-16CelestiaSunriseSavegame editor for the same pony game. The most starred thing I ever wrote. In every sense of the term.Python
  6. 2016-17HearthPacksAutomated pack opening on HearthPwn.Python
  7. 2018-26SkynetA Slack bot with a lot of opinions and very little restraint.JavaScript, private
  8. 2015-26python_rapidxmlPython bindings for RapidXml, a fast C++ XML parser. Old, and still maintained.C++