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

Automated LMS + NPTEL deadline assistant that scrapes deadlines, parses email announcements, and pushes reminders to Google Calendar and email. Runs on GitHub Actions.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages