v2 Gap Analysis — Content
Content — V2 Review Gap Analysis
Source: BACKEND-RAMBLINGS.md lines 166-186
Spec: docs/admin-spec/05-content.md
Implementation: src/pages/content/
Screens covered
- Video Lessons
- Assignments (mentioned by stakeholder; NOT implemented)
- Resources
- Recordings
Stakeholder does not mention Tutorials, MCQ Questions, Quizzes — these remain per spec and are not analyzed here.
Cross-cutting: Master list + semester copy pattern
Stakeholder's intent (lines 166, 170, 176)
Stakeholder repeatedly asks for:
- Master/global list: "I need a master list that I can just upload once and then have that be our source"
- Semester-specific copy: "a separate semester copy that can be tweaked for that semester only"
- Applied to: Video Lessons, Assignments, Resources
Spec support
NOT mentioned or defined. Spec (05-content.md) describes 6 existing screens relocated from Program with Setup Checklist integration. No mention of:
- A distinct "master" vs "semester copy" data model
- Ability to create content once globally and fork per semester
- Version inheritance or copy-on-tweak pattern
Spec only says: "All 6 screens already exist and their core CRUD behavior is unchanged" (line 27). Semester pre-filtering on content screens exists, but no master/copy architecture.
Implementation support
ZERO implementation. Current architecture:
- Video lessons, resources, recordings store flat lists with
semesterId(one record per semester) - No master record with semester-scoped overrides
- No "clone semester content" or "fork from master" workflow
- Data types (
VideoLesson,Resource,Recording) have no master/copy fields
This is a major architectural gap. The stakeholder's most-repeated pattern has no spec or implementation foundation.
Video Lessons
Matches
- Add manually (dialog form exists)
- Specify week number (input field in dialog)
- Add multiple videos per lesson (dialog mentions video count, but no UI for individual video inputs)
- Add descriptions and titles (title field in dialog; description NOT in dialog)
- Filter by semester and level (filter bar + FilterConfig with semester/level dropdowns)
- Delete button (data table structure supports row actions, but delete action not visible in code)
- "Created date" column shown
Expands
- None significant.
Deviates
- No multi-video input UI: Stakeholder says "add several videos per lesson" + "add video links." Dialog only has
videoCountfield. No way to input individual video URLs/titles/metadata. This is a placeholder, not a working multi-video form. - No description field: Dialog has title + week + video count + duration, but no description. Stakeholder says "add descriptions."
- No duration calculation: Dialog shows duration as a free text input, not auto-calculated from videos.
Adds
- Pre-filter from Setup Checklist (not mentioned by stakeholder, but per spec)
- "Return to Checklist" banner (per spec)
Ambiguous
- Master + semester copy: Does the admin upload once to a "master" Video Lessons list, then fork per semester? Current spec/impl treats each semester's content as independent. If stakeholder wants to add Week 3 Lesson once and reuse across 5 semesters with tweaks, the current model doesn't support it.
Assignments
Status: NOT IMPLEMENTED
Stakeholder describes (lines 170-173) detailed requirements:
- Upload submission assignments with title + description
- Add two content types per assignment: instruction text AND Arabic reading assignment text
- Multi-screen breakdown: specify which instruction/text appears on which screen
- Show: week, level, created date
- Delete option
- Filter by semester and level
- Master + semester copy pattern
Spec mentions: Zero. Assignments are not in the Content domain (05-content.md). They moved to Student Management (per 01-global-patterns.md context in the spec).
Implementation: No assignments.tsx page exists in /src/pages/content/. Submissions are under Student Management (submissions.tsx). No assignment authoring UI.
Gap: This is a major missing feature from stakeholder's Content narrative. Either:
- Assignments stay in Student Management (spec decision), or
- They should be added to Content domain (stakeholder expectation mismatch)
Resources
Matches
- Add resources with title (dialog form exists)
- Show file type (column in table: fileType badge)
- Show level (column in table)
- Show size (column in table)
- Show created date (column in table)
- Delete button (data table supports row actions; delete not explicitly coded)
- Filter by semester and level (FilterConfig includes both)
- Search by title (search input + title matching in filteredData logic)
Expands
- None significant.
Deviates
- No multi-level/multi-course tagging: Stakeholder says "add multiple levels and courses to one resource that then becomes available to the entire, for everybody who is selected." Current model: Resource has single
levelfield (not an array). To support "one resource visible to multiple levels," data model must change fromlevel: Leveltolevels: Level[]and filter logic adjusted. UI would need multi-select in add dialog. - Limited file type support: Dialog only supports file upload (
<Input type="file" />). Stakeholder wants PDFs, links, and videos. No distinct handling for "links" or video embeds — just generic file upload. - No URL/video link input: Stakeholder mentions "links and video links" as resource types. Dialog only shows file upload. No separate input for "enter a video URL" or "enter a link."
Adds
- Semester + Level dropdowns in add dialog (not mentioned but reasonable)
- Pre-filter from Setup Checklist
- "Return to Checklist" banner
Ambiguous
- Master + semester copy: Same as Video Lessons. Current impl treats each semester's resources as independent. No fork/inheritance pattern.
- File type diversity: Stakeholder says resources can be "PDFs, helpful videos, or websites." UI supports file upload (PDFs/docs likely), but unclear how "helpful videos" and "websites" are added. Are they links? Embedded videos? Not specified in add dialog.
Recordings
Matches
- List all recordings with name/details (table structure present)
- Show week number (title embeds week info; not a separate column)
- Show class name (title column)
- Show lesson class vs QRC distinction (NOT in current table)
- Show date of live class (sessionDate column)
- Show host/TA (taName column)
- Show time of class (NOT in current table)
- Delete option (data table supports row actions; delete not explicitly coded)
- Filter by semester and level (FilterConfig present)
- Search (search input for title + taName)
Expands
- None.
Deviates
- Auto-upload from Zoom + auto-tag missing: Stakeholder says "automatically upload all of those recordings to the backend and make them available or tag them to the appropriate levels and genders. Where classes are gender-specific, we would want to automate this process."
- Current state: Add Recording dialog shows manual entry fields (title, session date, video URL). No Zoom integration, no auto-upload, no auto-tagging.
- This is a backend integration concern, but it affects the UI: Should there be a "sync from Zoom" button? A review queue for auto-tagged recordings? Manual override controls? None of these are in the current UI.
- Missing metadata: Stakeholder format includes:
- week number (✓ implicit in title)
- class name (✓ title)
- lesson class vs QRC (✗ missing)
- date (✓ sessionDate)
- host (✓ taName)
- time of class (✗ missing — only sessionDate, no time column)
- Gender-specific tagging: Stakeholder mentions "where classes are gender-specific, we would want to automate this process." No gender field in Recording type or table. Auto-tagging logic does not exist.
Adds
- Pre-filter from Setup Checklist (level filter omitted, per spec Section 4.2)
- "Return to Checklist" banner
- TA direct sidebar access (per spec, not in Content section but affects visibility)
Ambiguous
- Zoom integration scope: Is this backend-only, or does the admin UI need a "Sync from Zoom" or "Pending Review" queue? Stakeholder mentions "a person who was doing the uploading" — suggesting current manual workflow. What's the new workflow?
- Gender auto-tagging: How does the system know which recordings are gender-specific? From Zoom metadata? From a manual tag? The spec doesn't clarify.
Summary
Net-new screens/sections
- Assignments — Stakeholder describes detailed authoring (instruction + Arabic text, multi-screen layout, master + copy). Not in spec. Not implemented. This is either a spec miss or a stakeholder misunderstanding about where assignments live.
Biggest deviations
- Master + semester copy pattern absent: Stakeholder's most-repeated architectural request (Video Lessons, Assignments, Resources all need "master + copy") has zero spec/implementation support. This is a fundamental design mismatch.
- Video Lessons multi-video input: Dialog shows
videoCountbut no UI for individual video URLs/titles/ordering. - Resources multi-level support: Current model assigns one resource to one level. Stakeholder wants one resource visible to multiple levels/courses.
- Resources file type diversity: Stakeholder wants PDFs, links, videos. Dialog only supports generic file upload.
- Recordings Zoom integration + auto-tag: Stakeholder wants auto-upload from Zoom + auto-tag by level/gender. Current UI is manual entry only.
- Recordings missing metadata: "Lesson class vs QRC" type and time-of-day not captured.
Architectural change (master+copy pattern)
Critical blocker if stakeholder's intent is to reduce duplication. If a Video Lesson is created once globally and then customized per semester, the current flat model (lessonsnew with semesterId + level_tag_id per spec) requires:
- New "master record" concept (or "global" flag, or separate table)
- Copy/fork workflow (UI button, backend logic)
- Linked edit (edit master → cascade? or independent semester copies?)
- This affects Video Lessons, Assignments, and Resources per stakeholder's repeated mention.
Top ambiguities
- Assignments location: Spec moved them to Student Management. Stakeholder described them under Content. Which is correct?
- Zoom auto-upload scope: Is this a backend service integration, or does the admin UI need a sync button?
- Resource link/video handling: How are "helpful videos" and "websites" added as resources — as file uploads, as URL inputs, as embedded players?
- Multi-level resource visibility: Is the filter UI sufficient (show/hide per level), or does content need to be explicitly tagged with multiple levels at creation?
- Master list ownership/scope: Is the master list organization-wide, or per semester-type? Can it span multiple semesters, or only one?