Repository navigation
v0.12.0 - Baseline: Specs 1 to 8
Highlights
Baseline release: everything built through Phase 12 (Specs 1 to 8), as the product stands on 2026-10-07.
- A university in minutes.
unicourse-admin create-universitysets up a tenant with its own allowed email domains, timezone and first admin;unicourse-admin seed-demoloads the Northfield University demo (four departments, five courses, staff, rosters, grades, announcements and materials) for trying every role (Spec 1, Spec 7). - Sign in by magic link, Google or Microsoft, with per-university roles: admin, department admin, instructor, TA, student (Spec 1).
- Catalog and sections. Departments, terms, courses and sections with weekly meeting times and rooms; CSV imports for courses, sections and rosters; instructors and TAs assigned per section (Spec 1, Spec 2).
- My sections and schedule. Students and staff see their sections per term as cards or as a weekly timetable with a Today marker and clash detection (Spec 2).
- Grading. Weighted assessments, score entry and CSV import, running percent and letter, a per-university editable grade scale, finalisation with overrides and a reason, and GPA on My grades (Spec 4).
- Section content. Each section has a home page, announcements emailed to the roster, and weekly materials with file upload and safe download, for instructors and TAs alike (Spec 6).
- A professional light and dark UI, benchmarked screen by screen and improved across Phases 8 and 9, usable at phone width (Spec 3, Spec 5).
- For developers. A root README that goes from clone to a signed-in demo, an OpenAPI 3.1 contract checked in CI, a generated Postman collection with a local environment, and an admin CLI with migrations and file pruning (Spec 7, Spec 8).
Specs: docs/specs/. Plan and decisions: PLAN.md.
What's Changed
Changes
- P0-L1: API skeleton and httpx by @kapildev333 in #6
- P0-L3: web skeleton and API client by @kapildev333 in #7
- P0-L4: openapi.json contract, route registry and contract test by @kapildev333 in #9
- P0-L2: schema, RLS, pg, testdb, audit by @kapildev333 in #10
- P2-L1: csvimport engine by @kapildev333 in #13
- P1-L1a: auth primitives (sessions, magic links, mailer, limiter) by @kapildev333 in #14
- P1-L4: web sign-in and admin console by @kapildev333 in #16
- P1-L1b/c: sign-in, OIDC, auth handlers and wiring by @kapildev333 in #17
- P1-L2a/b: authz, tenant pipeline, departments and terms API by @kapildev333 in #18
- P2-L2a: courses and sections API by @kapildev333 in #19
- P2-L3: web courses, sections, staffing, roster import, my sections by @kapildev333 in #21
- P1-L2c: memberships, invitations and audit-log route by @kapildev333 in #22
- P1-L3: unicourse-admin CLI (migrate, create-university) by @kapildev333 in #23
- P2-L2b: section staff, enrollments and my-sections API by @kapildev333 in #27
- P1-L5: audit invitation acceptance at sign-in by @kapildev333 in #29
- P2-L2c: CSV imports for courses, sections and rosters by @kapildev333 in #30
- P3-L1: serve the web app from the API, end-to-end staffing flow, CI e2e job by @kapildev333 in #31
- P5-L1a: section meetings in the API, catalog filters by @kapildev333 in #38
- P5-L1b: catalog reads for members, pendingStaff masking, import meetings column by @kapildev333 in #39
- P5-L2: student schedule grid, catalog, meetings editor by @kapildev333 in #41
- P4-L1: mail outbox, sent after commit by an in-process sender by @kapildev333 in #43
- P5-L3: e2e for overlapping meetings, schedule clashes and catalog clash note by @kapildev333 in #44
- P4-L5a: cancel a pending staff assignment, exact-case JSON keys by @kapildev333 in #46
- P4-L3: trusted-proxy client address, OIDC start rate limit by @kapildev333 in #47
- P4-L5b: cancel a pending staff invitation from the staff editor, two catalog/dialog fixes by @kapildev333 in #48
- P4-L2: database role split - owner migrates, the API role cannot disable RLS by @kapildev333 in #50
- P6-L1: UI foundation - tokens for light and dark, DM Sans, Lucide, theme switch, Udemy top bar with search, shared components, literal-colour gate by @kapildev333 in #56
- P6-L2: entry pages on the Udemy foundation (sign-in, magic link sent, no access, root redirect) by @kapildev333 in #59
- P6-L3: My sections and Catalog as card grids, schedule on tokens by @kapildev333 in #60
- P6-L5: admin area on the Udemy foundation (tabs, tables, dialogs) by @kapildev333 in #62
- P7-L1a: grading schema, contract, grade scale, assessments, scores by @kapildev333 in #66
- P6-L4: courses area on the Udemy foundation (lists, section detail band, roster, dialogs, editors) by @kapildev333 in #63
- P7-L1b: gradebook, finalize with credits snapshot, GPA by @kapildev333 in #68
- P7-L1c: scores CSV import, gradebook CSV export by @kapildev333 in #70
- P7-L2: grading web - gradebook, My grades with GPA, grade scale editor by @kapildev333 in #71
- P7-L3: e2e for grading - assessments, scores, finalize, GPA by @kapildev333 in #72
- P8-L1: Playwright screen-capture project for the UI/UX benchmark by @kapildev333 in #75
- P8-L2: reference pack for the UI/UX benchmark (Dribbble shots described from images) by @kapildev333 in #76
- P8-L3: Spec 5 UI/UX benchmark and its Phase 9 plan by @kapildev333 in #78
- P9-L1a: shared components for Phase 9 (Table stack, Loading variants, Card footer, Dialog close, SegmentedControl, Disclosure, line-control) by @kapildev333 in #82
- P9-L1b: shell at phone width, current nav item, / shortcut, no-access page, capture width assertion by @kapildev333 in #85
- P9-L8: display names (invitation name, roster import fill, sign-in fill, PATCH /me) by @kapildev333 in #84
- P10-L1a: section content API foundation (migration, blob, description, announcements, mail, contract) by @kapildev333 in #87
- P9-L4: admin tables stack on phones, term status, audit labels and disclosure, titled banners by @kapildev333 in #89
- P9-L2: phone agenda, Today marker, merged meetings, Catalog filters and badges, My sections controls by @kapildev333 in #90
- P10-L1b: weeks, materials upload and download, blob cleanup after commit, prune-files by @kapildev333 in #91
- P9-L3: courses, sections and dialogs for phones; empty states; staff cells; Edit section by @kapildev333 in #93
- P9-L5: gradebook, finalize preview, assessment dialog, My grades and grade scale for phones and clarity by @kapildev333 in #94
- P10-L2: section tabs, Home description, Announcements and Materials pages by @kapildev333 in #97
- P10-L3: Spec 6 end-to-end criterion (content.spec.ts with generated fixtures) by @kapildev333 in #100
- P9-L1c: ButtonLink, ListCount, quiet row actions, Table clipping, sized inputs, gradebook Student column by @kapildev333 in #99
- P9-L6: one sign-in field, resend and last-used, one search, middle-dot separators, e2e selectors per §5.7 by @kapildev333 in #102
- P9-L9: Phase 9 closing audit (after scores, remaining findings, taste-skill pass) by @kapildev333 in #103
- P9-L10a: stacked phone rows, table style bugs, Admin heading, Audit log cards on phones, neutral Close and badges, copy by @kapildev333 in #107
- P9-L10b: schedule Today marker and time line, finalize preview and grade scale stacked on phones, My grades hint, capture seed names by @kapildev333 in #106
- P11-L1: unicourse-admin seed-demo, embedded demo fixture through the real handlers by @kapildev333 in #111
- P11-L2: root README, eight light and dark captures on the demo data, web README by @kapildev333 in #112
- P12-L1: Postman collection generated from the OpenAPI spec, local environment, CI drift check by @kapildev333 in #116
- P13-L1: releases process (release.yml exclusions, CLAUDE.md rule, docs/releases.md, README status) by @kapildev333 in #119
New Contributors
- @kapildev333 made their first contribution in #4
- @dependabot[bot] made their first contribution in #1
Full Changelog: https://github.com/kapildev333/unicourse/commits/v0.12.0