Tauri 2 + SvelteKit 2 + Svelte 5 app. An LLM harness for building courses and learning with Claude.
- Frontend: SvelteKit (static adapter, SPA mode), TypeScript
- Backend: Tauri 2 (Rust), plugins: dialog (folder picker), opener
- Build: Vite 6, pnpm
- Config: JSON at
~/Library/Application Support/com.roosterlearner.app/config.jsonapi_key: Claude API key (stored in plaintext)theme: "light" | "dark"courses_dir: path to courses folder (default~/Documents/RoosterCourses)
src/styles/global.css— CSS variables (dark/light theme), reset, base input stylessrc/routes/+layout.svelte— imports global CSSsrc/routes/+page.svelte— setup/onboarding page, auto-redirects to /courses if API key existssrc/routes/courses/+page.svelte— main app: sidebar with course list + settings/build buttons, main content area with course view, settings panel, or chatsrc/lib/components/SettingsPanel.svelte— reusable settings form (API key, theme toggle, course dir picker)src-tauri/src/lib.rs— Rust commands: load_config, save_config, get_default_courses_dir, list_courses
Courses live in the configured courses_dir. Each course is a folder containing:
course.yaml— manifest with title, description, and lessons array (each with name, file, completed)- HTML files for each lesson
load_config/save_config— read/write config JSONget_default_courses_dir— returns~/Documents/RoosterCourseslist_courses— scans courses_dir for folders with course.yaml, returns summaries
- Colors: black/white/orange (#f97316 dark, #ea580c light)
- Dark mode default, toggle in settings