PolkaProof – Web2-to-Web3 Attendance dApp
Inspiration
We love the convenience of Web2 event platforms but hate that proof-of-attendance data is opaque and unverifiable. Polkadot already gives us battle-tested wallets and pallet-nfts, so we wanted to show how a Devpost-style workflow could inherit those strengths without losing UX.
What it does
- Lists events with QR-driven check-in flows
- Requires a Polkadot wallet signature to record attendance, storing proofs in Supabase
- Optionally captures a MetaMask address so organizers can airdrop EVM NFTs later
- Exposes organizer APIs to mint pallet-nfts badges, upload art to Pinata/IPFS, and inspect collection metadata
How we built it
- Frontend: Next.js 14, React 18, Tailwind, Zustand for wallet state
- Wallets:
@polkadot/extension-dappfor signing attendance/profile updates; MetaMask viawindow.ethereumpurely for reward address capture - Backend: Next.js Route Handlers +
@polkadot/util-cryptofor signature verification, Supabase for storage, and Pinata/IPFS for badge metadata - Badges: Pallet-nfts minting through
@polkadot/api, with helper scripts to create collections and APIs to batch mint
Challenges we ran into
- MetaMask signature verification on the backend was fragile; we pivoted to using Polkadot solely for check-ins and treating MetaMask as optional metadata
- Ensuring contract metadata could be read during Next.js builds meant normalizing file paths and gateways
- Coordinating Supabase migrations (RLS + new
evm_addresscolumn) while keeping anonymous flows functional
Accomplishments that we're proud of
- Seamless hybrid wallet UX: attendees connect once and the app remembers both wallets across pages
- Fully RESTful organizer APIs that feel Web2-native but mint on-chain collectibles
- Deterministic badge metadata hosted on Pinata/IPFS with links surfaced wherever badges appear
What we learned
- Users accept multi-wallet flows if you explain the benefit clearly (“Polkadot signs the proof, MetaMask gets the NFT”)
- Supabase + Next.js Route Handlers make it easy to share the same codebase between the UI and backend services
- Polkadot’s tooling (
signRaw,signatureVerify,pallet-nfts) is reliable enough for hackathon-scale operations with minimal glue code
What's next for PolkaProof – Web2-to-Web3 Attendance dApp
- Build an automated NFT dropper that reads
profiles.evm_addressand mints ERC-721/1155 rewards on Moonbeam or other EVM parachains - Add analytics dashboards (attendance streaks, badge rarity) powered by Supabase or DataHub
- Package organizer APIs as a drop-in SDK so any Web2 event platform can bolt PolkaProof on top of its existing flow
Built With
- metamask
- next.js-14
- pallet-nfts-via-westend-rpc
- pinata/ipfs-for-badge-storage
- polkadot/api
- polkadot/extension-dapp
- polkadot/util-crypto
- react-18
- supabase-(postgres-+-rls)
- tailwind-css
- zustand-for-wallet-state
Log in or sign up for Devpost to join the conversation.