ENAF

Golden Thread Foundation

Every parcel. Every face. Every time.

Product Documentation & User Acceptance Testing • v1.0 • April 2026

Product Overview

Golden Thread is a face-verified humanitarian distribution platform for South African NPOs and churches. Staff log in with OTP, then enroll and verify beneficiaries at the handout point. A beneficiary does not need a phone or email address to receive support. Volunteers scan a beneficiary's face, the system confirms their identity via Claude AI vision, checks cooldown eligibility, and logs the parcel handout with GPS, timestamp, and photo proof.

Claude AI Face Matching

Multimodal vision compares a live camera capture against enrolled photos. Works across all ethnicities. 80%+ confidence threshold.

Optional Beneficiary Account

Beneficiaries with access can view a stamp-card style history. People without phones or email can still be enrolled and served through staff-led face verification.

Cooldown Enforcement

Configurable minimum days between collections (default 30). Amber warning if too early. Only Pastor/Admin can override with a logged reason.

6 Role Dashboards

Each role sees different KPIs, actions, and data — all from live PostgreSQL aggregates. No dummy data.

Onboarding Wizard

Staff users choose role and organisation. Beneficiary enrollment captures available details, consent and face record without requiring phone or email.

POPIA Compliant

Consent timestamps, soft delete, encrypted PII fields, right-to-erasure, full audit trail on every action.

Journal Feed

Facebook-style feed with NPO reactions (Pray, Amen, Strength, Blessed), threaded comments, and auto-generated distribution reports.

World Model Insights

Rule-based inference engine flags override rate spikes, beneficiary churn, POPIA gaps, and volunteer streaks.

Owner Demo Workflow

Use this sequence when handing the live system to the owner. The UAT page is a support checklist; the first screen stakeholders should see is the main marketing landing page.

Open Main Site → Open Login → Open Pitch Deck → Open Stakeholder PDF →
1

Open the main landing page

Start at https://gta.cleva-ai.co.za/. Show the enterprise marketing page, role onboarding section, risk controls, and CTA buttons.

2

Login as Pastor

Use nolsdebeer@gmail.com with PIN 000000 via the Pastor demo link. This shows the operational dashboard without needing separate role emails.

3

Show today's event and roll call

Open the pastor dashboard and event view. Explain who has been served, who is outstanding, and how the close-out gives leadership a trusted record.

4

Open beneficiaries and re-onboarding

Show a beneficiary record, collection history, POPIA consent and the enrollment/re-onboarding path. Explain clearly that phone and email are optional; consent, available details and face photo are enough for collection verification.

5

Show beneficiary face login

Return to /demo-login, choose Sign in with face, scan the enrolled beneficiary and confirm the beneficiary dashboard opens without email or phone login.

6

Scan and hand out parcel

Use Scan & Distribute to demonstrate beneficiary face verification, match result, cooldown check, optional note, and parcel handout logging.

7

Explain exception handling

If no match or cooldown appears, explain that staff can retry, re-onboard, or escalate to pastor/admin override with a reason. The system supports human judgement.

8

Switch roles only if needed

Use the role-specific buttons below. Staff/demo roles use nolsdebeer@gmail.com with PIN 000000. Beneficiaries can sign in with face once enrolled.

Feature List

FeatureStatusHow It Works
OTP Email LoginLiveStaff and demo account users enter email → receive 6-digit PIN → type into auto-advancing boxes → JWT session
Beneficiary Face LoginLiveBeneficiary opens login → Sign in with face → local face descriptor is matched to an enrolled beneficiary → beneficiary session opens
Claude AI Face MatchingLiveCamera capture → POST to server → Claude Sonnet 4.5 compares against enrolled photos → JSON result
Beneficiary EnrollmentLiveDetails where available → face photo → POPIA consent → done. Phone and email are optional. Cross-org dedup check.
Optional Collection Stamp CardLiveWhere a beneficiary has account access, they can see collection history. Service does not depend on a phone or email login.
Cooldown EnforcementLiveConfigurable days (default 30). Amber warning + admin-only override with reason codes
Calendar & EventsLiveMonth/list views, colour-coded by type, inline event creation, close event → auto summary
Live Distribution DashboardLiveReal-time count via Socket.io. Avg confidence, volunteer count, distribution log.
Journal FeedLivePosts, NPO reactions (Lucide icons), threaded comments, post types, visibility controls
World Model InsightsLiveOverride rate, churn, POPIA gaps, efficiency drops, volunteer streaks — all from DB
6 Role DashboardsLiveEach role: different KPIs, actions, permissions. All data from PostgreSQL aggregates.
Onboarding WizardLiveStaff users: choose type → create org → done. Beneficiaries: staff-led enrollment with optional contact details and face capture.
Audit TrailLiveEvery login, enrollment, distribution, override, deletion: user + timestamp + IP + device
Donor PortalDashboard onlyKPIs + donation history. Section 18A PDF generation planned for v1.1.
WhatsApp RemindersPlanned v1.1Twilio integration. 24h and 2h reminders. Inbound bot: NEXT, HISTORY, HELP.
PWA Offline ModePlanned v1.1Service worker + manifest. CacheFirst for models, StaleWhileRevalidate for API.

