Building Through the Burn

Share

Building Through the Burn

Between June 3rd and today I have made roughly 350 commits across seven repositories on this machine. That number means more to me than it probably should to anyone reading, because for most of that window I could not use my hands at all.

On June 3rd I was badly burned. The injuries covered about 26% of my upper body and both hands. I spent the following month in hospital. I have only recently — in the last few weeks — regained more or less full use of my hands. As I write this, I am still healing a pressure sore in my sacral area that developed while I was an inpatient, the result of not being turned and repositioned often enough during that stay.

This post is not a pity piece. It is a status update, a thank-you to the part of my brain that kept working when my body didn't, and a piece of context I owe to anyone who relies on something I build.

What actually got built

Despite the gap, the work did not stop — it changed shape. Here is where the commits landed.

viri-nft-market — the public NFT marketplace (111 commits)

This is the front-facing marketplace: a Vite + TanStack Router/Start application with server-side rendering, internationalisation across roughly seventeen languages, sitemaps, JSON-LD structured data, and a collection-browsing experience that has to stay fast on a phone. The recent push has been about correctness and speed at the edges: splitting collection sitemaps per chain, parallelising the loader fetches for every slug type so pages don't serially refetch, and hydrating SSR metadata and API responses into the client without a second network round trip. A lot of quiet, unglamorous SEO and hydration work — the kind of thing users never see and engineers always appreciate.

nft-market-backend — the API and on-chain watcher (97 commits)

The Node/Express/Knex backend behind the marketplace carried the heaviest engineering of the period. Two efforts stand out.

First, chainWatch: a live on-chain NFT watcher that subscribes to new block headers over WebSocket for every chain in the registry, learns unknown function selectors and event topics, and records the standards it sees (ERC-721, 1155, 404, 6909) into a MySQL signatures table. Making it survive real networks took real debugging — consuming new-heads for all registered chains rather than just the first five, using WebSocket RPCs for Flare and Songbird so eth_subscribe actually works, sourcing the database DSN from the environment instead of hard-coded credentials, and making every write non-fatal so a single bad row can't take the watcher down. Monad's mainnet and testnet joined the registry too.

Second, a sustained run of PGP/MIME email signing for outbound system mail — building valid signed multipart messages that Thunderbird and other clients accept, wrapping the right plain-and-HTML alternatives, generating RFC-compliant Message-IDs, and attaching the public key. If you ever get a signed email from one of my services, that batch of fixes is why it verifies.

Underneath both sat the less visible plumbing: canonicalName plus chainName slug resolution shared between the backend and the frontend, widened BIGINT UNSIGNED columns for large supplies, and a blockscout cache now partitioned by chain ID.

baresip-studio — a Wear OS SIP client (16 commits)

This one arrived late and fast. It is a SIP client for Wear OS built directly on the baresip NDK stack: stable inbound and outbound calls on the watch, a transport move to TLS, plaintext SIP MESSAGE (RFC 3428) send and receive with an inbox UI, and — my favourite detail — an incoming-call alert that wakes the screen and vibrates, then answers or hangs up over a self-managed telecom connection even from the lock screen. The commit cadence here (eighteen commits in a single day) is, frankly, the clearest signal that my hands had come back.

jmp.com — my portfolio site (17 commits)

A rewrite of the portfolio into a locale-aware, SEO-conscious stack: generated Open Graph images per locale using satori, resvg and sharp with embedded Noto fonts, hreflang sitemaps with an XSL stylesheet, a client-only locale redirect (deliberately not a server-side 302, which hurts crawlers), per-route metadata and JSON-LD, and a proper 404 page that returns a real 404 status. The whole thing now speaks seventeen languages without breaking search indexing.

The smaller utilities

Around the edges: a web UI for ufw (one commit, but a useful one), a SIP client scaffold for a Nokia 2720 feature phone (firmware and EDL loader downloads included), and proxmox-masq — a small NAT/masquerade daemon for Proxmox that reads its interfaces from a config file and plays nicely with a Tailscale exit node. None of these are headline projects, but they are the kind of local tooling that makes the rest of the work possible.

What the timeline tells me

The commit log is also a recovery chart, if you know how to read it.

The earliest work after the injury is tentative: commits titled simply “updates” and “ai changes” on August 5th and 6th. Those are short, careful sessions — me relearning how to type, testing whether my hands would cooperate for twenty minutes at a time. Then, on August 9th, a single day produced roughly twenty-five commits, almost all of them the PGP/MIME signing work. That was a cognitive and physical breakthrough: a full day of sustained, detailed engineering. By August 17th the floodgates opened — the Wear OS client, the portfolio internationalisation, the chainWatch watcher, the sitemap overhaul — and the volume has not let up since.

I did not set out to turn my Git history into a physiotherapy report. But looking back, the shape of the work maps almost perfectly onto the return of function in my hands. The code came back when the hands did.

Why I'm telling you this

Two reasons, both practical.

First, capacity. If you work with me, or depend on something I ship, you should know the baseline. The months after June 3rd were not a holiday or a quiet period of my own choosing — they were a hospital stay and a slow physical rebuild. If a reply was late or a branch went quiet, it was rarely indifference. Context replaces a lot of awkward guesses.

Second, the healing is not finished. I am still managing the sacral pressure sore that developed during the hospital stay. It limits how long I can sit, how I position myself, and some days how clearly I can think through discomfort. I mention it plainly rather than hiding it, because an invisible constraint is worse than a named one — at least this way the good days and the harder days make sense.

Looking ahead

The work I am most excited about is the part that is just starting to line up. Monad's mainnet is in the chain registry and the watcher is already subscribed to it. The Wear OS SIP client needs mTLS to replace the currently disabled certificate verification, and then it is a real daily-driver for a watch. The marketplace's collection and metadata paths are finally consistent between frontend and backend.

Mostly, though, I am glad to be typing at length again. Three months ago I could not hold a keyboard. Today I shipped a blog post and a few hundred lines of code before lunch. That arc — from “updates” to a full Wear OS telecom stack — is the only metric I really needed to recover.

If you are building through your own version of this, the only advice I have is the unglamorous kind: keep the repo open, commit the small things, and let the volume find its own way back. It does.