feat: HLS streaming, transcripts, agent course generation & landing-page course previews (#663)

New features:
- HLS video encoding/streaming (hls routes, hls-encoder) and a media
  transcripts pipeline (transcripts route + media-transcript queries)
- AI assistant chat vs. run model: agent-course-generation worker/queue,
  run-monitor pane, chat-changes card, content ask-ai bar
- Per-theme course-page previews across org landing-page themes (bold,
  classic, corporate, editorial, etc.) with a shared course token/component set
- View-as-student mode and login-link / link-invite invite flows

Refactor:
- Extract packages/core consolidating config (env, storage, dashboard-url),
  services and utils previously duplicated under apps/api/src/config
- Remove legacy agent service modules (chat-tools, chat-context,
  context-window, document, fetch-url, lesson-content)
- Relax Cross-Origin-Resource-Policy to allow cross-origin media embedding
- Add format script to tenant-router so turbo run format covers it
This commit is contained in:
Rotimi Best
2026-06-07 18:43:05 +01:00
committed by GitHub
parent a2e70779a0
commit d5b07d356e
496 changed files with 19050 additions and 8312 deletions
@@ -1,43 +1,74 @@
export { default as MinimalLandingPage } from './minimal.svelte';
export { default as BoldLandingPage } from './bold.svelte';
export { default as ClassicLandingPage } from './classic.svelte';
export { default as SaasLandingPage } from './saas.svelte';
export { default as TechLandingPage } from './tech.svelte';
export { default as StudioLandingPage } from './studio.svelte';
export { default as CorporateLandingPage } from './corporate.svelte';
export { default as TerminalLandingPage } from './terminal.svelte';
export { default as EditorialLandingPage } from './editorial.svelte';
export { default as VibrantLandingPage } from './vibrant.svelte';
export { default as BoldLandingNav } from './bold/nav.svelte';
export { default as BoldLandingHero } from './bold/hero.svelte';
export { default as ClassicLandingNav } from './classic/nav.svelte';
export { default as ClassicLandingHero } from './classic/hero.svelte';
export { default as MinimalLandingNav } from './minimal/nav.svelte';
export { default as MinimalLandingHero } from './minimal/hero.svelte';
export { default as SaasLandingNav } from './saas/nav.svelte';
export { default as SaasLandingHero } from './saas/hero.svelte';
export { default as TechLandingNav } from './tech/nav.svelte';
export { default as TechLandingHero } from './tech/hero.svelte';
export { default as StudioLandingNav } from './studio/nav.svelte';
export { default as StudioLandingHero } from './studio/hero.svelte';
export { default as CorporateLandingNav } from './corporate/nav.svelte';
export { default as CorporateLandingHero } from './corporate/hero.svelte';
export { default as TerminalLandingNav } from './terminal/nav.svelte';
export { default as TerminalLandingHero } from './terminal/hero.svelte';
export { default as EditorialLandingNav } from './editorial/nav.svelte';
export { default as EditorialLandingHero } from './editorial/hero.svelte';
export { default as VibrantLandingNav } from './vibrant/nav.svelte';
export { default as VibrantLandingHero } from './vibrant/hero.svelte';
export { default as MinimalLandingCourseCard } from './minimal/course-card.svelte';
export { default as BoldLandingCourseCard } from './bold/course-card.svelte';
export { default as ClassicLandingCourseCard } from './classic/course-card.svelte';
export { default as SaasLandingCourseCard } from './saas/course-card.svelte';
export { default as TechLandingCourseCard } from './tech/course-card.svelte';
export { default as StudioLandingCourseCard } from './studio/course-card.svelte';
export { default as CorporateLandingCourseCard } from './corporate/course-card.svelte';
export { default as TerminalLandingCourseCard } from './terminal/course-card.svelte';
export { default as EditorialLandingCourseCard } from './editorial/course-card.svelte';
export { default as VibrantLandingCourseCard } from './vibrant/course-card.svelte';
export {
org as MinimalLandingPage,
course as MinimalCourseLanding,
nav as MinimalLandingNav,
hero as MinimalLandingHero,
courseCard as MinimalLandingCourseCard
} from './minimal';
export {
org as BoldLandingPage,
course as BoldCourseLanding,
nav as BoldLandingNav,
hero as BoldLandingHero,
courseCard as BoldLandingCourseCard
} from './bold';
export {
org as ClassicLandingPage,
course as ClassicCourseLanding,
nav as ClassicLandingNav,
hero as ClassicLandingHero,
courseCard as ClassicLandingCourseCard
} from './classic';
export {
org as SaasLandingPage,
course as SaasCourseLanding,
nav as SaasLandingNav,
hero as SaasLandingHero,
courseCard as SaasLandingCourseCard
} from './saas';
export {
org as TechLandingPage,
course as TechCourseLanding,
nav as TechLandingNav,
hero as TechLandingHero,
courseCard as TechLandingCourseCard
} from './tech';
export {
org as StudioLandingPage,
course as StudioCourseLanding,
nav as StudioLandingNav,
hero as StudioLandingHero,
courseCard as StudioLandingCourseCard
} from './studio';
export {
org as CorporateLandingPage,
course as CorporateCourseLanding,
nav as CorporateLandingNav,
hero as CorporateLandingHero,
courseCard as CorporateLandingCourseCard
} from './corporate';
export {
org as TerminalLandingPage,
course as TerminalCourseLanding,
nav as TerminalLandingNav,
hero as TerminalLandingHero,
courseCard as TerminalLandingCourseCard
} from './terminal';
export {
org as EditorialLandingPage,
course as EditorialCourseLanding,
nav as EditorialLandingNav,
hero as EditorialLandingHero,
courseCard as EditorialLandingCourseCard
} from './editorial';
export {
org as VibrantLandingPage,
course as VibrantCourseLanding,
nav as VibrantLandingNav,
hero as VibrantLandingHero,
courseCard as VibrantLandingCourseCard
} from './vibrant';
export { default as LandingButton } from './landing-button.svelte';
export { default as OrgLandingPageEmbed } from './embed.svelte';
export { default as OrgLandingPageCallout } from './callout.svelte';
@@ -45,13 +76,22 @@ export { default as OrgLandingPageLinks } from './links.svelte';
export { default as OrgLandingPageFooter } from './landing-page-footer.svelte';
export { default as SecondaryActionButton } from './secondary-action-button.svelte';
export { default as EditableLandingSection } from './editable-section.svelte';
export { default as CourseLandingSocialProof } from './course-social-proof.svelte';
export { default as CourseLandingInfoBlocks } from './course-info-blocks.svelte';
export { default as CourseLandingCurriculum } from './course-curriculum.svelte';
export { default as CourseLandingSectionNav } from './course-section-nav.svelte';
export { default as CourseLandingChips } from './course-chips.svelte';
export { default as CourseLandingInstructor } from './course-instructor.svelte';
export { default as CourseLandingReviews } from './course-reviews.svelte';
export { default as CourseLandingPricing } from './course-pricing.svelte';
export {
setLandingPageEditContext,
getLandingPageEditContext,
type LandingSectionKey,
type LandingPageEditContext
} from './edit-context';
export { courseLandingTokens, type CourseLandingTokens } from './course-landing-page.tokens';
export * from './landing-page-link-icons';
export * from './theme-style';
export * from './types';
export { mockOrgLandingPageProps } from './fixtures';
export { mockOrgLandingPageProps, mockCourseLandingPageProps } from './fixtures';