About

I get hired to build products. Sometimes that is a mobile app from an empty repo through to the App Store — Zums and the first release of Shredder were both mine start to finish. Sometimes it is the web side: at Promote I built the campaign manager, the creator-facing views, the leaderboard and the internal admin panel. Often it is both, plus whatever runs behind them.

Alongside that I design, build and ship my own products. Client work is where I learn what breaks once real people are using something; my own products are where I own every decision from research through App Review, with nobody to hand the hard parts to.

Before both, I spent three terms writing internal software at the National Research Council and at Fisheries and Oceans — Power Platform tooling, an Angular and Electron metadata recorder, and a file search I cut from about twenty minutes to a few seconds. Mostly the unglamorous kind of work where the system has to keep running while you replace it.

The through-line is that I like problems where the constraint is real: no network, no account, a migration that cannot go down, or a price a tradesperson has to understand in one read.

Where I've worked and studied

National Research Council Canada logoDepartment of Fisheries and Oceans logoCarleton University logoAlgonquin College logo

How I build

I ship the whole thing

Zums was the app and the operator dashboard running quests and payouts behind it. Billhead and Holdfast went from research to App Review. When I say I built something, I mean the interface, the backend and the release — not a slice in the middle.

The boring solution usually wins

Shredy is presented as an intelligent matchmaker and is exactly that: deterministic scoring, not a model. At Fisheries and Oceans a twenty-minute search became a few seconds by indexing metadata into a database instead of querying blob storage directly. Neither was clever. Both were right.

Research before code

Billhead started with 271 hand-classified one- and two-star reviews of the apps people were leaving. The pay-once model, the offline-first constraint and the permanent export promise all came out of reading those, not out of a brainstorm.

What I work with

Languages
TypeScriptJavaScriptJavaC#PythonSQL
Mobile
React NativeExpoSwiftUIWidgetKitAlarmKit
Web
ReactTanStackNext.jsTailwind CSSAngularElectron
Backend & data
Node.jsConvexSupabaseSQLitePostgresAzure
Ship
RevenueCatApp Store ConnectCloudflare R2Resend