-
server/.envproduction values set for Firebase, Stripe, email provider, andFRONTEND_URLallowlist. - No development/test keys in production environment.
-
WITHDRAWAL_PROCESSING_FEEset intentionally (default is0). -
VITE_API_URLpoints to production API. - Optional social links set (
VITE_SOCIAL_GITHUB,VITE_SOCIAL_X,VITE_SOCIAL_LINKEDIN) or left unset intentionally.
-
client:npm run lint && npm run test && npm run build -
server:npm run lint && npm run typecheck && npm run test && npm run build - Confirm no failing CI jobs.
- 0% platform fee copy and behavior verified (
Landing,Pricing,FAQ,Terms, escrow/wallet/invoice calculations). - No credit card required at signup; payment appears only at escrow funding / withdrawal interactions.
- Waitlist and newsletter forms submit to real endpoints (
/api/v1/leads/waitlist,/api/v1/leads/newsletter).
- Admin access restricted via Firestore role (
users.primaryRole). - CORS allowlist rejects unknown origins.
- Notification mutate endpoints enforce ownership.
- Conversation read/send endpoints reject non-participants.
- Rate limiting active on auth/payment/messaging critical endpoints.
- No dead internal links (navbar/footer/cards/buttons/routes).
- Chat background asset exists (
/grid-pattern.svg). - No fake success actions on core/public forms.
- Wallet withdraw action performs real API request.
- Run
scripts/post-deploy-smoke.shwithBASE_URL. - Run authenticated checks with
AUTH_TOKENfor private routes. - Manual smoke: signup -> create mission -> apply -> accept/assign -> chat -> wallet.