🔒 Confidential — internal audit. This page documents security findings (incl. a broken-logout issue) and is served at an unlisted, noindex URL. Not linked anywhere public. Ask to lock it behind the authenticated /management area or delete it when done.
Jump to: 1 · Executive summary 2 · Broken-interaction log 3 · Feature-gap matrix 3a · Community build spec 4 · Interface adjustments 5 · Known-issues 6 · Roadmap 📸 Screenshots

ISSCA Learning Centre — Feedback Audit Report

Target: https://dev.issca.com (authenticated course-delivery platform) Method: Live browser drive (Playwright + headless Chromium 1.59), desktop 1440×900 and mobile 390×844, light + dark themes. 35 screenshots, full DOM/console/network capture on every route. Account: admin@issca.com (Student + Admin surfaces). Date: 27 Jun 2026. Stack detected: Next.js + NextAuth/authjs v5 (__Secure-authjs.session-token).

Evidence note: the inline PDF uses the browser-native PDFium viewer, which does not render in headless Chromium — every "blank PDF box" in a screenshot is a capture artifact, not a platform bug. The PDF file itself was verified over HTTP (200, application/pdf, 31 KB). Findings that depend on PDF rendering are flagged as such.

1. Executive summary

ISSCA Learning Centre is a clean, well-built, low-defect course platform. The core learning loop — enrol → watch video → take private notes → track progress → earn a verifiable certificate — works end to end and is visually polished. Engineering hygiene is genuinely strong: zero console errors and zero 4xx/5xx network failures on every page tested, proper auth gating with callbackUrl, and a responsive layout with no horizontal scroll at 390px anywhere.

The gaps are completeness and communication, not stability. Two of three lesson types are unfinished ("Reading coming soon", "Assessment coming soon"), so a certification product currently cannot assess or certify competence through the platform. Logout is a dead control. And the stakeholder's #1 ask — a moderated comment/community layer — does not exist at all; the only communication surface is private, single-user Notes.

Health score: 68 / 100. Polished, stable core (+), but a certification platform that can't run a quiz, can't log you out, and can't let two clinicians talk to each other is materially incomplete.

