← All posts

June 20 - a portable enrichment import, a console that runs the pipeline, and a brand pinned down

The thing that clicked today: most of a sprawling, week's-worth-of-fronts day turned out to be about one throughline, making Loupe runnable by someone who isn't me, with the rest spent making it look like one coherent product while I was in there anyway.

Built / shipped

The portable Apple-enrichment path, end to end. This is the big one. Loupe's enrichment database (aesthetic scores, scene labels, people seeds) is derived entirely from a macOS photo library, which until now meant my macOS photo library. I built the whole chain so a second person can produce theirs:

I validated it against my own 81,000-photo library: the new build went from ~73,000 bridged records to ~76,800, zero regressions, and it actually corrected 700-odd previously mis-stamped photos. A filesize-tightened matcher recovered files that the old, stricter logic had refused.

A setup console that can run the pipeline. The console used to be a read-only status page. Now it can start the hand-run stages (ingest, contact-sheet generation, face detection) as detached, single-flighted, resumable jobs, each with its own trigger card. You click "Develop," it kicks off ingestion in the background and streams progress with a live rate and ETA; the same machinery generalizes across all three stages.

Frontend out of the monolith. The app's frontend was 2,000+ lines of HTML/CSS/JS embedded inside a 4,400-line Python server file. I lifted it out into its own files in two stages (first the whole page as one literal, then splitting the CSS and JS into real static assets) verified at each step by a byte-for-byte diff of the served page.

A unified brand, and real email. I rebuilt the marketing site's wordmark from the app's exact mark so the site and the app now render identically, synced the site's mockup navigation to the app's real nav, added a People feature section, folded in a founder origin beat and a "how it decides" section, and swapped the closer to the brand tagline. On the design side, I produced a canonical design-system spec and a self-demonstrating visual-system teaching guide, and confirmed the design tooling is now at parity with both the app and the site. I also stood up real email on the marketing domain: diagnosed that the early-access form had no backend and the address couldn't even receive mail, then set up a proper custom-domain mailbox with the full DNS record set verified live.

Problems & fixes

Decisions

Learned

Still open / next