DataTalksClub / DataTalksClub/website
Certificate screen should prompt sharing on LinkedIn to drive course visibility
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 0
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Description
Summary
When a learner's enrollment has a certificate, the enrollment page should show how to add that certificate to LinkedIn, with the values they need ready to paste. Certificate holders are finishers; collecting the certificate is a good moment to ask them to publicize the course.
The idea and the source text come from the retired per-repo certificates.md quoted in the original intake (preserved in this issue's history). Only the LinkedIn-sharing part is in scope; the certificate-ID/URL retrieval instructions are not, because the website already serves certificates live.
Normative references
- Enrollment and certificates:
_docs/specs/04-courses-and-cohorts.md. Certificates are legacy cohort-scoped URL data onEnrollment; this change adds no certificate state or issuing behavior. - The registration-flow prompt idea is a separate surface and issue (#373).
- Design system:
_docs/design/design-system.md; the new content joins the existing.enrollment-certificateblock and its mono-label/dashed-divider pattern. - Process and verification:
_docs/PROCESS.md,_docs/specs/10-verification-strategy.md,_docs/ci/change-selective-ci.md.
Scope and behavior
- Surface: only the learner's enrollment settings page,
courses/views/course_enrollment.py::enrollment_view(templatecourses/templates/courses/enrollment.html). The view is@login_requiredand queries the enrollment byrequest.user, so the section can only show the viewer's own data. - When
enrollment.certificate_urlis set, the existing certificate block gains an "Add to LinkedIn" subsection containing:- the ordered steps below;
- the two known values rendered for easy copying: the certification name (the course title as shown for this enrollment) and the certification URL (the learner's
certificate_url, rendered as a link); - the optional fields left as instructions with no server-provided value.
- When
certificate_urlis unset or empty, the page renders exactly as today ("Not available"); no new empty state, prompt, or banner. - Server-rendered template HTML only; no new JS behavior is required. If a small progressive enhancement is proposed it must carry its own tests and stay inside the design system.
Exact steps text, adapted from the retired certificates.md (wording may be tuned without changing meaning):
- Log in to your LinkedIn account, then go to your profile.
- On the right, in the "Add profile section" dropdown, choose "Background" and select the drop-down triangle next to "Licenses & Certifications".
- In "Name", enter the course title shown below.
- In "Issuing Organization", enter "DataTalksClub".
- (Optional) In "Issue Date", enter when you earned the certificate, and select "This certification does not expire".
- (Optional) In "Credential ID", enter the certificate ID — the identifying code in your certificate URL.
- In "Certification URL", enter your certificate URL shown below.
Step 6's phrasing assumes the legacy convention that the URL slug is the credential ID (see intake history). Do not add retrieval instructions, and do not derive, validate, or store IDs in code.
Non-goals
- No one-time modal or seen-state tracking. Certificates arrive through the CMP learner-history import, so there is no issuing event to key a one-time prompt on; the prompt is a persistent section.
- No pre-filled LinkedIn "add to profile" deep link or one-click share. External LinkedIn URL formats are not part of any spec; the steps are manual.
- No share buttons for other networks, no email/notification, no badge or OG-image generation.
- No changes to the course page "Download Certificate" button, the member homepage, dashboard aggregates, certificate import, models, migrations, URLs, APIs, or admin.
- No public-content change: this is private, authenticated UI help text in the template, not database-owned public content.
Dependencies
None; everything needed exists on current main.
Acceptance criteria
- An enrollment with
certificate_urlrenders the LinkedIn section with the seven steps and both known values; the values match that enrollment's course title and certificate URL. - An enrollment without
certificate_urlrenders exactly as today, with no LinkedIn section and no new empty state. - The section appears only inside the existing authenticated, user-scoped enrollment page; no route, permission, visibility, or API surface changes.
- Desktop and mobile rendering keeps the existing enrollment layout intact: no overflow or overlap, the section follows the existing dashed-divider block pattern, and the text is readable in light and dark themes.
- Focused Django coverage asserts the section's presence and values with a certificate and its absence without one; existing enrollment tests stay green.
- Engineer handoff and independent tester-final report bind the frozen base/head, verification-plan digests, and screenshot evidence per
_docs/ci/change-selective-ci.md.
Meaningful verification scenarios
- Django/integration: render the enrollment view with and without
certificate_url; assert the section markup, the two values, and that the no-certificate page is unchanged. - Browser (tester): a signed-in learner with a certificate, desktop 1440×900 and mobile 390×844, light and dark: the section renders under the certificate value, text wraps naturally, and the certificate link opens. A signed-in learner without a certificate sees the unchanged page. Template-only change with render impact: applicable Playwright tier per process, plus route/state screenshots under
.tmp/screenshots/. - Repository/operations: the diff stays confined to the enrollment template and its focused tests; no model, migration, or URL changes.
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 at courses/views/course_enrollment.py::enrollment_view and the existing certificate block in courses/templates/courses/enrollment.html, then review the focused enrollment tests and the verification guidance in _docs/PROCESS.md. Add the LinkedIn subsection only when certificate_url is set, with the seven steps and course title and URL values. Done means focused Django coverage confirms presence and values with a certificate, absence without one, and the template remains within the existing layout.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- django, python
- Domain
- frontend, web-dev
- Issue type
- Feature
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 76/100