A full-stack web application that streamlines certificate management and skill tracking for academic institutions. Students upload certificates, faculty verify them, and admins gain system-wide analytics — all through role-based dashboards.
- Upload certificates with title, organization, category, skill tags & expiry date
- Track certificate status (Pending / Accepted / Rejected)
- View performance metrics and analytics
- Receive expiry alerts for certificates expiring within 30 days
- Delete pending (unreviewed) certificates
- View and manage assigned certificates
- Accept or reject certificates with remarks
- Review statistics dashboard
- View all certificates system-wide
- System-wide analytics with category breakdown
- Student leaderboard (top 10 by performance score)
- User management (list & delete users)
| Layer | Technology |
|---|---|
| Frontend | React 18, Vite 5, React Router v6, Axios |
| Backend | Django 5, Django REST Framework, Token Authentication |
| Database | PostgreSQL (local) / DATABASE_URL support (Railway, etc.) |
| Storage | Django media files (certificate & profile image uploads) |
| Deployment | Vercel (frontend) · Railway/Render with Gunicorn (backend) |
Skill Tracking Platform/
├── backend/
│ ├── accounts/ # Custom user model, auth views (register, login, profile)
│ ├── certificates/ # Certificate CRUD, faculty review, admin analytics
│ ├── backend/ # Django settings, root URL config, WSGI
│ ├── media/ # Uploaded files (gitignored)
│ ├── manage.py
│ ├── requirements.txt
│ ├── Procfile # Gunicorn entry point
│ └── runtime.txt # Python version for deployment
│
├── frontend/
│ ├── src/
│ │ ├── pages/ # LandingPage, Login, Register, Student/Faculty/Admin Dashboards
│ │ ├── components/ # Reusable UI components
│ │ ├── context/ # AuthContext (global auth state)
│ │ ├── services/ # Axios API service layer
│ │ ├── App.jsx # Route definitions with role-based protection
│ │ ├── main.jsx # React entry point
│ │ └── index.css # Global styles
│ ├── vercel.json # Vercel deployment config
│ ├── vite.config.js
│ └── package.json
│
└── .gitignore
- Python 3.12+
- Node.js 18+
- PostgreSQL installed and running
git clone https://github.com/<your-username>/certTrack.git
cd certTrack# Create and activate virtual environment
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # macOS/Linux
# Install dependencies
pip install -r backend/requirements.txt
# Create the PostgreSQL database
psql -U postgres -c "CREATE DATABASE cert_tracker_db;"
# Configure environment variables
# Create backend/.env and set:
# SECRET_KEY=your-secret-key
# DEBUG=True
# DATABASE_URL=postgres://postgres:<password>@localhost:5432/cert_tracker_db (optional)
# Apply migrations
python backend/manage.py migrate
# Create a superuser (admin account)
python backend/manage.py createsuperuser
# Start the development server
python backend/manage.py runserverThe backend API will be available at http://localhost:8000.
cd frontend
# Install dependencies
npm install
# Configure environment variables
# Create .env.local and set:
# VITE_API_URL=http://localhost:8000
# Start the dev server
npm run devThe frontend will be available at http://localhost:5173.
| Method | Endpoint | Description |
|---|---|---|
| POST | /register/ |
Register a new student or faculty |
| POST | /login/ |
Login and receive auth token |
| GET/PUT | /profile/ |
View or update current user profile |
| GET | /users/ |
Admin: list all users |
| DELETE | /users/<id>/ |
Admin: delete a user |
| Method | Endpoint | Description |
|---|---|---|
| POST | /upload/ |
Student: upload a certificate |
| GET | /my/ |
Student: list own certificates |
| DELETE | /<id>/delete/ |
Student: delete a pending certificate |
| GET | /performance/ |
Student: performance metrics |
| GET | /alerts/ |
Student: expiry alerts (30 days) |
| GET | /assigned/ |
Faculty: view assigned certificates |
| PUT | /review/<id>/ |
Faculty: accept/reject a certificate |
| GET | /faculty-stats/ |
Faculty: review statistics |
| GET | /all/ |
Admin: list all certificates |
| GET | /analytics/ |
Admin: system-wide analytics |
| GET | /leaderboard/ |
Admin: top 10 students |
The platform uses Token-based authentication via Django REST Framework's TokenAuthentication. After logging in, include the token in subsequent requests:
Authorization: Token <your-auth-token>
| Key | Label |
|---|---|
cloud |
Cloud Computing |
ai_ml |
AI / Machine Learning |
web |
Web Development |
cyber |
Cybersecurity |
data |
Data Science & Analytics |
devops |
DevOps & CI/CD |
mobile |
Mobile Development |
other |
Other |
The frontend/vercel.json handles SPA routing. Deploy directly from the frontend/ directory on Vercel.
- Set
DATABASE_URL,SECRET_KEY,ALLOWED_HOSTS,FRONTEND_URL, andDEBUG=Falseas environment variables. - The
Procfileuses Gunicorn:web: gunicorn backend.wsgi - Static files are served via WhiteNoise.
This project is for educational purposes.