Mobile app overview
emaw-mobile-app is the EMAW app for iOS and Android: quiet-time journal, Scripture memory with practice modes, an offline Bible reader with notes and highlights, the book lessons, and an AI verse finder. It is published on the App Store and Google Play.
| Package / slug | emaw / Expo slug EMAW, app name EMAW, version 1.1.3 |
| Identifiers | iOS bundle com.emaw-app.com; Android package com.emaw_app.app (they differ) |
| Stack | React Native 0.88, React 19.3, Expo SDK 58, React Navigation 7 (native-stack + bottom-tabs), axios, Context API, i18next, expo-sqlite, expo-secure-store, expo-audio, expo-updates, @react-native-google-signin/google-signin |
| Build | EAS (eas.json: development, preview, production), appVersionSource: remote |
| Backend | hard-coded in constants/backendIp.js (production https://app.emaw-app.com/) |
| Own docs | CLAUDE.md (partly stale; see known gaps) |
| Tests / lint | none |
The app needs native modules, so it runs as a development build, not in Expo Go.
Layout
App.js fonts, splash, AuthContextProvider, AuthStack or UnauthStack
app.json Expo config (identifiers, plugins, permissions, updates, EAS project id)
app.config.js adds Google sign-in client ids and the iOS URL scheme from EXPO_PUBLIC_* vars
eas.json build profiles
stacks/ UnauthStack, AuthStack, BottomTabsNavigator and per-tab stacks
screens/ one file per screen
components/ practice modes, Bible reader modals, forms, pickers
store/ AuthContextProvider, AxiosInstance, tokenStorage
context/ VersionsContext
utils/ one function per API call; googleSignIn.js; bibleDownload.js
bibles/sqliteService.js local SQLite access
constants/ backendIp.js, styles.js, bibleData/*.json (version list, per-version structure)
locales/<lang>/ translation.json, book_info.json (en, alb, nor, ge, br)
plugins/ withGradleJvmArgs config plugin
scripts/bumpVersion.mjs
assets/ icon, splash (Bulldog), fonts
.env EXPO_PUBLIC_GOOGLE_* client ids (committed; public identifiers)
android/, ios/ gitignored prebuild output
What the app does
| Tab | Screens |
|---|---|
| Home (hidden tab, reached from the header) | W.A.R. Prayer, Getting Started Right, Videos & Training, Get Books, Giving (Android only) |
| Quiet Time | Journal list, entry form, past entry (share/copy) |
| Verse Memory | All verses, collections, add verse, practice (five modes), AI verse finder |
| Bible | Offline reader (highlight, note, tag, memorize, similar, compare, start a QT), semantic search, Library of annotations |
| Books | Four books → weeks → discussion questions and weekly QTs with progress |
| Settings | Language, default version, stats, sign-in methods (Google link), change password, logout, delete account |
Screen-by-screen detail: Navigation. Not in the app: push notifications, in-app purchases, deep links or a URL scheme, analytics SDKs.
State and storage
AuthContextProviderholds tokens and session bootstrap; tokens are read and written only throughstore/tokenStorage.js(expo-secure-store, AsyncStorage on web, migrates old AsyncStorage tokens).VersionsContextloads the Bible version list fromconstants/bibleData/version_list.json.- AsyncStorage keys: preferences (
defaultLanguage,defaultBibleVersion,lastBibleReading), Bible install records (bible:<KEY>), caches (quietTimeEntries,userVerses,userCollections, submission answers and dates), discussion drafts (<bookId>_<week>).