/01 — CHANGELOG
Every release, dated.
Public release notes for the studio platform. Features, fixes, security patches, and performance work — each entry tied to a date and a one-line summary. Nothing marketing; just what shipped.
Major performance + accessibility sweep.
- All images migrated to WebP Q65 — homepage payload dropped 93%.
- Code-split routes via React.lazy + lazy i18n locales — initial JS 1.31 MB → 99 KB.
- Lighthouse mobile: a11y 100, best-practices 100, SEO 100, perf 80+.
- Async font loading + LCP preload + gzip_static on nginx.
- Skip-link, tap-target sizes (≥24×24), text-muted contrast ≥4.5:1 — full WCAG AA.
- Robots.txt cleaned; hreflang + JSON-LD (Person + Org + WebSite) inline.
Backend hardening pass + SMTP architecture refactor.
- MailService now reads SMTP from admin DB settings (not env) — config takes effect without restart.
- POST /settings/mail/test endpoint for one-click verification from the admin panel.
- WhatsApp marketing schema rename to avoid CampaignStatus enum collision.
- Prisma schema docstring conversion (/** */ → ///) to satisfy validator.
Phase 11.6 — /train page modules (Lab, LearningPath, ResearchPaper, WorkshopPackage, MembershipTier).
- 5 new sibling modules backing the public /train page.
- ResearchPaper email-gated downloads — PDFs never exposed in list/detail; email + rate-limit per IP.
- LearningPath display-only steps schema (no cross-linking yet).
- Course extension: 8 new display fields for the /train CatalogShelf cards.
- 1 new email template (research.download_link), admin-editable.
Phase 11 hardening shipped — cache + SMTP + structured logs + PDF certs.
- CacheService (memory + Redis-optional) wired into LanguagesService.
- SMTP mail driver via nodemailer, real send when MAIL_DRIVER=smtp.
- Structured JSON logging + X-Request-Id correlation.
- PDF certificates via pdfkit, persisted at /uploads/certificates/<id>.pdf.
- /ready aggregate readiness probe (DB + cache + mail).
Affiliate program + analytics dashboard endpoints (Phases 9 + 10).
- Affiliate: account application, codes, click tracking with sessionId, SIGNUP/PURCHASE/ENROLLMENT conversions.
- Payouts: per-currency, snapshotted commission percent, PAID conversions immutable.
- Analytics: 13 internal hooks recording across auth/contact/enrollment/affiliate flows.
- GA4 stub at /analytics/ga4/status.