I build small, self-contained web things — usually because I wanted the thing to exist and it didn’t.
Nothing here is a startup. No roadmap, no funding round, no growth strategy. I do IT full-time, so the day belongs to other people’s tickets — these get built mostly at night and the weekends, when the queue is finally my own. Kept deliberately simple: no frameworks, no build steps, no analytics watching you.
What I'm working on right now
Building a macOS administrator tool that maps out the private IP addresses on a network — what’s on it, what’s answering, and what has no business being there. Written in Swift and SwiftUI. Will share more once it does something worth showing.
A one-page network diagnostics toolkit. It shows you your public IP address, your rough location and ISP, the details your browser hands over without asking, whether you’re behind a VPN or proxy, and whether a given port on your connection is open.
Everything is generated live for your own view and nothing is stored. The port checker only ever tests the port on your address — it won’t accept a target, so it can’t be pointed at anyone else.
Node · Express · vanilla JS · no database
Bandwidth
2026
I have music on a lot — almost always on my Mac, and mostly things from the 90s. I kept wanting to know who was playing without stopping what I was doing: the same quick glance you give the clock in the corner, not a switch to another window to go and check.
So necessity built this. It’s a small macOS menu bar app that puts the current artist’s name up by the clock, asking Music what’s playing once a second and falling back to a quiet ♪ when nothing is. The dropdown has Play/Pause, Next Track, and a “Run at Startup” toggle so it’s simply always there after a login.
The artist, up by the clock — a glance, not a context switch.Play/Pause, Next Track, and a Run at Startup toggle.
Python · rumps · AppleScript · py2app
Smoke Test
2026
I love my Traeger. Just about every weekend there’s something on it, low and slow for hours — exactly the kind of thing you want to keep half an eye on while you get on with something else. That something else is usually coding at the Mac, so I figured: if the grill temperature sat up in the corner like the clock, I could just glance up and know where things stood.
Traeger has no public API, so — with some genuinely impressive reverse-engineering help from Claude — this talks to the same cloud service the phone app uses. From the menu bar it shows the grill temperature, your target, the meat-probe reading, and how much pellet fuel is left. The dropdown lets you dial the target temp up or down, and shut the grill down entirely, without leaving the keyboard.
Grill temp rides up by the clock; the panel has the target, pellet level, a temp slider, and a shutdown button.
Python · rumps · Traeger cloud API (reverse-engineered)
More to come — this is the honest current list.
Robot Snake
A little robot who cannot stop moving and cannot be trusted around batteries. Arrow keys or WASD — swipe on mobile.