October 15, 2026
Moodle Desktop Calendar & Native Linux Deadline Reminders
For university students, missing an assignment deadline is rarely caused by a lack of effort—it happens because university learning management systems like Moodle hide crucial submission dates across dozens of fragmented course tabs, buried syllabi PDFs, and nested forum threads.
Logging into a slow web portal multiple times a day just to check whether an assignment is due at 23:59 creates unnecessary friction. Students need immediate, ambient awareness of their deadlines directly within their desktop environment.
I built everything-in-one-place to solve this problem for Linux users. It is an interactive desktop calendar widget and automated background notification engine built with Python, GTK 4, and Libadwaita, designed to feel like a first-class Ubuntu/GNOME core application.
Architectural Goals
- Ambient Awareness: Deadlines should be visible at a glance without opening a web browser.
- Native GNOME Integration: Built using GTK 4 and Libadwaita widgets adhering strictly to modern Ubuntu styling.
- Automated Reminders: Background notifications (
notify-send/GNotification) that alert students well before submission windows close. - Direct Course Navigation: One-click links from the desktop widget straight to the specific Moodle assignment submission page.
System Overview
1. Dynamic Task Classification and Urgency Metrics
Assignments vary widely in their urgency. A deadline due next Friday requires casual planning, while an assignment due in three hours requires immediate action.
everything-in-one-place classifies incoming events into distinct priority buckets and calculates human-readable relative countdowns:
# urgency.py: Classifying task urgency
from datetime import datetime, timezone
def calculate_urgency(due_date: datetime):
now = datetime.now(timezone.utc)
delta = due_date - now
if delta.total_seconds() < 0:
return "overdue", "Overdue", "error-color"
elif delta.total_seconds() <= 3600 * 12:
hours = max(1, int(delta.total_seconds() // 3600))
return "due_today", f"Due in {hours} hours", "warning-color"
elif delta.days <= 3:
return "due_soon", f"Due in {delta.days} days", "accent-color"
else:
return "upcoming", due_date.strftime("%b %d, %H:%M"), "neutral-color"
In the GTK user interface, these urgency levels translate into visual badge colors and priority sorting, ensuring that critical tasks always sit at the top of the feed.
2. Interactive Libadwaita Desktop Widget
The user interface is structured around a dual-pane layout:
- Left Pane (Monthly Calendar): Built with
Gtk.Calendar, rendering dots beneath days that have active assignments. Clicking any date filters the task list to that day. - Right Pane (Task Feed): Features filter tabs (
Upcoming,Today,This Week,All). Each item is rendered as anAdw.ActionRowcontaining the course title, assignment description, urgency badge, and a direct button:
# widget.py snippet: One-click submission navigation
class AssignmentRow(Adw.ActionRow):
def __init__(self, task):
super().__init__(title=task.name, subtitle=task.course_name)
open_btn = Gtk.Button(label="Open in Moodle")
open_btn.connect("clicked", lambda _: Gio.AppInfo.launch_default_for_uri(task.url, None))
self.add_suffix(open_btn)
Clicking "Open in Moodle" bypasses the home dashboard and opens the default browser directly to the file submission form.
3. Background Notification Daemon
Missing an assignment often happens when a student is engrossed in code or research and forgets to check the widget.
everything-in-one-place runs a lightweight background daemon that monitors upcoming deadlines and dispatches system notifications at configured intervals (e.g., 24 hours prior, 3 hours prior, and 30 minutes prior):
# daemon.py snippet: Dispatching desktop alerts
import subprocess
def notify_user(task):
subprocess.run([
"notify-send",
"-u", "critical",
"-a", "Moodle Reminders",
f"Upcoming Deadline: {task.name}",
f"{task.course_name} is due in 2 hours! Click to submit."
])
Conclusion
Personal utility software doesn't need to be complex to have an outsized impact on productivity. By pairing native Linux UI frameworks with automated scraping and scheduled alerts, everything-in-one-place transforms an opaque university portal into an actionable, ambient desktop companion.