NFT Access Control App – Buy Once, Own Forever

Shanthosh

Shanthosh Mahaling

🧠 NFT Access Control App – Buy Once, Own Forever

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.

💡 Problem Statement

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

🚀 What We Built

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.

✅ Core Features

🧾 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

🔐 Wallet Integration

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.

🏗️ Backend Overview

Built with Node.js, Express, and Prisma ORM, the backend exposes endpoints for minting, listing, and purchasing NFTs.

API Endpoints

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

🖥️ Frontend Overview

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

🧱 Tech Stack

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)
Like this project

Posted Sep 16, 2025

Developed a dApp for NFT-based access control using blockchain wallet authentication.