Principal PM. Fifteen years on platforms and developer ecosystems at Microsoft, Tableau, and Elastic. Connector SDKs, partner certification, marketplace scaling, and the Kibana platform.
These days I ship the products myself. I work through coding agents rather than writing the code, so the job is what it always was: scope, sequencing, tradeoffs, and knowing when something is wrong. Everything below started as a problem I actually had, got specced, and shipped. Most of it runs on my own hardware, against local models, with no data leaving the house.
| Project | What it does |
|---|---|
| cruxwire | Self-hosted news reader that ranks, de-duplicates, and summarizes RSS/Atom feeds using local LLMs. Semantic dedup via nomic-embed-text embeddings, clustering across sources, fully offline. Live at cruxwire.app. |
| backyard-birds | Bird-sound monitoring on existing camera audio. BirdNET-Go listens to RTSP streams, detections land in TimescaleDB, and a Next.js dashboard adds species pages, weather correlation, and an eBird / xeno-canto review queue for false positives. |
| Sumline | Notepad calculator in the spirit of Soulver. Natural language in, running totals out. Runs in Docker, reachable from any browser on your network. |
| modularriffs | Browser-based generative MIDI tool for jamming over a modular synth. Derives four evolving monophonic parts from real song-structure blueprints and melodic motifs. |
I write about applied AI, the homelab, and product work at philoking.com.
Most of what I build lives on a self-hosted Gitea instance. What's here is the subset finished enough to hand to someone else.


