Skip to content

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

SeventyFive

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.


Features

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.

Tech Stack

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

Getting Started

Requirements

  • Node.js ^20.19.0 or >=22.12.0 (required by Vite 8 / Rolldown)

Installation

git clone https://github.com/dev-Aarish/seventyFive.git
cd seventyFive
npm install
npm run dev

Open http://localhost:5173 in your browser.

First run

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.


Project Structure

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

Attendance Logic

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.


Subject Types

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

Data Storage

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.


Available Scripts

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 ESLint

License

MIT

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages