Proof of Onboarding Protocol: Send crypto gifts via email with human verification
POOP (Proof of Onboarding Protocol) is a decentralized onboarding system that enables crypto-native users to send USDC gifts to anyone via email, with built-in proof-of-humanity verification.
The protocol works in two flows:
SENDER FLOW: Users connect their Farcaster wallet in a Farcaster Mini App, enter a recipient's email and amount, then deposit USDC into the PoopVault smart contract on Celo Mainnet. The system generates a unique claim link.
RECIPIENT FLOW: Recipients receive an email with a claim link. They log in with Privy (email-only authentication), complete their profile, verify their humanity using Self's zero-knowledge identity verification, and then claim their USDC to any Celo wallet address.
The smart contract (PoopVault) securely holds funds until verification is complete, preventing sybil attacks through Self's biometric/passport verification. Alchemy webhooks provide real-time blockchain event notifications, ensuring the backend stays synchronized with on-chain state.
This creates a trustless, verifiable proof that real humans were onboarded, making it perfect for community growth, referral programs, and incentivized onboarding campaigns.
Built with a full-stack architecture:
SMART CONTRACTS: PoopVault contract written in Solidity using Foundry, deployed on Celo Mainnet. Uses OpenZeppelin's IERC20 for USDC token handling. The contract implements deposit, claimFor (owner-only), and cancel functions with event emissions for Deposit, Claim, and Cancelled events.
FRONTEND: Next.js 14 with App Router, Wagmi/Viem for blockchain interactions, and Farcaster Mini App Connector for wallet connection. Privy SDK handles email authentication and embedded wallet creation for recipients. Self SDK (@selfxyz/qrcode) provides QR code-based identity verification flow.
BACKEND: Express.js/TypeScript server with Supabase for user and POOP state management. Alchemy webhooks (GraphQL-based) listen for Deposit and Cancelled events, automatically updating POOP states from CREATED → FUNDED → VERIFIED → CLAIMED. Self backend verifier (@selfxyz/core) validates zero-knowledge proofs server-side.
INTEGRATIONS:
The system uses a state machine: POOPs transition through CREATED → FUNDED (via Alchemy webhook) → VERIFIED (after Self verification) → CLAIMED (on-chain transfer). This ensures funds are only released after human verification, creating verifiable proof of onboarding.

