First-run onboarding is now genuinely one-tap. The Android app's login screen has a Find my server button that does an HTTP subnet scan of the local network for Crumb's /health endpoint.
Why a subnet scan, not mDNS
We tried mDNS first. It didn't survive Docker bridge networking; the recorder publishes its hostname inside its container, the workstation never sees it. A direct HTTP scan of the user's local /24 finishes in under two seconds and works the same regardless of how Crumb is deployed.
What's left
- Android: shipped (
5323a06) - Desktop: pending
- iOS: pending (depends on the iOS client)
- Web: not needed. Admin lives at the same address as the API.
This is the unglamorous infrastructure that separates "self-hosted is hard" from "self-hosted just works."