Student portal

Document: SDD-05
Status: Working draft
Date: 18 September 2026
Milestones: Auth/mobile on M2; learning/records/fees on M3; remainder on M5

1. Purpose

Give an enrolled student a single web surface for identity, academic life, fees, and support. The current v1 frontend is a demo: screens exist; they do not save to the CMS.

This portal is not done when the student UI looks finished. Each student CAP also needs a lecturer or staff path, or a verified old-CMS equivalent.

Agent / behaviour knowledge (canonical): docs/ai/frontend/student-portal/ in control-plane. Generate or refresh human docs from that tree using docs/ai/process/generate-documentation.md.

2. Actors

Student (authenticated). Upstream writers: Registry, Faculty/Lecturer, Bursary, support desks.

3. Information architecture

Area CAP IDs Milestone
Account, privacy, accessibility, mobile shell 01, 35, 36, 39 M2 Admissions launch
Profile and documents 08, 09 M3
Semester registration 10 M3
Results 13, 28 M3
Announcements and policies 16, 55 M3
Fees and bank-transfer proof 45, 46 M3
Timetable and attendance 11, 12 M3
Study plan and course information 14, 23 M3
Guides, notes, briefs 17, 18, 19 M3
Assignment submit 20 M3
Past papers / revision 21, 22 M3
Integrity guidance 29 M3
Orientation, helpdesk 32, 33 M3
Graduation / transcripts 15 M5
Online payment, scholarships 47, 48 M5
Quizzes/exams, live class, self-paced 24, 26, 27 M5
Communication 25 M5
Library, study centres 31, 34 M5
Resume/portfolio, visa, requests, housing, services 49–52, 54 M5
Course evaluation 30 M5

Campus-requested student features: timetable, announcements, study guides, notes, briefs, assignment submit, revision, past papers, policies.

4. Key flows

4.1 Registration and fees

sequenceDiagram
  actor S as Student
  participant P as Student portal
  participant API as Portal API
  participant CMS as Existing CMS
  actor B as Bursary

  S->>P: Select modules (CAP-10)
  P->>API: Validate rules atomically
  API->>CMS: Registration transaction
  CMS-->>P: Invoice / balance (CAP-45)
  S->>P: Submit bank-transfer proof (CAP-46)
  P->>API: Store file metadata plus bytes
  B->>CMS: Verify proof; allocate payment
  Note over P,CMS: Proof is never payment until Bursary allocates

4.2 Assignment handoff

sequenceDiagram
  actor L as Lecturer
  actor S as Student
  participant P as Portals
  participant CMS as CMS / file store

  L->>P: Publish brief with release rule (CAP-19)
  S->>P: Download authorised brief
  S->>P: Submit / replace / withdraw file (CAP-20)
  P->>CMS: Durable object plus receipt
  L->>P: Mark and publish feedback (CAP-28)
  S->>P: View published mark only

5. Design rules

  1. Edits vs approvals (CAP-08). Some profile fields save directly; others raise a staff task. The split is a Registry policy, not a UI guess.
  2. Documents (CAP-09). View/Download must deliver files. No-op buttons stay Placeholder.
  3. Registration (CAP-10) is semester registration against legacy rules, not admissions. Atomic save: clash, credit, prerequisite checks in one CMS transaction.
  4. Results (CAP-13, 28) show only published results. Marking is lecturer/staff.
  5. Announcements (CAP-16) need a real feed, audience, and open/detail action. Preview cards without an open action are Partial.
  6. Fees (CAP-45, 46). Ledger from CMS. Fictional banking details must not ship. Proof upload is metadata and bytes; staff verification is a separate state.
  7. Learning files (CAP-17–22) require lecturer publish + authorised student access. A generic Materials list of no-op rows is not delivery.
  8. Chat (CAP-25) is not Live while messages stay in one mock session.
  9. Immigration (CAP-50) is case management, not a blank page or a mock eligibility widget.

6. Current baseline (selected)

From BASE-01…BASE-55. Full list in SDD-09.

CAP What exists now
01 Shell and fixed mock student session; logout no-op
08 Contact edits in one mock session
09 File lists; View/Download no-op
10 Mock module selection and mock invoices
11 Read-only mock timetable
13 Sample GPA/results; no publication workflow
16 Dashboard preview cards; no detail, no publishing
20 Submit demo stores metadata only; bytes never uploaded
25 Chat in one mock session
36 Whole-portal mobile not accepted
45–46 Mock ledger; fictional bank details; proof metadata only
51–52 Requests and Accommodation blank
53 Contracts exist; no live CMS adapter

Simplified “Frontend ready” on these rows is Demo or Partial. Do not report them as complete in the working group.

7. Remaining frontend estimates (student only)

From the simplified sheet, not a commitment:

CAP Effort Status
CAP-01 1 day Placeholder
CAP-21, 22 3 days Not started
CAP-24 2 days Placeholder
CAP-26 3 days Not started
CAP-30 2 days Placeholder
CAP-52 3 days Placeholder

