Add World ID human verification to BaseMail. Users prove they're human via World App → get ✅ Human badge on profile.
world_id_verificationstable: handle, nullifier_hash, verification_level, verified_ataccountstable: addis_human INTEGER DEFAULT 0
POST /api/world-id/verify— verify proof from IDKit, store nullifier, mark accountGET /api/world-id/status/:handle— public: check if handle is verified human
- IDKit v4 button on Dashboard (Settings section)
- ✅ Human badge on AgentProfile page
- Uses
@worldcoin/idkitReact component
WORLD_ID_APP_ID= app_7099aeba034f8327d91420254b4b660eWORLD_ID_ACTION= verify-humanWORLD_ID_API_KEY= (stored as secret, not in code)
- User clicks "Verify Human" on Dashboard
- IDKit opens → World App scan
- Proof returned to frontend
- Frontend POSTs proof to
/api/world-id/verify - Worker calls World ID
/api/v2/verify/{app_id}(cloud verification) - If valid → store nullifier + set is_human = 1
- Profile shows ✅ Human badge
- All new code in separate files (route, migration)
- Single
git revertremoves everything - No existing tables modified (is_human default 0 = backward compatible)
- Nullifier stored to prevent double-verification
- API key in wrangler secrets only
- Private signing key NOT used in v2 verify flow (only needed for v4 OPRF)