Currently building
Brickanize
A native iOS and Android app for cataloging LEGO collections. I designed it, built it, and ship it, from the Swift and Kotlin clients down to the API, the infrastructure, and the release pipelines.
In open beta now. 1.0 later this year.
What It Does
Collectors have spreadsheets. Brickanize replaces the spreadsheet.
Add sets in seconds
Scan the barcode on the box, point the camera at the front of it, or search by name or set number against a catalog of more than 23,000 sets.
Everything in its place
Track condition and quantity per set, keep a wishlist of what you're hunting, and get a push notification when something on it goes on sale.
Honest market values
Set values come from what copies actually sold for, sealed and used priced separately, and the app says so plainly when it doesn't have recent sales.
See It
How It's Built
Three codebases, one person, the same practices I bring to client work
Two native clients, not one wrapper
Swift / SwiftUI · Kotlin / Jetpack Compose
Both platforms follow the same clean architecture, with a pure domain layer behind protocols and interfaces, a data layer that owns persistence and sync, and view models driving the UI. The domain layer is fully unit tested with no device or simulator needed.
A backend that holds the keys
Python 3.12 / FastAPI · Cloud Run · Firestore
No third-party API key ships in either app. Every catalog, pricing, and vision call goes through the service, where credentials live in Secret Manager. That also means one cache, one rate-limit budget, and one place to fix a bad upstream response.
Search that survives a typo
In-memory index · 23,000+ sets seeded
The upstream catalog API is metered and unforgiving, so the whole catalog is seeded into Firestore and served from an in-memory index built at boot. Fuzzy recall and reranking run locally, and a live lookup only happens on a genuine miss.
Payments, push, and the boring parts
StoreKit 2 · Play Billing · APNs / FCM
Purchases are verified server side against Apple and Google before anything is granted, with the failure paths tested as hard as the happy one. Sale alerts respect the user's timezone and hold overnight rather than waking someone at 3am.
Releases nobody has to babysit
GitHub Actions · keyless auth to Google Cloud
Merging to main runs the suites, builds, signs, and uploads to TestFlight and Play, and deploys the backend. CI authenticates to Google Cloud through workload identity federation, so there is no long-lived service account key to leak.
Over 4,000 automated tests
Test-first, across all three codebases
Every behavior change starts with a test that fails for the right reason. Suites get mutation-probed so a test that would pass against broken code gets caught, and every load-bearing comment cites the spec or acceptance criterion that drove it.
Built With AI, On A Leash
The honest version of what "AI-assisted" means here
Brickanize is built with a multi-agent pipeline I put together, where specialized reviewers (product, architecture, security, accessibility, QA, infrastructure) sign off on a change before it lands. It moves fast. It also gets things wrong, confidently, which is the whole reason the guardrails exist.
So the rules are strict. The failing test is written first and drives the implementation. Nothing merges to a mobile main branch until I have run the build on a real device myself. Claims get verified against production before they are believed, and a plausible explanation that nobody proved is treated as a guess.
That discipline is not overhead, it is the product. An unverified purchase path silently refunds real customers, and I found exactly that bug in my own app because the pipeline is built to go looking for it.
More on where I think this goes wrong for teams over on AI Smells.
Why It's On My Consulting Site
Most of my portfolio is work I did inside someone else's constraints. Brickanize is the one where every call is mine, which makes it the clearest example of how I actually build when nobody is stopping me from doing it right.
Product decisions, architecture, two native apps, an API, the cloud infrastructure, the release pipelines, the store listings, the privacy and data-safety filings, and the trademark. If you need someone who can own a product end to end instead of one slice of it, this is what that looks like.
Brickanize is a fan-made app. LEGO® is a trademark of the LEGO Group of companies, which does not sponsor, authorize, or endorse this app.