A World ID-powered mini app enabling anyone to create and support real-world impact proposals.
GOODHAND is a World ID-powered crowdfunding Mini App where any verified human can create or support impactful proposals—big or small.
This project aims to enable global grassroots action by allowing anyone with a verified World ID to submit a proposal (for example: “Help Mary afford school lunch this semester” or “Rebuild solar lighting in a storm-hit village”). Other World ID users can then donate small amounts of WLD to help fund the proposal.
Verification via World ID ensures that proposals are created and funded by real people—preventing spam, bots, and Sybil attacks. Every donation is logged, and users receive tiered NFTs to recognize their contributions.
This Mini App was built using Next.js, TypeScript, and the Worldcoin IDKit SDK. The entire experience is accessible directly from the World App browser, with no setup required for users.
GOODHAND is built as a fully compliant World ID Mini App using Next.js with TypeScript and deployed on Vercel for instant global accessibility.
I use the Worldcoin IDKit SDK to integrate the World ID authentication flow. The core interaction is through the <IDKitWidget> component, which handles user verification and generates a zero-knowledge proof. That proof can be sent to a backend API for on-chain verification (next step), but for this version we handle verification success client-side to keep things simple and deployable.
The app interface is minimal by design: upon verifying with World ID, users see a donation proposal (e.g. “Mary’s school lunch” or “Kaohsiung solar repair”) and optionally submit a donation or receive proof of contribution. While donation processing is mocked for now, the structure is fully extendable to support WLD transfers and NFT minting based on donation tiers.
To ensure compatibility with World App, I built the project using the Worldcoin Mini App Quickstart template and followed all compliance requirements: IDKit integration, action proof validation, and frontend-only flow with real-time status feedback.
I kept dependencies minimal and opted for static rendering for performance. A particularly hacky part was mocking donation tracking and NFT tier display using basic useState logic, which I plan to upgrade to real contract interactions via World Chain.