Screens
Key engineering
Under the hood
A native engine with an app around it. Analysis, batching and transfer live in Swift and a pure TypeScript job core; the React Native layer stays presentation. The backend handles accounts and entitlements only — it never sees a photo.
Library state is local to the device, keyed by asset. Analysis results carry the version of the algorithm that produced them, so improving detection re-runs only what is stale instead of invalidating the whole library.
The phone. The backend is edge functions with a small relational store; the app ships through the store pipelines, with over-the-air updates for everything that is not native code.
The device is the hostile environment — thermal throttling, the lock screen, a pulled cable, and cloud-resident assets that arrive late or not at all. Per-asset failures are tracked rather than averaged away, because a run that silently skipped files is worse than one that failed.
Stack
What it took
- The analysis engine is the product. A native scanning pipeline that tunes its own batch size and concurrency to the device it is running on, measured at roughly 174 photos per second — fast enough that an 80,000-photo library is a coffee break, not an afternoon.
- iCloud is the hard part. Photos that live in the cloud behave nothing like photos on the device — they arrive late, or not at all — so the engine treats slow assets as their own problem with retries and per-asset error tracking, rather than guessing and being wrong.
- Analysis is versioned. Results carry the version of the algorithm that produced them, so improving detection re-runs only what is stale instead of invalidating an entire 80,000-photo library.
- Triple duplicate detection — exact, near-duplicate and visually similar — plus Live Photo conversion that drops the hidden three-second video and keeps the still.
- Direct-to-USB transfer from an iPhone, with a resumable job engine underneath: manifest schema, state machine and reporting live in a pure-TypeScript package shared with My Photo Copy.
- Two apps, one native core. Photo Trim and My Photo Copy ship from one workspace on shared native modules, with release tooling that refuses to publish an unversioned build.