Roles & Login Credentials

All demo accounts use PIN: 000000

RoleEmailWhat They SeeLogin
Founder Admin nolsdebeer@gmail.com Owner-only platform oversight, all organisations, all users Open App →
Org Admin nolsdebeer@gmail.com KPIs + trend chart + leaderboard + activity log Open App →
Pastor nolsdebeer@gmail.com Today's events, churn alerts, team feed Open App →
Volunteer nolsdebeer@gmail.com Big "Start Scanning" button + my scan stats Open App →
Donor nolsdebeer@gmail.com R17,500 donated + history (zero PII) Open App →
Beneficiary nolsdebeer@gmail.com Optional account-view demo. Real beneficiaries can be served without phone/email login. Face Login →

Founder Admin Founder Admin

Login as Founder Admin →

Email: nolsdebeer@gmail.com   PIN: 000000

SA-01: Platform Overview Dashboard Critical
#ActionExpected Result
1Login with founder admin emailDashboard loads with "Welcome, Founder Test Account"
2Inspect 4 KPI cards1 Organisation, 12 Beneficiaries, 35+ Distributions, 6 Users
3Look at Organisation Rankings"Hope Community Church" listed with member + beneficiary counts
4Open sidebar → all nav items visibleDashboard, Beneficiaries, Calendar, Scan, Journal all present

Org Admin Org Admin

Login as Org Admin →

Email: nolsdebeer@gmail.com   PIN: 000000

OA-01: Dashboard with KPIs, Trend, Leaderboard Critical
#ActionExpected Result
1LoginOrg Admin dashboard with 4 KPI cards
2Inspect KPIs12 Beneficiaries, 35+ This Month, total distributed, 6 Team Members
3Scroll to trend chartBar chart showing "Distribution Trend (30 days)". Hover shows counts.
4Volunteer LeaderboardMary Volunteer ranked #1
5Recent ActivityAudit log entries with timestamps
OA-02: Beneficiary CRUD Critical
#ActionExpected Result
1Sidebar → Beneficiaries12 beneficiaries listed with consent badges
2Search "Grace"Results filter in real-time
3Tap a beneficiaryDetail page: profile + PII + collection history
4Tap "Enroll" button4-step wizard: Details → Face → POPIA → Done
5Complete enrollment with cameraNew beneficiary appears in directory with photo
OA-03: Event Lifecycle High
#ActionExpected Result
1Sidebar → CalendarMonth grid with colour-coded events
2Create event via "+ Event" buttonForm with title, type, date. Event appears in calendar.
3Tap event → detail page3 stat cards (distributed, confidence, volunteers)
4Close eventConfirmation → "Closed" badge → auto summary in journal

Pastor Pastor

Login as Pastor →

Email: nolsdebeer@gmail.com   PIN: 000000

PA-01: Today's Events & Churn Watch Critical
#ActionExpected Result
1LoginPastor dashboard with 4 KPIs
2Inspect KPIsToday's Events, Beneficiaries, Month distributions, Churn Alert
3Today's Events section"Today's Distribution" card (seeded event)
4Tap event → "Start Distributing"Navigates to Scan page
PA-02: Scan → Match → Distribute → Cooldown → Override Critical

This tests the complete distribution flow including cooldown and override.

