Lab notebook
Experiments
Side projects since 2023, newest first.
2026
Oct 2026 – present
AI Health Harness
In progressAn eval harness for an AI agent that summarises clinical notes, scored against synthetic-patient ground truth.
- Synthea FHIR R4 to DuckDB pipeline with pinned seed and version produces schema-validated ground truth (active medications with RxNorm dose and timing, allergies, conditions).
- 100 test-case notes with planted traps, each agent version is graded by deterministic scorers and an LLM judge.
- dbt turns results into per-version rollups, regression gates, and a dashboard.
2025
Sep 2025 – Nov 2026
Chem MLOps
ShippedFine-tuned a small chemistry LLM on ChEMBL and FDA TWOSIDES data and shipped it as a tool-calling chat app.
- Dagster pipeline ingesting ChEMBL (2.96M compounds) and FDA TWOSIDES data into LanceDB and a 1.1M-pair QA corpus.
- Fine-tuned Gemma 3 270M on a GCP L4 via a two-stage SkyPilot job, then quantized it to a 262 MB GGUF for Ollama.
- Bun/TypeScript chat app where the model emits JSON tool calls (ChEMBL lookups, TWOSIDES interactions, RDKit structure rendering) resolved server-side.
- Deployed on a free-tier GCP VM with Docker Compose, Caddy HTTPS, Google sign-in, a one-at-a-time queue, and usage logs in GCS for DuckDB.
2023
Oct 2023
iTunes Podcast API (Go)
ShippedGo API for searching podcasts and episodes via the iTunes Search API, returning clean JSON.
- Parses iTunes RSS feeds with Go’s
net/httpand the Gin framework, all containerized with Docker Compose.
May 2023 – Jan 2024
pokéFastAPI
ShippedBackend API for retrieving and searching Pokémon data, with orchestration and a dashboard front end.
- Collected data from PokéAPI with Polars and httpx, stored as Parquet and queried in place with DuckDB.
- FastAPI backend, Mage.ai orchestration, and a Streamlit front end with radar charts, all spun up with one
docker-compose up.
Feb 2023
Go Pomodoro CLI
ShippedCommand-line Pomodoro timer with configurable study and break intervals and a progress bar.
- Parses iTunes RSS feeds with Go’s