DataTalksClub / DataTalksClub/website
Sub-modules phase C: module page and cohort-flow rendering
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 0
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
Part of the shared-curriculum sub-modules umbrella (#396), phase C of 4. Depends on #398 (phase B importer). Full design: _docs/planning/shared-curriculum-submodules-design.md, "Constraints and what the renderers must know" section.
Goal
Module pages, the cohort curriculum flow, the homework breadcrumb, and the shared-curriculum inventory correctly render/report sub-module structure and per-anchor homework placement, when present. Flat modules (the common case, zero sub-modules) must render byte-identical to today.
Scope
courses/views/shared_course.py(module page view) andcourses/templates/courses/shared_module.html/_shared_module_rail.html: when a module has sub-modules, group its lesson list by sub-module in order (each group gets a heading with a fragment anchor, not its own route/URL — confirmed in the design doc as sufficient for now); after each sub-module's lesson group, render that sub-module's anchored homework link if one exists; after the last group (or immediately, for a flat module), render the module-anchored homework link if one exists. A flat module (no sub-modules) renders exactly as today — verify with a snapshot/diff test.courses/services/curriculum_flow.py_shared_flow: unchanged loop shape (oneModuleFlowItemper placement, ordered by placement position).ModuleFlowItemgains an optionalsub_module, so the cohort page can title an entry "Module 1 · Part 2: Agents" when anchored to a part. A module with two anchored homeworks (a module-level and a part-level, if that ever occurs) correctly yields two flow entries.courses/views/homework_context.py: the shared-curriculum breadcrumb resolveshomework.shared_module_placementsto its anchor and links the module page, including the sub-module's fragment anchor when the homework is anchored to a part.courses/services/shared_curriculum_inventory.py: addsub_module_slugto each placement row in the reconciliation report.- Confirm (per the design doc's explicit check) that
courses/views/course_page_context.py:349(family syllabus module count) andcontent/public_views.py:1296(sitemap) need NO changes — both are root-SharedModule-only by construction and must stay that way (add a regression test asserting a split module still counts as one module in the family syllabus count and produces one sitemap entry, not one per sub-module).
Non-goals
- No
zoomcamp-ops/course-repository changes (phase D). - No sub-module standalone pages/routes (explicitly deferred per the design doc's open question 3 — fragment anchors on the existing module page only).
- No change to
courses/views/dashboard_homeworks.py(confirmed in the design doc: it's keyed purely onHomeworkrows and never reads placements, so it needs no change — verify this holds, don't change it speculatively).
Dependencies
- Depends on: #398.
- Blocks: #399 (phase D) only in the sense that phase D's rollout order requires B+C deployed before the checker pin updates; phase D's own repository-side work can be scoped/started independently.
Acceptance criteria
Django and integration
-
make django-checkpasses;make testpasses. - New rendering tests using the phase B fixture: a split module's page groups lessons correctly, shows the right homework link after each anchor, fragment anchors resolve; a flat module's page is byte-identical to its pre-phase-C rendering (regression guard).
-
ModuleFlowItem.sub_modulerenders correctly in the cohort page's flow list for both anchor types. - Family syllabus module count and sitemap entry count are unaffected by a split module (both stay root-only).
- Inventory report includes
sub_module_slugfor anchored placements and isnull/absent for module-level placements.
Browser
-
make test-playwright-corepasses. - Screenshot verification: a split-module page (using the phase B fixture data seeded into a local dev DB) renders sensibly at desktop and mobile, light and dark, with clear visual grouping between parts.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Read _docs/planning/shared-curriculum-submodules-design.md, then inspect the phase B fixture and the listed views, templates, services, and flow entry points. Run the targeted Django tests before adding coverage for grouped module rendering, anchored homework, flow items, breadcrumbs, inventory, syllabus counts, and sitemap output. Done means flat modules remain byte-identical, split modules render and report anchors correctly, and the Django, full, and Playwright checks pass.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- django, playwright, python
- Domain
- backend, frontend, testing-qa
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100