A full-stack college farewell event registration + QR check-in web app built for ~600 students across IT, Cyber Security, Data Science and MCA branches.
Registration: https://vigam2026.pages.dev/
Admin Panel: https://vigam2026.pages.dev/admin
Gate Check-in: https://vigam2026.pages.dev/checkin
- ERP ID verification with cinematic loading animation
- Profile auto-fill from college database
- Photo upload with Polaroid-style preview
- Random Bollywood-themed superlative assignment
- Digital QR pass with countdown timer
- Automatic email confirmation with QR attached
- ERP ID verification
- Volunteer coordination screen
- Digital QR entry pass
- Automatic email confirmation
- Live registration statistics
- Student table with photos and QR codes
- Search and filter by branch, role, status
- Export attendance as CSV
- Download all QR passes as ZIP
- Download all student photos as ZIP
- Real-time updates via Supabase Realtime
- Camera-based QR scanner
- Manual ERP ID entry fallback
- Full-screen result flash (Green/Yellow/Red)
- Live "students inside" counter
- Auto-reset after 3 seconds for next scan
| Layer | Technology | Purpose |
|---|---|---|
| Frontend | React + Vite | UI framework |
| Styling | Tailwind CSS + Inline styles | Bollywood cinematic theme |
| Database | Supabase (PostgreSQL) | Student data + Realtime |
| Storage | Supabase Storage | Photos + QR codes |
| QR Generation | qrcode.react | Digital pass QR |
| QR Scanning | jsQR | Gate check-in scanner |
| Animations | Framer Motion | Cinematic transitions |
| Brevo API | Registration confirmation | |
| Deployment | Cloudflare Pages | Hosting + Serverless functions |
| CI/CD | GitHub β Cloudflare | Auto deploy on push |
| whatsapp-web.js | Bulk QR sending (Azure VM) |
vigam2026/
βββ api/ # Vercel serverless (legacy)
βββ functions/
β βββ api/
β βββ send-email.js # Cloudflare Pages Function
βββ public/
β βββ _redirects # Cloudflare routing
βββ src/
β βββ admin/
β β βββ AdminDashboard.jsx # Admin control panel
β βββ checkin/
β β βββ CheckIn.jsx # Gate check-in system
β β βββ QRScanner.jsx # Camera QR scanner
β βββ components/
β β βββ Loader.jsx # Loading component
β β βββ UI.jsx # Shared UI components
β βββ constants/
β β βββ superlatives.js # Bollywood superlatives list
β βββ pages/
β β βββ Splash.jsx # Landing screen
β β βββ BranchSelect.jsx # Branch selection
β β βββ ERPVerify.jsx # ERP verification
β β βββ ProfileConfirm.jsx # Profile confirmation
β β βββ PhotoUpload.jsx # Photo upload
β β βββ Superlative.jsx # Award reveal
β β βββ SuccessPass.jsx # Senior QR pass
β β βββ JuniorVolunteer.jsx # Junior volunteer screen
β β βββ JuniorSuccess.jsx # Junior QR pass
β β βββ NotFound.jsx # 404 page
β βββ utils/
β β βββ db.js # Supabase query helpers
β βββ App.jsx # Routes
β βββ index.css # Global styles + animations
β βββ main.jsx # Entry point
β βββ supabaseClient.js # Supabase connection
βββ .env # Environment variables (never commit!)
βββ vite.config.js # Vite configuration
βββ package.json
CREATE TABLE students (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
erp_id TEXT UNIQUE NOT NULL,
name TEXT NOT NULL,
branch TEXT NOT NULL, -- IT, Cyber, DS, MCA
phone TEXT, -- +91XXXXXXXXXX format
email TEXT, -- erp_id@rungta.org
year INTEGER NOT NULL, -- 1-4 for BTech, 1-2 for MCA
role TEXT NOT NULL, -- 'senior' or 'junior'
photo_url TEXT, -- Supabase Storage URL
qr_code_url TEXT, -- Supabase Storage URL
superlative TEXT, -- Bollywood award title
registered_at TIMESTAMP WITH TIME ZONE,
is_registered BOOLEAN DEFAULT FALSE,
is_present BOOLEAN DEFAULT FALSE,
registered_rank INTEGER,
wants_to_volunteer BOOLEAN DEFAULT FALSE,
checked_in_at TIMESTAMP WITH TIME ZONE
);- Node.js v18+
- Python 3.8+ (for data import)
- Supabase account
- Brevo account (email)
- Cloudflare account
git clone https://github.com/YOUR_USERNAME/vigam2026.git
cd vigam2026npm installCreate a .env file in the root:
VITE_SUPABASE_URL=your_supabase_project_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_keyAdd to Cloudflare Pages environment variables:
BREVO_API_KEY=your_brevo_api_key
Run this SQL in your Supabase SQL Editor:
-- Create students table
CREATE TABLE students (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
erp_id TEXT UNIQUE NOT NULL,
name TEXT NOT NULL,
branch TEXT NOT NULL,
phone TEXT,
email TEXT,
year INTEGER NOT NULL,
role TEXT NOT NULL DEFAULT 'junior',
photo_url TEXT,
qr_code_url TEXT,
superlative TEXT,
registered_at TIMESTAMP WITH TIME ZONE,
is_registered BOOLEAN DEFAULT FALSE,
is_present BOOLEAN DEFAULT FALSE,
registered_rank INTEGER,
wants_to_volunteer BOOLEAN DEFAULT FALSE,
checked_in_at TIMESTAMP WITH TIME ZONE
);
-- Enable RLS
ALTER TABLE students ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Allow public read" ON students FOR SELECT USING (true);
CREATE POLICY "Allow public update" ON students FOR UPDATE USING (true);
-- Enable Realtime
ALTER TABLE students REPLICA IDENTITY FULL;Create storage buckets: photos and qrcodes (both public)
pip install pandas openpyxl supabase
python clean_data.py # Clean Excel data first
python import_students.py # Import to Supabasenpm run devThe project includes two Python scripts for importing student data:
Reads 3 Excel files with different formats, cleans data and exports a single verified Excel with 5 sheets:
- β Clean Data
- π Summary
β οΈ Issues- π Duplicates
- π± Phone Check
Reads the cleaned Excel and imports to Supabase in batches of 50.
- Push code to GitHub
- Go to Cloudflare Pages β Create new project
- Connect GitHub repository
- Build settings:
Framework: Vite Build command: npm run build Output directory: dist - Add environment variables
- Deploy!
CI/CD: Every git push to main triggers automatic redeployment.
| URL | Password |
|---|---|
/admin |
Set in AdminDashboard.jsx |
/checkin |
Set in CheckIn.jsx |
β οΈ Change default passwords before going live!
QR codes follow this format:
VIGAM2026|ERP_ID|STUDENT_NAME
Example: VIGAM2026|6605029|Jatin Naik
Powered by Brevo API via Cloudflare Pages Function:
- Triggered automatically after registration
- Includes QR code in email body
- QR attached as PNG file
- Works for both seniors and juniors
20 Bollywood-themed superlatives randomly assigned to seniors:
- "The Shah Rukh Khan of the Batch π"
- "Most Likely to Debug at 3AM π»"
- "The Human Stack Overflow π"
- ...and 17 more!
Add/edit in src/constants/superlatives.js
- Download all QRs as ZIP from admin
- Download attendance CSV backup
- Brief volunteers on
/checkin - Print attendance sheet backup
- Charge power bank for gate device
- Open
/checkinon gate device - Keep
/adminopen for monitoring - Have manual ERP entry ready as fallback
- Keep printed list as last resort
Jatin Naik - B.Tech IT Student, Rungta College
Built with β€οΈ for VIGAM 2026 - the farewell event that brings Bollywood to Binary!
MIT License β feel free to use for your own college events!
π¬ VIGAM 2026 β Where Bollywood Meets Binary