// op_004 — case study Live
CyberCore Mobile
[ CyberCore Mobile -- React Native / Expo ]
Apple Sign-In -> iOS Keychain -> Face ID re-auth
|
| JWT
v
[ Shared Backend -- Node / SQLite ]
same source of truth as the web platform
|
+--------+--------+
v v
[ RevenueCat ] [ APNs via Expo ]
billing state push reminders
// the problem
CyberCore Academy's training catalog was built web-first, but a meaningful share of learners only ever open it on a phone. Without a native companion, those users were stuck with a responsive web view — slower auth, no biometric unlock, no push reminders to finish a module. The web platform needed a mobile front door that shared its backend instead of duplicating it.
// architecture decisions
Shared Backend
The app authenticates against the same Node/SQLite backend as the web platform via JWT — one source of truth for progress, badges, and billing, instead of a parallel mobile API to keep in sync.
Auth & Identity
Apple Sign-In handles identity, with tokens stored in the iOS Keychain and Face ID re-authentication on app resume — no password re-entry friction on a device that's already biometric-locked.
Billing
RevenueCat owns subscription state and App Store receipt validation, synced against the backend user record — billing logic never has to be reimplemented natively.
CI/CD
Codemagic automates code signing, provisioning, versioning, and binary submission end to end — every release ships without a manual Xcode step.
// key outcomes
Push notifications via APNs through Expo's notification layer bring learners back to unfinished modules without an email round-trip. Sharing the existing backend rather than standing up a mobile-specific one meant the companion app shipped without touching the web platform's data model at all.
// related builds