Expo (React Native + Web) directory connecting Christian businesses with church and school communities. Customers connect, buy, and a tithe percentage flows back to the org they choose β tracked end-to-end from lead pipeline to verified payout. Backend is Convex with custom session auth.
E2E verifiedStaging E2E onlyWeb deploy automation open (#11)
useful-antelope-558.convex.cloud), the org-list pagination fix and searchable org picker shipped in PR #18, bulkImport is admin-gated, and password reset (Resend) shipped in PR #19. The warnings below predate those. π§ͺ Pair test plan published.| Repo | microspaces/almightydollar-app |
|---|---|
| Local | C:/Users/AI/Repos/almightydollar-app |
| Owner agent | almightydollardev (#dev) |
| Backend | Convex (cloud project + npx convex dev --local for offline E2E) |
| Web | Vercel project useful-antelope-558 (expo export β dist/) β current deploy returns 404, needs redeploy |
users + sessions), salted iterated hashing, 30-day bearer tokens, roles auto-assigned on registration (customer β business_owner / org_admin).af3a4dc).password123): customer@example.com, owner@faithplumbing.com, admin@gracecommunity.org.npm install
npx convex dev # push schema/functions, generate _generated/ (needs EXPO_PUBLIC_CONVEX_URL)
npm run web # Expo web dev server β localhost:8081
npm run build # expo export --platform web β dist/
dist/ + rewrite to /index.html).EXPO_PUBLIC_CONVEX_URL, baked at build time.Backend: GitHub Actions Deploy Convex on push to main (npx convex deploy with CONVEX_DEPLOY_KEY) or workflow_dispatch.
Web: manual vercel CLI deploy β no git integration (automation tracked in issue #11). Production at almightydollar.us is live and current (verified 2026-09-27).
scripts/importNCES.js) pushed 29,422 orgs into the table; organizations:list blew past Convex's 8,192-doc return cap β blank white Home/Directory on the cloud deploy. Fixed via searchable/paginated org picker (PR #18, 2026-09). Journeys now run against staging (upbeat-giraffe-329).What actually happens, step by step, with the exact DB states (connections.ts / sales.ts):
| # | Actor | What happens | What's recorded |
|---|---|---|---|
| 1 | Customer | Finds the business in the Directory (filter by category/location/org) and taps Connect. An org picker asks which church/school receives the tithe β skipped when the business has exactly one affiliated org. | connections row created: status pending, source app/web, chosen organizationId. |
| 2 | Business owner | Lead appears on the Business Dashboard (customer name + phone/email + chosen org). Owner does the work off-platform: reaches out, quotes, performs the job. Each stage is a tap. | Connection status: pending β contacted β quoted (owner-only; customer may cancel their own request). |
| 3 | Customer | Pays the business directly β today that's off-platform (cash, check, card, invoice; no money moves through the app yet β Stripe Connect is on the roadmap). | β |
| 4 | Business owner | Records the sale against the connection: enters the amount the customer paid. The tithe is computed automatically from the org's tithing % (default 10%, per-org configurable) and the connection closes. | sales row: amount, tithingPercentage, tithingAmount = amount Γ %, status pending_verification. Connection β closed. |
| 5 | Org admin | Sale shows on the Org Dashboard as awaiting verification. Admin confirms the tithe actually arrived from the business (cash/check today), then hits Verify. | Sale status β verified (verifiedAt set). Amount counted in the org's pendingPayout. |
| 6 | Org admin | Once the funds are in the org's hands, marks the payout Received. | Sale status β paid_to_org (paidAt set). Counted in the org's paidOut total. |
| 7 | Everyone | Numbers roll up automatically across all surfaces. | Customer: Tithing History + Profile tithe impact Β· Org public page: total sales, total tithing, pending payout, paid out, sale count (tithingSummary, powers the public impact section) Β· Owner: sales list per business. |
Worked example (from the E2E journeys): customer connects to Loaves & Lines Bakery choosing Grace Community (15%) β owner advances the lead and does the work β customer pays $200 β owner records the sale β tithe auto-computed: $200 Γ 15% = $30 β org admin verifies β marks received β Grace Community's public impact page now shows $30 total and Loaves & Lines as a member business.
verifiedAt, paidAt, payout statuses) already exist for it.| Frontend | Expo 54 / React Native 0.76.7 + react-native-web, React Navigation 7, Expo Vector Icons |
|---|---|
| Backend | Convex 1.32 β convex/schema.ts, custom auth (auth.ts + helpers.ts), per-domain modules (organizations.ts, businesses.ts, connections.ts, sales.ts, reviews.ts, seed.ts) |
| Vercel | framework: null, installCommand: npm install, buildCommand: npm run build, outputDirectory: dist, SPA rewrites |
| CI | .github/workflows/convex-deploy.yml β Convex deploy on push to main |
| E2E | Playwright 1.58 journey scripts (scripts/journey1-customer.mjs, journey2-owner.mjs dual-context, journey3-org.mjs + resume/final variants) |
| Data imports | scripts/ β NCES school scrape/import, church scrape, bulk import tooling |
| Local | npm run web (8081) Β· npx convex dev --local for offline E2E β Git Bash / PowerShell on Windows |
App.tsx # providers + navigation
app/
components/ui.tsx # shared UI primitives
lib/AuthContext.tsx # session token in AsyncStorage
theme/theme.ts # design tokens
screens/ # Home, Directory, BusinessDetail, Organizations,
# OrgDetail, Auth, Profile, MyConnections,
# TithingHistory, BusinessDashboard, OrgDashboard,
# RegisterBusiness, RegisterOrg
convex/ # schema, auth, domain functions, seed
scripts/ # journey E2E + NCES/church import tooling
Live roadmap, managed as GitHub issues (almightydollar-app issues). Add or close items on GitHub β β = done, close as βnot plannedβ to remove.
Canonical scripts: scripts/journey1-customer.mjs, scripts/journey2-owner.mjs, scripts/journey3-org.mjs (+ 3b/3c resume/final). Results JSON + ~90 screenshots captured per run.
π§ͺ Pair test plan β projects/almightydollar-test-plan.html: the live two-tester walkthrough (guest browse / accounts & listings / connect β sale / org verify & payout / security probes) we execute together against staging, with the results-and-issue log filled in as we go.
2026-08-15/16 β Journey 1-3 E2E (local Convex, Playwright)
Cloud-deploy verification (useful-antelope-558) is blocked by the org-list pagination bug above β treat E2E results as local-stack verification, not cloud QA.