No file lands on disk — Chrome stores the bundle internally, same as any installed PWA.
Manual install
Rider · iPhone / iPad
Apple doesn't allow websites to push native apps to iOS. Until our App Store / TestFlight goes live, install the PWA in 3 taps:
1
Open this page in SafariThe only iOS browser that can install PWAs.
2
Tap the Share buttonThe square with up-arrow at the bottom.
3
Tap Add to Home ScreenConfirm name, tap Add. Skyfall icon appears, launches full-screen with a splash.
Authorised drivers only
Driver app — for vetted Skyfall chauffeurs
Driver accounts are issued by Skyfall Operations after background checks, vehicle inspection, and (for Shield-tier) firearm-competency verification. Self-signup is disabled by design.
If you've completed onboarding, ops will have given you a 6-letter activation code by SMS. Enter it below — the app then unlocks for download or PWA install.
Awaiting code…
PWA install
Driver · Android
Install the Skyfall Driver console. You'll log in with the credentials Skyfall Operations issued you — there is no rider-style sign-up.
PWA opens the operations console at /driver/. The native APK (when uploaded) is built from the same Expo project, signed for sideload.
Manual install
Driver · iPhone / iPad
iOS distribution requires the Apple Developer + TestFlight path. Until then, drivers install the PWA via Safari → Share → Add to Home Screen. The PWA has the same login, accept-ride, and nav flow as the native app.
Why no .ipa download?
Apple blocks any iPhone install that isn't signed by a registered developer cert. The only legal paths are the App Store, TestFlight (max 10 000 testers via a public link), Ad-hoc (max 100 pre-registered UDIDs), or Enterprise (internal-only — using it for public distribution gets the cert revoked). We're enrolled in TestFlight; once Apple approves the app, this section flips to a real install link.
Operations: how to issue a driver activation code
POST /v1/admin/drivers
Authorization: Bearer <admin JWT with mfa=true>
{ "displayName":"…","email":"…","phone":"+27…","tempPassword":"…",
"tierFlags":["EXECUTIVE"],"armedCleared":false }
→ returns { "id": "drv_…" }
→ ops emails the driver: "Activation code: SKY-XXXXX"
(the code maps to drv_… in the admin DB)