Loading...
Loading...

An unofficial course planning tool for civil engineering master's students at LiU. Course info for terms 7-9 is normally scattered across multiple university portals — LiTHePlan pulls 339 courses into one place with filtering, scheduling conflict detection, and degree requirement validation. Users can build study plans as guests (localStorage) or sign in for cloud sync and shareable profile URLs.
Built with Next.js 16 and React 19 on Supabase (Postgres + Auth + Realtime). The API layer uses Zod v4 for strict input validation and Upstash Redis for per-IP rate limiting. Conflict detection runs two separate systems: one checks block-level scheduling overlaps with special 50%-pace logic, another parses the notes field with regex for mutual-exclusion phrases in Swedish and English. Profile state goes through a useReducer-based context that abstracts over localStorage and Supabase, so components never know where the data lives. Course recommendations use a PL/pgSQL function with weighted scoring (program overlap, subject area, level, campus) to avoid sorting in the application layer. RLS policies lock down personal data while still allowing shared profile viewing.
Live at litheplan.tech. Students can browse all 339 master's courses for civil engineering, build 90hp study plans with real-time conflict checking and requirement validation, and share their profiles with advisors via URL. The hybrid storage model means zero sign-up friction — guests get the full experience, and signing in just adds cloud persistence and sharing.



