A full-stack dApp that simulates NFT-based access control using blockchain wallet authentication. Users can mint, view, and purchase NFTs tied to digital datasets, with ownership tracked off-chain by wallet address.
Once purchased, NFTs become unavailable to others, mimicking real-world asset exclusivity — no accounts, no passwords, just your wallet.
🛠️ Built for [Hackathon Name] using Node.js, Prisma, React, Next.js, and RainbowKit.
Most digital assets (datasets, media, tools) are protected by centralized logins or static access keys. These systems:
- Lack verifiable ownership
- Are prone to credential sharing
- Don't integrate Web3 identity principles
Our solution:
- Leverages blockchain wallet addresses as identity
- Ties ownership to the wallet itself (no login needed)
- Simulates NFT minting and ownership off-chain
A full-stack dApp where:
- Users connect their wallet (RainbowKit + Wagmi)
- Upload datasets to mint NFTs (with metadata + CID)
- NFTs can be bought once per wallet
- Frontend disables Buy for already-owned NFTs
- Judges can simulate wallet-based access control end-to-end
⚠️ No blockchain transactions are made — this is a secure, fast, simulated environment for Web3 UX testing.
- 🧾 NFT Minting – Upload a dataset, auto-generate a token
- 🛒 Single-Purchase NFTs – Only one wallet can own each token
- 👛 Wallet Integration – RainbowKit + Wagmi for seamless wallet connection
- 🔐 Access Control – Buy button is disabled if user owns the NFT
- 🔍 Ownership Lookup – List all NFTs tied to a wallet
- 💽 CID/Metadata Display – FileCID, metadataCID, tokenId, download URL
- ⚙️ Modular RESTful API – Built with Express + Prisma
- 🧱 Styled, Responsive UI – Built with Tailwind CSS
We use RainbowKit + Wagmi for a seamless developer-friendly wallet connection experience.
- Users connect with MetaMask or any WalletConnect-compatible wallet.
- Wallet address is used as a persistent, trustless identity.
- No signing required — read-only logic enables zero-cost demo.
- All NFT ownership and buy logic is tied to this wallet address in the DB.
Built with Node.js, Express, and Prisma ORM, the backend exposes endpoints for minting, listing, and purchasing NFTs.
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/dataset/mint |
Mint a new NFT from dataset + metadata |
| GET | /api/dataset/ |
List all available NFTs |
| GET | /api/dataset/:tokenId |
Get metadata for a specific token |
| POST | /api/owner/ |
Record NFT ownership for a wallet |
| GET | /api/owner/:walletAddress |
Get all NFTs owned by a wallet |
Built with Next.js and Tailwind CSS, the frontend enables:
- Wallet connection via RainbowKit
- Upload interface to mint NFTs
- Table UI to view all NFTs (owned/unowned)
- Dynamic “Buy” button — active only if NFT is available
- CID shortening and metadata preview
| Layer | Tech Stack |
|---|---|
| Frontend | React, Next.js, Tailwind CSS, RainbowKit, Wagmi |
| Backend | Node.js, Express, Prisma ORM |
| Database | SQLite (dev) / PostgreSQL (prod-ready) |
| Hosting | Vercel / Render (deploy-ready) |