The all-in-one college lifestyle & management portal for VIT Bhopal University
Events Β· Timetable Β· PYQs Β· Clubs Β· Opportunities Β· Roadmaps β all in one place.
π Live Demo Β·
Features Β·
Setup Β·
Architecture Β·
Security
VIT Life is a feature-rich, production-grade college portal designed specifically for VIT Bhopal University students. It replaces scattered WhatsApp groups, Google Sheets, and disconnected apps with a single, beautiful, installable Progressive Web App.
Built with a modern stack (React 19 + Express 5 + MongoDB Atlas), it supports both authenticated users and guest sessions β so anyone can explore without signing up.
Feature
Description
Personalized Greeting
Dynamic welcome message with time-of-day awareness
XP Progress System
Track skill progression across categories with visual bars
Next Class Tracker
Live countdown to your next class from timetable data
Live Mess Menu
Real-time menu from messmenu.me for all 6 VIT Bhopal hostel messes (6-hour cache)
Quick Actions
One-tap access to key features
Feature
Description
Paste-to-Parse
Copy VTOP page text β paste β auto-extracts all class slots, rooms & types
Smart OCR Normalization
Handles messy text: MAT2OO2 β MAT2002, All β A11
Room Detection
Detects classroom numbers across all VIT building codes (AB, LH, SJT, CR, etc.)
Mobile Day Tabs
Swipe between days with optimized mobile layout
Manual Editor
Add, edit, or delete individual slots
Offline-First Sync
Saves to localStorage instantly, syncs to cloud when online
Sync Indicator
Visual status: synced β
Β· syncing π Β· pending β³ Β· offline π΄
First-Time Guide
Step-by-step VTOP instructions (auto-hides after first upload)
Feature
Description
Club Directory
Browse all clubs with descriptions, logos, and manager info
Event Calendar
Categories, poster galleries, RSVP links, and schedule posters
Trending System
Tracks impressions per event; shows top trending on dashboard
Pinned Events
Admin-only pinning for priority events
Recruitment Board
Active club recruitment listings with deadlines
π Community (PYQs & Resources)
Feature
Description
Upload & Share
Upload Previous Year Questions and study materials
Guest Uploads
Anyone can contribute β submissions go to admin moderation queue
Auto-Fill Course Names
Type a course code β auto-fills the title from existing papers
Admin Moderation
Review, approve β
or reject β pending submissions with IP tracking
PDF Preview
Cloudinary-backed inline document previews
Feature
Description
Auto-Scraped Listings
Internships, hackathons, competitions updated daily
Smart Filters
Filter by category, search by keyword
Scheduled Refresh
Background scraper keeps data fresh
Feature
Description
Interactive Skill Tree
Visual progression paths for CS/DS/AI tracks
Status Tracking
Not started β In progress β Completed
XP Points
Earn and track XP with progress bars
Feature
Description
Academic Resources
Guidelines, grading info, and campus-specific content
Privacy Policy & Terms
Full legal documentation built-in
π Authentication & Sessions
Feature
Description
Email Verification
6-digit code sent via SMTP before account activation
Google OAuth
One-click Google sign-in support
Password Reset
Forgot password flow with email-based reset codes
Session Management
View all active sessions (OS, browser, device, IP) and revoke individually
Guest Mode
Browse without an account β persistent UUID per browser
Feature
Description
Installable
Works on mobile & desktop (Chrome, Edge, Samsung Browser)
Offline Access
Service worker caches API responses for offline use
Smart Install
In-app install button β auto-hides after installation
Feature
Description
Dark Mode (Default)
Deep blue-black with purple accent gradients
Light Mode
Clean white with preserved brand colors
Persistent
Theme preference saved in localStorage
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β FRONTEND (React 19) β
β ββββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββ¬βββββββββ β
β βDashboard βTimetable βCampusLifeβCommunity β Auth β β
β ββββββ¬ββββββ΄βββββ¬ββββββ΄βββββ¬ββββββ΄βββββ¬ββββββ΄ββββ¬βββββ β
β β β β β β β
β ββββββ΄βββββββββββ΄βββββββββββ΄βββββββββββ΄ββββββββββ΄βββββ β
β β App.jsx (State Orchestrator) β β
β β Token Β· User Β· Theme Β· Timetable Β· Events β β
β ββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββ β
β β fetch('/api/*') β
βββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββ
β BACKEND (Express 5 + Node.js) β
β ββββββββββββββββββββββ΄ββββββββββββββββββββββββββββββββ β
β β server.js β β
β β Auth Β· Sessions Β· Events Β· Clubs Β· Papers Β· Admin β β
β βββββββ¬βββββββββββ¬βββββββββββ¬βββββββββββββββββββββββββ β
β β β β β
β ββββββ΄ββββ ββββββ΄ββββ βββββ΄βββββ β
β βMongoDB β βCloudnryβ β SMTP β β
β β Atlas β β Media β β Email β β
β ββββββββββ ββββββββββ ββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Layer
Technology
Purpose
Frontend
React 19, Vite 8
UI framework & build tooling
Styling
Vanilla CSS + CSS Variables
Design system with dark/light tokens
Backend
Express 5, Node.js
REST API, auth, business logic
Database
MongoDB Atlas
Primary data store (JSON file fallback)
Cloud Storage
Cloudinary
Image & PDF uploads for events/papers
Email
Nodemailer (SMTP)
Verification codes & password resets
Animations
GSAP, Motion, Three.js
Micro-animations & 3D effects
Deployment
Vercel
Serverless functions + CDN
PWA
Custom Service Worker
Offline caching & installability
vitlife/
βββ public/
β βββ favicon.svg # App icon
β βββ manifest.json # PWA manifest
β βββ sw.js # Service worker (caching strategies)
β βββ vtop-timetable-guide.png # Timetable guide image
β
βββ server/
β βββ server.js # Express backend (4800+ lines)
β β βββ Auth routes # Register, login, verify, reset, OAuth
β β βββ Session management # Create, verify, revoke, SSE
β β βββ Events/Clubs/Papers # CRUD with admin moderation
β β βββ Timetable sync # Cloud persistence for schedules
β β βββ Mess menu proxy # Cached proxy to messmenu.me
β β βββ Admin panel # User management, promotions
β βββ data/ # Local JSON fallback storage
β
βββ src/
β βββ App.jsx # Main orchestrator (state, routing, auth)
β βββ main.jsx # Entry point + SW registration
β βββ index.css # Global design system (CSS tokens)
β βββ components/
β β βββ Auth.jsx # Login, signup, verification, guest
β β βββ Dashboard.jsx # Home dashboard, stats, mess menu
β β βββ TimetablePage.jsx # Paste-parser, grid view, manual editor
β β βββ CampusLife.jsx # Clubs, events, recruitments
β β βββ CommunityPage.jsx # PYQ sharing with admin moderation
β β βββ Opportunities.jsx # Auto-scraped opportunities
β β βββ Roadmap.jsx # Skill tree & XP tracking
β β βββ VITBhopalGuide.jsx # Academic guidelines
β β βββ Hyperspeed.jsx # Three.js background effects
β β βββ Dock.jsx # macOS-style animated dock
β β βββ BounceCards.jsx # Physics-based card animations
β β βββ Masonry.jsx # Pinterest-style poster gallery
β β βββ RotatingText.jsx # Animated rotating text
β β βββ ElectricBorder.jsx # Glowing border effects
β β βββ TypewriterText.jsx # Typewriter animation
β β βββ PrivacyPolicy.jsx # Legal: Privacy Policy
β β βββ TermsAndConditions.jsx # Legal: Terms & Conditions
β βββ hooks/
β βββ useTimetableSync.js # Offline-first timetable sync hook
β
βββ scripts/
β βββ fetch_opportunities.py # Python scraper for opportunities
β βββ postinstall.js # Post-install setup script
β
βββ .env.example # Environment template
βββ vercel.json # Vercel deployment config
βββ vite.config.js # Vite config with API proxy
βββ package.json # Dependencies & scripts
Node.js 18+ and npm
MongoDB Atlas cluster (free tier works) β or the app falls back to local JSON files
Gmail account with App Password for email verification (optional for dev)
git clone https://github.com/aditya-dev06/VITLIFE.git
cd VITLIFE
npm install
Edit .env with your credentials:
# MongoDB
MONGODB_URI = mongodb+srv://user:pass@cluster.mongodb.net/vitlife
# SMTP (Gmail)
SMTP_HOST = smtp.gmail.com
SMTP_PORT = 465
SMTP_USER = your-email@gmail.com
SMTP_PASS = xxxx-xxxx-xxxx-xxxx
# Admin
ADMIN_EMAIL = your-admin@email.com
# Cloudinary (for media uploads)
CLOUDINARY_CLOUD_NAME = your-cloud-name
CLOUDINARY_API_KEY = your-api-key
CLOUDINARY_API_SECRET = your-api-secret
# Google OAuth (optional)
GOOGLE_CLIENT_ID = your-google-client-id
3. Run Development Server
This starts both servers concurrently:
Frontend (Vite): http://localhost:5175
Backend (Express): http://localhost:5000
The Vite dev server proxies /api/* and /uploads/* to the Express backend automatically.
π Environment Variables
Variable
Required
Description
MONGODB_URI
No
MongoDB Atlas connection string
SMTP_HOST
No
SMTP server hostname
SMTP_PORT
No
SMTP port (default: 465)
SMTP_USER
No
Email for sending verification emails
SMTP_PASS
No
App Password for SMTP
ADMIN_EMAIL
No
Primary admin email (auto-promoted)
JWT_SECRET
No
Token signing secret (auto-generated if not set)
CLOUDINARY_CLOUD_NAME
No
Cloudinary cloud name
CLOUDINARY_API_KEY
No
Cloudinary API key
CLOUDINARY_API_SECRET
No
Cloudinary API secret
GOOGLE_CLIENT_ID
No
Google OAuth client ID
CORS_ORIGINS
No
Comma-separated allowed origins
π‘ Tip : The app works without any environment variables in dev mode. Verification codes print to console, and data stores in local JSON files.
βοΈ Deployment (Vercel)
The project is pre-configured for Vercel with vercel.json:
Connect your GitHub repo to Vercel
Add environment variables in the Vercel dashboard
Deploy β Vercel handles static build + serverless API routes automatically
π€ Guest vs Authenticated
Feature
Guest
Authenticated
Dashboard, Opportunities, Events, Guide
β
β
Timetable (local storage)
β
β
+ cloud sync
Upload PYQs
β
(pending approval)
β
(auto-approved for admins)
College Life tab
β
β
Edit profile
β
β
Skill progress sync
β
β
Cloud data persistence
β
β
PWA install
β
β
Guest sessions use a persistent UUID stored in localStorage. Each browser/device gets a unique identity.
Scrypt password hashing with unique salts per user
HMAC-SHA256 session tokens : Format [signature].[base64Email].[expiresAt].[hashPiece]
Constant-time signature verification (crypto.timingSafeEqual) prevents timing attacks
Password-bound tokens : Changing password instantly invalidates all sessions
Token DoS protection: Rejects inputs > 500 chars before any processing
Max 10 concurrent sessions per user (FIFO eviction)
Real-time session invalidation via Server-Sent Events (SSE)
Individual or bulk session revocation from profile
Rate Limiting & Brute-Force Protection
API : 150 requests / 15 min (production)
Auth : 15 requests / 15 min (production)
Uploads : 120 requests / 5 min (production)
Progressive lockouts on repeated failed attempts
sanitizeUser() strips passwordHash, salt, and sensitive fields from all API responses
Admin user queries use MongoDB projection to never load sensitive fields
Authorization headers masked in server logs (Bearer [MASKED])
Guest upload IP addresses recorded for safety auditing
Prototype pollution protection (__proto__, constructor blocked)
File upload restricted to safe types with MIME + extension validation
XSS prevention via escapeHtml() on all user-facing outputs
CORS strictly configured with explicit origin allowlisting
Aditya Prakash
This project is proprietary. All rights reserved.