Top 5 blockers / high-severity

  1. Logout does nothing — "Sign out" fires no request, clears no session cookie, no redirect; the session stays valid. Security/shared-device risk on a paid product. (B1)
  2. No assessment engine — the "Final Quiz" is a "Assessment coming soon" placeholder. A certification cannot be earned by demonstrated competence. (B2)
  3. No public communication layer — stakeholder P0. Only private Notes exist; no comments, threads, moderation, reactions, or DMs. (I4 / Known #5)
  4. Reading lessons are empty — every non-video "Reading" lesson renders "Reading coming soon". A large share of curriculum has no content. (B3)
  5. No completion gating / prerequisites / passing grade — any lesson is freely reachable; certificates are not tied to passing anything, weakening credential integrity. (Feature gap)

Top 5 quick wins (≤ ~1 day each)

  1. Wire signOut() — one-handler fix; restores logout + redirect. (B1)
  2. Replace the bare top-right ✕ with a labelled menu (hamburger → Exit / Course outline / Profile / Sign out). Reuses the drawer pattern already built for the mobile dashboard. (Known #1)
  3. Promote the mobile "Course content" trigger from a grey breadcrumb to a real button (filled/bordered, list icon, "Course outline · 51 lessons"). (Known #2)
  4. Reveal the note-delete button without hover (always-visible low-emphasis icon) so it's reachable on touch, and add a confirm/undo. (B4)
  5. Replace placeholder PDF content (git_vps_cheatsheet_ru.pdf inside a peptide lesson) and cap note height with a "show more" clamp. (B6 / I7)

2. Broken / incomplete-interaction log

IDBucketSeverityLocation (URL + element)ReproExpectedActualScreenshotFix
B1BrokenBlocker/dashboard → account menu → button[role=menuitem]"Sign out"Open account menu, click Sign outSession cleared, redirect to /loginNo network request, no cookie cleared, no redirect; /dashboard still accessible (verified twice + cookie/network trace)67,68Wire authjs signOut({redirectTo:'/login'}) to the menu item
B2Feature gapHigh/learn/.../<final-quiz> lesson bodyOpen "Final Quiz" lessonA graded quiz"Assessment coming soon" placeholder; 0 quiz inputs50Build quiz engine (MC/short-answer), scoring, passing grade
B3Feature gapHighAny "Reading" lesson (e.g. "Summary & Takeaways")Open a Reading lessonLesson text/content"Reading coming soon" placeholder51Build rich-text/reading lesson renderer; hide empty lessons until filled
B4Bad UXMediumLesson Notes list → button[aria-label="Delete note"]View notes on touch deviceDelete reachableDelete icon is opacity:0 until hover → unreachable without a mouse; no confirm/undo42Always show a low-emphasis delete; add confirm or undo toast
B5Feature gapMediumLesson Notes rowTry to edit an existing noteInline editNo edit affordance at all (delete + re-add only)42Add inline edit (pencil → editable textarea → save)
B6Data/contentLowResources card, all peptide lessonsOpen ResourcesTopic-relevant protocol PDFPlaceholder git_vps_cheatsheet_ru.pdf (a git VPS cheatsheet) in a peptide course11Replace with real lesson PDFs before launch
B7PolishLowVideo embed (youtube-nocookie)Load a video lessonLocalised to user/EnglishPlayer chrome renders in German ("Ansehen auf YouTube") — embed locale not pinned11,22Pass hl=en (or user locale) to the embed URL
B8Bad UXLow–MedNotes panel in dark themeToggle dark, view notesNote rows + "Add note" adaptNote-row backgrounds / "Add note" button look low-contrast in dark22Use bg-card/border tokens that invert; check button contrast in dark
B9Bad UXLowLesson top bar progress trackGlance at top barClear progress indicatorProgress track is a faint grey hairline; 0% fill looks empty/broken; unlabeled11Add % label + higher-contrast fill; or move into the outline button

Note: B2/B3 are well-designed empty states (icon + heading + subtext), so they read as "intentionally unfinished" rather than crashed — good hygiene, but functionally absent.


3. Feature-gap matrix — ISSCA vs. 100-feature / 10-platform benchmark

Scored live against the evidence brief by 10 independent agents (one per competitor), one consistent rubric. "Partial" almost always means foundation present, completion pending (e.g. certificates issue with serial + Verified badge + PDF, but aren't grade-gated or template-customisable) — so ISSCA is meaningfully further along than the raw Missing count implies. Enterprise/LMS-bloat that does not fit a niche paid clinical-cert business (SCORM/xAPI/cmi5, multi-tenant sub-portals, content marketplaces, website/funnel builders, native checkout) is scored N/A by design, not as a deficiency.

Coverage: 2 Present · 18 Partial · 61 Missing · 19 N/A (of 100). Priority of gaps: 13 P0 · 17 P1 · 35 P2 · 17 P3.

3.1 P0 community/communication roll-up (stakeholder-weighted items)

#FeatureStatusRecommendation
9Lesson-level comments / student-instructor messaging🔴 MissingBuild the moderated per-lesson comment/discussion layer with faculty replies — only private student-only Notes exist today, and this is the stakeholder's #1 ask to connect paying clinicians.
10Native mobile course-taking app🔴 MissingShip an installable PWA with offline lesson caching rather than a costly native app, since the responsive web LMS already runs cleanly at 390px with a hamburger drawer for this niche paid audience.
12Communities with topic-based Spaces🔴 MissingBuild moderated topic-based Spaces (one per certification track, e.g. Peptide, MSC/Exosome, Biohacking) with faculty-moderated threads so paying clinicians can ask cases and get expert replies — this is the stakeholder's #1 'communication is key' gap.
13Assignment lesson type — student file upload, instructor approve/reject🔴 MissingAdd a case-submission assignment lesson where clinicians upload a de-identified patient protocol/write-up that faculty approve or reject, gating the certificate on a real clinical deliverable rather than passive video completion.
14Customizable certificates (multiple templates, custom fields)🟡 PartialCertificates already issue with a Verified badge, serial number and PDF, but add per-track templates with custom fields (CME/credit hours, faculty signatures, accreditation seal) and bind issuance to a passing assessment so the credential carries integrity.
15Course card <-> Community card cross-linking🔴 MissingOnce Spaces exist, link each course card to its dedicated community Space (and back) so a clinician finishing a lesson is one click from the discussion thread for that track.
16Survey / feedback lesson type🔴 MissingAdd an end-of-module feedback/survey lesson type to capture clinician NPS and content gaps, feeding faculty the data needed to refine each certification track.
25Built-in community (Facebook-group alternative)🔴 MissingBuild a moderated community space (faculty-led case discussions, per-cohort channels, clinician Q&A) as the stakeholder's top priority to connect and retain paying clinicians.
43Gated membership communities🔴 MissingCommunity is entirely absent (the stakeholder's P0) — build a gated, enrollment-only moderated community where verified paying clinicians can connect and discuss cases.
44Real-time group chat + member-to-member DMs🔴 MissingNo chat or DMs exist anywhere — add a moderated cohort group chat for enrolled clinicians first, and gate/defer open member-to-member DMs to avoid unmoderated peer clinical advice and liability.
49Topic-based community spaces🔴 MissingNo community spaces or Q&A exist — create topic/specialty spaces aligned to the five certification tracks (peptides, MSC/exosomes, biohacking, MUSE, aesthetics) for focused, moderated discussion.
73Social learning — user-generated content, sharing, Q&A🔴 MissingBuild the stakeholder-P0 moderated layer: per-lesson threaded comments and a course Q&A with faculty replies and likes, replacing the current private-only Notes as the sole communication surface.
91Spaces + Space Groups to organize courses/discussions/events🔴 MissingAdd a small set of moderated Spaces, one per certification track (Peptide, Regenerative, MUSE, Biohacking), each grouping that track's lessons, case discussions and live sessions; avoid a sprawling space tree for a 5-course catalog.
92Courses that fold in events, office hours, live Q&A🔴 MissingAttach recurring faculty office-hours and live case-review Q&A to each certification cohort, surfaced on the course detail page with an RSVP calendar and an archived recording feed.
93Live streams + events with RSVP🔴 MissingOffer live-streamed demo/case sessions with RSVP and reminders tied to each cohort, auto-archiving recordings into the relevant course, reusing the existing ISSCA events brand instead of building a separate events product.
94Gamification — points for likes/posts/comments, leaderboards, levels, rewards🔴 MissingSkip social points and leaderboards (off-tone for expert paying clinicians); if any progression is shown, use quiet certification milestones and CME-credit tracking rather than competitive gamification.
95Rich comments + reactions (GIFs, emoji) on posts🔴 MissingShip moderated, threaded per-lesson comments with faculty replies and emoji reactions (skip GIFs as off-tone for clinical), since comments are entirely absent and this is the stakeholder's #1 'communication is key' ask.
96Member DMs + group chat🔴 MissingAdd cohort-scoped moderated group chat (one per certification class) plus optional peer DMs with faculty/moderator visibility, rather than open uncontrolled messaging among clinicians.

Per stakeholder weighting, these map directly to the P0 community/comments ask. 18 of 18 weighted items are Missing/Partial — confirming the communication layer is the single biggest gap.

3.2 Full 100-feature matrix

Teachable

#FeatureStatusPriRecommendation
1No-code drag-and-drop curriculum builder (sections + lessons)🟡 PartialP2A course/curriculum builder exists at /admin/courses but drag-and-drop reorder is unverified; confirm or add handle-based module/lesson reordering so clinical faculty can restructure the 5 courses without engineering.
2Drip scheduling — release lessons X days after enrollment or on a fixed date🔴 MissingP2Add per-cohort drip release so multi-week certification tracks unlock modules on a schedule, pacing clinicians through prerequisite protocol content instead of dumping all lessons at once.
3Auto-graded quizzes (multiple choice, short answer)🔴 MissingP1Replace the 'Assessment coming soon' placeholder with real MCQ/short-answer quizzes that auto-grade and enforce a passing score, since a clinical certificate is meaningless without verified competency.
4Branded completion certificates🟡 PartialP1Certificates already render with serial number and a 'Verified' badge but are not earned via a passing grade — gate issuance behind quiz completion so the credential defensibly attests clinical competency.
5Lesson-completion gating / compliance lock before progressing🔴 MissingP1Add completion (and quiz-pass) gating so learners must finish prior lessons before advancing, giving the certification an auditable sequence/compliance trail instead of every lesson being freely reachable.
6AI helpers: course-outline generator, quiz generator, subtitle translation🔴 MissingP3Optional later add: an AI quiz/outline generator to speed faculty authoring, but only after real quiz and reading lesson types actually ship — not a near-term need for a 5-course catalog.
7Native checkout with coupons, order bumps, upsells⚪ N/AN/ACommerce is intentionally handled by a separate system; keep it there and just ensure a clean SSO/enrollment handoff into the LMS rather than rebuilding checkout, coupons, and upsells inside this app.
8Per-student progress dashboard🟢 PresentP2Per-student progress (enrolled/in-progress/certificates + per-course bars) already works; extend the admin /admin/students view with per-lesson completion and quiz scores once assessments exist for compliance reporting.
9Lesson-level comments / student-instructor messaging🔴 MissingP0Build the moderated per-lesson comment/discussion layer with faculty replies — only private student-only Notes exist today, and this is the stakeholder's #1 ask to connect paying clinicians.
10Native mobile course-taking app🔴 MissingP2Ship an installable PWA with offline lesson caching rather than a costly native app, since the responsive web LMS already runs cleanly at 390px with a hamburger drawer for this niche paid audience.

Thinkific

#FeatureStatusPriRecommendation
11Minimalist course player with sidebar nav + live progress🟢 PresentP2Player already has the always-open lesson tree, active-lesson highlight and live % progress; polish the bare X into a labeled 'Exit to dashboard' control and raise contrast on the progress track and dark-mode note rows.
12Communities with topic-based Spaces🔴 MissingP0Build moderated topic-based Spaces (one per certification track, e.g. Peptide, MSC/Exosome, Biohacking) with faculty-moderated threads so paying clinicians can ask cases and get expert replies — this is the stakeholder's #1 'communication is key' gap.
13Assignment lesson type — student file upload, instructor approve/reject🔴 MissingP1Add a case-submission assignment lesson where clinicians upload a de-identified patient protocol/write-up that faculty approve or reject, gating the certificate on a real clinical deliverable rather than passive video completion.
14Customizable certificates (multiple templates, custom fields)🟡 PartialP1Certificates already issue with a Verified badge, serial number and PDF, but add per-track templates with custom fields (CME/credit hours, faculty signatures, accreditation seal) and bind issuance to a passing assessment so the credential carries integrity.
15Course card <-> Community card cross-linking🔴 MissingP0Once Spaces exist, link each course card to its dedicated community Space (and back) so a clinician finishing a lesson is one click from the discussion thread for that track.
16Survey / feedback lesson type🔴 MissingP2Add an end-of-module feedback/survey lesson type to capture clinician NPS and content gaps, feeding faculty the data needed to refine each certification track.
17Bulk student enrollment + student groups🔴 MissingP2Add cohort-based bulk enrollment and grouping so conference/event attendees can be onboarded as a single cohort and tracked together, aligning the LMS with ISSCA's live-event model.
18Branded mobile app🔴 MissingP3The responsive web app already handles mobile cleanly (no horizontal scroll, hamburger drawer), so ship an installable PWA with offline PDF protocols rather than funding a costly native app for a 5-course catalog.
19Multi-author / instructor roles & permissions🟡 PartialP2Only a binary Student/Admin role exists today; add a scoped Instructor role so individual faculty can edit and moderate their assigned courses and Spaces without receiving full admin access.
20Bundles & memberships🔴 MissingP3Commerce is handled in a separate system, so keep bundle/pricing logic there but have the LMS read a membership/entitlement flag to gate multi-course access (e.g. a full diploma track unlocking all 5 courses).

Kajabi

#FeatureStatusPriRecommendation
21When X -> then Y marketing automations🔴 MissingP3Skip a general if-this-then-that automation builder; wire one transactional trigger (on course completion, issue the certificate and email the clinician) rather than a Kajabi-style engine a 5-course catalog doesn't warrant.
22Email sequences + broadcasts with open/sales analytics🔴 MissingP2Add a simple cohort broadcast to email enrolled clinicians about new modules, event/CME dates, and recertification deadlines; defer sales-funnel open/click analytics since checkout lives in a separate system.
23Assessment-driven auto-tagging / student segmentation🔴 MissingP3Low priority until quizzes exist; once assessments ship, auto-tag students by track and score for targeted recert reminders, but don't build a full CRM segmentation engine for a 5-course catalog.
24Passing-grade compliance gating🟡 PartialP1Certificates exist but aren't grade-gated; tie certificate issuance to a passing quiz score and add lesson completion gating so credentials reflect demonstrated competency, which is essential integrity for a clinical certification.
25Built-in community (Facebook-group alternative)🔴 MissingP0Build a moderated community space (faculty-led case discussions, per-cohort channels, clinician Q&A) as the stakeholder's top priority to connect and retain paying clinicians.
26Sales funnels / pipeline builder⚪ N/AN/AKeep sales funnels and pipeline in the existing external commerce/marketing stack; duplicating a funnel builder inside the LMS is bloat for this niche business.
27Coaching product with scheduling🔴 MissingP2Offer optional paid faculty office-hours/mentorship booking for certified clinicians as a high-touch premium add-on, not a full coaching-product suite.
28Landing-page / website builder⚪ N/AN/AISSCA already builds landing pages in its main marketing site; a page builder inside the LMS is redundant and out of scope.
29Digital products + memberships🟡 PartialP2Paid course content products exist but there is no membership construct or native commerce; add an annual all-access or recertification membership tier (native or via the external commerce system) to drive recurring clinician revenue.
30Milestone-completion notifications to team/student🔴 MissingP2Send the student a completion/certificate-issued email and notify admin on enrollment and course completion as lightweight lifecycle signals, without building a full notification automation engine.

LearnWorlds

#FeatureStatusPriRecommendation
31Interactive video editor — in-video quizzes, hotspots, buttons, overlays🔴 MissingP2Skip the full interactive-video editor; add simple in-video checkpoint questions on key peptide/MUSE protocols to lift retention without heavy authoring overhead.
32SCORM / HTML5 upload, incl. graded SCORM -> gradebook⚪ N/AN/ASkip SCORM — it is multi-vendor enterprise plumbing irrelevant to ISSCA's self-produced, YouTube-hosted video lessons.
33In-video knowledge checks before progressing🔴 MissingP1Add lightweight in-video knowledge checks that must be answered before advancing on core clinical modules, reinforcing the certification's competency claim.
34Adaptive/branching video pathways (by answer or role)🔴 MissingP3Branching/adaptive pathways are overkill at 5 courses; defer until the catalog and role-specific clinician tracks grow materially.
35AI subtitles + searchable transcripts🔴 MissingP2Add searchable transcripts and captions to every video lesson so clinicians can scan/reference protocol details and to meet basic accessibility expectations.
36Interactive eBook creator🔴 MissingP2First implement the missing rich-text Reading lesson type (currently a 'Reading coming soon' placeholder) before investing in any full interactive eBook creator.
37Certificates tied to a gradebook🟡 PartialP1Certificates exist but issue on video completion only — gate issuance behind a passing final-assessment score so the credential reflects demonstrated clinical competency.
38Broad assessment library (many question/activity types)🔴 MissingP1Replace the broken 'Final Quiz' placeholder with a focused assessment engine (MCQ + case-based items and a pass threshold); breadth of exotic question types is secondary for certification.
39White-label mobile app builder⚪ N/AN/AA white-label app builder is multi-brand bloat; the responsive web already works cleanly at 390px, so at most ship a single installable PWA if mobile demand emerges.
40SSO + full membership-site builder⚪ N/AN/AKeep the simple NextAuth email/password flow but fix the broken Sign out first; SSO and a membership-site builder are unnecessary for one niche certification brand.

Podia

#FeatureStatusPriRecommendation
41Sell digital downloads (eBooks, templates, files)🟡 PartialP2Downloadable PDF protocol/resource delivery already exists in-lesson, but commerce is external and nothing is sold standalone — package the protocol PDFs and faculty eBooks as purchasable downloads wired through the existing checkout so non-enrolled clinicians can buy individual protocols.
42Webinars as a paid product (Zoom)🔴 MissingP2All video is pre-recorded YouTube embeds with no live capability — add scheduled live expert Q&A/case-review webinars via Zoom as a paid cohort perk, with recordings posted back into the relevant certification track.
43Gated membership communities🔴 MissingP0Community is entirely absent (the stakeholder's P0) — build a gated, enrollment-only moderated community where verified paying clinicians can connect and discuss cases.
44Real-time group chat + member-to-member DMs🔴 MissingP0No chat or DMs exist anywhere — add a moderated cohort group chat for enrolled clinicians first, and gate/defer open member-to-member DMs to avoid unmoderated peer clinical advice and liability.
45Coaching sessions/bookings🔴 MissingP2No booking surface exists — offer bookable 1:1 mentorship sessions with faculty (calendar + paid slot) as a premium upsell on each certification track.
46Email newsletters + automated welcome flows with sales data🔴 MissingP2The brief confirms no automations/email — wire enrollment and progress events into automated welcome and lesson-nudge email flows to lift completion and certificate-earn rates.
47Affiliate program🔴 MissingP3No referral mechanism exists — add a lightweight alumni referral/affiliate link so certified clinicians can refer peers, tracked against the external checkout.
48Single-dashboard website builder⚪ N/AN/AISSCA already runs a bespoke Next.js marketing site (issca.com); an in-app website builder is redundant platform bloat and should not be built into this LMS.
49Topic-based community spaces🔴 MissingP0No community spaces or Q&A exist — create topic/specialty spaces aligned to the five certification tracks (peptides, MSC/exosomes, biohacking, MUSE, aesthetics) for focused, moderated discussion.
50Free + paid membership tiers🔴 MissingP2There is no tier system and all courses are paid — introduce a free tier exposing sample/preview lessons as a lead magnet that converts clinicians into the paid certification tracks.

LearnDash

#FeatureStatusPriRecommendation
51Focus Mode — distraction-free lesson/quiz view🟡 PartialP2The lesson player is a dedicated route with its own chrome but the tree is always open and the bare X / low-contrast progress add noise; add a one-tap Focus toggle that collapses the lesson tree and top chrome (and pins the video), persisting per session.
52Advanced quiz engine (8 question types incl. essay, fill-in-blank, sorting, matrix)🔴 MissingP1Quizzes are an unimplemented 'Assessment coming soon' placeholder; build a real engine starting with scored multiple-choice plus short-answer for the existing Final Quiz lessons, since a clinical certification needs a defensible knowledge check (full 8-type parity is overkill).
53Quiz controls: time limits, randomization, answer explanations🔴 MissingP1No quiz exists so no controls exist; when the engine ships, prioritize per-question answer explanations and answer-order randomization to make the certification credible, and skip strict time limits that penalize busy practicing clinicians.
54Quiz leaderboards (public ranking)⚪ N/AN/ASkip public leaderboards entirely — ranking paying clinicians by quiz score is off-brand for a premium clinical credential; if social proof is wanted, surface only private cohort completion stats.
55Groups + Group Leader role for cohort tracking🔴 MissingP3Roles today are only Student/Admin; defer full Group-Leader tooling and add a lightweight cohort view only if ISSCA begins selling block enrollments to clinics, letting a coordinator track their clinicians' certification progress.
56Course/lesson prerequisites (require pass before next)🔴 MissingP1Lessons are freely reachable with no gating; gate the final certificate behind sequential lesson completion plus a passing final-quiz score so the credential actually attests to demonstrated competence.
57Time-based / scheduled content drip🔴 MissingP2No drip/scheduled release exists; add optional drip scoped to cohort intakes tied to ISSCA's live events while keeping on-demand access as the default for self-paced clinicians.
58Points, badges & certificates🟡 PartialP1Certificates already exist (Verified badge, serial, PDF) but issuance is not tied to any passing grade; bind certificate issuance to a passing assessment and verified completion, and skip points/badges as off-brand for a clinical audience.
59Assignment upload + approval workflow🔴 MissingP2No submission/approval surface exists; add a case-study/protocol upload with faculty approval so clinicians can submit real-world applications for review, strengthening the rigor and value of the certification.
60Deep platform extensibility (themes/integrations)⚪ N/AN/AA plugin/theme extensibility framework is unnecessary for this single-tenant custom Next.js build; invest that engineering in the missing moderated community and assessment layers instead.

TalentLMS

#FeatureStatusPriRecommendation
61Gamification engine — points, badges, levels, leaderboards, rewards🔴 MissingP3Skip points/leaderboards (they clash with a professional clinician audience); at most award a subtle per-certification completion badge that reinforces credential prestige rather than competition.
62Instructor-led training (ILT), in-person + video-conference, blended🔴 MissingP2Add lightweight live-cohort/webinar scheduling inside the LMS that ties online lessons to ISSCA's existing in-person certification conferences, creating a true blended clinical-certification track.
63Sequenced learning paths🟡 PartialP2Build on the existing per-course Complete-&-continue sequencing by adding prerequisite gating and bundling the 5 courses into ordered certification tracks so clinicians progress through a defined curriculum.
64Branching / decision-based scenarios🔴 MissingP3Defer until Reading and Quiz lessons actually exist, then consider case-based clinical decision branches (e.g., peptide dosing scenarios) since they fit medical training far better than generic gamified branching.
65SCORM 1.2 / xAPI / cmi5 tracking⚪ N/AN/ASkip entirely; the native Next.js content model already tracks per-lesson progress for self-authored video/PDF courses, and SCORM/xAPI would add only integration overhead with no audience benefit.
66Branches — multi-tenant sub-portals with own branding/language⚪ N/AN/ANot applicable for a single-brand, single clinician audience; invest the equivalent effort in the multi-language UI gap (English-only today) rather than sub-portal tenancy.
67Automations & mass actions🔴 MissingP2Add transactional/email automations for enrollment, lesson completion, and certificate-renewal reminders, which also closes the currently absent email layer and keeps paying clinicians re-engaged.
68Reusable content library / internal marketplace⚪ N/AN/AUnwarranted at a 5-course scale and the internal-marketplace concept is pure bloat here; revisit only a shared media/asset library if the catalog grows several-fold.
69Skills + certifications with expiry/renewal🟡 PartialP1Certificates already issue with verified badge/serial/date, but add CME-style expiry plus a renewal workflow and tie issuance to a passing assessment so the clinical credential carries real integrity.
70Custom reports + native mobile apps🟡 PartialP2Admin already shows enrollment counts, so extend it with CSV export and per-student progress reports; for mobile, ship a responsive PWA rather than costly native iOS/Android apps given the niche audience size.

Docebo

#FeatureStatusPriRecommendation
71AI-personalized learning paths + enrollment/content suggestions🔴 MissingP3Skip AI path-engines for a 5-course catalog; add a simple rules-based 'recommended next certification' card on the dashboard driven by completed courses and level (Foundational -> Advanced).
72Skills intelligence / skills management⚪ N/AN/AA skills-graph/competency-taxonomy engine is enterprise bloat for five clinical certifications; track competence instead via the per-course certificate, not a skills system.
73Social learning — user-generated content, sharing, Q&A🔴 MissingP0Build the stakeholder-P0 moderated layer: per-lesson threaded comments and a course Q&A with faculty replies and likes, replacing the current private-only Notes as the sole communication surface.
74Observation checklists (manager documents on-the-job competence)🔴 MissingP2Add a lightweight faculty sign-off checklist for the hands-on workshop tracks (e.g. Cancún) so an instructor can attest in-person clinical competence before the certificate issues, strengthening cert credibility.
75Certification & retraining app (validity periods, auto-renewal)🟡 PartialP1Certificates exist with serial + verified badge but never expire; add validity periods and CME-style recertification/renewal reminders so credentials stay current and defensible for paying clinicians.
76Gamification (leaderboards, rewards)🔴 MissingP3Leaderboards/points are inappropriate for a professional clinician audience; at most add a quiet per-course completion streak or progress badge, no public ranking.
77Generative-AI authoring / AI agents🔴 MissingP3Low priority for a 5-course catalog; if anything, give admins an AI assist inside the existing curriculum builder to draft lesson outlines and quiz questions, reviewed by faculty before publish.
78Extended enterprise / multi-domain⚪ N/AN/AMulti-tenant sub-portals are out of scope for a single-brand niche certification business; one branded Learning Centre is the right model.
79Learning-analytics dashboards🟡 PartialP2Admin Overview plus per-course Enrolled counts exist but there is no engagement depth; add completion rates, drop-off-by-lesson, and (once quizzes ship) pass rates so the business can see where paying students stall.
80Content-marketplace integrations⚪ N/AN/AA third-party content marketplace dilutes a proprietary clinical curriculum and is bloat here; keep all content first-party and faculty-authored.

Moodle

#FeatureStatusPriRecommendation
81Rich activity modules: Forum, Quiz, Workshop, Lesson, Wiki, Glossary, Database🟡 PartialP0The Lesson player exists but only Video works; ship a moderated Forum/discussion activity (the stakeholder P0) plus a real Quiz activity, and skip Wiki/Glossary/Database/Workshop as bloat for a 5-course clinical catalog.
82H5P interactive content + central Content Bank🔴 MissingP3Don't build a central Content Bank; if any interactivity is wanted, add lightweight in-video checkpoint questions on injection-technique demos after the basic Reading and Quiz lesson types are actually implemented.
83Workshop activity with peer assessment/grading⚪ N/AN/APeer grading doesn't fit a paid expert-led certification where clinicians expect instructor authority; route any peer interaction through the moderated community layer instead.
84Competency frameworks + learning plans🔴 MissingP3Skip formal competency frameworks; the linear per-course curriculum plus the issued certificate already signals mastery for this niche audience, so invest engineering elsewhere.
85Open Badges (issue + backpack)🟡 PartialP2Certificates with serial numbers and a Verified badge already exist; upgrade issuance to portable Open Badges / verifiable credentials clinicians can attach to LinkedIn, and tie issuance to a passing final quiz.
86Advanced gradebook (weighted categories, scales, rubrics)🔴 MissingP2Build a simple per-course pass/fail score from the (still-unbuilt) final quiz to gate certificate issuance; weighted categories, scales, and rubrics are overkill for a single graded assessment per course.
87Conditional activities / access restrictions (completion + date + grade)🔴 MissingP1Any lesson is freely reachable today; gate certificate issuance behind full lesson completion plus a passing final-quiz grade to protect certification integrity, optionally adding date-based drip for cohort launches.
88SCORM + LTI external tools⚪ N/AN/ANot needed for a bespoke Next.js LMS with first-party video/PDF lessons; avoid SCORM/LTI packaging overhead entirely.
89Cohorts + granular roles/permissions🟡 PartialP2Only a contextual Student/Admin pair exists; add a dedicated Instructor/Moderator role to staff the P0 community and grade quizzes, but skip cohorts and multi-tenant permission matrices.
90Open-source plugin ecosystem / self-host⚪ N/AN/ANot applicable to a custom Next.js/NextAuth product; the bespoke stack is the right call for this niche, so keep building features in-house rather than adopting a plugin platform.

Circle

#FeatureStatusPriRecommendation
91Spaces + Space Groups to organize courses/discussions/events🔴 MissingP0Add a small set of moderated Spaces, one per certification track (Peptide, Regenerative, MUSE, Biohacking), each grouping that track's lessons, case discussions and live sessions; avoid a sprawling space tree for a 5-course catalog.
92Courses that fold in events, office hours, live Q&A🔴 MissingP0Attach recurring faculty office-hours and live case-review Q&A to each certification cohort, surfaced on the course detail page with an RSVP calendar and an archived recording feed.
93Live streams + events with RSVP🔴 MissingP1Offer live-streamed demo/case sessions with RSVP and reminders tied to each cohort, auto-archiving recordings into the relevant course, reusing the existing ISSCA events brand instead of building a separate events product.
94Gamification — points for likes/posts/comments, leaderboards, levels, rewards🔴 MissingP3Skip social points and leaderboards (off-tone for expert paying clinicians); if any progression is shown, use quiet certification milestones and CME-credit tracking rather than competitive gamification.
95Rich comments + reactions (GIFs, emoji) on posts🔴 MissingP0Ship moderated, threaded per-lesson comments with faculty replies and emoji reactions (skip GIFs as off-tone for clinical), since comments are entirely absent and this is the stakeholder's #1 'communication is key' ask.
96Member DMs + group chat🔴 MissingP0Add cohort-scoped moderated group chat (one per certification class) plus optional peer DMs with faculty/moderator visibility, rather than open uncontrolled messaging among clinicians.
97Branded checkout — trials, installments/BNPL⚪ N/AP3Keep purchasing in the dedicated external commerce system but enable installments/BNPL there for high-ticket certifications, handing off via SSO so paid status auto-unlocks the LMS.
98AI agents for onboarding/support trained on your content🔴 MissingP2Add a retrieval assistant grounded ONLY in the certified course content and downloadable protocol PDFs, returning citations and an explicit 'not individual medical advice' disclaimer for clinician questions.
99Automated member nudges / engagement workflows🔴 MissingP2Trigger progress-based nudges (stalled-at-X%, certificate-deadline reminders, new live-session alerts) via email/in-app using the existing per-course progress data to lift certification completion rates.
100Mobile + white-label branded app🔴 MissingP2Make the already-solid responsive site an installable PWA for mobile and offline lesson/PDF access instead of building a full native or white-label app, which is unnecessary for a single-brand cert business.

3a. P0 build spec — moderated comments / community layer

Stakeholder's #1 priority ("communication is key"). All 18 weighted benchmark items (9, 10, 12–16, 25, 43–44, 49, 73, 91–96) are Missing/Partial today. This is the spec to close them.

Placement (works with the player that exists today)

The lesson player already has a center column (video → Resources/PDF) and a right-hand Notes panel (textarea + list, max-h≈44vh). Add discussion without a redesign:

Data model (Next.js + authjs v5 + Prisma/Postgres — matches the cuid2 IDs already in use)

Comment        id, lessonId, courseId, authorId, parentId(nullable→thread),
               body(text, escaped), isInstructorReply(bool), status(visible|hidden|flagged|deleted),
               editedAt, createdAt, updatedAt
Reaction       id, commentId, userId, type(like|insightful|...)   // unique(commentId,userId,type)
Mention        id, commentId, mentionedUserId                      // drives notifications
Flag           id, commentId, reporterId, reason, resolvedBy, createdAt

Reuse the existing User/role and Lesson/Course relations. Server actions for create/edit/delete/react/flag; revalidate the lesson path. Escape on render (Notes already does this correctly — reuse it).

Scope

v1 (ship first): threaded comments per lesson · instructor/moderator reply (visually badged) · like reaction · sort (Newest / Top) · edit + soft-delete own comment · moderator hide/restore + delete any · empty state · count badge. Open to any enrolled user (the paying audience), gated by the same auth that gates the lesson. v2: @mentions + notifications · multiple reaction types · report/flag queue in /admin · pin a comment · per-course "Discussion" digest email · resolved/answered marking for Q&A.

Build vs. integrate — recommendation: BUILD natively

Build in the Next.js appEmbed Circle / Discourse / SaaS comments
Identity✅ reuse authjs session + enrolment (no second login)❌ separate accounts / SSO plumbing; splits the audience
Moderation & data✅ full control; clinical/patient-adjacent talk stays in your DB⚠️ data leaves your control; moderation in a 2nd tool
Lesson context✅ native per-lesson threads, same UI⚠️ generic embed, weaker per-lesson binding
Time-to-ship⚠️ ~1.5–2.5 wk for v1✅ days, but ongoing seat cost + fragmentation

For a niche, paid, clinical audience where moderation, data ownership, and a single seamless identity matter, native wins. The app already has the identity, the per-lesson context, the DB, and the escaping pattern — the marginal cost over Notes is small. Use a hosted option (Circle) only if a broader community hub (events, spaces, DMs — items 91–96) becomes a strategic product in its own right; then run it alongside, not instead of, native lesson comments.

Benchmark items this closes

Directly: 9 (lesson comments/messaging), 25 (built-in community), 43–44 (gated community + member chat — partial via threads/DMs in v2), 49 (topic spaces — per-course), 73 (social learning / Q&A), 91–96 (Circle-class community — v1 covers comments+reactions+moderation; events/streams/DMs are v2/strategic).


4. Interface-adjustment list (annotated, before → after)

Each item names the element, states the problem in one line, gives the fix.

  1. Lesson top-right ✕ ("Exit to dashboard")Problem: a bare ✕ is the universal "close/dismiss" affordance, not "open navigation"; there is no general menu in the lesson view. Fix: replace with a hamburger that opens a menu (Course outline · Exit to dashboard · Profile · Sign out); keep an explicit "Exit" item inside it. Reuse the dashboard's existing slide-in drawer. (Known #1 — 11,30,21)
  2. Mobile "Course content · 0%" triggerProblem: styled as passive grey breadcrumb text with a tiny right chevron; users don't realise it opens all 51 lessons. Fix: make it a real button — bordered/filled, list icon, label "Course outline · 51 lessons", sticky under the header. (Known #2 — 30,31)
  3. Inline PDF viewer (native iframe, 72vh)Problem: delegates to the browser's PDFium viewer → uncontrolled internal zoom/horizontal-scroll on narrow screens, and reserves a tall empty band that buries Notes on mobile. Fix: render with PDF.js fit-to-width, lock the PDF pane to its own scroll, collapse to a thumbnail/"Open PDF" until requested. (Known #3 — 11,32)
  4. Notes vs. CommentsProblem: the only communication channel is private Notes; clinicians can't talk to faculty or each other. Fix: add a "Notes | Discussion" tabbed panel (spec in §3a) — threaded, moderated comments. (Known #5 — P0)
  5. Note delete (hover-only) + no edit + no clampProblem: trash icon hidden until hover (no touch), destructive with no undo, no edit, and long notes grow unbounded. Fix: always-visible low-emphasis delete with undo toast; inline edit; clamp long notes with "show more". (B4/B5/I7 — 42,41)
  6. Dark-mode note contrast & top-bar progress hairlineProblem: note rows/Add-note button wash out in dark; the progress track is an unlabeled faint line. Fix: invert note surfaces via theme tokens; label progress with % and raise fill contrast. (B8/B9 — 22,11)
  7. "Student" vs "Admin" role pillObserved, not a bug: the pill is contextual (Student on /dashboard, Admin on /admin). No change needed; documented to prevent a false report.

5. Confirmed known-issues table (Part F)

#Stakeholder issueVerdictEvidenceConcrete fix
1Top-right ✕ should be a hamburger/general menuConfirmedBare a[aria-label="Exit to dashboard"], 40×40, no label/tooltip; only chrome control besides theme. 11,21,30Hamburger → menu (Outline/Exit/Profile/Sign out); reuse dashboard drawer
2"Course content" expander not discoverableConfirmed (mobile)Mobile &lt;summary&gt;"Course content · 0%" looks like a grey breadcrumb w/ small chevron; desktop sidebar is always-open (fine). 30,31Promote to a labelled button + list icon + lesson count; make sticky
3PDF viewer has horizontal scroll / needs full widthPartially confirmed / re-scopedNo page-level h-scroll at any width. Real cause: native PDFium iframe owns its own internal scroll/zoom on narrow widths; also reserves 72vh empty band. 04 metrics,32PDF.js fit-to-width; lock pane scroll; lazy-open
4Notes ↔ PDF scroll couplingNot reproduced as described / re-scopedNotes list is already its own overflow-y-auto (max-h ~44vh), separate column from the PDF on desktop. Real risk is nested scroll on mobile (page + PDF iframe + notes list). 04 metrics,05Single page scroll; sticky Notes; fixed-height fit PDF so there's one scroll region
5Add a Comments/Community section (P0)Confirmed absentOnly private per-lesson Notes; no comments/threads/replies/reactions/mentions/DMs/forum anywhere. 11,50,51Build threaded moderated comments — full spec in §3a

6. Prioritised roadmap

P0 — communication & integrity (do first)

P1 — finish the product

P2 — polish & growth


7. Artifacts

All screenshots in qa-audit/shots/; raw DOM/console/network captures in qa-audit/data/. Key files by finding:

FindingScreenshots
Login + states01-login-page, 02-login-filled, 65-invalid-login, 66-empty-fields, 64-protected-redirect
Dashboard / catalog / certificates03-post-login, 55-browse, 54-certificates, 56-account-menu
Lesson player (desktop)11-lesson-first, 22-lesson-dark, 21-exit-hover
Lesson types50-quiz (Assessment coming soon), 51-summary (Reading coming soon), 52-calc, 53-guides
Notes CRUD40-note-added, 41-note-long, 42-note-hover, 43-notes-after-cleanup
Mobile / responsive30-mobile-lesson-top, 31-mobile-drawer-open, 32-mobile-pdf-region, 33-mobile-dashboard, 34-mobile-nav-open, 35-mobile-course
Progress write62-after-complete (0%→2%)
Logout (broken)63-after-logout, 67-logout-result, 68-logout-verify
Admin (read-only)60-admin-home, 61-admin-courses
Data04-layout-metrics.json, 04-pdf-info.json, 05-notes-findings.json, 11-logout-verify.json, 08-explore.json, *-console-errors.json/*-net-fails.json (all empty = clean)

Visual evidence — all 35 screenshots

Click any image to open full size. Captured live, desktop 1440 + mobile 390, light + dark.