Hello, world
I've been a software engineer for 14 years. I spent the first four as a generalist (databases, Android, web, whatever the job needed), and the last ten focused on iOS, mostly in Swift, at Airbnb, Yelp, and LinkedIn. A lot of that work is under NDA, so this page covers the parts I can share: side projects, open source, and how I like to work.
Accessibility is my specialty, and good UX goes hand in hand with it. At work I focus on finding the pain points in how we build, fixing them, and making it easy for other engineers to ship accessible features without needing to be experts themselves.
I care about the gap between "the accessibility tree looks right" and "VoiceOver actually lands where it should."
I'm also deep into AI agents. At home I run a small fleet of bots on local models, and I'm building pipelines that let agents do real work behind human approval gates and automated checks.
Off the clock I'm a parent to a three-year-old, with a baby on the way, and two dogs. Free time goes to the kids and to building with AI.
Origin story
- Age 8. My dad sat me at an MS-DOS prompt to practice typing with Mavis Beacon, and I fell in love with the idea of becoming a programmer one day.
- Age 13. I built my first website.
- Much later, I went back and studied computer science at Cal State East Bay.
- FileMaker databases and Android, then iOS at LinkedIn, Yelp, and Airbnb, with a lot of accessibility along the way.
- Parent, two dogs, building with AI.
Toolbox
Mobile
Accessibility
Data
AI
Web & server
Things I've built

Vibe Flow
A full-screen music visualizer. Play music from anywhere and Vibe Flow listens through the mic, turning it into real-time procedural visuals. AirPlay it to an Apple TV and it becomes the room's light show.
- Metal fragment shaders for every visual mode, including plasma, nebula, kaleidoscope, and a mode that blends two others
- AVAudioEngine and Accelerate (vDSP) FFT for bass, mid, and high bands plus beat detection, all processed on the device
- StoreKit 2 one-time upgrade, video export, and no third-party dependencies
App Store for Vibe Flow (opens in a new tab)Support for Vibe Flow (opens in a new tab)

Puka Shreds!
A swipe-to-shred arcade game starring Puka, my Boston Terrier, who never met a cardboard box that survived the encounter. Ten themed levels, built with SpriteKit and SwiftUI.

Mr Tipster
A tip calculator with a mustache that has opinions. I first built it in 2017 for CodePath, and my wife kept asking for it back, so it got a full SwiftUI rebuild. The mustache droops at stingy tips and twirls at generous ones.
- Split the bill, round up each share, quick-tip chips, and a bill it remembers for 10 minutes
- Decimal money math in a small, unit-tested model, with Swift 6 strict concurrency
- Tested with VoiceOver, Dynamic Type up to the largest size, and Increase Contrast
The bot fleet
A personal fleet of AI agents that runs entirely on local models (LM Studio + MLX on a Mac Studio). Each bot has its own persona, tools, and schedule, and I talk to all of them over Telegram.
Syd
Keeps the other bots healthy: monitors Docker and the model server, auto-restarts and sends digests, turns ideas and bugs I text it into project backlogs, and hands coding work off to Claude Code.
FunBot
Trades BTC/USD on Kraken. Deterministic rules make every trade, sized with the Kelly criterion. The LLM layer only watches and investigates, never places orders. Separate dev and live clones, plus a read-only sandboxed assistant over live state.
Finn
Household financial analyst. Reads statement exports, flags trends and anomalies, and frames everything around long-term goals.
Maia
Inbox librarian. Triages and labels new mail, flags anything time-sensitive, and files older messages on a 30-day review rhythm.
Holi
Research and content assistant for a holistic life-coaching practice. Finds trends and outlines content across wellness, psychology, and science topics.
Agent pipelines
jarvis-build
A verification-first agent pipeline. It turns Markdown idea notes into plans that need human approval, then runs approved work in a sandbox with separate writer, reviewer, and deployer roles, real output checks, bounded retries, and budget caps. It works with any provider and defaults to a fully offline deterministic mode.
Experience
- Airbnb
- Yelp
- Beezwax Datatools
Open source
Earlier work
Writing
Education
- Cal State East Bay
- CodePath


















