PARAM β Academic Credential Management System
PARAM (Portal for Academic Records and Management) is a comprehensive, blockchain-based academic credential management system designed for universities and educational institutions. Built for ABV-Indian Institute of Information Technology and Management Gwalior , PARAM enables tamper-proof issuance, verification, and sharing of academic credentials including semester results, transcripts, and degree certificates.
Tamper-Proof : Academic credentials are minted as NFTs on the blockchain, ensuring immutability
Instant Verification : Employers and institutions can verify credentials in seconds using a public link
Zero Student Friction : Students never need wallets or crypto knowledge β credentials are issued to institute-managed wallets
Audit Trail : Every action is logged with immutable audit records for compliance
Multi-Level Approvals : Configurable approval workflows ensure proper oversight before credential issuance
π Academic Credential Management
Feature
Description
Semester Results
Upload, review, approve, and issue semester-wise academic transcripts
Degree Certificates
Multi-approval workflow for degree issuance with eligibility validation
Curriculum Versioning
Manage program curricula with version control (DRAFT β ACTIVE β ARCHIVED)
Grade Management
Configurable grading scales with automatic SGPA/CGPA calculation
βοΈ Blockchain & NFT Credentials
Feature
Description
ERC-721 Credentials
Semester results and degrees minted as NFTs on Base Sepolia
Document Hash Anchoring
SHA-256 hash of PDF stored on-chain for integrity verification
Credential Revocation
Revoke credentials with reason; link to replacement credential
Wallet Auto-Provisioning
Privy-managed wallets created automatically for students
Batch Minting
Efficient bulk issuance with gas estimation
π₯ User Roles & Access Control
Role
Capabilities
ADMIN
Full system access, credential issuance, system settings, user management
ACADEMIC
Upload students/results, manage curriculum, propose degrees, first-level approvals
STUDENT
View own results, download transcripts, share credentials, request corrections
VERIFIER
Public credential verification (no login required)
π Workflow & Approvals
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SEMESTER RESULT WORKFLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β CSV Upload β DRAFT β REVIEWED β APPROVED β ISSUED (NFT) β
β β β β β
β ββ Fix ββββ΄ββ Reject β΄ββ (Withheld) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DEGREE PROPOSAL WORKFLOW β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Propose β PENDING_ACADEMIC β PENDING_ADMIN β APPROVED β ISSUEDβ
β β β β β
β βββ Reject ββββββββ΄ββ Reject βββββ β
β β
β Credit Validation: Total credits β₯ required, No backlogs β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Shareable Links : Time-limited verification URLs (7/30/90 days or custom)
QR Code Support : Embed verification QR on PDF credentials
API Verification : Machine-readable JSON endpoint for automated verification
Trust Indicators : Shows blockchain transaction, IPFS CID, issuer information
Bulk Operations : CSV upload for students and results with streaming validation
PDF Generation : Auto-generated transcripts with watermarks (DRAFT/APPROVED)
Audit Logs : Complete trail of all actions with filters and export
Correction Requests : Students can request grade corrections with approval workflow
Revaluation Support : Versioned course results for grade changes
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PARAM ARCHITECTURE β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β FRONTEND (Next.js 15) β β
β β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β β
β β β Admin β β Academic β β Student β β Verify β β Auth β β β
β β βDashboard β β Portal β β Portal β β (Public)β β (Privy) β β β
β β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β β REST API + Bearer Token β
β βΌ β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β BACKEND (Express.js 5) β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β API MODULES β β β
β β β ββββββββ ββββββββ βββββββββ ββββββββββ ββββββββββ βββββββββ β β β
β β β β Auth β βUsers β βStudentβ βResults β βIssuanceβ βVerify β β β β
β β β ββββββββ ββββββββ βββββββββ ββββββββββ ββββββββββ βββββββββ β β β
β β β ββββββββ ββββββββ βββββββββ ββββββββββ ββββββββββ βββββββββ β β β
β β β βDegreeβ βCurricβ βApproveβ βCredent.β β Audit β βSettingβ β β β
β β β ββββββββ ββββββββ βββββββββ ββββββββββ ββββββββββ βββββββββ β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β BACKGROUND WORKERS (BullMQ) β β β
β β β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β β β
β β β βBlockchainβ β CSV β β PDF β β Wallet β β β β
β β β β Worker β β Worker β β Worker β β Worker β β β β
β β β ββββββββββββ ββββββββββββ ββββββββββββ ββββββββββββ β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β βββββββββββββ΄ββββββββββββ β β
β βΌ βΌ βΌ β
β βββββββββββββββββ βββββββββββββββββ ββββββββββββββββββ β
β β PostgreSQL β β Redis β β Privy β β
β β (Prisma ORM) β β (Queue/Cache) β β (Auth+Wallets) β β
β βββββββββββββββββ βββββββββββββββββ ββββββββββββββββββ β
β β β
β βΌ β
β ββββββββββββββββββββββββββββββββ β
β β Ethereum (Base Sepolia) β β
β β ββββββββββββ ββββββββββββ β β
β β βSemester β β Degree β β β
β β βNFT (721) β βNFT (721) β β β
β β ββββββββββββ ββββββββββββ β β
β ββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Layer
Technology
Frontend
Next.js 15, TypeScript, TailwindCSS, shadcn/ui, TanStack Query
Backend
Express.js 5, TypeScript, Prisma ORM
Database
PostgreSQL 15+
Queue
Redis + BullMQ
Authentication
Privy (embedded wallets + social login)
Blockchain
Ethers.js 6, Base Sepolia (Chain ID: 84532)
PDF
Puppeteer
Storage
IPFS via Pinata
param/
βββ backend/ # Express.js API Server
β βββ prisma/
β β βββ schema.prisma # Database schema (30+ models)
β β βββ migrations/ # Database migrations
β βββ scripts/
β β βββ seed.ts # Database seeding
β β βββ verify-env.ts # Environment validation
β βββ src/
β βββ config/ # Configuration
β β βββ env.ts # Environment variables
β β βββ database.ts # Prisma client
β β βββ redis.ts # Redis connection
β β βββ privy.ts # Privy client (auth + wallets)
β β βββ blockchain.ts # Ethers.js + contract config
β βββ middleware/
β β βββ error.handler.ts # Global error handling
β β βββ request.context.ts # Privy token verification
β β βββ role.guard.ts # Role-based access control
β βββ modules/ # Feature modules
β β βββ auth/ # Authentication (Privy)
β β βββ users/ # User management
β β βββ students/ # Student registry
β β βββ curriculum/ # Programs & courses
β β βββ results/ # Semester results
β β βββ approvals/ # Approval workflows
β β βββ degrees/ # Degree proposals
β β βββ credentials/ # Issued credentials
β β βββ issuance/ # Blockchain minting
β β βββ verification/ # Public verification
β β βββ audit/ # Audit logging
β β βββ dashboard/ # Dashboard aggregations
β β βββ settings/ # System settings
β βββ jobs/ # Background workers
β β βββ blockchain/ # NFT minting worker
β β βββ csv/ # CSV parsing worker
β β βββ pdf/ # PDF generation worker
β β βββ wallet/ # Wallet creation worker
β βββ services/ # Shared services
β βββ types/ # TypeScript types
β
βββ frontend/ # Next.js Application
β βββ app/
β β βββ (admin)/ # Admin routes
β β β βββ admin/
β β β βββ page.tsx # Admin dashboard
β β β βββ students/ # Student management
β β β βββ results/ # Results upload & preview
β β β βββ approve/ # Approval queue
β β β βββ issuance/ # Credential issuance
β β β βββ curriculum/ # Curriculum management
β β β βββ logs/ # Audit logs
β β β βββ settings/ # System settings
β β βββ (auth)/ # Auth routes
β β β βββ login/ # Login page
β β β βββ activate/ # Account activation
β β βββ (student)/ # Student routes
β β β βββ student/
β β β βββ page.tsx # Student dashboard
β β β βββ results/ # View results
β β β βββ degree/ # View degree
β β β βββ share/ # Manage share links
β β βββ verify/[token]/ # Public verification
β β βββ docs/ # Documentation
β β βββ support/ # Support page
β βββ components/
β β βββ admin/ # Admin-specific components
β β βββ auth/ # Authentication components
β β βββ credentials/ # Credential display
β β βββ dashboard/ # Dashboard widgets
β β βββ forms/ # Form components
β β βββ landing/ # Landing page sections
β β βββ layout/ # Navigation & layout
β β βββ modals/ # Modal dialogs
β β βββ results/ # Results display
β β βββ shared/ # Shared components
β β βββ upload/ # File upload components
β β βββ ui/ # shadcn/ui primitives
β βββ hooks/ # Custom React hooks
β βββ lib/ # Utilities & API client
β βββ providers/ # Context providers
β βββ types/ # TypeScript types
β
βββ README.md # This file
Entity Relationship Overview
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DATABASE SCHEMA β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββ βββββββββββββ βββββββββββββββββββββ β
β β User β 1:1 β Student β N:1 β Program β β
β βββββββββββββ€βββββββββΆβββββββββββββ€βββββββββΆβββββββββββββββββββββ€ β
β β privyId β β enrollmentβ β code β β
β β email β β batch β β name β β
β β role β β cgpa β β durationYears β β
β β status β β wallet* β β totalCredits β β
β βββββββββββββ βββββββ¬ββββββ βββββββββββ¬ββββββββββ β
β β β β
β β N:1 β 1:N β
β βΌ βΌ β
β βββββββββββββββββββββ βββββββββββββββββββββ βββββββββββββββββββββ β
β β SemesterResult β β Curriculum β βCurriculumSemester β β
β βββββββββββββββββββββ€ βββββββββββββββββββββ€ βββββββββββββββββββββ€ β
β β semester β β version β β semesterNumber β β
β β sgpa/cgpa β β batch β β minCredits β β
β β status β β status β β maxCredits β β
β β documentHash β β documentHash β βββββββββββ¬ββββββββββ β
β βββββββββββ¬ββββββββββ βββββββββββββββββββββ β 1:N β
β β 1:N βΌ β
β βΌ βββββββββββββββββββββ β
β βββββββββββββββββββββ β Course β β
β β CourseResult β βββββββββββββββββββββ€ β
β βββββββββββββββββββββ€ β code β β
β β grade β β credits (L-T-P) β β
β β gradePoints β β type β β
β β earnedCredits β βββββββββββββββββββββ β
β β version β β
β βββββββββββββββββββββ β
β β
β βββββββββββββββββββββ βββββββββββββββββββββ β
β β Credential βββββββββββ DegreeProposal β β
β βββββββββββββββββββββ€ βββββββββββββββββββββ€ β
β β type (SEM/DEGREE) β β status β β
β β tokenId β β totalCredits β β
β β txHash β β cgpa β β
β β documentHash β β hasBacklogs β β
β β status β β academicApproval β β
β βββββββββββ¬ββββββββββ β adminApproval β β
β β 1:N βββββββββββββββββββββ β
β βΌ β
β βββββββββββββββββββββ βββββββββββββββββββββ β
β β ShareLink β β AuditLog β β
β βββββββββββββββββββββ€ βββββββββββββββββββββ€ β
β β token β β action β β
β β expiresAt β β entityType/Id β β
β β viewCount β β metadata (JSON) β β
β βββββββββββββββββββββ β ipAddress β β
β βββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Model
Purpose
Key Fields
User
Authentication & access
privyId, email, role, status
Student
Academic records
enrollmentNumber, batch, cgpa, walletAddress
Program
Degree programs
code, name, totalCredits, durationYears
Curriculum
Program curriculum
version, batch, status, documentHash
Course
Individual courses
code, credits, type, L-T-P hours
SemesterResult
Semester grades
semester, sgpa, cgpa, status
CourseResult
Course grades
grade, gradePoints, earnedCredits, version
Credential
Blockchain credentials
tokenId, txHash, documentHash, status
DegreeProposal
Degree applications
status, validationPassed, approval fields
ShareLink
Verification links
token, expiresAt, viewCount
AuditLog
Audit trail
action, entityType, metadata
Job
Background jobs
type, status, progress
// User lifecycle
UserStatus: PENDING_ACTIVATION β ACTIVE β SUSPENDED | DEACTIVATED
// Student lifecycle
StudentStatus: PENDING_ACTIVATION β ACTIVE β GRADUATED | DROPPED_OUT | ...
// Result workflow
ResultStatus : DRAFT β REVIEWED β APPROVED β ISSUED | WITHHELD
// Curriculum lifecycle
CurriculumStatus: DRAFT β ACTIVE β ARCHIVED
// Credential states
CredentialStatus: PENDING β ISSUED β REVOKED | REPLACED
// Degree proposal workflow
DegreeProposalStatus: DRAFT β PENDING_ACADEMIC β PENDING_ADMIN β APPROVED β ISSUED | REJECTED
Route
Page
Description
/
Landing
Hero section, features, verification demo
/docs
Documentation
How-to guides, CSV templates
/support
Support
Contact form, FAQ
/verify/[token]
Verification
Public credential verification
Route
Page
Description
/login
Login
Privy login (email OTP, Google)
/activate
Activation
First-time account setup
/reset-password
Reset
Password reset flow
Route
Page
Description
/admin
Dashboard
Stats, pending actions, quick links
/admin/users
Users
Staff user management
/admin/students
Students
Student registry & search
/admin/students/upload
Upload
Bulk CSV student import
/admin/results/upload
Upload
CSV results upload
/admin/results/preview
Preview
Review draft results
/admin/approve
Approvals
Approval queue
/admin/issuance
Issuance
Mint credentials to blockchain
/admin/curriculum
Curriculum
Programs & courses
/admin/logs
Audit
Audit log viewer
/admin/settings
Settings
College & system config
Student Routes (/student/*)
Route
Page
Description
/student
Dashboard
Profile, CGPA, latest result
/student/results
Results
All semester results
/student/degree
Degree
Degree certificate
/student/share
Share
Manage share links
/student/profile
Profile
Personal settings
Node.js 20+
PostgreSQL 15+
Redis 7+
pnpm (recommended) or npm
git clone https://github.com/iiitm-gwalior/param.git
cd param
cd backend
cp .env.example .env
# Edit .env with your configuration
pnpm install
npx prisma generate
npx prisma migrate dev
pnpm run seed # Optional: seed test data
pnpm run dev # API server on port 4000
cd frontend
cp .env.example .env.local
# Edit .env.local
pnpm install
pnpm run dev # Next.js on port 3000
# Database
DATABASE_URL=" postgresql://user:password@localhost:5432/param"
DIRECT_URL=" postgresql://user:password@localhost:5432/param"
# Redis
REDIS_URL=" redis://localhost:6379"
# Privy (https://dashboard.privy.io)
PRIVY_APP_ID=" your-privy-app-id"
PRIVY_APP_SECRET=" your-privy-app-secret"
PRIVY_VERIFICATION_KEY=" your-privy-verification-key"
# Blockchain (Base Sepolia)
CHAIN_ID=84532
RPC_URL=" https://sepolia.base.org"
MINTER_PRIVATE_KEY=" 0x..." # Minting wallet private key
CONTRACT_SEMESTER_ADDRESS=" 0x..."
CONTRACT_DEGREE_ADDRESS=" 0x..."
# IPFS (Pinata)
PINATA_API_KEY=" your-pinata-api-key"
PINATA_SECRET_KEY=" your-pinata-secret-key"
# App
PORT=4000
NODE_ENV=development
FRONTEND_URL=" http://localhost:3000"
NEXT_PUBLIC_API_URL=" http://localhost:4000/api/v1"
NEXT_PUBLIC_PRIVY_APP_ID=" your-privy-app-id"
NEXT_PUBLIC_CHAIN_ID=84532
# Start all services
docker-compose up -d
# View logs
docker-compose logs -f api
# With dev tools (pgAdmin, Redis Commander)
docker-compose --profile tools up -d
π¨βπΌ Admin Workflow
Login at /login with admin credentials
Navigate to /admin/settings to configure:
College information (name, logo, contact)
Blockchain settings (chain ID, contract addresses)
Approval workflow settings
Go to /admin/curriculum
Create a Program (e.g., B.Tech CSE)
Create a Curriculum Version for the program
Add Semesters with credit limits
Add Courses to each semester (code, credits, L-T-P, type)
Set curriculum status to ACTIVE
Navigate to /admin/students/upload
Download the CSV template
Fill in student data (enrollment, name, email, program, batch)
Upload and preview for validation errors
Process to create student records
Go to /admin/results/upload
Select program, batch, semester, and academic year
Download the semester-specific CSV template
Fill in grades for each student and course
Upload and validate
Results are created in DRAFT status
5. Review & Approve Results
Navigate to /admin/results/preview
Review individual student results
Make corrections if needed (creates new version)
Submit for review (status β REVIEWED )
Go to /admin/approve
Final approval (status β APPROVED )
Go to /admin/issuance
Select credential type (Semester or Degree)
Filter by program, batch, semester
View gas estimation
Issue selected credentials to blockchain
Monitor job progress in real-time
Navigate to /admin/degrees (via dashboard)
System auto-validates eligible students:
Total credits β₯ program requirement
No backlogs (F grades)
All semesters issued
Create degree proposals
Academic staff approves first
Admin gives final approval
Issue degree NFT
π©βπ Student Workflow
Activate Account : Receive activation email β /activate
View Dashboard : /student shows CGPA, credits, latest result
View Results : /student/results β all semester grades with details
View Degree : /student/degree β degree status or certificate
Share Credentials : /student/share β create time-limited links
Request Corrections : Submit grade correction requests if needed
Receive share link (e.g., https://param.iiitm.ac.in/verify/abc123)
View verified credential with:
Student name & program
Semester/Degree details
SGPA/CGPA
Blockchain transaction proof
Issuer information
API verification: GET /api/v1/verify?token=abc123
http://localhost:4000/api/v1
All authenticated endpoints require:
Authorization: Bearer <privy-access-token>
Method
Endpoint
Access
Description
POST
/auth/login
Public
Authenticate with Privy token
GET
/auth/me
Auth
Get current user profile
POST
/auth/logout
Auth
Logout
Method
Endpoint
Access
Description
GET
/students
Admin/Academic
List students (paginated)
POST
/students
Admin/Academic
Create single student
POST
/students/bulk
Admin/Academic
Bulk import from CSV
GET
/students/:id
Admin/Academic
Get student details
GET
/students/me
Student
Get own profile
Method
Endpoint
Access
Description
GET
/curriculum/programs
Auth
List programs
POST
/curriculum/programs
Academic
Create program
GET
/curriculum
Auth
List curricula
POST
/curriculum
Academic
Create curriculum
POST
/curriculum/:id/courses
Academic
Add course
Method
Endpoint
Access
Description
GET
/results
Admin/Academic
List all results
POST
/results/bulk
Admin/Academic
Bulk upload results
GET
/results/me
Student
Get own results
PATCH
/results/:id/status
Admin/Academic
Update result status
POST
/results/me/correction
Student
Request correction
Method
Endpoint
Access
Description
GET
/credentials
Admin/Academic
List credentials
GET
/credentials/me
Student
Get own credentials
POST
/credentials/share
Student
Create share link
DELETE
/credentials/shares/:id
Student
Revoke share link
Method
Endpoint
Access
Description
GET
/issuance/eligible
Admin/Academic
Get eligible students
POST
/issuance/single
Admin
Issue single credential
POST
/issuance/bulk
Admin
Bulk issue credentials
GET
/issuance/estimate
Admin/Academic
Estimate gas costs
Method
Endpoint
Access
Description
GET
/verify/:token
Public
Verify by share token
POST
/verify/hash
Public
Verify by document hash
POST
/verify/token
Public
Verify by NFT token ID
Method
Endpoint
Access
Description
GET
/degrees
Admin/Academic
List proposals
POST
/degrees
Admin/Academic
Create proposal
GET
/degrees/eligibility/:studentId
Admin/Academic
Check eligibility
PATCH
/degrees/:id/academic
Academic
Academic approval
PATCH
/degrees/:id/admin
Admin
Final approval
Method
Endpoint
Access
Description
GET
/audit
Admin
Get audit logs
GET
/audit/:entityType/:entityId
Admin
Get entity history
Queue
Concurrency
Purpose
blockchain
1
NFT minting & revocation
csv
2
Bulk data parsing
pdf
3
Transcript generation
wallet
5
Privy wallet creation
CSV_PARSE_STUDENTS // Import students from CSV
CSV_PARSE_RESULTS // Import results from CSV
PDF_GENERATE_SEMESTER // Generate semester transcript
PDF_GENERATE_DEGREE // Generate degree certificate
BLOCKCHAIN_MINT_SEMESTER // Mint semester NFT
BLOCKCHAIN_MINT_DEGREE // Mint degree NFT
BLOCKCHAIN_REVOKE // Revoke credential
WALLET_CREATE // Create student wallet
enrollment_number , name , personal_email , program_code , batch , admission_year , expected_grad_year
2024001 , John Doe , john@email.com , BTECH_CSE , 2024-2028 , 2024 , 2028
2024002 , Jane Smith , jane@email.com , BTECH_CSE , 2024-2028 , 2024 , 2028
enrollment_number , CS301 , CS302 , CS303 , CS304 , MA301
2024001 , A+ , A , B+ , A , A+
2024002 , A , B+ , A+ , B , A
Authentication & Authorization
Privy Integration : Secure authentication via email OTP or social login
JWT Tokens : Short-lived access tokens with automatic refresh
Role-Based Access : Enforced at both API and UI levels
Request Context : All requests carry user context for audit
Institute Wallet : Credentials minted from secure, institute-controlled wallet
Document Hashing : SHA-256 hash anchored on-chain
Immutability : Once minted, credentials cannot be altered (only revoked)
Revocation Trail : Revoked credentials link to replacements
Audit Logging : Every action logged with actor, timestamp, IP
Soft Deletes : Critical data archived, not deleted
Encrypted Connections : TLS for all API communications
Input Validation : Zod schemas for all API inputs
# Backend tests
cd backend
pnpm run test # Unit tests
pnpm run test:e2e # Integration tests
pnpm run test:coverage # Coverage report
# Frontend tests
cd frontend
pnpm run test # Component tests
pnpm run test:e2e # E2E tests with Playwright
Recommended Infrastructure
API : Docker container on Kubernetes/ECS
Database : AWS RDS / Supabase / Neon
Redis : AWS ElastiCache / Upstash
Frontend : Vercel / Cloudflare Pages
Monitoring : Datadog / Sentry
Fork the repository
Create a feature branch (git checkout -b feature/amazing-feature)
Commit changes (git commit -m 'Add amazing feature')
Push to branch (git push origin feature/amazing-feature)
Open a Pull Request
MIT License β see LICENSE for details.
Built with β€οΈ at ABV-IIITM Gwalior
Securing Academic Credentials on the Blockchain