Wiring and CMS work is separate and larger.

8. Acceptance (M3 student slice)

For each in-scope CAP:

Lecturer pair: SDD-06. Staff pair: SDD-07. Catalogue: SDD-11.

Local admissions/profile increment — 5 October 2026

Applicant's existing draft/submission/messages flow now uses a validated session-only mock Portal API. Student schema v4 aligns Personal, Academic and Documents through an explicitly accepted, versioned handoff; submission alone never enrols a student. Shared UI remains 0.6.1. Lesotho is the acceptance-pilot priority; existing Malaysian sample rules are retained without asserting Lesotho policy. Details: Applicant mock API, accepted handoff and backend prerequisites. Automated local gates do not establish hosted HTTP, physical-device or CMS integration. No hosted reseed is authorized by this increment.

Local enrolment acceptance increment — 6 October 2026

Approved Applicant applications can explicitly accept their first-preference Design enrolment through the shared confirmation popup. Submission starts with no automatic reviewer messages. The next simulated development login transfers accepted serializable data into a new isolated first-semester Student mock account/enrolment and opens existing Module Registration. Both portals use the same captured intake reference and existing curriculum/rules. No offer screens, live authentication, CMS provisioning, durable evidence transfer or backend deployment is implemented. Production and HTTP sessions exclude the simulation. Shared UI stays 0.6.1; Student schema stays 4 and admissions handoff stays version 1. See accepted handoff.

Automatic post-acceptance logout — 6 October 2026

Successful enrolment acceptance automatically logs out Applicant development mock sessions to the existing Sign in screen. The applicant explicitly clicks Sign in to open the existing new Student tab at Module Registration. Failed acceptance stays in its popup; failed logout preserves accepted status with Retry Sign Out, without accepting again. Session/scenario guards prevent stale transitions. Records, files and drafts remain until refresh. Production and HTTP sessions exclude this simulation; shared 0.6.1, contracts and Student bootstrap remain unchanged.

Review and letter actions — 8 October 2026

Document verification releases Eligibility while overall enrolment remains orange and Under review. Four ordered checks show Bursary payment, Quality Assurance documents, applicant confirmation and Registry Offer release. Only final enrolment acceptance completes the summary. Equal-width letter actions include icons; Preview opens a separate browser PDF tab and Download retains the issued filename. The generated PDF retains its DEMO marking. No hosted workflow or schema changes are introduced.

Source forms and departmental workflows — 8 October 2026

The approved local specification is Student workflows: source-aligned Registry forms and versioned Student Feedback, Bursary then Faculty module-registration approval, automatic gated standard documents, native file viewers, Lesotho-only LSL/NMDS and Cyberjaya health declarations. Admissions snapshot v2 is retained while DEV browser transport v3 carries actual owned evidence. Hosted capabilities, official tariffs/templates and physical-device behavior remain separate Live inputs. Shared components remain 0.6.2.

Prepared original-document synchronization — 12 October 2026

Original uploads and applicant-specific Student continuation are prepared and verified locally behind Demo capabilities. No hosted migration or deployment was performed. Admissions v2, DEV transport v3, Student schema 4 and shared 0.6.2 remain. The Bursary shortcut stays On hold.

Contracts, evidence mapping and deployment prerequisites

Document order and expandable navigation labels — 6 October 2026

Profile Documents displays the existing Enrolment Confirmation sample as Offer Letter and places it first, followed by the existing alphabetical list. Stored classification, owners, IDs and filenames are retained, so the display alias does not supply new Immigration evidence. Expandable sidebar triggers compose the existing shared PortalNavItem white label treatment while retaining expansion and routing. Shared package remains 0.6.1.

Shared 0.6.2 and save before leaving — 6 October 2026

Released shared 0.6.2 adds an optional trailing Popup action. Applicant uses primary Save & Close after Keep Editing to save incomplete drafts before the originally blocked navigation; pending, failure/retry, duplicate and stale-session handling remain portal-owned. Student upgrades its pin with existing defaults intact. Graph schema 4, admissions handoff 1 and Demo/Live boundaries are unchanged.

Campus selection and two-stage enrolment — 7 October 2026

Local mock only: required campus and conditional Alumni student ID, optional English results, Bursary payment verification, QA Eligibility Letter release and applicant confirmation, then Registry Offer Letter release and final acceptance. Generated demo PDFs can be previewed/downloaded; only final acceptance signs out. The next explicit Sign in transfers an isolated accepted identity into Student Module Registration.

Handoff/envelope v2 carries campus and both confirmations/letters; v1 remains readable. Student Documents places Offer Letter first and Eligibility Letter second. Hosted HTTP authentication and supported methods remain unchanged; new hosted letter operations, real CMS provisioning and durable upload delivery require future service work. Shared package remains 0.6.2.