Skip to content

Hari19hk/Remindly

Repository files navigation

Remindly — Automated LMS + NPTEL Deadline Assistant

Why this exists

  • I missed graded LMS/NPTEL deadlines and didn’t want to lose marks again. So I automated the boring parts: fetch deadlines daily, read the relevant email announcements, and push everything to Google Calendar with reminders.

Features

  • Scrapes LMS calendar to collect upcoming deadlines.
  • Reads Gmail for NPTEL course announcements and extracts one “Assignment” and one “Programming Assignment” with their due dates.
  • Normalizes dates and pushes events to Google Calendar (scheduled the day before due, IST).
  • Sends reminder emails at specific times (07:00, 12:00, 18:00, 20:00, 22:00 IST).
  • Runs on a schedule with GitHub Actions (no local machine required).

Architecture

  • retrieval.py: Logs into LMS and scrapes calendar events and due dates.
  • email_parser.py: Uses Gmail API to fetch today’s NPTEL emails, cleans HTML to text, extracts assignment names and deadlines, and formats them for calendar.
  • push_deadlines.py: Combines LMS + email deadlines and creates Google Calendar events.
  • send_reminders.py: Sends reminder emails when deadlines are tomorrow.
  • .github/workflows/remindly.yml: Runs the job on a cron schedule and on-demand.

Setup (local)

  1. Python 3.12 recommended
  2. Install deps
pip install -r requirements.txt
  1. Google OAuth files in Remindly/
    • client_secret.json (from Google Cloud → OAuth client)
    • token.json (created on first run)
  2. Environment variables in .env (gitignored)
LMS_USERNAME=...
LMS_PASSWORD=...
SENDER_EMAIL=...
APP_PASSWORD=... # Gmail App Password
RECEIVER_EMAIL=...
  1. First run and auth
    • Run push_deadlines.py once to trigger OAuth
    • Approve scopes: Gmail modify + Calendar
    • token.json is generated with a refresh_token (stored locally; copy into GitHub Secret below)

Setup (GitHub Actions)

  1. Add these Repository Secrets (Settings → Secrets and variables → Actions):
    • CLIENT_SECRET_JSON: full contents of client_secret.json
    • GMAIL_TOKEN_JSON: full contents of token.json (must include refresh_token)
    • LMS_USERNAME, LMS_PASSWORD
    • SENDER_EMAIL, APP_PASSWORD, RECEIVER_EMAIL
  2. Ensure workflow exists at .github/workflows/remindly.yml and is on the default branch.
  3. Cron schedule (UTC) triggers at your IST times; workflow also supports manual “Run workflow”.

Running

  • Local (manual):
python push_deadlines.py
python send_reminders.py
  • GitHub Actions: configured to run at chosen IST hours; installs deps, writes secrets, and executes the scripts.

Notes

  • Keep client_secret.json and token.json out of the repo; store them in GitHub Secrets.
  • If you change scopes, delete token.json locally, re-auth once, and update the GMAIL_TOKEN_JSON secret.
  • Email parsing is tuned for NPTEL announcement style; adjust regex patterns in email_parser.py if formats change.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages