DataTalksClub / DataTalksClub/website

Make /tour explain the community through sourced member stories

Open
#418 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

accessibility content enhancement frontend P1
Dominant language
Python
Stars
0
Forks
0
PR merge metrics
No merged PRs in 30d

Description

Problem

/tour currently explains participation through rules and disconnected claims instead of showing what the community feels like and why it is useful. The supplied screenshots expose four related problems:

  • the Slack chapter is a numbered etiquette list, but a newcomer needs a truthful overview of how people participate;
  • the cohort-week strip makes fixed duration, workload, project and certificate claims as though every zoomcamp has the same contract, then follows them with two dense paragraphs;
  • one long learner quote sits alone even though the community already has multiple attributable first-person accounts;
  • the founder origin excerpts omit the causal setup (“by accident … by September”), so the story is difficult to understand, and its caption unnecessarily says “his”.

The tour should use concise, source-grounded community facets and about three independently attributable learner voices. It must not turn the page into a broader redesign or move editorial content into template constants.

Normative references and sources

Scope

Learner voices
  • Replace the single oversized Dashel card with an approximately three-card learner-voice row containing:
    1. Dashel Ruiz Perez;
    2. Irem Ertürk;
    3. Work-In-Progress Data Engineer (retain the source’s chosen public byline; do not manufacture a legal name).
  • Use short, contiguous excerpts that preserve each author’s meaning. Do not stitch distant sentences together or use ellipses to create a claim the source did not make.
  • Show the public attribution/context and a working source link on every card. Missing portraits use the established decorative-avatar fallback; no image, role, country, outcome or metric may be invented.
  • Read the row from published database Testimonial records through a narrow tour query/service. If a dedicated tour placement is needed, add it to the existing model/constraint with a schema-only migration and extend the reviewed external staging/import path. Do not add the real quotes through a data migration, checked-in fixture, JSON fallback, Python constant or template literal.
Community overview
  • Replace the numbered Slack rules list with three non-sequential community-overview facets and retitle the chapter to What the community is like (or an equivalently direct, non-rules heading):
    1. Learn together — course channels let learners ask questions and help one another;
    2. Meet practitioners — live events and course office hours create direct conversation with working practitioners;
    3. Share what you build — projects and public work create feedback and peer-review opportunities.
  • Keep each facet concise and grounded in existing repository/source authority. Do not add audience size, response-time, job-outcome or other unsupported metrics.
  • Preserve the existing Join the Slack destination as the chapter’s action. The facets are an unordered set, not steps or rules; remove numbering and the external “Don’t ask to ask” rules link from this tour chapter.
Cohort explanation and truthfulness
  • Recompose the What a cohort week looks like content into plain-language, scannable copy that explains the typical flow: learn from recorded material, optionally join live office hours/workshops when offered, practice through homework, and build/review a project where that course requires it.
  • Remove or explicitly qualify universal claims that are not true for every course/cohort, including one fixed 7–10 weeks, 10–15 hours, 2–3 weeks, same shape for every zoomcamp, and Free, incl. certificate contract. Do not imply that self-paced or every live course offers the same certificate path.
  • State the relationship clearly without a compound paragraph: homework may support practice/leaderboards; a certificate, when offered, follows that course’s published project/review requirements. Live streams use the published YouTube destination and recordings, without implying a separate Zoom link or required live attendance.
Founder story and small copy repairs
  • Replace the confusing stitched origin excerpt with a source-grounded, self-contained explanation of the causal sequence: the pandemic interrupted planned in-person activity, renewed restrictions created the opening for an online community, and the founder acted on it. Use concise narrative setup plus contiguous quote(s), not distant fragments joined by ellipses.
  • Preserve a separate, source-grounded explanation of why the community/courses are free; do not collapse origin and motivation into an ambiguous quotation.
  • Change In his own words… to the user-requested neutral In their own words….
  • Preserve the founder attribution, source link and real portrait when available; retain the safe avatar fallback when it is not.
Existing contextual defects in the touched page
  • Make the hero lede grammatical for every database combination, including zero courses and absent podcast/wiki/event counts; no dangling comma, empty clause or It comes down to , and… construction.
  • Keep the survey figures and source link, but identify percentages as shares of survey respondents rather than claims about the entire community.
  • Preserve every unaffected tour chapter, route and current data gate.

Non-goals

  • No redesign of the hero, course cards, events, More than courses and events, closing CTA, global shell, homepage, course pages, Slack page or media-kit/source pages.
  • No new community metrics, promises, learner outcomes, course requirements, external destinations or portrait assets.
  • No change to course/cohort lifecycle, curriculum, certificate logic or registration behavior.
  • No reuse of sponsor testimonials as learner stories.
  • No request-time fetch from the media kit, Medium, YouTube or another external source.
  • No checked-in production-content fixture or fallback; synthetic fixtures remain test-only.

Dependencies and operations

  • Code implementation is not blocked by another GitHub issue.
  • Visibility of Irem and Work-In-Progress Data Engineer in a deployed environment depends on reviewed tour testimonial rows being added to ~/prod/dtc-data/content-staging/ (or entered through Studio) and imported into that environment. The importer must remain validation-first and replay-safe.
  • If the testimonial placement/constraint changes, add a schema-only migration and run the migration-drift check. Real content must not be written by that migration.
  • Source attribution is immutable evidence for this task: edits may shorten a contiguous excerpt but must be rechecked against its linked public post.

Acceptance criteria

  • /tour renders about three published learner testimonials in reviewed order: Dashel Ruiz Perez, Irem Ertürk and Work-In-Progress Data Engineer. Each quote is a faithful contiguous excerpt from its linked source and each card exposes attribution/context plus a working source destination.
  • Tour testimonials are read from database rows through the existing testimonial domain (with a dedicated tour placement/query if required). The public request path performs no source-page fetch and reads no checked-in or external file; an empty database renders no invented testimonial row.
  • Unpublished, homepage-only and course-family-only testimonials never leak into the tour row. A tour row with no resolvable portrait renders the established avatar fallback without breaking the other cards or page.
  • The three learner cards form a balanced row at wide widths and a deliberate readable stack/grid at narrow widths. Long bylines and quote-length variation do not cause overlap, clipping or unusable source links.
  • The former Slack-rules grid is replaced by three unnumbered facets covering learning together, meeting practitioners, and sharing work/receiving feedback. The section reads as a community overview, contains no etiquette framing or unsupported metric, and retains the existing /slack CTA.
  • The cohort explanation is understandable without prior zoomcamp knowledge, distinguishes typical activity from course-specific requirements, and makes no universal duration, workload, final-project-length or certificate promise unsupported by every rendered course mode.
  • Homework, live participation, project/review and certificate wording is faithful to the course/cohort specification; it does not imply that optional live attendance is required or that every self-paced/live course awards a certificate.
  • The founder-origin block provides enough causal context to understand why the online community started, uses only self-contained/contiguous sourced quotation, and keeps the why-free rationale distinct.
  • The caption says In their own words…; founder name, public source link and portrait render when available, with the established avatar fallback otherwise.
  • The hero sentence remains grammatical with all combinations of zero/nonzero courses, events, podcasts and wiki counts. No count or content is invented to repair an empty state.
  • Survey percentage labels or nearby copy explicitly say they describe survey respondents and retain the full-survey destination.
  • Existing signup, Slack, course, event, channel, founder-source and closing-CTA destinations remain unchanged outside the explicitly removed rules link.
  • Cards/links use semantic figure/article/blockquote/citation structures as appropriate; external links announce new-tab behavior if they open one; keyboard focus is visibly at least the shared 3px treatment and actionable targets meet the 44×44 CSS-pixel floor.
  • At 1440px, 768px, 390px and 320px in light mode, and representative 1440px/390px dark mode, the changed chapters have no text collision, card overflow, clipped avatar/attribution, or document-level horizontal overflow. Body/muted text meets 4.5:1 contrast on its actual ground.
  • Focused tests cover query scoping/order, empty/unpublished/missing-portrait behavior, exact source destinations, removal of the rules semantics, truthful cohort copy, hero count combinations, respondent context, neutral caption and founder-story/source rendering.
  • The applicable repository-selected Django and Playwright checks pass, and screenshots are captured and inspected below .tmp/screenshots/issue-418/ at desktop and mobile widths.

Browser scenarios

Content-rich desktop
  1. Seed synthetic database records shaped like the three reviewed tour testimonials, including one without a portrait.
  2. Open /tour at 1440px in light and dark modes.
  3. Verify three balanced learner cards, faithful attribution/source actions, the unnumbered community facets, clear cohort explanation, survey context and comprehensible founder story.
  4. Follow each testimonial source, the Slack action and founder source; verify the intended destinations and accessible new-tab labeling.
Narrow reflow and keyboard
  1. Open the same state at 768px, 390px and 320px.
  2. Verify testimonial/community cards reflow in DOM order, bylines and quotes remain readable, targets do not overlap, and scrollWidth <= clientWidth.
  3. Tab through every changed action and verify visible focus, logical order and 44px targets.
Empty and selective publication
  1. Render with no tour testimonials; verify no fabricated quote or broken empty card appears and the surrounding chapters close their spacing cleanly.
  2. Render with one published tour testimonial plus unpublished, homepage and course-family rows; verify only the published tour row appears.
  3. Render the hero across zero/nonzero combinations of course, event, podcast and wiki data; verify every resulting sentence is grammatical.
Source fidelity
  1. Compare each selected learner excerpt and founder quote against its linked source.
  2. Verify every excerpt is contiguous, attribution is accurate, and no ellipsis changes meaning or joins distant claims.
  3. Verify reviewed ingest replay makes no duplicate and public rendering continues to use the database after the staging source is unavailable.

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 templates/core/tour.html, core/views.py, core/tests/test_tour.py, and the Testimonial service and import paths named in the issue; read the database-only content and course/cohort specifications first. Verify scoped testimonial ordering and empty states, truthful copy, unchanged destinations, responsive/accessibility behavior, and the selected Django and Playwright checks with screenshots under .tmp/screenshots/issue-418/.

Written by the indexing model from the issue text.

Assessment

Tech stack
django, playwright, python
Domain
accessibility, content, database, design, full-stack, testing
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.