code, tools, and thinks.
A health tracker & flare forecaster, primarily designed for photosensitive systemic disease — daily symptoms and biometrics, UV-lag correlation, flare forecasting, and clinician-ready PDF reports. AGPL license
A study game for the 31 ICAP antinuclear-antibody (ANA) immunofluorescence patterns
Android companion to sardinetracker. Reads steps, resting HR, HRV, SpO2, respiratory rate, and body temperature from Health Connect — so it works with any wearable, not just an Apple Watch — and syncs them to your own server, with a one-year backfill and a nightly background sync. Server address and token are entered at runtime and stored encrypted; nothing is baked into the app.
iOS companion to sardinetracker. Syncs HealthKit data to your server, fetches flare-risk forecasts, and embeds the Log and Risk pages via WKWebView — with background sync, local reminders for bedtime and meds, and Shortcuts actions. Built as a Swift package (xtool / SwiftPM).
Decides which PDFs in a Taildrop inbox are real clinical records, and drafts a description for each. Four gates: sha256 (seen it before?), a structure-based classifier (does this have the shape of a record about a patient — not just clinical vocabulary), local regex for date and provider, then a local model for title and summary. Nothing leaves the machine until you type y. MIT license
Local-LLM tagging for private free-text notes. A model on your own machine reads each note once in a nightly batch and picks tags from a vocabulary you control, so later searches run on stored tags instead of the model. Notes are only ever read, never changed; every tag records the run, model, and vocabulary version, so a bad run can be pulled back out in one go. MIT license