A comprehensive digital solution for university placement cells to manage attendance, assessments, coordinator activities, and seat allocations efficiently.
Features β’ Tech Stack β’ Installation β’ Documentation
- Problem Statement
- Solution Overview
- Key Features
- Tech Stack
- System Architecture
- Installation
- Deployment
- Security
- Contributing
- License
University placement processes often suffer from significant inefficiencies:
- Manual Attendance: Passing physical sheets is time-consuming and prone to loss
- Proxy Attendance: Students signing for absent peers compromises data integrity
- Poor Visibility: Administrators lack real-time data on student participation
- Manual Shortlisting: Filtering eligible students for drives is tedious and error-prone
- Allocation Chaos: Manually assigning labs and seats for assessments is logistically complex
- Coordinator Management: Tracking placement coordinators and generating attendance letters manually
This portal digitizes the entire placement workflow with a modern, scalable architecture. It enables administrators to:
- Create live sessions with dynamic QR codes for secure attendance
- Manage end-to-end assessment flows from eligibility to seat allocation
- Track and manage placement coordinators with automated letter generation
- Handle high-concurrency scans with real-time updates
- Provide role-based dashboards for clear visibility across all stakeholders
Designed for scalability, security, and user experience, this system transforms manual processes into seamless digital workflows.
- Create, start, pause, and stop attendance events
- Real-time monitoring with live attendance counts
- View student lists as they scan
- Export attendance reports in CSV/PDF formats
- Create assessments with custom eligibility rules
- Upload candidate lists via CSV
- Automated seat allocation with one-click shuffling
- Prevent dishonesty with randomized lab assignments
- CRUD Operations: Add, view, edit, and delete placement coordinators
- Professional UI: Clean, monochromatic design matching admin panel theme
- Search & Filter: Find coordinators by name, enrollment number, or department
- Attendance Letters: Generate professional PDF letters with:
- University logo and official formatting
- Event details and coordinator information
- Professional table layout with Times font
- Preview before download functionality
- Download attendance and allocation reports
- CSV import/export for bulk operations
- Real-time data synchronization
- Secure Dashboard: View profile status and upcoming drives
- QR Scanner: Integrated scanner with deep-linking support
- History & Logs: Access personal attendance history
- Seat Allocation: View assigned lab and seat number instantly
- Manual Entry: Fallback option for QR code scanning issues
- Dynamic QR Code: Rotating every 10 seconds to prevent proxy attendance
- Live Counter: Real-time present count to motivate punctuality
- Status Indicators: Visual cues for session state (Active/Paused/Stopped)
- High Contrast: Optimized for visibility from a distance
- React 18: Component-based UI with hooks
- Vite: Ultra-fast build times and HMR
- TailwindCSS: Utility-first styling
- React Router: Client-side routing
- Axios: HTTP client with interceptors
- Node.js: Non-blocking, event-driven runtime
- Express.js: Minimal and flexible web framework
- PDFKit: Professional PDF generation
- JWT: Secure authentication
- Nodemailer: Email notifications (optional)
- Supabase: Backend-as-a-Service with PostgreSQL
- Row Level Security (RLS): Database-level authorization
- Real-time subscriptions: Live data updates
- Automatic token refresh: Seamless session management
- Vercel: Frontend hosting with edge network
- Supabase Cloud: Managed PostgreSQL database
- CI/CD: Automatic deployments on push
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CLIENT (React + Vite) β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Admin β β Student β β Projector β β
β β Dashboard β β Dashboard β β View β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β HTTPS/REST API
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β BACKEND (Node.js + Express) β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Auth β β Attendance β β Coordinators β β
β β Middleware β β Controller β β Controller β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β SQL Queries
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β DATABASE (Supabase PostgreSQL) β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Users β β Attendance β β Coordinators β β
β β Profiles β β Events β β Assessments β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Separation of Concerns: Clear boundaries between frontend, backend, and database
- Stateless Authentication: JWT tokens with automatic refresh
- Real-time Updates: Supabase subscriptions for live data
- Scalability: Horizontal scaling with serverless architecture
- Security: Row-level security, CORS policies, input validation
- Node.js v18 or higher
- npm or yarn
- Supabase Account (free tier available)
-
Clone the repository
git clone https://github.com/pranavgawaii/smart-attendance-system.git cd smart-attendance-system -
Install dependencies
npm install
-
Configure environment variables
Create a
.envfile in the root directory:PORT=5001 JWT_SECRET=your_secure_secret_key ADMIN_EMAIL=admin@example.com SUPABASE_URL=https://your-project.supabase.co SUPABASE_ANON_KEY=your_anon_key SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
-
Set up database
Run the SQL migration in your Supabase SQL Editor:
-- Create placement_coordinators table CREATE TABLE placement_coordinators ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name VARCHAR(255) NOT NULL, enrollment_no VARCHAR(50) NOT NULL UNIQUE, email VARCHAR(255) NOT NULL, department VARCHAR(50) NOT NULL, year VARCHAR(10) NOT NULL, created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP );
-
Start the development server
npm run dev
Server will run on
http://localhost:5001
-
Navigate to client directory
cd client -
Install dependencies
npm install
-
Configure environment variables
Create a
.envfile in theclientdirectory:VITE_API_BASE_URL=/api VITE_SUPABASE_URL=https://your-project.supabase.co VITE_SUPABASE_ANON_KEY=your_anon_key
-
Start the development server
npm run dev
Client will run on
http://localhost:5175
- Connect GitHub repository to Vercel
- Configure build settings:
- Root Directory:
client - Build Command:
npm run build - Output Directory:
dist
- Root Directory:
- Add environment variables:
VITE_API_BASE_URLVITE_SUPABASE_URLVITE_SUPABASE_ANON_KEY
- Deploy: Automatic on every push to
main
- Use the included
vercel.jsonconfiguration - Add environment variables in Vercel dashboard:
JWT_SECRETADMIN_EMAILSUPABASE_URLSUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEY
- Deploy: Automatic on every push to
main
- Already hosted on Supabase Cloud
- Automatic backups and scaling
- Connection pooling enabled
- Row Level Security (RLS) configured
- JWT Tokens: Stateless authentication with automatic refresh
- Supabase Auth: Built-in user management and session handling
- Role-Based Access Control (RBAC): Strict separation between admin and student routes
- Token Expiration: Automatic refresh on 401/403 errors
- Row Level Security (RLS): Database-level authorization
- Input Validation: All inputs sanitized to prevent SQL injection
- CORS Policy: Restricted to allowed domains in production
- HTTPS Only: All traffic encrypted in transit
- Dynamic QR Codes: Rotating every 10 seconds to prevent screenshots
- Duplicate Prevention: Database constraints prevent multiple scans
- Session Validation: Server-side verification of all attendance marks
- Device Fingerprinting: Optional tracking to prevent proxy attendance
POST /api/auth/login- User loginPOST /api/auth/logout- User logoutGET /api/auth/verify- Verify token
GET /api/events- Get all eventsPOST /api/events- Create new eventPOST /api/attendance/mark- Mark attendanceGET /api/attendance/history- Get attendance history
GET /api/coordinators- Get all coordinatorsPOST /api/coordinators- Add new coordinatorDELETE /api/coordinators/:id- Delete coordinatorPOST /api/coordinators/attendance-pdf- Generate attendance letter PDF
GET /api/assessments- Get all assessmentsPOST /api/assessments- Create assessmentPOST /api/assessments/allocate- Allocate seats
- Admin creates an event
- Admin launches projector view with dynamic QR code
- Students scan QR code using built-in scanner
- Backend validates token and prevents duplicates
- Success message appears; admin counter updates in real-time
- Admin navigates to Coordinators β Generate Letter
- Fills in event details (title, date, time)
- Selects coordinators from the list
- Clicks "Preview Letter" to review PDF
- Downloads professional attendance letter
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Pranav Gawai
- GitHub: @pranavgawaii
- Email: pranavgawai1518@gmail.com
- MIT ADT University Training & Placement Cell
- All contributors and testers
- Open source community for amazing tools and libraries
Made with β€οΈ for MIT ADT University
β Star this repo if you find it helpful!