15 Commits
Author SHA1 Message Date
Cursor Agentandbest 78f22ef62f docs: add YouTube embed transcripts PRD
Specify cache-first caption fetch for lesson YouTube embeds so AI chat and the existing transcript UI can reuse stored text. Cross-link related research and study-from-source PRDs and add the draft to the tracker.

Co-authored-by: best <best@classroomio.com>
2026-08-14 11:37:20 +00:00
Cursor AgentandRotimi Best 9adc38bd8a chore(ci): harden supply-chain controls before reopening PRs
Isolate npm publish from PR CI, enforce frozen lockfiles and a 24h
minimumReleaseAge, and document safe pull_request_target usage so fork
PRs cannot reach publish credentials.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
2026-08-10 21:00:29 +01:00
Cursor AgentandRotimi Best bbf5eb24de fix(website): address CodeRabbit copy review comments
Normalize power users spelling on customer education, and align pricing
hero copy with Basic plan student and AI credit limits.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
2026-08-08 23:00:19 +01:00
Cursor AgentandRotimi Best 8dddc5ecaf fix(website): rewrite pricing page hero copy
Replace the vague "Certified training for every team" headline with
clearer plan-selection copy that matches the academy positioning.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
2026-08-08 23:00:19 +01:00
Cursor AgentandRotimi Best a2d1441658 fix(website): keep academy hero accent phrase on one line
Force "customers actually love." onto its own line under "Launch an
academy" so the blue accent does not wrap with an orphaned last word.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
2026-08-08 23:00:19 +01:00
Cursor AgentandRotimi Best 19b88774db fix(website): escape quotes in compliance renewals copy
Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
2026-08-08 23:00:19 +01:00
Cursor AgentandRotimi Best 52225f60fc fix(website): humanize marketing copy and drop em dashes
Update the customer education hero to "Launch an academy customers
actually love", rewrite landing and solutions marketing copy with the
humanizer skill, and remove em/en dashes from those pages while leaving
blog and legal content untouched.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
2026-08-08 23:00:19 +01:00
Cursor AgentandRotimi Best e4406481d6 fix(dashboard): stop enroll effect loop and duplicate verify emails
The auto-enroll effect re-fired because completeEnrollment reset
enrollmentAttemptKey in finally after each run. That re-triggered enroll
API calls and sendVerificationEmail on every tick for unverified users.

Track enrollmentSucceeded and send verification email at most once.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
2026-07-10 07:58:11 +00:00
Cursor AgentandRotimi Best b888725125 fix(sidebar): scope elevated mobile z-index to course sidebar
Remove the global z-150 mobile sheet stacking from Sidebar.Root so LMS
and org sidebars keep the default sheet layer. Course sidebar opts in via
mobileOverlayClass and its existing z-150 class.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
2026-07-10 07:36:06 +00:00
Cursor AgentandRotimi Best 9cedaf8153 fix(dashboard): address PR feedback on enroll load and copy
Remove unnecessary getApiKeyHeaders from public course-by-slug fetch.
Shorten enrolled_verify_email copy, fix ru.json duplicate keys, and
translate enroll verification strings in non-English locales.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
2026-07-10 05:51:36 +00:00
Cursor AgentandRotimi Best 553c126e3c fix(sidebar): raise mobile sidebar above sticky lesson headers
Restore lesson/exercise page header z-100 stacking and fix the overlap
by lifting the mobile sidebar sheet and overlay to z-150, matching the
desktop course sidebar.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
2026-07-10 05:15:39 +00:00
Cursor AgentandRotimi Best daae6c1d40 fix(course): keep lesson header below mobile sidebar
Remove the z-100 override on sticky lesson/exercise page headers so they
stack below the mobile sidebar sheet (z-50). Also make the lesson page
header sticky to match the exercise page.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
2026-07-10 05:12:32 +00:00
Cursor AgentandRotimi Best 5de1f51e76 fix: address PR review comments on enroll and verify email
- Revert org-site layout 404 bypass; custom domain org lookup uses hostname
- Remove unnecessary comment in enroll redirect helper
- Restore email verification flow documentation
- Use generic welcome copy when no org branding is resolved

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
2026-07-10 04:51:30 +00:00
Cursor AgentandRotimi Best a6d06f356f feat(email): make verify-email org-aware like other transactional mail
Resolve the tenant org from the verification link callback URL (custom
domain, tenant subdomain, or ?org=) and apply org logo, theme color, from
name, and subject. Falls back to ClassroomIO branding on the main app.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
2026-07-10 04:32:11 +00:00
Cursor AgentandRotimi Best f262a092ed fix(dashboard): keep unverified users on enroll page after join
After email login, auto-enroll was redirecting to /lms or the admin
/courses/:id/lessons route. Unverified users cannot use the LMS yet
(VerifyEmailModal on app routes), which felt like a permission error.

Enroll without verification, but stay on the enroll page with a verify
prompt instead of redirecting until email is confirmed. Also fix custom
domain org lookup to use hostname without backend port.

Co-authored-by: Rotimi Best <rotimi-best@users.noreply.github.com>
2026-07-10 04:32:10 +00:00