Full English policy
# PeakPact Elite — Cloudflare ↔ Clerk ↔ Neon Data Flow
**Effective date:** 15 September 2026
**Canonical API:** `https://api.peakpactelite.app`
**Audience claim:** `peakpactelite`
```text
[Mobile Expo / Web]
| HTTPS + Clerk JWT (aud=peakpactelite)
| crash/analytics SDK → Firebase (Google)
v
[Cloudflare Worker API]
|-- verify JWT via Clerk JWKS / issuer + audience/azp rules
|-- business logic (trials, squads, ladder, quests, verification, automation)
|-- OpenAI compose (Elite Mode: gpt-4o; failure → error, no soft fake success)
|
+--> [Neon Postgres] durable state (profiles, scores, squads, ladders, quests, verification rows)
|
+--> [Cloudflare R2] verification media objects (private)
|
+--> [RevenueCat] subscription entitlement sync (appUserID)
|
+--> [Cron schedules] automation / ladder / health jobs (Workers Paid)
```
## Auth path
1. User signs in via Clerk (web `@clerk/nextjs`; mobile session restored through PeakPact auth adapters).
2. Client attaches Bearer JWT to Worker requests.
3. Worker validates signature, issuer, and audience contract (`docs/AUTH_ENV_CONTRACT.md`).
4. `userId` from token scopes Neon queries (no cross-tenant reads).
## Data categories by system
| System | Stores |
|---|---|
| Clerk | Identity, email, sessions, MFA |
| Worker (ephemeral) | Request handling, compose prompts, cron orchestration |
| Neon | Product domain state |
| R2 | Binary proof assets |
| OpenAI | Transient prompt/completion (subject to OpenAI retention policies) |
| RevenueCat / Google Play | Entitlement and purchase signals (no full card numbers on PeakPact servers) |
| Firebase Crashlytics | Crash stacks / diagnostics |
| Firebase Analytics | Limited app-activity analytics events |
## Cross-region notes
Cloudflare edge terminates TLS near the user; Neon primary region and R2 bucket region determine data residency. For global launch, prefer EU primary for EU-majority users or document US primary with SCCs.
## Environment parity
Local Wrangler + production Worker share route shapes. Secrets (`DATABASE_URL`, Clerk keys, OpenAI, R2) remain in Worker secret store — never committed.
Public page: https://peakpactelite.app/legal/data-flow/