- Problem
- Street sweeping occurs on the second and fourth Monday and Thursday on the streets near my house. I've gotten quite a few tickets because I forget to move my car in the morning.
- Solution
- An iOS Shortcut shares your location, the app identifies your exact street and block side using geospatial analysis of SF Open Data, and a cron job sends push notifications before upcoming sweeps. Self-hosted on a $12/month Digital Ocean droplet.
- Stack
- Python, FastAPI, PostgreSQL, Docker, GeoPandas, iOS Shortcuts
About
- Building legal billing software for Makase
- Making it easier for researchers to conduct marine research with the Greenwater Foundation
- Identifying problems and building solutions for projects I believe in

Professional Experience
Makase Data Engineer Sept 2025 – Present · Remote
- Built the billing and payments core of Makase, a practice-management platform for law firms — a multi-tenant TypeScript monorepo (Hono API, React, Postgres/Supabase) with row-level security isolating every firm's data
- Designed a legal-grade billing engine: versioned fee agreements with a four-tier rate hierarchy, flat-fee credits that net against hourly work, invoice amounts frozen at approval, and an append-only payment ledger that respects IOLTA trust accounting
- Shipped online invoice payments on Stripe Connect — embedded KYC onboarding gives each firm its own account, clients pay by card or ACH through a least-privilege portal, and an idempotent webhook worker ensures no event can ever double-record a dollar
- Backed it with production discipline: a fine-grained role/permission catalog, integration tests pinning bookkeeping invariants, and tenant-scoping audits on privileged code paths
Personal Projects
- Problem
- I want to see more music at these really cool local venues, but I don't know most of the artists coming into town. I'd sit at home scrolling through the venue website, typing each artist into Spotify, listening, and deciding if I wanted to go. It was time consuming.
- Solution
- Scrapes your favorite venue lineups and automatically builds Spotify playlists with tracks from upcoming artists. Connect your Spotify account, pick your venues, and the playlists update themselves.
- Stack
- Python, PostgreSQL, Spotify API, OpenAI API, web scraping
🚗
Computer Vision Traffic Model
May 2024- Problem
- Can you predict how dangerous an intersection is just from an aerial photo?
- Solution
- Scraped 1,731 aerial images from Google Maps, combined them with 20 years of SF collision data, and trained a multi-modal model using ResNet50 image embeddings merged with infrastructure features. Achieved 79% accuracy (R²=0.79) — the built environment accounts for nearly 80% of collision frequency variation.
- Stack
- Python, PyTorch, ResNet50, Selenium, Pandas, NumPy
