Skip to content
Selected work

ORESS

Smart schedule planner & AI academic assistant

Registration at NDU meant hand-building the same timetable spreadsheet every semester just to compare options.

Context
Web App
Stack
Django · DRF · PostgreSQL · Redis · Docker · Coolify · Playwright
The ORESS landing page: "Plan your NDU schedule in minutes" beside a sample weekly timetable of colour-coded courses. (opens in a new tab)The ORESS landing page: "Plan your NDU schedule in minutes" beside a sample weekly timetable of colour-coded courses. (opens in a new tab)
oress.app, live: the planner's front door, with a sample week laid out.

The problem

Registration at NDU means reconciling a course catalogue, your own constraints and everyone else's advice by hand, every semester. Students were rebuilding the same timetable spreadsheet each term and trading screenshots to compare options.

What I built

A scraper keeps the course catalog up to date, and instead of checking one schedule at a time, the planner builds and compares full timetables automatically, all running on a self-hosted setup that survived a near-total data loss and came back stronger after a security cleanup.

The ORESS course catalogue: NDU course offerings with search and filters for term, campus, subject, level, credits and time of day. (opens in a new tab)The ORESS course catalogue: NDU course offerings with search and filters for term, campus, subject, level, credits and time of day. (opens in a new tab)
The catalogue the scraper keeps current: every NDU subject and term, searchable and filterable.

How it fits together

  1. Self-hosted · Docker + Coolify
    1. Catalogue scraperkeeps NDU's course data current
    2. PostgreSQLcourses, sections, your constraints
    3. Timetable enginebuilds every valid combination, not one at a time
  2. Ranked schedulescompared side by side
Pipeline: a scraper keeps NDU's course catalogue current in PostgreSQL, a timetable engine builds every valid combination out of it, and the planner returns ranked schedules to compare side by side. Scraper, database and engine all run on self-hosted infrastructure.