- Overview
- The Problem
- Our Solution
- Screenshots
- Key Features
- Smart Contracts
- Technology Stack
- System Architecture
- How It Works
- Getting Started
- Environment Setup
- Usage Guide
- Project Structure
- Team
Acredia is a revolutionary decentralized platform that transforms how academic credentials are issued, stored, and verified. By leveraging blockchain technology, IPFS, and modern web technologies, Acredia eliminates credential fraud, reduces verification time, and provides lifetime access to verified academic records.
Traditional paper-based or centralized digital credentials suffer from:
- Easy forgery and tampering
- Time-consuming verification processes
- Risk of loss or damage
- Limited accessibility
- Centralized control and single points of failure
Acredia solves these problems by creating immutable, blockchain-verified credentials that are:
- ✅ Permanent and tamper-proof
- ✅ Instantly verifiable
- ✅ Decentralized and censorship-resistant
- ✅ Accessible anywhere, anytime
- ✅ Privacy-preserving with student control
The current academic credential system faces critical challenges:
- Credential Fraud: Fake degrees and certificates cost employers billions annually
- Slow Verification: Manual verification takes days or weeks
- Institutional Dependency: Students rely on institutions to provide transcripts
- Data Loss: Physical documents can be lost, damaged, or destroyed
- Privacy Concerns: Sharing full credentials when only partial verification is needed
Acredia creates a three-layer verification system:
- Blockchain Layer: Immutable credential records on Ethereum Sepolia
- Storage Layer: Decentralized metadata storage on IPFS
- Database Layer: Fast querying and indexing via Supabase
This architecture ensures credentials are:
- Permanent: Stored on blockchain forever
- Verifiable: Instant verification via token ID or QR code
- Decentralized: No single point of failure
- Detailed: Subject-wise marks, grades, and complete academic records
- Accessible: Students own their credentials via NFTs
Modern, responsive landing page showcasing the platform's features
Students can view all their credentials with detailed information and blockchain verification
Institutions can issue credentials with subject-wise marks, grades, and complete academic records
Public verification page with blockchain proof and comprehensive credential details
Detailed subject-wise performance and blockchain transaction information
Contract owner dashboard for authorizing institutions and monitoring system statistics
Complete system architecture showing the interaction between frontend, blockchain, storage, and database layers
- Digital Wallet: Receive credentials as NFTs in your wallet
- Instant Access: View all credentials anytime, anywhere
- Easy Sharing: Generate QR codes or shareable verification links
- Subject Details: Access complete subject-wise marks and grades
- Lifetime Ownership: Credentials stored permanently on blockchain
- Simple Issuance: Issue credentials with an intuitive web interface
- Subject-Wise Records: Add detailed marks, grades, and performance data
- Batch Processing: Upload credentials for multiple students
- Blockchain Verification: Each credential is verifiable on-chain
- Authorization Control: Admin-approved issuer system
- Instant Verification: Verify credentials in seconds via token ID or QR code
- Blockchain Proof: Direct links to blockchain transactions
- Complete Details: View student information, institution, marks, and grades
- No Login Required: Public verification page accessible to anyone
- Tamper-Proof: Impossible to forge or modify credentials
- Authorization Management: Approve institutions to issue credentials
- System Statistics: Real-time dashboard with credential counts
- Contract Ownership: Full control over smart contract parameters
- Security: Only contract owner can authorize new issuers
Acredia uses two main smart contracts deployed on Ethereum Sepolia Testnet:
Address: 0xDdC177431B2a376EDfF1D4362c7f69675B69038b
View on Explorer: https://sepolia.etherscan.io/address/0xDdC177431B2a376EDfF1D4362c7f69675B69038b
Key Functions:
mintCredential(address to, string memory uri)- Mint new credential NFTauthorizeIssuer(address issuer)- Authorize institution to issue credentialsrevokeCredential(uint256 tokenId)- Revoke a credential if neededauthorizedIssuers(address)- Check if address is authorized
Address: 0x89A9A004aBaAF80096676829AF6E7D51e6A14111
View on Explorer: https://sepolia.etherscan.io/address/0x89A9A004aBaAF80096676829AF6E7D51e6A14111
Key Functions:
registerCredential(uint256 tokenId, string memory ipfsHash)- Register credential metadatagetCredential(uint256 tokenId)- Retrieve credential informationupdateCredentialStatus(uint256 tokenId, bool revoked)- Update revocation status
Note: These contracts are deployed on Ethereum Sepolia testnet. You can verify their authenticity and view all transactions on Etherscan using the links above.
- Next.js 16 - React framework with App Router for optimal performance
- TypeScript - Type-safe development
- Tailwind CSS - Utility-first styling
- Radix UI - Accessible component primitives
- Thirdweb SDK - Wallet connection and blockchain interactions
- Lucide React - Modern icon library
- Solidity 0.8.x - Smart contract language
- Hardhat - Development environment
- Ethereum Sepolia - Testnet deployment
- Ethers.js - Ethereum library
- OpenZeppelin - Secure contract libraries
- IPFS - Decentralized metadata storage via Thirdweb
- Supabase - PostgreSQL database with Row Level Security
- PostgreSQL - Relational database for indexing
- RESTful APIs - Custom API routes in Next.js
- pnpm - Fast, disk-efficient package manager
- ESLint - Code quality
- Prettier - Code formatting
- Git - Version control
graph TB
subgraph "Frontend Layer"
A[Next.js Application]
B[React Components]
C[Thirdweb SDK]
end
subgraph "Blockchain Layer"
D[CredentialNFT Contract]
E[CredentialRegistry Contract]
F[Ethereum Sepolia Network]
end
subgraph "Storage Layer"
G[IPFS Network]
H[Thirdweb Storage]
end
subgraph "Database Layer"
I[Supabase PostgreSQL]
J[Row Level Security]
end
A --> B
B --> C
C --> D
C --> E
D --> F
E --> F
A --> H
H --> G
A --> I
I --> J
style A fill:#0ea5e9
style D fill:#f59e0b
style E fill:#f59e0b
style G fill:#8b5cf6
style I fill:#10b981
- Presentation Layer: User interfaces for students, institutions, and verifiers
- Application Layer: Business logic, authentication, and API routes
- Blockchain Layer: Smart contracts for credential NFTs and registry
- Storage Layer: IPFS for decentralized metadata storage
- Database Layer: Supabase for fast queries and off-chain indexing
sequenceDiagram
participant Institution
participant Frontend
participant IPFS
participant Blockchain
participant Database
participant Student
Institution->>Frontend: Enter credential details
Frontend->>IPFS: Upload metadata + documents
IPFS-->>Frontend: Return IPFS hash
Frontend->>Blockchain: Mint NFT with IPFS hash
Blockchain-->>Frontend: Transaction confirmed
Frontend->>Database: Store credential record
Database-->>Frontend: Success
Frontend->>Student: Send NFT to wallet
Frontend-->>Institution: Credential issued successfully
sequenceDiagram
participant Verifier
participant Frontend
participant Database
participant IPFS
participant Blockchain
Verifier->>Frontend: Enter token ID or scan QR
Frontend->>Database: Query credential data
Database-->>Frontend: Return metadata
Frontend->>IPFS: Fetch detailed metadata
IPFS-->>Frontend: Return full data
Frontend->>Blockchain: Verify on-chain status
Blockchain-->>Frontend: Confirm validity
Frontend-->>Verifier: Display verification result
- Connect Wallet: Institution connects authorized wallet
- Enter Student Details: Name, wallet address, credential type
- Add Academic Data: Degree, major, GPA, issue date
- Add Subject Marks: Subject name, marks obtained, maximum marks, grade
- Upload to IPFS: System uploads metadata to decentralized storage
- Mint NFT: Smart contract mints credential NFT to student's wallet
- Database Record: System creates searchable database entry
- Confirmation: Student receives NFT in their wallet
- Login: Authenticate with email or wallet
- Dashboard: View all issued credentials
- Details: Click credential to see complete information
- Share: Generate QR code or verification link
- Download: Export credential details or share blockchain proof
- Access: Navigate to public verification page (no login required)
- Input: Enter credential token ID or scan QR code
- Verification: System checks blockchain and IPFS
- Results: View complete credential details with blockchain proof
- Confirmation: Verify authenticity via blockchain explorer link
Before you begin, ensure you have the following installed:
- Node.js (v18 or higher) - Download
- pnpm (v8 or higher) - Install via:
npm install -g pnpm - Git - Download
- MetaMask or compatible Web3 wallet - Install
- Clone the Repository
git clone https://github.com/thisisouvik/Arcedia.git
cd Arcedia- Install Frontend Dependencies
cd frontend
pnpm install- Install Contract Dependencies
cd ../contracts
pnpm install- Set Up Environment Variables
Create a .env.local file in the frontend directory:
# Thirdweb Configuration
NEXT_PUBLIC_THIRDWEB_CLIENT_ID=your_thirdweb_client_id
# Smart Contract Addresses (Ethereum Sepolia)
NEXT_PUBLIC_CREDENTIAL_NFT_CONTRACT=0x_your_nft_contract_address
NEXT_PUBLIC_CREDENTIAL_REGISTRY_CONTRACT=0x_your_registry_contract_address
# Supabase Configuration
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
# IPFS Storage (Optional - for fallback)
NEXT_PUBLIC_NFT_STORAGE_KEY=your_nft_storage_keyCreate a .env file in the contracts directory:
# Wallet Private Key (for deployment)
PRIVATE_KEY=your_wallet_private_key
# RPC URL
SEPOLIA_RPC_URL=https://eth-sepolia.g.alchemy.com/v2/your_api_key- Set Up Supabase Database
Run the following SQL scripts in your Supabase SQL Editor:
-- Run these in order:
1. frontend/database_schema.sql
2. frontend/FIX_DATABASE_RLS.sql
3. frontend/enable_public_verification.sql
4. frontend/enable_admin_stats.sql- Compile and Deploy Contracts
cd contracts
pnpm hardhat compile
pnpm hardhat run scripts/deploy.js --network sepolia- Verify Contracts on Etherscan
pnpm hardhat verify --network sepolia YOUR_CONTRACT_ADDRESS- Start the Development Server
cd frontend
pnpm dev- Open in Browser
Navigate to http://localhost:3000
cd frontend
pnpm build
pnpm start- Visit Thirdweb Dashboard
- Create a new project
- Copy your Client ID
- Create account at Supabase
- Create a new project
- Get your project URL and anon key from Settings > API
- Run the provided SQL scripts in SQL Editor
- Sign up at Alchemy
- Create a new app on Ethereum Sepolia
- Copy the HTTPS endpoint
- Visit NFT.Storage
- Create account and generate API token
- Used as fallback IPFS storage
- Install MetaMask browser extension
- Create or import wallet
- Switch to Sepolia Test Network
- Get test ETH from Sepolia Faucet
Authorizing Institutions
- Connect the contract owner wallet
- Navigate to Admin Dashboard
- Enter institution wallet address
- Click "Authorize Wallet"
- Confirm blockchain transaction
- Institution can now issue credentials
Issuing a Credential
- Login with authorized institution account
- Go to Dashboard > Issue Credential tab
- Fill in student details:
- Student Name
- Student Wallet Address
- Credential Type (Degree, Certificate, etc.)
- Degree/Major/GPA
- Issue Date
- Add subjects (click "+ Add Subject"):
- Subject Name
- Marks Obtained
- Maximum Marks
- Grade (optional)
- Click "Issue Credential"
- Confirm wallet transaction
- Wait for confirmation
- Student receives NFT in their wallet
Viewing Issued Credentials
- Go to Dashboard > Issued Credentials tab
- View all credentials issued by your institution
- See blockchain transaction hashes
- Access IPFS metadata links
Viewing Your Credentials
- Login with student account
- Dashboard displays all your credentials
- Click on any credential to see:
- Institution details
- Credential type and dates
- Subject-wise marks and grades
- Overall performance statistics
- Blockchain verification proof
Sharing Credentials
- Click "Share" on any credential
- Options:
- Generate QR Code
- Copy verification link
- Share token ID
- Recipients can verify without login
Verifying Credentials
- Go to verification page (no login required)
- Enter credential token ID OR scan QR code
- View complete credential details:
- Student information
- Issuing institution
- Academic records
- Subject-wise performance
- Blockchain proof
- Click blockchain link to verify on Etherscan
- Confirm credential is authentic and not revoked
frontend/
├── public/
│ ├── logo.png # Acredia logo
│ ├── Acredia.png # Brand assets
│ └── screenshots/ # UI screenshots
├── src/
│ ├── app/
│ │ ├── page.tsx # Landing page
│ │ ├── layout.tsx # Root layout with providers
│ │ ├── globals.css # Global styles
│ │ ├── about/
│ │ │ └── page.tsx # About page
│ │ ├── admin/
│ │ │ └── page.tsx # Admin dashboard
│ │ ├── api/
│ │ │ └── admin/
│ │ │ ├── stats/route.ts # Statistics API
│ │ │ └── update-authorization/ # Authorization sync
│ │ ├── auth/
│ │ │ ├── login/ # Student/Institution login
│ │ │ ├── register/ # User registration
│ │ │ ├── admin-login/ # Admin authentication
│ │ │ └── admin-setup/ # Initial admin setup
│ │ ├── dashboard/
│ │ │ └── page.tsx # User dashboard
│ │ └── verify/
│ │ └── page.tsx # Public verification page
│ ├── components/
│ │ ├── institution/
│ │ │ ├── AuthorizeIssuer.tsx # Authorization UI
│ │ │ ├── CredentialUploadForm.tsx # Issuance form
│ │ │ └── IssuedCredentialsList.tsx # Issued credentials
│ │ ├── student/
│ │ │ ├── StudentCredentialsList.tsx # Student's credentials
│ │ │ ├── QRCodeModal.tsx # QR code display
│ │ │ └── CredentialDiagnostic.tsx # Debug component
│ │ ├── verification/
│ │ │ └── (verification components)
│ │ ├── shared/
│ │ │ └── (shared components)
│ │ └── ui/
│ │ ├── button.tsx # Button component
│ │ ├── card.tsx # Card component
│ │ ├── input.tsx # Input component
│ │ ├── form.tsx # Form components
│ │ └── (other UI primitives)
│ ├── contexts/
│ │ └── AuthContext.tsx # Authentication context
│ ├── hooks/
│ │ └── useAuth.ts # Authentication hook
│ ├── lib/
│ │ ├── contracts.ts # Smart contract interactions
│ │ ├── credentialService.ts # Credential issuance service
│ │ ├── ipfs.ts # IPFS upload utilities
│ │ ├── supabase.ts # Supabase client
│ │ ├── thirdweb.ts # Thirdweb configuration
│ │ └── utils.ts # Utility functions
│ └── types/
│ └── index.ts # TypeScript type definitions
├── package.json # Dependencies
├── tsconfig.json # TypeScript config
├── next.config.ts # Next.js configuration
├── tailwind.config.js # Tailwind CSS config
├── postcss.config.mjs # PostCSS config
└── components.json # Shadcn UI config
contracts/
├── contracts/
│ ├── CredentialNFT.sol # ERC721 NFT contract
│ └── CredentialRegistry.sol # Credential registry
├── scripts/
│ ├── deploy.js # Deployment script
│ └── verify/
│ └── my-contract.js # Verification script
├── test/
│ └── (test files)
├── artifacts-zk/ # Compiled artifacts
├── cache-zk/ # Build cache
├── hardhat.config.js # Hardhat configuration
└── package.json # Dependencies
credentials
├── id (uuid)
├── token_id (bigint) - NFT token ID
├── student_id (uuid) - Reference to students
├── institution_id (uuid) - Reference to institutions
├── ipfs_hash (text) - IPFS metadata hash
├── blockchain_hash (text) - Transaction hash
├── metadata (jsonb) - Credential details
├── issued_at (timestamp)
├── revoked (boolean)
├── revoked_at (timestamp)
├── student_wallet_address (text)
└── issuer_wallet_address (text)
students
├── id (uuid)
├── email (text)
├── name (text)
├── wallet_address (text)
└── created_at (timestamp)
institutions
├── id (uuid)
├── email (text)
├── name (text)
├── wallet_address (text)
├── verified (boolean)
└── created_at (timestamp)
verification_logs
├── id (uuid)
├── credential_id (uuid)
├── verified_at (timestamp)
└── verification_result (jsonb)
- OpenZeppelin Libraries: Battle-tested contract implementations
- Access Control: Only authorized issuers can mint credentials
- Ownable Pattern: Contract owner controls authorization
- Reentrancy Protection: Guards against reentrancy attacks
- Row Level Security (RLS): Supabase database policies
- Wallet Authentication: Cryptographic signature verification
- Environment Variables: Sensitive data never committed
- HTTPS Only: All production traffic encrypted
- Public Verification: No authentication required for verification
- Student Control: Students own their credential NFTs
- Selective Disclosure: Share only what's necessary
- IPFS Storage: Decentralized, censorship-resistant
- No PII on Blockchain: Personal data only in IPFS/database
Acredia follows modern web design principles:
- Responsive: Works on desktop, tablet, and mobile
- Accessible: WCAG 2.1 compliant components
- Consistent: Unified design system with Tailwind CSS
- Intuitive: Clear user flows and interactions
- Professional: Gradient accents and modern aesthetics
- Fast: Optimized with Next.js App Router
# Contract tests
cd contracts
pnpm test
# Frontend tests (if configured)
cd frontend
pnpm testCredential Issuance
- Institution can issue credential
- Student receives NFT
- Metadata uploaded to IPFS
- Database record created
- Subject-wise marks displayed correctly
Verification
- Public verification page loads
- Token ID search works
- QR code scanning works
- Blockchain link redirects correctly
- Subject table displays properly
Authorization
- Admin can authorize institutions
- Unauthorized wallets cannot issue
- Authorization status updates in database
- Smart contract development
- NFT credential issuance
- IPFS metadata storage
- Public verification page
- Subject-wise marks system
- Bulk credential issuance
- Advanced filtering and search
- Email notifications
- PDF certificate generation
- Multi-chain support
- Credential revocation UI
- Decentralized identity (DID) integration
- Mobile application
- API for third-party integrations
- Analytics dashboard
- Institutional dashboards
- Batch operations
- Advanced reporting
- White-label solutions
- Compliance tools
Problem: MetaMask not connecting
- Solution: Ensure you're on Sepolia network and site permissions are granted
Problem: Transaction failing
- Solution: Check you have enough test ETH and wallet is authorized
Problem: IPFS upload timeout
- Solution: Check internet connection or try again later
Problem: Verification page shows "not found"
- Solution: Ensure RLS policies are enabled in Supabase (run SQL scripts)
Problem: Subjects not displaying
- Solution: Clear browser cache and ensure IPFS metadata contains subjects array
- Check
frontend/docs/TROUBLESHOOTING.mdfor detailed solutions - Review console logs for error messages
- Verify all environment variables are set correctly
- Ensure Supabase migrations are applied
This project is currently unlicensed. All rights reserved to the Power Button team.
For licensing inquiries, please contact the team.
Built with amazing open-source technologies:
- Next.js - React framework
- Thirdweb - Web3 development platform
- Supabase - Open-source Firebase alternative
- Hardhat - Ethereum development environment
- OpenZeppelin - Secure smart contract library
- Tailwind CSS - Utility-first CSS framework
- Radix UI - Accessible component primitives
- Lucide Icons - Beautiful icon library
Special thanks to the blockchain and open-source community for making this project possible.
Power Button
![]() Souvik Mandal Backend Developer |
![]() Soumen Das Blockchain Developer |
![]() Snigdha Mandal Frontend Developer |
![]() Soumen Mandal Full Stack Developer |
- GitHub: https://github.com/thisisouvik/Arcedia
- Project: Acredia - Blockchain Academic Credentials
- Status: Active Development
For questions, feedback, or support:
- Open an issue on GitHub Issues
- Review documentation in
frontend/docs/ - Check existing issues for solutions











