Create a card
Paste any share link from this demo. The app detects full-card vs privacy share and runs the check.
- 1. Card ready — issued with design
- 2. Authenticate — “Check card now” must succeed
- 3. Free network — Base Sepolia (or Anvil) + Connect + Ensure
- 4. Mint — needs contract address + wallet popup
Mint does nothing useful if the gate is closed (yellow status above step 2) or if Badge contract address is empty. “Load last Anvil deploy” only works for Anvil, not Base Sepolia.
Issue an issuer-signed card first (with your card design). Then authenticate (verify gate). Wallet comes last — free demo chain only.
Card front (from issuance)
Card back
2. Authenticate
Must succeed before mint. Uses the simple privacy check by default.
3. Free demo network + wallet
Prefer Phantom Ethereum / Base (not Solana Devnet), or MetaMask. Solana testnets in Phantom cannot mint this badge — it is an EVM contract on Base Sepolia (default) or Anvil. In Phantom: switch to an Ethereum account, enable Active networks Ethereum+Base, then Connect. Connect scans EIP-6963 + classic injectors (~2s).
4. Mint (after authentication)
Wallet only confirms the free practice transaction. Your card design and stamp were already prepared at Create.
Admin guide (plain English)
This tab is for the demo company stamp on this browser only. Nothing here is a multi-tenant cloud admin console.
- Expiry is automatic. When you Create a card you set Valid until. After that time, Verify fails with “expired” by itself — you do not need to press Revoke for time-based end of life.
- Revoke / cancel is for cards that must fail before expiry (left company, lost phone, mistake). Use the buttons below; cancelled ids are stored in this browser (and can be exported/imported to other devices).
- NFT badge ≠ stamp. Minting a practice badge does not auto-burn when the card expires. Authenticity is always the issuer stamp + validity window + not cancelled, not “token exists”.
- Trust list = which company public stamps this browser accepts. Export to share across devices.
Active card: (none)
Cancel / revoke a card
Early cancel only. Expired cards already fail verify without this list.
Merkle root:
Demo issuer
Private key stays in this browser (localStorage). Never commit keys.
- Issuer ID
- Issuer name
- Public key
Issued cards (this browser)
Demo multi-card history — not a cloud portal. Status shows active / expired / cancelled. Use Cancel for early revoke; expired cards fail verify automatically.
Holder wallet (saved cards)
Honk remote prover (optional)
Browser uses WASM by default. Optional:
node app/scripts/honk_prover_server.mjs