Glossary
Ministry terms
EMAW: Every Man A Warrior, the ministry and the four-book study. Books 1 to 3 are the core study; Book 4 is Pure Warrior.
Quiet time (QT): a daily personal Bible reading with a structured journal entry: passage, major themes, questions (command, promise, sin, application, who/what/when/where/why), best verse. The app's QT journal and the weekly QTs assigned by each book lesson both use this form.
W.A.R. prayer: Worship, Admit, Request. A prayer pattern taught in the study; the app has a static guide for it and lets a quiet-time entry be shared with or without its W.A.R. sections.
Memory verse: a Scripture reference a man is memorising. Verses are grouped into collections (default collections are created for each new user). The app offers five practice modes: flashcard, initials, fill-in-the-blank, word scramble and audio (record a recitation; the backend transcribes and scores it).
Week / lesson: each book is divided into weeks with discussion questions and assigned quiet times. User progress tracks completion per book.
Getting Started Right: the online training a new group leader takes; the website has a page of its videos.
Ambassador / regional leader: volunteers who lead the ministry in an area or region and get scoped access to the CRM.
TWR: Trans World Radio, the parent ministry. EMAW is "a ministry of TWR".
Platform terms
App user: an account in the Django auth_user table used by the mobile app, the web app and website accounts. The username is SHA256(EMAW_SALT + lowercase email). The same account works in all three.
Contact: a person in the CRM (crm.Contact). Created from Planning Center imports, store orders, event registrations, donations or by staff. May be linked to an app user by matching email hash, but is a separate record with its own privacy rules.
Capability: a named permission a staff user holds in the CRM, such as contacts.view, campaigns, events, store, resources, access.manage. Combined with a scope (all, region, areas, self) that filters which contacts they can see. IsCrmStaff (Django group CRM Staff) means everything.
Hand-off: the one-time code flow that moves a signed-in website visitor into the web app without sharing tokens across origins.
Tunnel: a Cloudflare Tunnel (cloudflared) that exposes the backend without opening inbound ports. Dev and prod each have one. In dev the token can be run on a laptop to "take over" the dev URL.
Cloudflare Access: the Google-login gate in front of internal sites (dev website, admin CRM, docs). The backend also verifies the Access JWT on staff endpoints.
Tailnet: the Tailscale network. Required to reach the dev database or SSH into any VM.
Portainer: the container management UI used to deploy the production backend stack.
Deposco: the warehouse management system used by United Fulfillment Solutions (UFS), the fulfilment partner that ships book orders.
ACS: Azure Communication Services, the email service behind marketing campaigns. Transactional mail (verification codes, receipts) goes through Microsoft Graph instead.
Group 36 ("Email Testing"): the only CRM group that campaigns may target against the dev backend, because the dev database holds real people.
Pending → paid: every order, registration and donation is created as pending and only becomes paid when Stripe's webhook arrives. Nothing reaches the CRM or Deposco before that.
Resource: a website resource (article, devotional, audio, video, document) published from the Admin CRM with media in R2.
OTA update: an over-the-air JavaScript update to the mobile app through expo-updates, as opposed to a native build submitted to the stores.