No description
  • Python 84.7%
  • HTML 14.1%
  • Dockerfile 1.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Moritz Becker dcf8b66b84 Initial commit: TU Graz CS master's degree planner
Flask + SQLite single-page planner for the 2025/2026 Computer Science
master's curriculum: embedded course catalogue, major/minor track
selection, planned/current/completed workflow, ECTS progress tracking,
and semester statistics. Vanilla JS frontend, no build step.

Includes input-validation hardening for non-finite ECTS values,
non-integer grades, and strict boolean parsing of the passed flag.
2026-09-21 19:40:36 +02:00
docs Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
static Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
templates Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
.dockerignore Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
.gitignore Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
AGENTS.md Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
app.py Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
compose.yaml Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
curriculum.py Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
Curriculum_Master_Computer_Science_EN.pdf Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
database.py Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
Dockerfile Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
progress.py Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
README.md Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
requirements.txt Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
test_core.py Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
test_web.py Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00
web_app.py Initial commit: TU Graz CS master's degree planner 2026-09-21 19:40:36 +02:00

Master Plan

A browser-based degree planner for the TU Graz Master's Degree Programme Computer Science, Curriculum 2025 (version 2026).

Pick a fixed major and minor, assemble your courses from the embedded curriculum catalogue or add your own, and track ECTS progress, grades, and semester workload from one page.

Python Flask SQLite No build step

Screenshots

Degree progress Study statistics
Degree progress Study statistics

Planned lectures

Features

  • Fixed track selection — choose one of 11 majors and 14 minors on first run (they must differ).
  • Full catalogue — 280 courses from the 2025/2026 curriculum, searchable by name or module.
  • Custom courses — add anything not in the catalogue with its own title, type, and ECTS.
  • Planned → current → completed workflow — double-click a lecture to advance it; record grades and pass/fail on completion.
  • Requirement classification — each course counts toward major, minor, seminars & projects, interdisciplinary, free-choice, or thesis, and can be reassigned at any time.
  • Progress tracking — ECTS bars per requirement plus a checklist of still-missing compulsory major/minor courses.
  • Semester statistics — ECTS by semester, completed courses, weighted average, strongest semester, and grade distribution.

Tech stack

Layer Choice
Backend Flask 3.1
Database SQLite via the Python standard library (sqlite3)
Frontend Server-rendered Jinja shell + vanilla JavaScript (no bundler, no npm)
Server Gunicorn (Docker)
Container Docker / Docker Compose

Getting started

Prerequisites

  • Python 3.13+, or
  • Docker with the Compose plugin.

Run locally

Linux / macOS:

python -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
python app.py

Windows (PowerShell):

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe app.py

Open http://localhost:5000. Existing data in master_plan.db is retained between runs.

Run with Docker

docker compose up --build

Open http://localhost:5000. Compose bind-mounts the project directory at /data, so the container and local runs share the same master_plan.db; it is created on first start if it does not exist yet. The container runs as your host user (${UID:-1000}) so the bind mount stays writable — override UID/GID if your account differs.

Prefer a dedicated data directory over the repo file? Build the image and mount a host folder:

docker build -t master-plan .
mkdir -p data
docker run --rm --user "$(id -u):$(id -g)" -p 5000:5000 -v "${PWD}/data:/data" master-plan

Usage

  1. First run — choose your major and minor on the setup screen. Both are fixed for the plan.
  2. Add courses — click + Add course, search the catalogue (optionally filtered by module) and pick a result, or fill in a custom course. Set the semester (SS26–SS29), course type, ECTS, and what it counts toward.
  3. Work through your degree — double-click a planned lecture to move it into current, then double-click a current lecture to record its result.
  4. Track progress — the Progress tab shows ECTS earned vs. required per category and lists any compulsory major/minor courses you have not passed yet.
  5. Review your performance — the Statistics tab aggregates ECTS and grades by semester.

Configuration

Variable Default Description
DATABASE_PATH master_plan.db Path to the SQLite database file. Docker sets this to /data/master_plan.db.

Project structure

app.py          Dev-server launcher (also re-exports the app for tests)
web_app.py      Flask app factory, routes, and request validation
curriculum.py   Embedded course catalogue, majors/minors, and ECTS requirements
database.py     SQLite access layer; creates the schema on first connect
progress.py     Pure functions for progress and statistics calculations
templates/      Jinja templates (setup + dashboard shell)
static/         app.js and styles.css — vanilla, no build step
test_core.py    Unit tests for the database and calculations
test_web.py     HTTP/API tests via the Flask test client

Testing

The test suite uses the standard-library unittest runner (no pytest needed):

python -m unittest -v

Run a single test:

python -m unittest test_core.CoreTests.test_tracks_must_differ

Notes

  • Single-user, no authentication. Master Plan is designed to run locally or on a trusted network; it does not implement logins or access control.
  • Changing the schema does not migrate an existing database. Delete master_plan.db to start fresh with a new schema.