Attendance tracker for Mozilla Firefox Club, VIT Vellore EXC courses.
This app is built as a protected admin website where club members can:
- import the registered EXC student roster from CSV
- create course events with duration, venue, and schedule
- mark attendance per event
- track each student against the 90-hour completion requirement
- manage admin access with simple RBAC
- Next.js 15
- TypeScript
- Prisma ORM
- Neon Postgres
- Custom JWT cookie auth
Student
registrationNumberas primary key- name, VIT email, phone number, department, year, notes
AdminUser
- name, email, password hash
- role:
ADMINorSUPER_ADMIN
ClubEvent
- title, category, venue, description
- start date/time
- duration in minutes
AttendanceRecord
- one record per student per event
- status:
PRESENTorABSENT - attended minutes for partial attendance support
- Install dependencies:
npm install- Copy env file:
cp .env.example .env- Create a Neon database and copy its connection strings into
.env.
Use:
DATABASE_URLfor the app connectionDIRECT_URLfor Prisma schema pushes and admin operations
- Create the schema and Prisma client:
npm run db:push- Seed the default admin and sample students:
npm run db:seed- Start the app:
npm run devOpen http://localhost:3000.
The seed script creates a default super admin using env vars:
ADMIN_NAMEADMIN_EMAILADMIN_PASSWORD
Change these in .env before seeding.
Use a CSV with these headers:
name,registrationNumber,email,phoneNumber,department,year,notesA sample file is included at data/students.example.csv.
If you place your real roster at data/students.csv, the seed script will import that file automatically.
ADMIN: create events, mark attendance, import studentsSUPER_ADMIN: all admin actions plus admin management
- add student self-view or export reports if you want students to check their own progress
- add QR or OTP attendance capture if you want on-site automated check-in later