#ActionExpected Result
1Sidebar → Scan & DistributeScan page loads with "Start Camera" button
2Enroll yourself first (Beneficiaries → Enroll → capture your face)Enrolled with photo saved to database
3Go back to Scan → Start Camera → Capture & Verify~4s wait, then GREEN match with your name + confidence
4Tap "Hand Out Parcel""Parcel Distributed" success. GPS + timestamp logged.
5Tap "Scan Next Person" → scan yourself againAMBER cooldown warning: "Collected 0 days ago"
6Tap "Override Cooldown"Reason code dropdown appears
7Select "Emergency: family crisis" → submitDistribution logged with override reason. Audit trail created.
PA-03: Journal Feed Medium
#ActionExpected Result
1Sidebar → Journal4 seeded posts, pinned distribution report at top
2Post an updateNew post appears at top of feed
3React with "Pray" on a postGold highlight, counter increments
4Show Comments → write a commentComment appears with name + timestamp

Volunteer Volunteer

Login as Volunteer →

Email: nolsdebeer@gmail.com   PIN: 000000

VO-01: Simplified Dashboard & Scan Critical
#ActionExpected Result
1LoginVolunteer dashboard with 3 KPIs + big gold "Start Scanning" button
2Tap "Start Scanning"Navigates to Scan page
3Complete a scan + distributeFull flow works: camera → match → distribute → success
VO-02: Permission Restrictions High
#ActionExpected Result
1Open sidebarOnly Dashboard, Beneficiaries, Scan visible (no Calendar, Feed, Analytics)
2Beneficiaries → tap any personName and available contact details visible. No address or ID number (PII hidden). Phone may be blank for real beneficiaries.
3Check for delete iconNo trash icon — volunteers cannot delete
4Scan → trigger cooldownCooldown warning shown but no override button — "Only a Pastor or Admin can override"

Donor Donor

Login as Donor →

Email: nolsdebeer@gmail.com   PIN: 000000

DO-01: Donor Dashboard & Privacy Critical
#ActionExpected Result
1LoginDonor dashboard loads
2Inspect 3 KPI cardsR17,500 Total Donated, 3 Donations, 35+ Parcels Funded
3Donation History section3 donations with org name, date, ZAR amount
4Open sidebarOnly Dashboard — no Beneficiaries, Calendar, Scan, Feed

Beneficiary Beneficiary

Open Beneficiary Face Login →

Real beneficiaries use Sign in with face after enrolment. Staff/demo role preview remains available through nolsdebeer@gmail.com and PIN 000000.

BE-01: Collection Stamp Card Critical
#ActionExpected Result
1Open /demo-login and choose Sign in with faceCamera opens and shows beneficiary face sign-in flow
2Scan an enrolled beneficiary faceBeneficiary dashboard loads without email or phone login
3Inspect the stamp cardGold header with name + org. 10-stamp grid. Collected stamps = gold checkmarks.
4Check "Total" badgeShows total parcels received
5Open sidebarOnly Dashboard — minimal UI, nothing else visible

Cross-Cutting Tests

CC-01: Authentication Security
#TestExpected
1Visit /api/auth/me with no cookie (incognito)HTTP 401
2Enter wrong PIN at login"Wrong code. Please try again." Inputs clear.
3Paste 000000 into PIN boxesAll 6 digits fill, auto-submits
4Sign out → refreshRedirected to login. Cookies cleared.
CC-02: Mobile Responsiveness
#TestExpected
1Open on phone (375px width)Bottom tab bar with gold Scan button. KPIs in 2-column grid.
2Tap hamburger menuSidebar slides in with backdrop overlay
3Open camera on mobileCamera fills viewport. Scan ring visible. Capture works.
4Beneficiary stamp card on mobileCard stacks properly. Stamps are tappable size (44px+).
CC-03: Brand & Design
#TestExpected
1Background colour throughoutDark #0D0D0D base with #1E1E24 surface cards
2Gold accent used sparinglyGold = logo, primary KPI, CTA buttons, active nav. Silver/grey = everything else.
3FontsPlayfair Display = headings. Lato = body.
4No emoji anywhereOnly Lucide icons. Per design spec.
5Touch targetsAll buttons at least 44px × 44px

UAT Sign-Off

By signing below, the tester confirms they have completed the relevant test scenarios and noted any issues.