self.cathedral.gg
Built for a threat model where the server may be hostile: it stores ciphertext only, and a stolen session cookie decrypts nothing.
60k+ LOC · 2,516 tests · live in production
Read the writeupClient-side cryptography, native desktop apps in Rust — most recently retrofitting end-to-end encryption onto Mattermost.
Since 2025 I've been working independently on client-side cryptography that keeps plaintext off the server (AES-256-GCM, X25519 via Web Crypto), native desktop apps on Tauri 2 and Rust, and a public Mattermost fork with retrofitted end-to-end encryption. Before that, four years at ChiroTouch building production frontend code and developer tooling the team adopted. Day to day I work in TypeScript, Rust, Python, and Go.
Open to new engineering roles benedictperrine@gmail.com
Built for a threat model where the server may be hostile: it stores ciphertext only, and a stolen session cookie decrypts nothing.
60k+ LOC · 2,516 tests · live in production
Read the writeupEvery git operation goes through libgit2 in Rust — no shelling out — so I rebuilt git's porcelain by hand. Each identity profile stays fully sandboxed.
29k LOC · 342 commits
Read the writeupMattermost assumes the server can read every message; this fork retrofits client-side end-to-end encryption onto a platform that was never designed for it.
Nearly 1,000 commits · Go + React/TypeScript · public fork
Read the writeupGitHub, GitLab, Gitea, and Forgejo all describe the same events and agree on almost nothing; this dashboard normalizes all four APIs into one notification stream.
9.4k LOC · 4 forge APIs · Cloudron-deployed
Read the writeupInteractive painting from Python meant building a tile-based GPU compositor on Skia and OpenGL, because the interpreter can never be the one touching pixels.
14.7k LOC · work in progress · Python · Skia + OpenGL
Read the writeup