Skip to main content

Web app overview

emaw-web-app is the React single-page version of the EMAW mobile app: quiet times, Scripture memory, the Bible reader and the book questions, in a browser. It shares accounts with the mobile app and the website.

Package nameemaw-website (sic; it is the web app)
StackReact 18, Vite 6, JavaScript (JSX), react-router-dom 7, axios, i18next, Tailwind 4, howler (audio)
HostingCloudflare Pages project emaw-react-web-app
URLsdev https://develop-web-app.everymanawarrior.cc, prod https://app.everymanawarrior.cc
BackendVITE_BACKEND_URL (trailing slash)
Own docsREADME.md
Testsnone; ESLint

Layout​

src/
App.jsx auth gate; /auth/handoff renders before it
routers/ UnauthStack, AuthStack, BottomTabsNavigator (mobile tabs)
pages/ one file per route
components/ forms, practice modes, bible/ (reader modals), modals, GoogleButton, AuthShell
store/ AuthContextProvider, AxiosInstance
context/ VersionsContext, ThemeContext
utils/ one function per API call (fetchQT.jsx, postQT.jsx, ...), safeNextPath.js
constants/ backendIp.js, websiteUrl.js, googleClientId.js, bookInfo.json, audiofiles.js
locales/<lang>/ translation.json, book_info.json (en, alb, nor, ge, br)
i18n.js
assets/audio/ ~75 bundled verse recordings named by content hash

Routes​

Signed out (UnauthStack): /login, /signup (only when VITE_WEBSITE_URL is empty; otherwise redirects to the website's sign-up with ?next=app), /reset-password, /resend-verification.

Signed in (AuthStack):

PathPageFeature
/homeHomePageToolkit tiles
/war-prayer, /getting-started-right, /videos-training, /get-books, /donatestatic / link-out pagesHome sub-pages (books and donate link to the legacy site)
/qt, /qt/entry, /qt/historic-qtQTPage, QTEntryPage, HistoricQTPageQuiet-time journal
/verse-memory, /verse-memory/all, /add, /collections, /practice, /finderVerseMemoryPage and friendsScripture memory with five practice modes and the AI verse finder
/bible, /bible/libraryBibleReaderPage, BibleLibraryPageReader with versions, compare, highlights, notes, tags, semantic search
/books, /books/sub, /books/sub/discussion, /books/weekly-qt, /books/qt-entryBooksPage and friendsThe four books: weeks, discussion questions, weekly quiet times, progress
/settingsSettingsPageStats, default version, language, theme, change password, delete account

The bottom tabs on narrow screens are Quiet Time, Bible, Verse Memory, Books, Settings.

Localisation​

i18next with the browser language detector (order: localStorage defaultLanguage, then navigator). Locales: en, alb (Albanian), nor (Norwegian), ge (German), br (Brazilian Portuguese). Each has translation.json and a book_info.json with the curriculum text. No Spanish, unlike the website.

Media​

Verse audio is served from the bundled assets/audio/*.mp3 when present (mapped in constants/audiofiles.js); anything missing is generated by POST /rest/generate-audio-file/ and played with howler. Training videos link out to Vimeo. No R2 or Stripe.