- Android/iOS now return to cat.ikerdemo.musify:/callback instead of
musify://callback: a private-use scheme based on a domain we own
(RFC 8252 section 7.1), so another app is unlikely to claim it.
- The Musify Native app no longer needs devMode: loopback and custom
scheme redirects are both valid for a native app.
- zitadel-init also updates an existing app's config, so the change
reaches instances created before it (the client id is kept).
- iOS takes the scheme from everything before the first ':', since the
new URI has a single slash.
A Compose Multiplatform app (mobile/) targeting Android, iOS, and desktop,
sharing one Kotlin codebase: OIDC login via PKCE against the same Zitadel
instance the web player uses (loopback redirect on desktop, a musify://
custom scheme on mobile), a token store per platform, and a first pass at
browsing/streaming tracks through the existing API.
deploy/compose.yml's zitadel-init gains a third OIDC app registration
("Musify Native", public client, no secret) alongside the existing API and
web apps, writing its client id to NATIVE_CLIENT_ID in the env file the same
way the other two already do.