Portfolio

Ideas made tangible

Desktop apps I build and use every day. The problem, the process, and what came next.

5 apps · 3 in daily use · 2 in active development

Developer tool · macOS app, or any Node 22 hostIn active development

Witan

A local daemon and desktop app that reviews my pull requests with a council of AI agents, and argues with its own findings before posting any of them.

  • Six specialist reviewers, led by a chair agent
  • A skeptic tries to refute every finding before it's posted
  • Learns each repo's standards and keeps them in editable markdown
  • TypeScript
  • Claude Agent SDK
  • Codex SDK
  • SQLite
  • Electron
Read the case study →
Desktop app · macOS, Windows, LinuxDaily driver

Canopy

A small desktop app that finds every git worktree on your machine, shows which ones are safe to delete, and cleans them up.

  • Each project drawn as a tree of its worktrees
  • Knows when a squash-merged branch is safe to delete
  • 4.4 MB app that shells out to your own git
  • Tauri 2
  • Rust
  • Svelte 5
  • TypeScript
Read the case study →
macOS app · macOS 14+In active development

Tessera

A native macOS BitTorrent client where every transfer is drawn as a mosaic of its own pieces, lighting up as they're verified.

  • BitTorrent engine written from scratch in Swift
  • DHT, PEX, magnets, and v2 / hybrid torrents
  • ~92k lines of Swift, ~1,800 tests
  • Swift 6
  • SwiftUI
  • AppKit
  • Network.framework
Read the case study →
macOS app · macOS 15+Daily driver

Volta

A menu bar app that watches every battery around your Mac: deep detail for the Mac itself, plus AirPods, Magic accessories, iPhone and Watch.

  • Reads the battery controller straight from IOKit
  • Per-bud and case levels for AirPods
  • All history stored locally, nothing leaves the Mac
  • Swift
  • SwiftUI
  • IOKit
  • CoreBluetooth
Read the case study →
macOS app · macOS 14+Daily driver

Headroom

A tiny macOS notch app that shows how much of your Claude, Codex and OpenCode quota is left, and when each window resets.

  • Lives in the MacBook notch, invisible until hovered
  • Pace ticks show whether you're ahead of your quota
  • Reuses existing CLI sign-ins and never stores tokens
  • Swift 6
  • SwiftUI
  • AppKit
Read the case study →