EduAuth Registry is a comprehensive digital certificate issuance and verification system designed for Bangladeshi universities. This full-stack web application enables universities to issue tamper-proof digital certificates, students to manage their credentials and access requests, employers/verifiers to search and verify student qualifications, and administrators to oversee the entire system with analytics and audit trails.
The system emphasizes database design quality, normalization, data integrity, security, and professional UI/UX. With features like transaction-safe serial generation, two-factor verification, and privacy-preserving design, EduAuth Registry sets the standard for secure educational credential management.
- Full API reference: docs/API.md
- Database schema & ER diagram: docs/DATABASE_SCHEMA.md
Light Mode |
Dark Mode |
Public Certificate Verification |
Certificate Details |
Student Dashboard |
University Dashboard |
Verifier Dashboard |
Admin Dashboard |
Email Verification System |
Dark Mode Support |
Email Verification Code (OTP) |
Account Approval Notification |
Admin Verification Flow: After email verification, admin approval is required (manual verification of user details through admin dashboard). The system is designed to work without external APIs for maximum reliability.
- π Secure Authentication - JWT-based authentication with bcrypt password hashing (12 rounds)
- π§ Email Verification System - 6-digit OTP codes for account verification and admin approvals
- π Automated Notifications - Email alerts for important system events
- Frontend: React 18, React Router v6, Tailwind CSS v3, Axios, date-fns
- Backend: Node.js, Express.js, MySQL2 connection pool
- Database: MySQL 8.0 with 12 normalized tables and 6 optimized views
- Authentication: JWT with 7-day expiration, bcrypt (12 rounds)
- Email Service: Nodemailer with Gmail SMTP support
- Storage: UUID v4 for all primary keys, InnoDB storage engine
- Node.js v18.0.0 or higher (Download)
- MySQL 8.0 (Download or use XAMPP/WAMP)
- npm or yarn (comes with Node.js)
- Git (optional, for cloning)
git clone https://github.com/litch07/eduauth-registry.git
cd eduauth-registrycd backend
npm install
cp .env.example .env
# Edit .env with your database and email credentialsImport the schema using phpMyAdmin or command line:
# Using command line
mysql -u root -p eduauth_registry < database/schema.sql
# Or use phpMyAdmin to import database/schema.sqlOptional: Seed demo data
cd backend
node seed-demo.jscd ../frontend
npm installOpen two terminals:
Terminal 1 - Backend (from backend/ directory):
npm run dev
# Runs on http://localhost:5000Terminal 2 - Frontend (from frontend/ directory):
npm start
# Runs on http://localhost:3000- π Frontend: http://localhost:3000
- π Backend API: http://localhost:5000
- π phpMyAdmin: http://localhost/phpmyadmin (if using XAMPP)
After seeding demo data, use these credentials to login:
| Role | Password | |
|---|---|---|
| Admin | eduauthregistry@gmail.com | admin123 |
| Student 1 (Sadid) | ssadidahmed01@gmail.com | password123 |
| Student 2 (Sayem) | sayem23cse@gmail.com | password123 |
| Student 3 (Rayhan) | mhossain2330996@bscse.uiu.ac.bd | password123 |
| University 1 (UIU) | demo@uiu.ac.bd | password123 |
| University 2 (GUB) | registry@green.edu.bd | password123 |
| Verifier 1 (Enoisis) | ssadidahmed07@gmail.com | password123 |
| Verifier 2 (Tesla) | ssadidahmed03@gmai.com | password123 |
Note: Change these credentials in production!
eduauth-registry/
βββ backend/
β βββ src/
β β βββ config/ # Database & email configuration
β β β βββ database.js # MySQL connection pool
β β β βββ email.js # Nodemailer setup
β β βββ controllers/ # Business logic for each feature
β β β βββ authController.js
β β β βββ studentController.js
β β β βββ universityController.js
β β β βββ verifierController.js
β β β βββ verifyController.js
β β β βββ adminController.js
β β β βββ profileController.js
β β βββ middleware/ # Authentication & authorization
β β β βββ auth.js # JWT verification, role checking
β β βββ routes/ # API endpoint definitions
β β β βββ authRoutes.js
β β β βββ studentRoutes.js
β β β βββ universityRoutes.js
β β β βββ verifierRoutes.js
β β β βββ adminRoutes.js
β β β βββ verifyRoutes.js
β β β βββ profileRoutes.js
β β βββ utils/ # Helper functions
β β β βββ serialGenerator.js
β β β βββ activityLogger.js
β β β βββ emailService.js
β β βββ server.js # Express app entry point
β βββ uploads/ # User-uploaded files
β β βββ certificates/
β β βββ students/
β β βββ universities/
β βββ .env.example # Environment variables template
β βββ package.json
β βββ seed-demo.js # Demo data generator
βββ frontend/
β βββ src/
β β βββ components/ # Reusable React components
β β β βββ DarkModeToggle.jsx
β β β βββ DashboardLayout.jsx
β β β βββ EmailVerificationModal.jsx
β β β βββ Sidebar.jsx
β β β βββ TopHeader.jsx
β β β βββ PageHeader.jsx
β β β βββ ...
β β βββ context/ # Global state management
β β β βββ AuthContext.jsx
β β β βββ DarkModeContext.jsx
β β βββ pages/ # Page components by role
β β β βββ Landing.jsx
β β β βββ Login.jsx
β β β βββ Verify.jsx
β β β βββ student/
β β β βββ university/
β β β βββ verifier/
β β β βββ admin/
β β βββ services/ # API client & configuration
β β β βββ api.js # Axios instance
β β βββ App.js # Main app component
β β βββ index.js # React entry point
β βββ public/
β βββ tailwind.config.js # Tailwind CSS configuration
β βββ package.json
β βββ ...
βββ database/
β βββ schema.sql # Complete database schema
β βββ seed.sql # Demo data SQL
βββ docs/ # Documentation files
β βββ API.md # Detailed API documentation
β βββ DATABASE_SCHEMA.md # ER diagram & schema details
β βββ SETUP.md # Detailed setup guide
βββ .gitignore
βββ LICENSE
βββ CONTRIBUTING.md
βββ SETUP.md
βββ README.md
Create a .env file in the backend/ directory with the following variables:
# ===== SERVER CONFIGURATION =====
PORT=5000
NODE_ENV=development
FRONTEND_URL=http://localhost:3000
# ===== DATABASE CONFIGURATION =====
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=
DB_NAME=eduauth_registry
DB_PORT=3306
# ===== JWT CONFIGURATION =====
JWT_SECRET=your-super-secret-jwt-key-change-in-production
JWT_EXPIRES_IN=7d
# ===== EMAIL CONFIGURATION (Gmail) =====
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password
SMTP_FROM=EduAuth Registry <noreply@eduauth.com>- Enable 2-Factor Authentication on your Gmail account
- Generate an App Password
- Use the generated password in
SMTP_PASS
POST /api/verify/certificate- Verify certificate using Serial + DOB{ "serial": "BSC-25-000001M", "dateOfBirth": "2000-01-15" }
POST /api/auth/register/student- Register as studentPOST /api/auth/register/university- Register as university (requires admin approval)POST /api/auth/register/verifier- Register as verifier (requires admin approval)POST /api/auth/login- Login (Student, University, or Verifier)POST /api/auth/send-verification-code- Send email verification codePOST /api/auth/verify-email-code- Verify email with 6-digit code
GET /api/student/dashboard- Dashboard statisticsGET /api/student/certificates- Get student's certificatesPUT /api/student/certificates/:id/toggle-sharing- Toggle certificate privacyGET /api/student/certificate-requests- View access requestsPUT /api/student/certificate-requests/:id/approve- Approve requestPUT /api/student/certificate-requests/:id/reject- Reject request
GET /api/university/dashboard- Dashboard statisticsGET /api/university/students- List enrolled studentsPOST /api/university/students/enroll- Enroll new studentGET /api/university/students/search- Search students by emailPOST /api/university/certificates/issue- Issue new certificate
GET /api/verifier/dashboard- Dashboard statisticsGET /api/verifier/search-student- Search by NID + DOBPOST /api/verifier/request-all-certificates- Request access to all certificatesPOST /api/verifier/request-single-certificate- Request access to specific certificateGET /api/verifier/my-requests- View sent requestsGET /api/verifier/active-access- View active access grantsGET /api/verifier/verification-history- View verification history
GET /api/admin/dashboard- System statisticsGET /api/admin/pending-verifiers- Pending verifier approvalsPUT /api/admin/verifiers/:id/approve- Approve verifierPUT /api/admin/verifiers/:id/reject- Reject verifierGET /api/admin/users- List all usersGET /api/admin/verification-analytics- Verification statisticsGET /api/admin/activity-logs- System activity logs
For detailed API documentation, see API.md
Core User Tables:
Admins- System administratorsUsers- All user accounts (STUDENT, UNIVERSITY, VERIFIER)Student- Student profile informationInstitution- University/institution profilesVerifiers- Employer/organization verifier profiles
Operational Tables:
Enrollment- Links students to institutionsCertificate- Issued certificates with serial numbersCertificateSequence- Singleton table for safe serial generation
Request & Access Tables:
CertificateRequests- Verifier requests for accessVerifierAccess- Active access grants
Audit Tables:
VerificationLog- Public certificate verification audit trailActivityLog- System-wide activity auditEmailVerificationCodes- Email verification OTP codes
vw_certificates_full- Certificate with student and institution detailsvw_student_dashboard- Student statisticsvw_university_dashboard- University statisticsvw_verification_stats- Verification statistics per certificatevw_active_enrollments- Complete enrollment informationvw_system_stats- System-wide metrics
For detailed ER diagram and schema, see DATABASE_SCHEMA.md
- β JWT Authentication - 7-day token expiration
- β bcrypt Password Hashing - 12 rounds with salt
- β Role-Based Access Control (RBAC) - Fine-grained permissions
- β Email Verification - 6-digit OTP codes
- β SQL Injection Prevention - All queries parameterized
- β Soft Delete - Data retention with logical deletion
- β Complete Audit Trail - ActivityLog for all actions
- β Privacy Protection - Sensitive data never exposed in APIs
- β Two-Factor Verification - Serial + Date of Birth
- β Admin Approval Workflow - Universities and verifiers require approval
- β Privacy-Preserving Search - NID search doesn't expose personal data
- β Student Control - Can toggle certificate sharing and revoke access
Each certificate has a unique, tamper-proof serial number: BSC-25-000001M
- BSC - Degree level (BSC/MSC/PHD)
- 25 - Year (2025)
- 000001 - Base-36 sequence number (6 characters, auto-incrementing)
- M - Checksum digit (validates sequence using weighted modulo-36)
The system prevents duplicate serials using:
SELECT ... FOR UPDATE- Row-level lockingCertificateSequence- Singleton table for atomic increments- Transaction rollback on failure
This ensures data integrity even under concurrent issuance.
Public certificate verification requires two independent factors:
- Certificate Serial Number - Public identifier
- Student Date of Birth - Private credential
This prevents unauthorized access while maintaining privacy.
New universities and verifiers require admin approval:
- User registers with details
- Admin reviews in pending approvals
- Admin approves (sends email) or rejects with reason
- User can now use the system (if approved)
- Import the API collection (if available)
- Set environment variables (BASE_URL, JWT_TOKEN)
- Run test requests
cd backend
node seed-demo.jsThis creates:
- 1 Admin account (eduauthregistry@gmail.com)
- 2 Universities (UIU and GUB, both pre-approved)
- 3 Students (Sadid, Sayem, Rayhan with enrollments)
- 2 Verifiers (Enoisis and Tesla, both pre-approved)
- 3 Certificates with different degree levels
- Sample verification history and activity logs
This is an academic DBMS Lab project. Contributions are welcome!
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add AmazingFeature') - Push to branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Please see CONTRIBUTING.md for guidelines.
This project is licensed under the MIT License - see the LICENSE file for details.
- Built as a DBMS Lab project for database design excellence
- Inspired by secure educational credential systems
- Thanks to all contributors and reviewers
For support, questions, or bug reports:
- π§ Email: ssadidahmed01@gmail.com
- π Open an Issue
- π¬ Discuss in Discussions
- π Full Documentation
- ποΈ Database Schema
- π API Reference
- π οΈ Setup Guide
- π Contributing Guidelines
- β 3NF normalization
- β 12 normalized tables
- β 6 optimized views
- β Complete integrity constraints
- β Comprehensive indexing
- β Clean, maintainable code
- β Consistent naming conventions
- β Proper error handling
- β Security best practices
- β Well-documented
- β Professional UI design
- β Responsive layout
- β Dark mode support
- β Intuitive navigation
- β Clear error messages
β If you find this project useful, please consider giving it a star!
Made with β€οΈ for academic excellence.











