Nishaan is a comprehensive Web3 solution for secure, immutable, and transparent evidence management designed for modern law enforcement and judicial systems. With a cinematic WebGL-powered frontend and robust Ethereum-based blockchain architecture, the system guarantees cryptographically verifiable chains of custody.
- Cryptographic Integrity: Evidence files are securely uploaded to the InterPlanetary File System (IPFS) utilizing Pinata. The resulting CID hash and evidence metadata are anchored directly onto an Ethereum smart contract.
- Role-Based Execution Policies: Strict, smart-contract enforced access controls ensure only verified Police officers can submit evidence, and Court officials can review, verify or archive the evidence. A centralized Admin node governs access provisioning.
- Transparent Chain of Custody: An immutable log of every view, status change, and system interaction ensures total auditability without compromising sensitive data.
- Cinematic & Immersive UI: Built with Next.js, Framer Motion, and WebGL (Three.js/React Three Fiber) to provide a visually stunning, responsive, and fluid user experience.
Frontend (/frontend)
- Next.js 16 (App Router) & React 19
- Tailwind CSS v4 & Framer Motion (Animations)
- Three.js & React Three Fiber (Cinematic WebGL elements)
- Ethers.js v6 (Web3 Integration)
- Lucide React (Icons)
Backend & Contracts (/backend)
- Hardhat Node & Tooling
- Solidity (^0.8.28)
- IPFS via Pinata (Decentralized file storage)
- Chai / Mocha (Contract testing suite)
Follow these steps to run the complete project locally. You will need multiple terminal windows.
- Node.js:
v22.20.0or higher recommended. - Browser Wallet: Install MetaMask (or similar Web3 wallet) into your browser.
- Pinata Account: Setup a Pinata account to obtain API Keys for uploading evidence to IPFS.
Open a new terminal and start the Hardhat local node:
cd backend
npm install
# Set up your environment variables locally
cp .env.example .env
npm run nodeKeep this terminal running.
To connect your browser wallet (e.g., MetaMask) to the local Hardhat node:
- Open your browser wallet extension.
- Click on the network dropdown and select "Add Network".
- Enter the following details:
- Network Name: Localhost 8545
- RPC URL: http://127.0.0.1:8545
- Chain ID: 31337
- Currency Symbol: ETH
- Save the network.
Open a second terminal to deploy the smart contracts (EvidenceManagement.sol) to the local node:
cd backend
npm run deploy:localNote the deployed contract address and update the frontend configuration appropriately.
Open a third terminal to start the Next.js frontend:
cd frontend
npm install
# Configure frontend environment keys
cp .env.example .env.local
# Add Pinata keys, contract address, etc. to .env.local
npm run devOnce the frontend is running, you can access the application at http://localhost:3000.
npm run node: Starts the Hardhat local node.npm run compile: Compiles the smart contracts.npm run deploy:local: Deploys contracts to the localhost network.npm test: Runs the testing suite.
npm run dev: Starts the Next.js development server.npm run build: Builds the app for production.npm run start: Runs the built production application.npm run lint: Runs ESLint over frontend files.