A personal academic attendance tracker built for college students who need to stay above minimum attendance thresholds. SeventyFive lets you track theory and lab subjects separately, mark daily attendance, simulate future scenarios, and get AI-powered skip risk predictions — all stored locally in your browser with no backend required.
Dashboard
- Overall attendance ring with animated percentage display
- Separate Theory and Lab attendance rings side by side
- Per-subject risk grid split into Theory and Lab sections, each showing current percentage, attended/total classes, safe skips remaining, and recovery count
- Tap any subject card to open a detailed view with a calendar heatmap
- Quick action shortcuts to Today and Simulator tabs
Subject Detail (Calendar Heatmap)
- Monthly calendar view color-coded by attendance status — green for present, red for absent, orange for cancelled
- Days with a scheduled class but no log show a subtle dot indicator
- Navigate back through previous months to review attendance history
- Stats row showing overall percentage, attended/total, safe skips, and recovery count
- Weekly schedule summary showing each slot with day, time range, duration, and room
Today Tab
- Shows all classes scheduled for the current day of the week
- Mark each class as Present, Absent, or Cancelled with a single tap — tap again to unmark
- Navigate backwards to previous days to log or correct past attendance
- Forward navigation is blocked — future dates cannot be marked
- Mini stats grid at the top shows current attendance percentage and attended/total for each subject scheduled that day, deduplicated
- Duration-weighted counting — a 2-hour slot counts as 2 classes attended or missed
Schedule Tab
- Read-only weekly timetable grid — days as rows on the left, time as columns across the top
- Class blocks span their actual duration, so a 2-hour class is twice as wide as a 1-hour class
- Shows subject code, LAB badge for lab subjects, and room number on each block
- Red vertical line marks the current time on today's row
- Auto-scrolls to the current time on load
- Color key at the bottom maps each subject's color to its code
What-If Simulator
- Select any subject and drag sliders for future absences and future attendances
- Projected percentage updates in real time
- Shows how many consecutive classes are needed to recover if you go below threshold
- Displays remaining safe skips after the simulation
AI Skip Predictor
- Ranks all subjects by skip risk score from 0 to 100
- Score factors in current percentage margin above or below threshold, safe skips remaining, and recent attendance trend across the last 4 logged classes
- Each subject shows a recommendation: Safe to skip, Skip with caution, Attend if possible, or DO NOT skip
- Reasoning pills explain what is driving the score
Timetable Scanner (OCR)[This is under development]
- Image-based import — photograph or upload your printed or digital timetable
- Supports JPG and PNG formats — drop the file or click to browse
- Powered by Tesseract.js OCR engine running entirely in the browser
- Multi-pass parser extracts subject codes (e.g. CS201, MA301), day names, and time ranges automatically
- Detected subjects are shown as a preview before importing — select or deselect individual subjects
- Raw OCR text is available to inspect after scanning, useful for debugging unclear results
- Subjects are deduplicated by code — multiple slots with the same code are grouped into one subject
- If the scanner cannot detect subjects, clear tips are shown explaining how to improve photo quality
- Falls back gracefully — if OCR fails, subjects can still be added manually from the dashboard
Upcoming Changes
- A better user interface for more user interactivity.
- Better animations in the Web app and typography.
| Layer | Technology |
|---|---|
| Framework | React 19 with JavaScript |
| Build tool | Vite 8 (powered by Rolldown) |
| Styling | Tailwind CSS 3 + custom CSS |
| Animations | GSAP 3 |
| Icons | Lucide React |
| Storage | Supabase (PostgreSQL) + Auth |
| Database & Auth | Supabase |
- Node.js
^20.19.0or>=22.12.0(required by Vite 8 / Rolldown)
git clone https://github.com/dev-Aarish/seventyFive.git
cd seventyFive
npm install
npm run devOpen http://localhost:5173 in your browser.
The app starts with an empty state. Use the Add Subject button on the dashboard to create your first subject, or use the Import tab to add multiple subjects at once from a text description of your timetable.
src/
components/
AI/
SkipPredictor.jsx # Risk prediction UI
Chronos/
Timeline.jsx # Read-only weekly schedule grid
Dashboard/
BigNumberTile.jsx # Overall and Theory/Lab attendance rings
NextClassCard.jsx # Next class countdown
RiskGrid.tsx # Per-subject risk cards with click to detail
SubjectDetailModal.jsx # Calendar heatmap and subject stats modal
OCR/
TimetableImport.jsx # Text-based timetable import
Simulator/
WhatIfSlider.jsx # What-if attendance simulator
Today/
TodayLog.jsx # Daily attendance marking with date navigation
lib/
logic.js # All attendance calculations, types, and helpers
ocr.js # Tesseract.js integration and timetable parser
store.js # React state management with localStorage sync
supabase.js
App.jsx # Root component, tab routing, subject modals
main.jsx # Entry point
index.css # Global styles, Tailwind directives, component classes
All calculations live in src/lib/logic.ts.
Duration-weighted counting — each log entry is weighted by the number of hours the slot spans. A 2-hour slot counts as 2 classes for both attended and total. This means marking a 2-hour class as present increments attended by 2 and total by 2.
Safe skips — the number of future classes you can miss before falling below your threshold:
safe_skips = floor(attended / threshold - total)
Recovery count — consecutive classes needed to get back above threshold:
recovery = ceil((threshold * total - attended) / (1 - threshold))
Risk score — a 0-100 value combining three factors:
- Margin above or below the threshold (largest weight)
- Number of safe skips remaining
- Attendance rate across the last 4 logged classes
Default thresholds — Theory subjects default to 75%, Lab subjects default to 80%. Both are adjustable per subject from 50% to 100% using the slider in the Add or Edit subject modal.
Subjects are classified as Theory or Lab when created. This affects:
- The default attendance threshold (75% theory, 80% lab)
- How they appear on the dashboard — Theory and Lab sections are displayed separately
- The overall rings in BigNumberTile — separate rings show Theory and Lab attendance alongside the combined overall ring
- The LAB badge shown on schedule blocks and subject detail modals
All data is stored in Supabase (PostgreSQL) and tied to your user account. Authentication is handled via Supabase Auth — sign up with email/password or continue with Google.
Your data syncs across devices automatically. Clearing browser data will not affect your records since everything lives on the server.
npm run dev # Start development server at localhost:5173
npm run build # Type-check and build for production
npm run preview # Preview the production build locally
npm run lint # Run ESLintMIT