Brickanize app icon

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

Brickanize home screen showing set count and estimated collection value
Your collection at a glance
Brickanize collection list showing sets with theme, year, value, and condition
Condition and value per set
Brickanize search results for LEGO sets by name and set number
Search that forgives typos

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.

Get in Touch