Side projects, tools for the house, and the odd experiment to see what the web can do.
In progress2026
Budgit
Photograph a receipt, get a budget
Snap a receipt and the line items, discounts, store and date are extracted and categorised for you. A Next.js app on Firebase with Genkit and Gemini for the understanding, backed by a self-hosted FastAPI and PaddleOCR service that pre-processes and reads the image so the model gets clean text.
- Next.js
- Firebase
- Genkit
- Gemini
- FastAPI
- PaddleOCR
Live2026
HealthLog
One timeline for every condition you manage
A multi-condition health logging PWA with consent-based sharing, so a doctor or caregiver sees only what you grant them. Next.js App Router with cookie-based Supabase auth, Serwist for offline, and a schema designed for scoped and revocable access.
- Next.js
- React
- Supabase
- Tailwind CSS
- Serwist
In progress2026
Homelab monitoring
Prometheus and Grafana for the rack at home
A Docker Compose stack watching a Proxmox cluster and a TrueNAS box: node, SMART, cAdvisor, blackbox and Proxmox exporters into Prometheus, Grafana dashboards, and Alertmanager so I hear about a dying disk before it dies.
- Prometheus
- Grafana
- Alertmanager
- Docker Compose
- Proxmox
- TrueNAS
Live2026
Noez
Multiplayer Caribbean dominoes, on the web and in your pocket
Live sessions with friends, spectators on the rail, table votes, stats and ranks, and play-by-play replays of every finished game. One React codebase ships as a web app, a PWA and an Android app. All writes go through Cloud Functions, with a tested Firestore rules suite guarding the read side.
- React
- TypeScript
- Vite
- Capacitor
- Firebase Functions
- Firestore
Open source2026
Reo Bridge
Battery cameras for Frigate NVR
Frigate expects always-on RTSP streams. Battery cameras sleep and only upload short motion clips over FTP. This bridge watches for clips and plays them through one persistent RTSP stream, filling the gaps with idle frames so Frigate never disconnects. Python, FFmpeg and MediaMTX in a container, with CI and a small web UI for tuning.
- Python
- FFmpeg
- MediaMTX
- Docker
- GitHub Actions
Live2025
Fitnese
Workout tracking that understands injuries and rehab
An offline-first fitness PWA where exercises inherit from parents, target muscles hierarchically, and carry injury risk and rehabilitation metadata, so training can follow what your body actually needs. React 19 and Supabase, wrapped with Capacitor for Android.
- React
- TypeScript
- Vite
- Supabase
- PostgreSQL
- Capacitor
- Workbox
Live2020
Web Chat
A chat PWA built to see how far the web could go
Offline support with a service worker and IndexedDB, push notifications, voice notes, image sharing straight from the OS share sheet, friend requests, read receipts and typing indicators, and watching YouTube together with synced playback. Vue 2 on the front, Socket.IO and MongoDB behind it.
- Vue
- Socket.IO
- MongoDB
- Firebase
- Service Workers