Security & privacy
Credential isolation, constrained signing and explicit trust boundaries.
Secrets and signing authority
Set SOLANA_RPC_URL, DATABASE_URL and OPENROUTER_API_KEY only in server-side environment variables. Never put them in NEXT_PUBLIC_ variables, source files, screenshots or issue comments. The public Privy App ID is an identifier, not a signing secret. This application does not need a Privy App Secret or an agent-wallet private key.
Any credential shared in a message should be rotated before production use. A Pinata account password is not an API integration key; no password-based pinning flow is implemented. Content-addressed storage would require a separate, explicitly scoped upload design.
Public and private data
Only a content digest is published by the proof workflow. The wallet address and signature are necessarily public. Local source material and filenames are not uploaded. Optional proof records are public chain metadata. No operator identity, personal location or local timezone belongs in the site.
AI questions are sent to OpenRouter only after a user explicitly submits them. Do not include secrets or sensitive personal data. The app does not persist question text, but hosting, authentication and model providers may process or retain data under their own policies.
Hardening boundaries
The relay rejects arbitrary transfers and approvals, and never signs. Body limits, validation, origin checks and local burst limits reduce abuse. Distributed production traffic also needs platform-level rate limiting and monitoring. The AI route uses persistent quotas because model calls incur cost.
A release build and passing tests are not an audit. Protect the database with least-privilege credentials, monitor RPC quotas, validate deployed environment settings, rotate credentials and obtain independent review before advertising production security or taking custody.
