
GomiGo
Tokyo has no public bins. GomiGo unlocks private dumpsters via World ID proof + ENSv2 registry.
Demo
About
Tokyo streets have almost no public trash cans, convenience stores and apartment mansions restrict their dumpsters to prevent illegal dumping (fuhō-tōki). GomiGo turns those restricted private bins into a trustless public utility. Hosts register their bin as a hierarchical ENSv2 subname on Sepolia (e.g. bin-01-shibuya.gomigo.eth) with text records for capacity, hours, and accepted waste types. Tourists and commuters prove humanity once per ward per day using World ID (NFC Passport or Device credential) via IDKit, then receive a 10-minute dynamic access PIN, used to open a smart padlock, enter a keypad gate, or show to staff depending on the bin type. A ward-scoped nullifier cache on the server enforces the Sybil limit without storing any identity data.
How it's made
Built with Next.js 14 App Router, TypeScript, and Tailwind CSS. ENSv2 (Sepolia): We own gomigo.eth registered via ENSv2 ETHRegistrar using commit-reveal. A custom subregistry contract is deployed and wired via setSubregistry, enabling hierarchical wildcard resolution, each bin gets its own tokenized subname. A custom resolver stores bin-status, capacity, hours, and accepted-types as on-chain text records. Scoped roles from ENSv2 Enhanced Access Control restrict write permissions to the registered host address only; disposers get read-only resolution. World ID (IDKit v4): IDKitWidget runs verification_level "device" so NFC Passport credentials work without an Orb. Proofs POST to /api/dropoff/verify which calls the World v2 developer API. A ward-scoped in-memory nullifier Set enforces 1-pass-per-ward-per-day, duplicate nullifiers return HTTP 429 with an explicit rejection message. The viem library handles all Sepolia contract interactions.