-
Volumen
readerAn eBook reader for EPUB, Word and Markdown. Books are rendered by a Rust typesetter running in the browser or a desktop app. Writers can share a manuscript, and readers’ highlights and notes go back to them. The reader can also be self-hosted, or embedded by other sites to put reflowable, multi-page documents on their own pages, with as many or as few of the extra features as they choose.
What it involved
- Shipping one Rust engine to two targets: WebAssembly in the browser, native inside a Tauri desktop app.
- Desktop releases for Linux, macOS and Windows, built and packaged by CI from a single tag.
- A typesetter of its own: text shaping, paragraph breaking, hyphenation and column layout.
- End-to-end encrypted sharing: client-side encryption where the server holds ciphertext only and approved writers sign in with passkeys.
- Browser tests with Playwright, and drop-in web components for embedding on other sites.
-
OmairPlay
Linux appletA plugin that turns an Omarchy Linux machine into an AirPlay speaker, so a phone can act as a music remote without running heavy desktop apps. It installs and configures shairport-sync, keeps its firewall openings limited to the local network, and shows what’s playing in the bar.
What it involved
- Least privilege: the applet never runs as root; setup shows every command in a terminal before asking for a password, and takes a system snapshot first.
- Firewall rules scoped to private networks only, tagged so they can be audited, and updated when the network’s addresses change.
- Self-diagnosis and repair: it reads the live firewall and service state, names what’s wrong, and restarts a stalled receiver on its own.
- A clean uninstall that reverses every change setup made.
-
Searx Lite
browser extensionA lightweight fork of SearXNG, rebuilt as an MV3 WebKit extension that runs entirely in the browser, with no daemon or Docker. It aggregates and re-ranks results from several providers on a plain, distraction-free page, and can search lists of trusted sources such as news sites or journals. All results can be converted to JSON via an API.
What it involved
- Fitting a server application into a browser extension’s limits, on a low-spec laptop’s memory budget.
- Rank fusion: merging and re-ranking result lists from providers that score differently.
- Lazy loading only what a query needs, so searches return in milliseconds.
- Keeping a fork in sync with a fast-moving upstream.
-
Stelzer
typefaceFour-style text serif in the Plantin tradition, derived from Splentinex by measured transformations of its outlines. It gives digital prose and blogs more generous metrics without changing the character of the original. Released under the OFL.
What it involved
- Changing outlines by measured, scripted transformations rather than distorting letters, so every change is reproducible.
- Family engineering: shared vertical metrics, mark positioning, a STAT table, kerning checked for collisions.
- Hinting for both TTF and CFF builds, and web fonts alongside desktop ones.
- Working within an open-source licence chain going back through three earlier revivals.
-
Heuristics for PDFs
research toolAn experimental tool for turning complex PDFs into structured text, using heuristics tested against a real, public-domain document corpus. Every decision reports a confidence, and anything it can’t read is shown as an image of the original page. The aim is OCR-model quality without the cost.
What it involved
- Evaluation first: a corpus with hand-written reference answers, and a build that fails on any regression.
- Reading-order recovery, table detection and dehyphenation, each with a confidence rather than a guess.
- Reproducible fixtures: rebuilding the corpus produces identical bytes.
- Packaging as a socket-activated systemd user service and an Arch package.
-
Dynamic audio tuning
browser extensionCleans up YouTube concert videos with spectral processing in an AudioWorklet that acts only while crowd noise surges. Unstable for now: naive frequency adjustments can’t give consistent results, since screams and vocals share several of the same frequencies.
What it taught me
- Real-time audio in the browser: a short-time Fourier transform with about 21 ms of latency.
- Testing signal processing: a bypass that is bit-exact, and end-to-end tests against a real video.
- Where a technique runs out: DSP can remove surges, but separating a voice from a crowd needs source separation.