Systems, infrastructure, and automation.

I build reliability-focused tools and operate the systems they depend on: Linux and OpenBSD hosts, Git-backed workflows, automation, and local-first software.

Start here

Self-Hosted Git as Document Infrastructure

A high-level look at the Git-backed Markdown system behind my workflow: an OpenBSD server, vaultctl, NRE, automation, and clients across Windows, Linux, and iPhone.

Read the overview →


Selected engineering work

vaultctl

A standalone Go CLI for Git-backed Obsidian vaults that makes saves and synchronization explicit, conservative, and consistent across machines.

NRE — Note Runtime Engine

A contract-driven POSIX shell automation engine for deterministic execution, structured logging, explicit artifact handling, and cadence-aware monitoring.

Dynamic Notes

An Obsidian plugin for moving structured Markdown blocks through small local workflows while keeping Markdown as the source of truth.

Symlink Notes

An Obsidian plugin for portable, vault-relative Markdown shortcuts with chain resolution, safe path validation, and desktop/mobile support.

See all selected projects →


Writing

I write about the systems I run, the tools I build, and the engineering decisions behind them.

Client Operations in a Git-Backed Markdown Vault

How I make Git-backed Markdown synchronization mostly automatic across Windows, Ubuntu, and iPhone using lifecycle events and daily transition points.

Read article →

Inside My Git-Backed Markdown Infrastructure

A technical walkthrough of the bare Git repository, server work tree, vaultctl, NRE, recovery safeguards, and automation behind my Markdown system.

Read article →

Self-Hosted Git as Document Infrastructure

How an OpenBSD server, Git, vaultctl, and NRE form a headless document system for synchronizing and generating Markdown across devices.

Read article →

See all writing →


About

Most of my projects start with a real operational problem: something I want my own systems to do more reliably, more transparently, or with less overhead. That makes the software answer to real constraints instead of hypothetical ones.