A full-stack, role-based internship lifecycle management system for LNMIIT.
Built with React, Node.js, Express, and MongoDB.
- Overview
- Key Features
- System Architecture
- User Roles & Dashboards
- Application Workflow
- Evaluation & Grading
- Tech Stack
- Project Structure
- Getting Started
- Deployment
- Environment Variables
The STI Portal digitizes the entire summer internship lifecycle at LNMIIT — from application submission and multi-level approvals, through mentor assignment and internship tracking, to a dual-evaluator grading system. It replaces manual paperwork with a streamlined, role-based web application featuring real-time status tracking, automated email notifications, and a modern glassmorphic UI.
| Category | Features |
|---|---|
| Multi-Step Application Wizard | 6-step guided form with auto-save drafts, company validation, course registration (off-site), and LUSIP exclusion declaration. |
| Multi-Level Approval Pipeline | Sequential review by Coordinator → TPCR → E-Cell Lead → DoAA, with remarks and return-for-revision at each stage. |
| Real-Time Status Tracking | Animated 8-step Timeline component with pulsing active indicators, unique per-step icons, and glassmorphic design. |
| Faculty Mentor Assignment | Coordinators assign mentors; mentors accept/decline with workload tracking (max 10 students). |
| Manual Internship Commencement | Students explicitly start their internship after final approval, ensuring dashboard consistency. |
| Dual-Evaluator Grading | Industry Mentor (70 marks via secure tokenized link) + Faculty Mentor (30 marks) with auto-calculated final scores and letter grades. |
| Re-Evaluation Workflow | Faculty can request re-evaluation; coordinators approve/deny the request. |
| Admin Analytics | Application pipeline, stipend analysis, branch-wise CGPA, grade distribution, department stats, and mentor load index. |
| Email Notifications | Automated SMTP notifications for approvals, mentor assignments, and evaluation invites. |
| Modern Premium UI | Dark glassmorphic design with CSS custom properties, Framer Motion animations, and Lucide icons. |
┌─────────────────────────────────────────────────────────────┐
│ FRONTEND │
│ React 19 + Vite + Framer Motion │
│ │
│ ┌──────────┐ ┌───────────┐ ┌──────┐ ┌──────┐ ┌─────────┐ │
│ │ Student │ │Coordinator│ │ TPCR │ │ DoAA │ │ Admin │ │
│ │Dashboard │ │ Dashboard │ │ Dash │ │ Dash │ │Dashboard│ │
│ └──────────┘ └───────────┘ └──────┘ └──────┘ └─────────┘ │
│ ┌──────────┐ ┌───────────────┐ ┌────────────────────────┐ │
│ │ Faculty │ │ Application │ │ Industry Mentor Eval │ │
│ │ Mentor │ │ Wizard │ │ (Token-Based Page) │ │
│ └──────────┘ └───────────────┘ └────────────────────────┘ │
└────────────────────────┬────────────────────────────────────┘
│ REST API (fetch)
▼
┌─────────────────────────────────────────────────────────────┐
│ BACKEND │
│ Node.js + Express + Mongoose │
│ │
│ ┌──────────┐ ┌──────────────┐ ┌────────────┐ ┌─────────┐ │
│ │ /auth │ │/applications │ │/evaluations│ │ /admin │ │
│ │ routes │ │ routes │ │ routes │ │ routes │ │
│ └──────────┘ └──────────────┘ └────────────┘ └─────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Models: User, InternshipApplication, Evaluation, │ │
│ │ AcademicYearConfig, ApprovedCompany, Notification │ │
│ └──────────────────────────────────────────────────────┘ │
└────────────────────────┬────────────────────────────────────┘
│
▼
┌──────────┐
│ MongoDB │
│ Atlas │
└──────────┘
| Role | Dashboard | Key Capabilities |
|---|---|---|
| Student | StudentDashboard |
Submit applications via wizard, track status with animated timeline, edit profile, commence internship, view grades. |
| Coordinator | CoordinatorDashboard |
Review & approve/return applications, assign faculty mentors, view department insights, approve re-evaluations. |
| TPCR | TPCRDashboard |
Second-level review after coordinator approval, manage approved company registry. |
| E-Cell Lead | CoordinatorDashboard (shared) |
Review entrepreneurship-related (Type C) applications. |
| DoAA | DoAADashboard |
Final approval authority, system-wide application overview, export reports. |
| Faculty Mentor | FacultyMentorDashboard |
Accept/decline mentor assignments, view mentee profiles with full student data, submit faculty evaluations (30 marks), request re-evaluations. |
| Admin | AdminDashboard |
Full system oversight: user management, analytics (pipeline, stipend, CGPA, grades), company registry, academic year config, student repository. |
┌──────────┐ ┌─────────────────┐ ┌──────────────────┐
│ DRAFT │────▶│ SUBMITTED │────▶│ COORDINATOR │
│(auto-save)│ │ │ │ REVIEW │
└──────────┘ └─────────────────┘ └────────┬─────────┘
│
┌──────────────┼──────────────┐
▼ ▼ ▼
┌───────────┐ ┌───────────┐ ┌───────────┐
│ COORD │ │ COORD │ │ REJECTED │
│ RETURNED │ │ APPROVED │ │ │
└───────────┘ └─────┬─────┘ └───────────┘
│
▼
┌───────────────┐
│ TPCR REVIEW │
└───────┬───────┘
│
┌─────────────┼──────────────┐
▼ ▼ ▼
┌───────────┐ ┌────────────┐ ┌───────────┐
│ TPCR │ │ TPCR │ │ REJECTED │
│ RETURNED │ │ APPROVED │ │ │
└───────────┘ └──────┬─────┘ └───────────┘
│
▼
┌───────────────┐
│ DoAA APPROVAL │
└───────┬───────┘
│
┌─────────────┼──────────────┐
▼ ▼
┌───────────┐ ┌───────────┐
│ APPROVED │ │ REJECTED │
│ (Final) │ │ │
└─────┬─────┘ └───────────┘
│
▼ (Student clicks "Commence")
┌───────────┐
│ ACTIVE │
│(Internship│
│ Ongoing) │
└─────┬─────┘
│
▼
┌───────────┐
│ GRADED │
└───────────┘
| Status | Description |
|---|---|
draft |
Application saved but not yet submitted. |
submitted |
Student has submitted the application. |
coordinator_review |
Under review by department coordinator. |
coordinator_approved |
Approved by coordinator, forwarded to TPCR. |
coordinator_returned |
Returned to student for corrections. |
tpcr_review |
Under review by TPCR office. |
tpcr_approved |
Approved by TPCR, forwarded to DoAA. |
approved |
Final approval granted by DoAA. |
rejected |
Application rejected at any stage. |
active |
Student has manually commenced the internship. |
graded |
Final evaluation and grading completed. |
The evaluation system uses a dual-evaluator model with a total of 100 marks:
Submitted via a secure, tokenized link sent to the industry mentor's email — no login required.
| Criterion | Max Marks |
|---|---|
| Technical & Domain Skills | 25 |
| Problem Solving & Innovation | 20 |
| Work Ethics & Professionalism | 15 |
| Communication & Teamwork | 10 |
Submitted by the assigned faculty mentor through their dashboard.
| Criterion | Max Marks |
|---|---|
| Report Clarity | 10 |
| Presentation Content | 10 |
| Presentation Delivery | 10 |
Final scores are auto-calculated and mapped to letter grades: O, A+, A, B+, B, C, F.
- Faculty mentor requests re-evaluation with remarks.
- Coordinator reviews and approves/denies the request.
- If approved, the industry mentor's evaluation link is re-activated.
| Technology | Purpose |
|---|---|
| React 19 | UI Framework |
| Vite 7 | Build tool & dev server |
| React Router v7 | Client-side routing |
| Framer Motion | Page transitions & micro-animations |
| Lucide React | Icon system |
| TypeScript | Type safety (Timeline component) |
| Vanilla CSS | Custom design system with HSL tokens |
| Technology | Purpose |
|---|---|
| Node.js | Runtime |
| Express 5 | REST API framework |
| Mongoose | MongoDB ODM |
| bcrypt | Password hashing (12 salt rounds) |
| jsonwebtoken | JWT authentication |
| Nodemailer | SMTP email notifications |
| dotenv | Environment configuration |
| Technology | Purpose |
|---|---|
| MongoDB Atlas | Cloud-hosted NoSQL database |
InternshipProject/
├── backend/
│ ├── models/
│ │ ├── User.js # User schema (7 roles)
│ │ ├── InternshipApplication.js # Application schema (15 statuses)
│ │ ├── Evaluation.js # Dual-evaluator grading
│ │ ├── AcademicYearConfig.js # Term date configuration
│ │ ├── ApprovedCompany.js # Company registry
│ │ ├── Notification.js # In-app notifications
│ │ └── Undertaking.js # Student undertaking/agreements
│ ├── routes/
│ │ ├── auth.js # Login, register, profile CRUD
│ │ ├── applications.js # CRUD, review, mentor assignment
│ │ ├── evaluations.js # Industry/faculty eval, grading
│ │ └── admin.js # Analytics, users, companies, config
│ ├── emailService.js # SMTP notification helper
│ ├── middleware.js # JWT auth middleware
│ ├── server.js # Express entry point
│ └── .env # Environment variables (not tracked)
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ │ ├── Timeline/
│ │ │ │ └── Timeline.tsx # Premium 8-step status tracker
│ │ │ ├── Sidebar.jsx # Role-adaptive navigation
│ │ │ ├── MetricCard.jsx # Reusable analytics card
│ │ │ ├── ApplicationDetailModal.jsx
│ │ │ ├── StudentProfileModal.jsx
│ │ │ └── FacultyProfileModal.jsx
│ │ ├── pages/
│ │ │ ├── Login.jsx
│ │ │ ├── StudentDashboard.jsx
│ │ │ ├── CoordinatorDashboard.jsx
│ │ │ ├── TPCRDashboard.jsx
│ │ │ ├── DoAADashboard.jsx
│ │ │ ├── FacultyMentorDashboard.jsx
│ │ │ ├── AdminDashboard.jsx
│ │ │ ├── ApplicationWizard.jsx
│ │ │ └── IndustryMentorEval.jsx
│ │ ├── context/
│ │ │ └── AuthContext.jsx # Global auth state & API config
│ │ ├── App.jsx # Root component & routing
│ │ └── index.css # Design system (HSL tokens, glass)
│ ├── vercel.json # SPA rewrite rules
│ └── package.json
├── .gitignore
└── README.md
- Node.js v18+
- MongoDB (local or Atlas)
- Git
git clone https://github.com/satvikdua06-dev/STI.git
cd STIcd backend
npm installCreate a backend/.env file:
MONGO_URI=mongodb+srv://<username>:<password>@cluster.mongodb.net/lnmiit_sti
JWT_SECRET=your_super_secret_key_here
SMTP_USER=your.email@gmail.com
SMTP_PASS=your_16_char_app_password
PORT=5000Start the backend:
node server.jscd ../frontend
npm installOptionally create a frontend/.env file (defaults to http://localhost:5000/api):
VITE_API_URL=http://localhost:5000/apiStart the frontend:
npm run devNavigate to http://localhost:5173
| Service | Platform | Purpose |
|---|---|---|
| Frontend | Vercel | React SPA hosting |
| Backend | Render | Node.js API hosting |
| Database | MongoDB Atlas | Cloud database |
- Push to GitHub (already done ✓)
- Render: Create a Web Service → Root Dir:
backend→ Build:npm install→ Start:node server.js→ Add env vars. - Vercel: Import repo → Root Dir:
frontend→ Framework: Vite → AddVITE_API_URLenv var pointing to your Render URL.
See the full Deployment Guide for detailed instructions.
| Variable | Required | Description |
|---|---|---|
MONGO_URI |
✅ | MongoDB connection string |
JWT_SECRET |
✅ | Secret key for JWT signing |
SMTP_USER |
✅ | Gmail address for sending emails |
SMTP_PASS |
✅ | Gmail App Password (16 characters) |
PORT |
❌ | Server port (default: 5000) |
| Variable | Required | Description |
|---|---|---|
VITE_API_URL |
❌ | Backend API URL (default: http://localhost:5000/api) |
Built with ❤️ for LNMIIT