Static single-page mint UI. No build step, no framework. Drop public/ into
Cloudflare Pages (or Netlify/Vercel) and it works.
site/
public/
index.html main page — mint UI, eligibility check, stats
placeholder.png hero image (pre-reveal)
proofs/ one JSON per allowlisted address
Edit the top of public/index.html:
const CONTRACT_ADDR = '0x...'; // HyperClaude contract
const CHAIN_ID_HEX = '0x3e6'; // 998 testnet, 0x3e7 for 999 mainnet
const CHAIN_NAME = 'HyperEVM Testnet';
const RPC_URL = 'https://rpc.hyperliquid-testnet.xyz/evm';
const EXPLORER = 'https://explorer.hyperliquid-testnet.xyz';Also replace REPLACE_WITH_GOOGLE_FORM_URL with the registration form URL.
Whenever the allowlist changes:
cd ../generator
python3 merkle_allowlist.py --input allowlist_mainnet.txt --outdir merkle_out_mainnet
# generator now cleans the proofs dir on each run — no stale proofs
rsync -a --delete merkle_out_mainnet/proofs/ ../site/public/proofs/Then call setAllowlistRoot(<new root>) on the contract via the Safe.
- Create a GitHub repo, push
site/public/contents. - Cloudflare dashboard → Pages → Create project → Connect to Git.
- Build command: (leave empty)
- Build output directory:
/(orpublicif you push the parent) - Save + deploy. Default URL is
<project>.pages.dev. - Add custom domain
hyperclaude.artonce you own it.
cd public
python3 -m http.server 8000
# open http://localhost:8000- Contract:
0x547532665d9B2Be74F1d4727d3434b5D544Fa9Ad(chain 998) - Merkle root:
0xeaa65cbf343805ffab7f488810a821e2169b80555e32ee61a999eab36d117444 - Proofs in
public/proofs/are the 10 testnet addresses (deployer + tester + 8 sentinels)
- Proofs in
public/proofs/are public — merkle proofs are not secret. - Anyone can list the proofs directory to enumerate the allowlist. If that's undesired, serve them via a Cloudflare Worker that checks the connected wallet signature before returning the proof.
- Mint protection is on-chain (merkle root). The site is a convenience UI; even a forked site can't mint for a non-allowlisted address.
- Mainnet contract deployed + verified on explorer
- Contract address + chain config swapped in
index.html - Mainnet merkle root set on contract
- Mainnet proofs synced to
public/proofs/ - Real revealed art available as
revealed/<id>.png(post-reveal only) - OG/Twitter meta tags verified (
og.pnguploaded) - Custom domain
hyperclaude.artpointed at Pages - Mobile tested (iOS Safari, Android Chrome)
- Testnet dry-run with multiple wallets (done for one wallet on 2026-04-18)