Work
Everything here is public. You can try it, read the source, and see how it was built.
NouriLoop
A nutrition-tracking web app with AI built in from the ground up. It's live at app.nouriloop.com, open source under AGPL, and anyone can run their own copy with Docker in about an hour.
- What it does: logs meals, recipes and supplement labels from a photo; shows how each meal moved your glucose, using a continuous glucose monitor; turns a goal described in plain words into a measurable one, with check-ins in the app, by email or by text; works in six languages.
- What it's built on: Symfony and PHP, MariaDB, Stripe and Twilio. The AI provider can be swapped between Anthropic, OpenRouter and Ollama, and every AI call is metered.
- How it was built: mostly with AI coding agents, with John planning, directing and reviewing every step. Since June 2026 that's more than 250 pull requests, each one reviewed before it was merged, and more than 180 test files that run on every change.
- How it runs: in production, operated by one person, with uptime monitoring, encrypted nightly backups kept offsite, automatic security updates, automatic dependency updates and a weekly vulnerability audit.
Screenshots are from a demo account with sample data.
Cranky Coop
A physics slingshot game: the raccoons ate the eggs, and the hens take it personally. Six levels, hand-drawn canvas art, sound synthesized in the browser, all in one HTML file. MIT license.
Quiet Solitaire
Klondike, Spider and FreeCell in one HTML file, with no ads, no accounts and no purchases. Play with a mouse or entirely from the keyboard, with three hand-drawn decks. MIT license.
Small projects get the same care as large ones: a build check and a review before every merge.
Library software
Open-source tools for libraries that run the SirsiDynix Symphony library system. Both are released under the GPL and are in production at Oregon library systems.
- libilsws: a PHP package for Symphony's Web Services API. Other library tools are built on it.
- ReLibConnectEd: an automated pipeline that loads student records from school districts into the library system, so students get library accounts through their schools. It validates the data, standardizes addresses to USPS format, skips records that haven't changed, and emails each district a report after every run.
A Python rewrite of ReLibConnectEd is in user acceptance testing and will be released as open source when it's finished.