Skip to content

Certificate screen should prompt sharing on LinkedIn to drive course visibility #374

Description

@alexeygrigorev

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

Scope and behavior

  • Surface: only the learner's enrollment settings page, courses/views/course_enrollment.py::enrollment_view (template courses/templates/courses/enrollment.html). The view is @login_required and queries the enrollment by request.user, so the section can only show the viewer's own data.
  • When enrollment.certificate_url is 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_url is 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):

  1. Log in to your LinkedIn account, then go to your profile.
  2. On the right, in the "Add profile section" dropdown, choose "Background" and select the drop-down triangle next to "Licenses & Certifications".
  3. In "Name", enter the course title shown below.
  4. In "Issuing Organization", enter "DataTalksClub".
  5. (Optional) In "Issue Date", enter when you earned the certificate, and select "This certification does not expire".
  6. (Optional) In "Credential ID", enter the certificate ID — the identifying code in your certificate URL.
  7. 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_url renders 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_url renders 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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Nice to have or latercoursesArea: coursesenhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions