NFT Minting dApp
A branded NFT minting dApp for an 888-piece Ethereum collection, live on-chain state rendered as consumer-grade UI.

The client is a public NFT community centered on a collection of 888 AI-generated, anime-inspired NFTs on Ethereum mainnet. We designed and built the community's web home: a heavily animated, brand-driven marketing experience paired with a working on-chain minting interface, delivered as a single Next.js 14 application.
The collection had already launched and built its community; what it needed was a site that matched the project's identity and let people mint without leaving the brand experience. That meant talking to an Ethereum smart contract from the browser, handling wallet connections across many wallet apps and chains, and reflecting on-chain state, how many NFTs are minted, who minted recently, accurately and live, while still reading as a polished consumer site rather than a developer tool.
The result pairs static, animation-heavy brand pages, hero, collection gallery, DAO roadmap, FAQ, with client components wired into the blockchain and a lightweight Supabase identity layer, all sharing one set of glassmorphism UI primitives. The NFT contract, deployed via the Scatter/Archetype platform, and the AI art-generation engine existed before this build and were integrated rather than authored here.
A brand experience that mints for real
The community needed more than a marketing site: the page had to submit real mint transactions against a live Ethereum mainnet contract, handle the messy realities of wallet connections across many wallet apps and chains, and reflect on-chain state accurately and live.
It also had to do this without breaking the brand. In a category where users spend real ETH, the site needed to feel like a polished, animated consumer experience while surfacing every stage of a transaction honestly, and the existing contract, already trusted by collectors, had to be integrated rather than replaced.

One site, two jobs
We treated the marketing layer and the dApp layer as a single Next.js application. Static, animation-heavy pages carry the brand; the mint and profile routes are client components wired into the blockchain and Supabase. Shared UI primitives, gradient buttons, glassmorphism cards, animated status dots, a scroll-reveal section wrapper, keep both halves visually identical.
Rather than redeploy, we built against the existing Archetype-style ERC-721 contract's full ABI, its invite-list mint signature, supply reads, and Transfer events, so minting on the new site is the same on-chain action collectors already trusted. Wallet plumbing uses wagmi v2 and RainbowKit under a fully custom-branded connect button that still exposes chain switching, wrong-network warnings, and ENS display. And off-chain data stays off-chain: a lightweight Supabase backend keyed by wallet address handles usernames and avatars, so the only thing a user ever needs is their wallet.

Minting, live chain state, and wallet-first profiles
The mint page is wallet-gated. Once connected, a Public Mint card appears with a quantity selector, a live price calculation at 0.01 ETH per NFT, and a mint limit. Pressing Mint Now submits the transaction through the user's wallet, and the UI walks through each state honestly, pending wallet confirmation, awaiting on-chain confirmation, confirmed, or a decoded error, with the transaction hash displayed throughout.
On-chain state is read from the chain, not a CMS. Mint progress renders totalSupply directly from the contract against the 888-piece supply, and a WebSocket connection to an Ethereum node fetches the collection's historical Transfer events, each becoming a "Previously Minted" card with the actual token artwork resolved from IPFS, the recipient's shortened address, and a mint date derived from the block timestamp.
Connected wallets get a profile page backed by Supabase: inline username editing, avatar upload to Supabase Storage under collision-safe UUID filenames, and a one-tap-copy shortened address. The marketing side moves from a full-screen animated hero through a collection gallery with separate desktop and mobile treatments, a DAO roadmap, and a step-by-step FAQ, tying into the community's Discord, X, GitHub, and Substack. An auction area, grid, detail page, countdown, and bid entry, was built as concept UI demonstrating the intended next phase.
Wallet-gated public mint
Quantity selection, live pricing at 0.01 ETH per NFT, and honest transaction states from wallet confirmation through on-chain confirmation, with the transaction hash visible throughout.
Live mint progress
Supply read directly from the contract's totalSupply and rendered as a progress bar against the 888-piece collection, the chain's number, not a CMS field.
On-chain activity feed
Historical Transfer events fetched over a WebSocket RPC connection, rendered as mint cards with IPFS-resolved token artwork, recipient addresses, and block-timestamp dates.
Custom-branded wallet onboarding
wagmi v2 and RainbowKit behind a fully custom connect button, with multi-chain configuration, wrong-network warnings, and ENS name and avatar resolution.
Wallet-linked profiles
Connecting a wallet is signing in: Supabase holds only cosmetic identity, username and avatar, keyed by wallet address, with no passwords or signup forms.
Animated brand experience
A full-screen generative-artwork hero, collection gallery with separate desktop and mobile card treatments, DAO roadmap, FAQ accordion, and embedded Substack signup.



- 01
Contract integration without migration
Reads and writes against the existing Archetype/Scatter ERC-721 ABI, useReadContract on totalSupply, useWriteContract on the invite-tuple mint function, and useWaitForTransactionReceipt for confirmation state.
- 02
Dual blockchain clients
wagmi v2 and viem handle live contract interaction, while a separate web3.js client over an Infura WebSocket endpoint queries historical Transfer events and block timestamps for the activity feed.
- 03
Supabase identity layer
A typed user table keyed by wallet address plus a storage bucket for avatar uploads with UUID-namespaced filenames, accessed through a typed client and React context provider.
- 04
Motion-driven frontend architecture
Next.js 14 App Router with a reusable Framer Motion scroll-reveal section wrapper, a mobile-detection hook switching gallery layouts, Tailwind glassmorphism tokens, and a navbar that samples background brightness to flip its treatment.
- A production-deployable web presence where the community mints NFTs directly against the collection's Ethereum contract with clear transaction feedback.
- Live supply and a real on-chain history of past mints, rendered from contract calls and event logs so the numbers can never be stale or manipulated.
- Branded multi-wallet onboarding and wallet-linked profiles with custom names and avatars, no accounts or passwords required.
- An animated marketing site carrying the project's story, roadmap, FAQ, and community channels as one coherent product with the dApp.