Projects
Current work.Four codebases, all in active use.
The software I am building and maintaining right now. Each repository carries an up-to-date README covering architecture, technical choices and current status — written to be read, not archived.
ProfileForge
A self-hostable Next.js app that turns an uploaded CV into a structured profile with bullet-level provenance, then generates a tailored CV and cover letter for a given job description. Matching and scoring are deterministic functions; the LLM (via the user's own OpenRouter key) only extracts requirements and rewrites evidence-keyed content, so every claim traces back to profile data. PDF exports are gated by a two-level text-extraction check before they can be downloaded.
02RunLens
An Android app that reads the latest Garmin run through Garmin's Personal API and enriches it with the original FIT file for per-second running dynamics. A pure-Kotlin analysis engine computes aerobic decoupling, grade-adjusted pace (Minetti model), HR-zone distribution and form trends, then a tip engine turns those numbers into prioritised recommendations that cite them. Works offline, with FIT-based fallbacks when Garmin's curated endpoints come up short.
03sleep-analysis
A privacy-first Android sleep tracker. Overnight audio runs through a microphone foreground service; snore bursts are detected on-device with a spectral heuristic and stored as short event clips with full provenance in Room — full-night audio never leaves the phone. An optional Garmin import adds wearable context, explicitly labelled as vendor estimates, and a small Python toolchain supports fixture tuning and analysis.
04stillroom
Offline breathing, attention and focus practice where all sound is synthesised live: an AudioWorklet layers filtered noise into non-looping soundscapes, scheduled on the Web Audio clock with a fixed lookahead so timing never depends on the UI. A native foreground service with a media session keeps sessions running while the phone is locked, mapping audio-focus changes to a unit-tested pause/duck/resume policy.
RunLens lives in the analysis-garmin repository. sleep-analysis is private while the detection work settles; its README is kept current regardless.
The common thread
Small, inspectable systems.
Local-first where the data is sensitive, deterministic where correctness matters, and documented enough to pick up and run. Tests and CI over promises.