Background
- Product leader with 10+ years experience across insurance, health, and fintech
- Building insurance and risk products for the commercial real estate industry at SafeLease, currently focused on self-storage. We're hiring!
- Also available for product advisory and consulting — get in touch
What I'm Building
- Insurance and financial products for the commercial real estate industry at SafeLease
Currently Learning
- AI agent development and LLM-powered automation
- Full-stack Rails development (Hotwire, Turbo, Stimulus)
- Insurance and commercial real estate domain expertise
My Tech Stack
- Frontend: TypeScript, React, Next.js, Rails + Hotwire
- Backend: Ruby on Rails, Python
- AI & Automation: Claude Code, MCPs, Cursor, n8n
- Data: SQL, Python, Spreadsheets
- Infrastructure: Hetzner, Kamal, Docker, GitHub Actions
Projects
-
MomentVault
Upload, organize, and analyze video content with AI-generated thumbnails, quality analysis, and automatic transcription with full-text search.
Built as a way to create a memory time capsule for my twin daughters — first use case was their first birthday party. Having fun building it so keeping it going!
Technologies
Rails 8, Hotwire, Stimulus, SQLite, Active Storage, whisper.cpp, ffmpeg, libvips, Hetzner, Kamal, Docker
-
Cairn
A very small journal for iPhone and Apple Watch. One word each morning, one sentence each evening. Shipped to the App Store, with Home Screen widgets, Lock Screen widgets and Watch complications. It collects nothing at all: no accounts, no analytics, no servers.
My first time shipping anything to the App Store, which turned out to be most of what I got out of it. It taught me how hard it actually is to keep state in sync across devices, with an iPhone, a Watch, widgets and a complication all reading the same day's data through CloudKit, and how little control you have on iOS once you leave the app. Lock Screen widgets and complications get a small space, a fixed set of layouts, and refresh on the system's schedule rather than yours.
I also stopped using it. I needed the Home Screen space more than I needed the word, so I wrote up why: it asked for a daily open and gave back one word, and every feature I added afterward raised what it gave back without ever lowering what it cost. Set down on purpose. Still live, still works.
Technologies
Swift, SwiftUI, SwiftData, CloudKit, WidgetKit, watchOS, WatchConnectivity, Xcode
-
Qwirkle Score Tracker
A tool for tracking Qwirkle scores and managing player lists.
My wife became obsessed with the board game "Qwirkle Cubes" during a family vacation. We bring it with us to restaurants, bars, anywhere socially acceptable to play. I built this tool for her and to keep my from getting in trouble when i forget to log scores.
Evolution
- Initial version - Built by prompting Claude to create an artifact. raw html, css, js. no frameworks.
- Second version - Full-stack with Rails 8 + Hotwire. Deployed to a bare-metal server (Hetzner) using Kamal.
- Third version - Updated Kamal + Hetzner deployment that has progressive authentication to allow for guest play, the ability to join via QR code, and live score updates using websockets (ActionCable).
Technologies
HTML, CSS, JavaScript, Rails 8, Hotwire, SQLite, Hetzner, Kamal, Claude, Cursor