Coding
Things I build.
Mostly because something I wanted didn’t exist yet, or something I wanted to learn how to do. Not everything here is fully public — here’s where each one’s at.
Public projects
Open on GitHub.
Open source, ready to read or run yourself.
CursorGram
Run Cursor agent sessions from your phone, over Telegram.
A bridge between Cursor’s coding agent and Telegram, so you can kick off and steer agent sessions from your phone. Live-streams agent activity, lets you review git diffs before they land, keeps sessions persistent between messages, and ships with a small web console.
- Python 3.11
- Telegram Bot API
- macOS service
- Git
- Web console
Closed testing
Pending release.
Apps being tested before a wider release — not open to everyone just yet.
FestivAgent
Closed testingAdd a lineup. Build your plan. Ask the crowd — offline.
Search Clashfinder for your festival and import its full lineup to your phone. From there, search by artist, day, stage or genre; build a clash-aware schedule; and ask grounded questions with optional on-device AI. Ask the Crowd finds nearby FestivAgent users over Bluetooth and Wi-Fi, then relays messages through other phones so you can chat to the whole crowd or DM one person without a network.
- Kotlin
- Jetpack Compose
- Nearby mesh chat
- Room
- llama.cpp
- Offline-first
If you'd like to be an early tester, email me and I'll let you know how to join the closed test.
SWCP Tracker
Closed testingLog the 630-mile South West Coast Path, privately.
A privacy-first Android app for walking the South West Coast Path. Tracks your progress against the full 630-mile route on an OpenStreetMap map, works offline once you’ve preloaded the map, keeps all your data on-device, and needs no account and no tracking. Currently in closed testing on Google Play.
- Kotlin
- Jetpack Compose
- Material 3
- Room
- osmdroid
- Privacy-first
If you'd like to be an early tester and get the app now, email me and I'll send you the opt-in link. It's free either way.
Private projects
Not publicly available at present.
Built for myself rather than to ship, so there’s no repo or live link. Interested in how one works? Get in touch.
Graham — the total home agent
PrivateAn always-on household agent, built to be trusted unattended.
A Python service that runs my own household over Telegram and a local web console. It switches between Claude and GPT depending on the task, keeps its memory in a plain-markdown vault I can read and edit myself, and asks for approval before it does anything outside the chat, like sending an email. Spend is capped, not just tracked.
- Python
- FastAPI
- Telegram Bot API
- APScheduler
- Claude + GPT
- Obsidian vault
- Safety rails
ImagusReborn
PrivateA Chrome extension Google killed, so I rebuilt it.
I used to rely on Imagus, a Chrome extension that let you hover over any thumbnail or link and see the full-size image or video instantly, no new tab required. When Chrome deprecated the old extension platform it depended on, Imagus stopped working, so I rebuilt the whole thing myself. It hovers, previews, and pins images and video inline, with site-specific handling for places like Reddit and YouTube, and its own zoom and pan controls.
- TypeScript
- Chrome Extension (Manifest V3)
- esbuild
- hls.js
More bits and pieces on GitHub.