Skip to content

Code — William J.P. Armstrong

Code

Public repositories. The line and test counts below are counted from the repositories themselves, not estimated — I would rather show a real number than a round one.

Forge — 104,652 lines, 2,315 tests

A site-building substrate. Sites are declared as typed content and generated, so an accessibility or performance fix made once lands on every site built from it.

Learn more →

Loom — 74,106 lines, 1,568 tests

The component and token layer underneath Forge: every primitive a page can be assembled from, with the design tokens that keep them coherent.

Learn more →

Crawler — 42,645 lines, 1,132 tests

Drives a real browser through a site along a typed journey and diffs what it finds, so a regression is caught by machine rather than by a client.

Learn more →

Salesman — 29,627 lines, 325 tests

Outreach tooling: contact handling and campaign logic, kept deliberately boring and inspectable.

Learn more →

Mailroom — 11,994 lines, 222 tests

Mail configuration as data. It emits the Dovecot and Sieve configuration for a mail server, so mailbox rules are version-controlled instead of clicked into a panel.

Learn more →

Ermine — 16,980 lines, 225 tests

A privacy-focused Monero wallet in Rust, with per-account Tor isolation. Early, and honest about it.

Learn more →

How I work

Everything above is Rust, and everything above has a test suite that runs before anything reaches a server. That is not a preference for ceremony — it is what makes it possible for one person to keep six projects and five live sites running without breaking them by accident.

The repositories carry an as-is, no-warranty notice. They are published so the work can be read and audited, not because I am inviting anyone to run them in production untested.

Want to talk about a project?

I am available for client and contract work.

Get in touch