// 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
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.
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.
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.