I am a cognitive scientist. I started writing software in April 2026 because the tools I wanted for multiple sclerosis did not exist, and building them was the fastest way to find out whether they could.
Protocol Tracker is an Android app for people on a high-dose vitamin D3 protocol. The day is anchored to the patient's own first dose rather than the clock, every reminder is an offset from it, and the record of doses, symptoms and relapses never leaves the device. It began as a build for one patient and ships as a signed APK anyone can verify.
ms-twin-treat asks whether a multi-scale simulation of an MS therapy can be trusted at all. The backtest harness was built before the model, and nothing in the model is believed until it replays a known trial outcome. The honest result so far: the cell model beats both nulls on real interferon-beta data, and the foundation-model embedding I expected to carry it is statistically indistinguishable from a plain correlation matrix. The README says so.
lesiontrack finds new, enlarging, shrinking and slowly expanding MS lesions across MRI timepoints, with one registration dependency and a run time of minutes. A synthetic backtest has to pass before any number is reported. It earned its keep immediately: it showed the registration tool's own Jacobian recovering under a third of the injected expansion, so the package now computes the Jacobian itself.
bidsgate turns that check into a gate for any BIDS pipeline. Inject a known lesion or volume change into real data, run the tool, score what came back. The first scorecard is LST-AI on OpenNeuro controls, and it says plainly where the segmenter fails: the lower third of the brain, at any lesion size.
mscard is the report those two were built for: two MRI visits in, one page out, with new, enlarging, shrinking and resolved lesions, slowly expanding lesion candidates and brain volume change. Before the page is written, the same pipeline runs on the patient's own baseline with known changes injected, and every number carries how much of that truth it recovered. On 24 public MSLesSeg patients the tracking held (1 false change call in 551 lesions) and the standard slowly-expanding-lesion rule fired about once per lesion with no lesion expanding, which is the number a reader of any SEL count should have next to it. Every report is online.
nifti-qc catches the qform/sform disagreement that silently mislocates an image in world space. I first fixed that bug inside LST-AI's own pipeline, then wrote the check so nobody has to find it three steps downstream again.
Two tools came out of the work itself rather than the subject. gh-odds measures, before you open a pull request, whether a repository actually merges outsiders and how long that takes. cachemiss reads the transcripts Claude Code keeps on disk and explains where a quota went.
Earlier, and still maintained: MCP servers for Xe currency data and the Centrapay payments API, and a decoder for x402 payment headers.
Most of what I know about the neuroimaging stack I learned by fixing it. Merged work in nibabel, nilearn and MNE-Python covers an ECAT header dtype, non-finite values in surface smoothing, the brainsprite slice index, EyeLink calibration encoding, and epoch events that fall outside the raw range. Before that it was banking identifiers: IBAN generators in Faker that pass real checksum validation, and the registry in schwifty. The rest runs from Jaeger's MCP server to Adyen's HMAC validator to the OpenTelemetry collector. The full list is one search away.
Each one was a bug reproduced, fixed with a regression test, and accepted by the people who maintain the code.
condaydigital.com. Germany. English and German.






