Skip to main content

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 / slugemaw / Expo slug EMAW, app name EMAW, version 1.1.3
IdentifiersiOS bundle com.emaw-app.com; Android package com.emaw_app.app (they differ)
StackReact 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
BuildEAS (eas.json: development, preview, production), appVersionSource: remote
Backendhard-coded in constants/backendIp.js (production https://app.emaw-app.com/)
Own docsCLAUDE.md (partly stale; see known gaps)
Tests / lintnone

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​

TabScreens
Home (hidden tab, reached from the header)W.A.R. Prayer, Getting Started Right, Videos & Training, Get Books, Giving (Android only)
Quiet TimeJournal list, entry form, past entry (share/copy)
Verse MemoryAll verses, collections, add verse, practice (five modes), AI verse finder
BibleOffline reader (highlight, note, tag, memorize, similar, compare, start a QT), semantic search, Library of annotations
BooksFour books → weeks → discussion questions and weekly QTs with progress
SettingsLanguage, 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​

  • AuthContextProvider holds tokens and session bootstrap; tokens are read and written only through store/tokenStorage.js (expo-secure-store, AsyncStorage on web, migrates old AsyncStorage tokens).
  • VersionsContext loads the Bible version list from constants/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>).