DataTalksClub / DataTalksClub/website

Share current Zoomcamp curriculum across live and self-paced cohorts with GitHub archives

Open
#320 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

accessibility auth content courses data-migration enhancement epic frontend integration P1 security seo testing
Dominant language
Python
Stars
0
Forks
0
PR merge metrics
No merged PRs in 30d

Description

Objective

Make the current LLM Zoomcamp curriculum one database-owned shared graph that live and self-paced cohorts can read at the same canonical URLs, while keeping homework, enrollment, submissions, projects, leaderboard, calendar and other operational state cohort-specific. Keep materially different historical curricula (including 2025) as complete GitHub archives with an on-site notice/link only.

Normative contract

  • Shared public pages use /courses/llm-zoomcamp, /courses/llm-zoomcamp/<NN-module>, and /courses/llm-zoomcamp/<NN-module>/<NN-lesson>; the requested 01-lesson shape is covered by route tests. Operations use /courses/llm-zoomcamp/cohorts/<identifier>/..., including /homework/<slug>, /leaderboard, /dashboard, /projects, and calendar.ics.
  • v2 source manifests dispatch explicitly from course.yaml:schema_version. Root numbered modules/lessons are imported once. A cohort declares delivery: live|self_paced, curriculum: current|github_archive, and explicit homework mappings {module, source}. homework: [] is valid.
  • Archive cohorts require only archive.notice_path in source. The importer derives the exact GitHub tree URL from the validated repository and incoming full commit SHA; archive module/unit descendants are opaque and never become on-site lessons. Explicit archive homework may bind with module: null for operational compatibility.
  • Self-paced phase one is reading, shared progress and clearly ungraded practice: no fabricated deadlines, leaderboard, peer review, certificate, or Homework.due_date change.
  • Explicit cohort context wins over remembered preference/enrollment; multiple enrollments show a chooser; anonymous reads never create enrollment; copied context URLs do not grant authorization. Public content and assets remain database-owned with no request-time GitHub/filesystem fallback.

Staged implementation boundaries

  1. W0 contract/route manifest: amend _docs/specs/, database-only-content guidance and route compatibility manifest; classify every canonical/redirect/private path. No source move.
  2. W1 consumer/checker contract: add v1/v2 parser dispatch, bounded no-network layout checker, archive suppression and one normalized known-output fixture consumed by checker/bootstrap/website tests. Existing v1 fixtures stay green.
  3. W2 additive schema/backfill: add shared curriculum/module/lesson/read-state/placement/flow/asset/alias models and Cohort delivery/source/archive fields; preserve all old IDs and assessment rows; provide repeatable dry-run/apply conflict-safe backfill.
  4. W3 importer/assets: import root shared rows once, bind cohort homework by explicit stable mappings, derive archive URL, store current assets, atomically retire/update with import-run provenance.
  5. W4 routes/context/permissions: add shared paths and namespaced operations; retain reviewed aliases; enforce context precedence, exact cohort authorization, login return, and non-creating reads.
  6. W5 templates/SEO/cache: use the existing content shell; render one shared graph, chooser/context panels, self-paced copy and archive notice/link (never historical lesson bodies); add canonical/sitemap/robots/cache isolation and responsive evidence.
  7. W6 compatibility audit: inventory reverse calls/templates/API serializers and preserve legacy IDs, API parity, calendar UIDs, query strings and one-hop redirects.
  8. W7 production-like dry run: inventory every current-linked live/self-paced cohort and record an operator-reviewed keep-current vs archive decision; verify checksums, IDs, mappings, history preservation, rollback and bounds.
  9. W8 source commit: move current material to root numbered folders once, add current/self-paced manifests without copies, preserve 2025 archive tree and notice, then checker-gate the exact commit.
  10. W9 operations integration: bootstrap/skill consumes the same normalized fixture/contract; idempotent live, self-paced and archive operations; no identity inference or history overwrite.
  11. W10 independent gates: engineer evidence, independent Django/browser checks and PM acceptance before merge/deploy.

Dependencies and acceptance

W0 → W1; W1 + W2 → W3 → W4 → W5/W6 → W7 → W8; W2 + W4 + W7 → W9; W8 + W9 → W10. No source-repository move is allowed before the checker and dry-run gates. Acceptance requires shared primary-key reuse across live/self-paced cohorts, zero archive module/unit projection, explicit homework/cohort isolation, preserved old operational IDs and routes, anonymous/multi-enrollment/login-return coverage, no-store context/private responses, DB-only runtime reads, bounded archive admission, desktop/mobile screenshots, and idempotent/atomic rollback evidence.

Detailed implementation artifact: .tmp/course-content-website-plan.md (local planning workspace). Related authority: _docs/PROCESS.md, _docs/specs/02-url-link-seo-compatibility.md, _docs/specs/04-courses-and-cohorts.md, and _docs/architecture/database-only-content.md.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with .tmp/course-content-website-plan.md and the cited _docs/PROCESS.md, _docs/specs/02-url-link-seo-compatibility.md, _docs/specs/04-courses-and-cohorts.md, and _docs/architecture/database-only-content.md. Begin at W0/W1 and run the route tests and v1 fixtures/checker described in the issue before examining later work. Done means the staged gates and acceptance checks are independently evidenced without moving source before checker and dry-run approval.

Written by the indexing model from the issue text.

Assessment

Tech stack
django, github, python
Domain
backend, database, documentation, web-dev
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.