← Back to Projects
Web

Notion Study Reminder

A small automation that reads study tasks and deadlines from Notion, then sends useful email digests without requiring another dashboard.

Timeline
April 2026

Technologies used

  • Node.js
  • Notion API
  • Gmail API
  • GitHub Actions

A schedule that reaches me

I already kept my study schedule in Notion, but it only helped when I remembered to open it. Notion Study Reminder turns that passive page into a small, predictable email routine.

The service reads unchecked to-do blocks recursively and also supports database-style tasks. It combines today's checklist with nearby deadlines, then sends the result through Gmail.

Morning and evening digests combine today’s checklist with upcoming deadlines.
Morning and evening digests combine today’s checklist with upcoming deadlines.

Three runs, two useful shapes

Morning and evening messages contain today's checklist plus non-overdue deadlines inside a configurable seven-day window. The midday message is deliberately quieter: it contains only work due today and sends nothing when that list is empty.

The midday run surfaces the work due soon without repeating the full digest.
The midday run surfaces the work due soon without repeating the full digest.

Beirut time without a brittle cron table

GitHub Actions wakes the script hourly. The Node process decides whether a reminder is due by comparing the current time in Asia/Beirut, so daylight-saving changes do not require editing the workflow schedule. A small send marker prevents the same scheduled window from producing duplicate mail.

A dependency-free implementation

The project uses the Node 18 standard library for HTTP requests, date handling, environment configuration, and MIME message construction. It can send through Gmail SMTP or the Gmail API with OAuth, and it handles paginated Notion responses plus the transition between older database endpoints and newer data-source endpoints.

Edges I would tighten

The current parser expects specific Notion property names, so a mapping layer would make it friendlier to other workspaces. Dynamic text should also be escaped before entering the HTML email, and the scheduler could compare exact minutes rather than relying on hourly workflow timing. The current test suite covers the parsing and scheduling behavior with 18 passing tests.

Tags

automationemail digestNotionstudy planningtimezone-aware

More Web projects

Dros practice session showing an incorrect answer, the correct option, and an explanation

Web

React TypeScript Vite

Dros

A local-first React study app that turns AI-generated and imported MCQs into repeatable practice with immediate feedback.

Explore other projects

Android audiobook player showing cover art, saved progress, skip controls, playback speed, and a sleep timer

Mobile

Kotlin Jetpack Compose Media3 ExoPlayer

Audiobooks for Android

A native Android audiobook library with offline downloads, persistent listening progress, and background playback.

AI Workflow DSL overview showing a workflow program beside the lexer, generated LL(1) table, and stack parser

University

Python LP PT

AI Workflow DSL

A Python DSL and table-driven LL(1) parser for multi-agent workflows, with generated grammar docs and source-aware syntax errors.

Tanbih control panel showing selectable crisis data sources and unavailable credentialed providers

Hackathon

Node.js Express Socket.IO

Tanbih

A crisis intelligence prototype that combines multi-source detection, explainable verification, geographic targeting, and human-reviewed multilingual alerts.