Skip to content

Premshaw23/Pedexa

Repository files navigation

🎓 Pedexa

Pedexa Branding

Turn your laptop into an automatic teaching log. No timers, no manual attendance sheets, no end-of-month Excel scramble.

Pedexa is a Chrome extension built for teachers and faculty who run their classes over Google Meet. It silently detects when a class starts, asks one quick question, and handles the rest — timing, logging, attendance, and reporting — without the teacher ever touching a stopwatch.


🧩 The Problem

Teachers who take online classes usually end up doing three annoying things by hand every single day:

  1. Manually noting down the time a class started and ended.
  2. Manually marking attendance in a separate register or spreadsheet.
  3. Manually compiling all of this at the end of the month for the administration.

None of this is hard — it's just tedious, easy to forget, and easy to get wrong. Pedexa removes all three from the teacher's plate.

💡 The Solution

The extension watches for a Google Meet tab, starts a timer the moment the teacher joins, asks what subject is being taught, and stops the timer the moment the call ends. Everything is saved locally and surfaced in a clean dashboard with stats, charts, and one-click Excel export.


✨ Feature Plan

Step 1 — The Automatic Timer (Core)

  • A background service worker watches for Google Meet tabs joining/leaving a call.
  • The instant a teacher clicks Join now, the timer starts — no action needed.
  • A small popup appears once per session: "What are you teaching? (DBMS / OS / CN / DSA / + custom)". One click and it's gone.
  • When the call ends, the timer stops automatically and the session is saved with Date, Subject, Start Time, End Time, and Duration.

Step 2 — The Teacher's Dashboard (Analytics)

  • Clicking the extension icon opens a full-screen dashboard tab, not a tiny popup.
  • Profile, set once on install (name, institute, default subjects).
  • Stats panel: total hours this week, total classes this month, current teaching streak (e.g. "5-day streak 🔥").
  • Pie chart (Chart.js) showing time distribution across subjects.
  • A simple session history table (searchable/filterable by date or subject) — useful for verifying data before export.

Step 3 — Roster & Excel Export (Value-Add)

  • A roster page where the teacher pastes/types student names once (one-time setup per class/section).
  • A floating attendance checklist injected directly into the Google Meet sidebar during a live class, so marking absentees takes seconds.
  • A one-click export button on the dashboard that generates a clean .xlsx/.csv file of the month's teaching log — ready to forward to administration.

🛠 Tech Stack

Layer Choice Why
UI React + Tailwind CSS Fast to build, clean modern look
Extension runtime Manifest V3 (service worker + content scripts) Required for new Chrome extensions
Storage chrome.storage.local Free, built-in, fully on-device — no backend, no privacy concerns
Charts Chart.js Lightweight, simple API, good enough for pie/bar views
Export SheetJS (xlsx) or papaparse for CSV Generates real Excel files client-side, no server needed

No backend, no database server, no hosting cost. Everything lives on the teacher's machine — which is also a strong privacy selling point: student names and class data never leave the laptop.


🧠 How It Works (Architecture)

┌─────────────────────┐
│  meet.google.com     │   Content script detects "Join now" / "Leave call"
│  (content script)    │   clicks via DOM observation (MutationObserver)
└──────────┬───────────┘
           │ chrome.runtime.sendMessage
           ▼
┌─────────────────────┐
│  Background service  │   Starts/stops timer, owns session state,
│  worker               │   writes finished sessions to storage
└──────────┬───────────┘
           │ chrome.storage.local
           ▼
┌─────────────────────┐
│  Dashboard (full tab)│   React app reads storage, renders stats,
│  + Roster + Export    │   charts, roster, attendance, export button
└─────────────────────┘

The subject-picker popup and the in-meet attendance checklist are both injected UI (content scripts rendering a small React root) rather than the standard extension popup — this is what makes them appear inside the Meet tab instead of requiring the teacher to click the toolbar icon mid-class.


🗄️ Data Model (chrome.storage.local)

Keeping this explicit early avoids painful schema migrations later:

{
  "profile": {
    "name": "Prem Shaw",
    "institute": "IIIT Bhopal",
    "defaultSubjects": ["DBMS", "OS", "CN", "DSA"]
  },
  "sessions": [
    {
      "id": "a1b2c3",
      "date": "2026-06-17",
      "subject": "DBMS",
      "startTime": "10:00:12",
      "endTime": "10:54:40",
      "durationMinutes": 54,
      "meetingId": "abc-defg-hij"
    }
  ],
  "roster": {
    "DBMS": ["Aarav Singh", "Diya Patel", "..."]
  },
  "attendance": {
    "a1b2c3": { "Aarav Singh": "present", "Diya Patel": "absent" }
  }
}

Use chrome.storage.local.QUOTA_BYTES (default ~10MB) — comfortably enough for years of session logs, but worth showing remaining quota in settings once roster + attendance data grows.


🔧 Refinements & Edge Cases (worth handling from day one)

The original plan covers the happy path well. A few things to bake in early so the extension feels reliable in real classroom conditions:

  • Multiple Meet tabs: track sessions per tabId, not globally — a teacher might have a Meet tab open in the background while testing something else.
  • Missed subject selection: if the teacher closes the popup without picking a subject, don't discard the session — log it as "Uncategorized" and let them relabel it later from the dashboard.
  • Accidental tab close vs. real "Leave call": detect both the Meet "You left the meeting" screen and the tab/window being closed mid-call, so timers don't run forever in the background.
  • Idle/disconnect time: if the teacher's network drops and Meet auto-leaves, don't silently lose that as "0 minutes" — flag sessions under a minute for a quick manual review.
  • Editable history: let teachers manually correct duration/subject on the dashboard — automation should save time, not create a new chore when it gets something wrong.
  • Export scope: let the export button filter by date range (e.g. "this month only") rather than always dumping the entire history.
  • Privacy framing: since everything is local-only, make that explicit in the UI ("Your data never leaves this device") — it's a genuine advantage over a cloud-based competitor and worth highlighting in onboarding.

📂 Suggested Project Structure

Pedexa/
├── manifest.json
├── icons/
├── src/
│   ├── background/
│   │   └── service-worker.js
│   ├── content-scripts/
│   │   ├── meet-detector.js
│   │   ├── subject-picker.jsx
│   │   └── attendance-sidebar.jsx
│   ├── dashboard/
│   │   ├── App.jsx
│   │   ├── components/
│   │   │   ├── StatsPanel.jsx
│   │   │   ├── SubjectPieChart.jsx
│   │   │   ├── StreakCounter.jsx
│   │   │   ├── SessionHistory.jsx
│   │   │   ├── RosterManager.jsx
│   │   │   └── ExportButton.jsx
│   │   └── index.html
│   └── utils/
│       ├── storage.js
│       └── exportToExcel.js
└── README.md

🔑 Required Permissions (manifest.json)

{
  "permissions": ["storage", "tabs", "scripting"],
  "host_permissions": ["https://meet.google.com/*"]
}

Keeping the permission list this small matters — it makes the Chrome Web Store review faster and makes teachers more comfortable installing it (no scary "read all your browsing data" warning).


🚀 Getting Started (Development)

git clone https://github.com/<your-username>/Pedexa.git
cd Pedexa
npm install
npm run build

Then load it in Chrome:

  1. Go to chrome://extensions
  2. Enable Developer mode
  3. Click Load unpacked and select the dist/ folder

🗺️ Roadmap

  • Step 1 — Auto timer + subject popup
  • Step 2 — Dashboard with stats and charts
  • Step 3 — Roster, attendance, Excel export
  • Weekly email/notification digest ("You taught 12 hrs this week")
  • Per-section roster switching (multiple class sections)
  • Optional cloud backup/sync (still local-first by default)
  • Support for Zoom/MS Teams in addition to Google Meet

🤝 Contributing

Issues and PRs are welcome. This started as a personal tool to solve a real, daily annoyance — if it's useful to other teachers, contributions that keep it simple and privacy-respecting are especially appreciated.

📄 License

MIT

About

Pedexa is a Chrome extension built for teachers and faculty who run their classes over Google Meet. It silently detects when a class starts, asks one quick question, and handles the rest — timing, logging, attendance, and reporting — without the teacher ever touching a stopwatch.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors