agegate

Universal age verification using passport + zero-knowledge proofs - verify once, access everywhere

agegate

Created At

ETHGlobal Buenos Aires

Project Description

AgeGate AI solves the fragmented age verification problem across the web. Instead of uploading your ID to every age-gated site (liquor stores, casinos, adult content), you verify once using your passport's NFC chip through the Self Protocol. This creates a zero-knowledge proof that you're 18+ or 21+ without revealing your identity. The verification is stored on-chain (Celo) and works universally - verify once for a vape shop, and you're instantly verified for all other age-gated sites. No personal data is ever stored on-chain, just a cryptographic proof tied to your wallet address. This gives users privacy, gives websites regulatory compliance, and eliminates the need for centralized ID verification services.

How it's Made

Built this app in a few main pieces:

  • Smart contract: Extends Self Protocol's verification system on Celo Sepolia. Registers two age configs (18+ and 21+) and stores just the minimum age per wallet address. No personal data is stored on-chain... only cryptographic proofs.

  • FE: Next.js 15 with RainbowKit for wallet connections. When you hit an age-gated page, it generates a QR code using Self's SDK with your wallet address and required age embedded.

  • Verification flow - Scan QR with Self mobile app → app reads passport NFC chip... this generates zero-knowledge proof... proof verified on-chain... our contract records the verification.

  • Debugging challenges - Had to switch from Turbopack to webpack to avoid test file bundling issues. Also figured out that the user address comes through as a uint256 in the verification callback and needs to be cast to address type. Used staging mode with mock passports for testing.

  • Tech stack - Solidity, Hardhat, Next.js, RainbowKit, wagmi, Self Protocol SDK, Celo chain.

background image mobile

Join the mailing list

Get the latest news and updates