ADR 0025: Course-First Canva, Kanban, And Advisory Product Model
ADR 0025: Course-First Canva, Kanban, And Advisory Product Model
Status: accepted
Date: 2026-05-12
Context
The early UWScrape implementation proved the pipeline and runtime with small fixtures and a rich 4A demo scenario. That was useful, but the product goal has shifted from “inspect a demo credential” to “build a degree from courses.”
The user-facing app should have only two primary modes:
Canva;Kanban.
No additional top-level views should be introduced for course search, degree planning, source inspection, graph modes, or solver output. Those features should appear as overlays, widgets, command palettes, inspectors, and panels inside the two primary modes.
The central product philosophy is course-first:
- users search courses from the indexed course library;
- users place courses into terms;
- the Kanban board becomes the editable student state;
- the Canva shows the broader course universe and overlays the user’s selected courses;
- Advisory computes missing requirements and alternatives for selected desired courses or credentials.
Decision
UWScrape will use a course-first two-mode product model.
The frontend primary modes are:
Canva: a full-screen universal course graph surface.Kanban: a term-based course planning board.
The backend must provide the academic and graph data needed by both modes.
The system will add an Advisory concept. Advisory is not a third primary
mode. It is a floating widget and backend query surface that computes missing
requirements, satisfying options, bounded alternative pathways, and future
unlocks for selected course or credential targets.
The backend remains the academic authority.
The frontend may:
- search and display course library results;
- maintain local board draft state;
- request recompute;
- render universal graph slices;
- render Advisory overlays;
- highlight palette results based on backend Advisory signals.
The frontend must not:
- compute course unlock status;
- compute credential progress;
- invent missing requirements;
- infer alternatives from graph geometry;
- treat visual layout as academic truth.
Required Consequences
The implementation must add a healthy Faculty of Mathematics index path.
The implementation must add backend course and credential list/search APIs.
The implementation must add requirement relation graph artifacts.
The implementation must add universal Canva graph support.
The implementation must add Advisory request and response contracts.
The implementation must replace demo-only course targets in the product path with indexed course-library search.
The implementation must preserve:
- source references;
- unknowns;
- conflicts;
- release-gated indexes;
- conservative evaluator semantics.
Rejected Alternatives
Keep The Current Demo-First Course List
Rejected because a fixed list of demo courses cannot support course-first degree building or Faculty of Mathematics exploration.
Add A Third Dedicated Advisory View
Rejected because the user explicitly wants only two primary views. Advisory should be a widget and backend query layer inside Canva and Kanban.
Let The Frontend Infer Missing Courses From Graph Edges
Rejected because graph geometry and projections are not academic truth.
Claim Complete Faculty Coverage From A Reduced Subject List
Rejected because Waterloo’s Faculty of Mathematics course subjects include more than the current demo and any reduced profile must be labeled honestly.
Verification
The next implementation wave should add tests proving:
/api/v1/coursesand/api/v1/credentialsare backend-backed;- the Faculty of Mathematics profile records subject coverage;
- the universal graph is generated from indexed requirement relations;
- Advisory returns missing requirements and alternative option sets;
- Canva and Kanban consume Advisory output without computing academic truth.
Follow-Ups
- Add a reviewed Faculty of Mathematics fetch profile.
- Add subject coverage validation.
- Add relation graph extraction during index build.
- Add Advisory DTOs and service implementation.
- Add course command palette UI backed by course search.