Blockchain-Based Academic Credential Verification for ABV-IIITM Gwalior
Features β’ Architecture β’ Getting Started β’ User Guides β’ API Reference
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
| 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 |
| 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 |
| 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) |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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) |
| 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
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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 |
| 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 paramcd 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 4000cd 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- Login at
/loginwith admin credentials - Navigate to
/admin/settingsto 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
- 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
- Activate Account: Receive activation email β
/activate - View Dashboard:
/studentshows 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 walletenrollment_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,2028enrollment_number,CS301,CS302,CS303,CS304,MA301
2024001,A+,A,B+,A,A+
2024002,A,B+,A+,B,A- 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- Configure production database (managed PostgreSQL)
- Set up Redis cluster
- Configure Privy production app
- Deploy smart contracts to mainnet/production chain
- Set up IPFS pinning service (Pinata)
- Configure monitoring & alerting
- Enable SSL/TLS
- Set up backup jobs
- Configure CDN for frontend
- 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
- Email: support@param.iiitm.ac.in
- Documentation:
/docsin the application - Issues: GitHub Issues
MIT License β see LICENSE for details.
Built with β€οΈ at ABV-IIITM Gwalior
Securing Academic Credentials on the Blockchain
