Repositories
All repositories are private in the Every-Man-A-Warrior GitHub organisation. Ask the project owner for access.
Branch model
Every app repo uses the same two branches:
| Branch | Meaning | What happens on push |
|---|---|---|
develop | Integration branch. Branch from here, merge pull requests here. | Deploys to the dev environment where a workflow exists |
main | Production. Merged from develop when a release is ready. | Deploys to production where a workflow exists |
Feature branches are named feature/<topic>, fix/<topic> or similar.
The repositories
| Repo | package.json / project name | Dev deploy | Prod deploy | Own docs |
|---|---|---|---|---|
| emaw-django-app | compose project emaw_backend | SSH to the dev VM, docker compose up | Portainer on the DockerApp VM | CLAUDE.md, ONBOARDING.md, docs/, one README.md per app |
| emaw-website | emapw-website | GitHub Action → Cloudflare Pages emaw-website (develop) | Manual wrangler pages deploy dist | CLAUDE.md, docs/ |
| emaw-web-app | emaw-website (sic) | GitHub Action → Cloudflare Pages emaw-react-web-app (develop) | GitHub Action (main) | README.md |
| emaw-crm-app | emaw-admin | GitHub Action → Cloudflare Worker emaw-admin-dev | Manual npm run deploy:production → Worker emaw-admin | README.md, src/api/README.md |
| emaw-mobile-app | emaw (Expo slug EMAW) | EAS development / preview builds | EAS production build → App Store, Google Play | CLAUDE.md |
| emaw-documentation | emaw-documentation | GitHub Action → Cloudflare Pages emaw-documentation (develop) | GitHub Action (main) | this site |
Package names do not match folder names
The website's package is emapw-website (typo kept for history), the web app's package is emaw-website, and the CRM's is emaw-admin. Nothing depends on these names, but they confuse searches. The Expo app's slug is EMAW, bundle id com.emaw-app.com (iOS) and package com.emaw_app.app (Android).
Related repositories not in this folder
- Sanity Studio (
studio-emapw): the CMS studio for the few content types the website still reads from Sanity (siteSettings,conferencerecaps,newsArticle,contactPage). Schema changes and generated types live there.
Where the detailed documentation lives
This site is the map. The territory stays next to the code:
| Topic | Read |
|---|---|
| Backend architecture, every env var with its default, security conventions | CLAUDE.md |
| Backend machine setup, the tunnel hand-over, tests | ONBOARDING.md |
| CRM, campaigns, events and store API contract for the admin app | docs/CRM_FRONTEND_GUIDE.md |
| Website accounts and the app hand-off contract | docs/WEBSITE_ACCOUNTS.md |
| Google sign-in setup (GCP project, OAuth clients, app builds) | docs/GOOGLE_SIGN_IN_SETUP.md |
| Planning Center cutover runbook | docs/PCO_CUTOVER.md |
| Store, events, donations, payments, shipping, Deposco, campaigns, CRM, resources, Qdrant | README.md in each backend app folder |
| Website sandbox runbooks (store, events, donations, accounts), R2 setup, donations go-live | docs/ |
Cloning everything
mkdir EMAW; cd EMAW
foreach ($r in 'emaw-django-app','emaw-website','emaw-web-app','emaw-crm-app','emaw-mobile-app','emaw-documentation') {
git clone "https://github.com/Every-Man-A-Warrior/$r.git"
}
Some developers keep all six in one parent folder; the website's docs refer to the backend as EMAW_BACKEND in places, which is a historical name for emaw-django-app.