DataTalksClub / DataTalksClub/website
Share current Zoomcamp curriculum across live and self-paced cohorts with GitHub archives
Nobody has claimed this yet.
- 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 requested01-lessonshape is covered by route tests. Operations use/courses/llm-zoomcamp/cohorts/<identifier>/..., including/homework/<slug>,/leaderboard,/dashboard,/projects, andcalendar.ics. - v2 source manifests dispatch explicitly from
course.yaml:schema_version. Root numbered modules/lessons are imported once. A cohort declaresdelivery: live|self_paced,curriculum: current|github_archive, and explicit homework mappings{module, source}.homework: []is valid. - Archive cohorts require only
archive.notice_pathin 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 withmodule: nullfor operational compatibility. - Self-paced phase one is reading, shared progress and clearly ungraded practice: no fabricated deadlines, leaderboard, peer review, certificate, or
Homework.due_datechange. - 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
- W0 contract/route manifest: amend
_docs/specs/, database-only-content guidance and route compatibility manifest; classify every canonical/redirect/private path. No source move. - 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.
- W2 additive schema/backfill: add shared curriculum/module/lesson/read-state/placement/flow/asset/alias models and
Cohortdelivery/source/archive fields; preserve all old IDs and assessment rows; provide repeatable dry-run/apply conflict-safe backfill. - 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.
- 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.
- 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.
- W6 compatibility audit: inventory reverse calls/templates/API serializers and preserve legacy IDs, API parity, calendar UIDs, query strings and one-hop redirects.
- 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.
- 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.
- W9 operations integration: bootstrap/skill consumes the same normalized fixture/contract; idempotent live, self-paced and archive operations; no identity inference or history overwrite.
- 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
- 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
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