{"id":51001895,"url":"https://github.com/iblai/course","last_synced_at":"2026-06-20T15:31:09.079Z","repository":{"id":359628780,"uuid":"1246872748","full_name":"iblai/course","owner":"iblai","description":"End-to-end AI course-authoring workspace on the ibl.ai platform: plan programs, attach mentors, browse or create courses, and chat with an agent that drafts outlines and unit content. Built with Next.js and the @iblai/iblai-js SDK, deployed at course.ibl.ai. Desktop and mobile.","archived":false,"fork":false,"pushed_at":"2026-06-08T15:05:53.000Z","size":18591,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-08T17:07:23.500Z","etag":null,"topics":["ai","ai-agents","content-creation","course-authoring","course-creation","courseware","e-learning","edtech","education","generative-ai","ibl-ai","instructional-design","llm","lms","mentoring","nextjs","online-learning","react","tailwindcss","typescript"],"latest_commit_sha":null,"homepage":"https://course.ibl.ai","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/iblai.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-22T16:43:59.000Z","updated_at":"2026-06-08T15:12:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/iblai/course","commit_stats":null,"previous_names":["iblai/courseai","iblai/course"],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/iblai/course","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iblai%2Fcourse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iblai%2Fcourse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iblai%2Fcourse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iblai%2Fcourse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iblai","download_url":"https://codeload.github.com/iblai/course/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iblai%2Fcourse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34576040,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-20T02:00:06.407Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","ai-agents","content-creation","course-authoring","course-creation","courseware","e-learning","edtech","education","generative-ai","ibl-ai","instructional-design","llm","lms","mentoring","nextjs","online-learning","react","tailwindcss","typescript"],"created_at":"2026-06-20T15:31:08.176Z","updated_at":"2026-06-20T15:31:09.073Z","avatar_url":"https://github.com/iblai.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003ca href=\"https://ibl.ai\"\u003e\u003cimg src=\"https://ibl.ai/images/iblai-logo.png\" alt=\"ibl.ai\" width=\"300\"\u003e\u003c/a\u003e\n\n# Course\n\nAI-assisted course authoring and delivery — design programs, browse the catalog, and chat with course agents on the ibl.ai platform.\n\nThe video demo is available [here](https://drive.google.com/file/d/1IcfMBCSjZ5jqnCj_hQr6l1bxGjXY_xi9/view?usp=sharing).\n\n[![Next.js](https://img.shields.io/badge/Next.js-000000?logo=nextdotjs\u0026logoColor=white)](https://nextjs.org)\n[![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org)\n[![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-06B6D4?logo=tailwindcss\u0026logoColor=white)](https://tailwindcss.com)\n[![Claude Code](https://img.shields.io/badge/Claude_Code-CC785C?logoColor=white)](https://claude.ai)\n[![Desktop \u0026 Mobile](https://img.shields.io/badge/Desktop_%26_Mobile-supported-blue)](https://github.com/iblai/vibe/blob/main/skills/iblai-ops-build/SKILL.md)\n[![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](#license)\n\n\u003c/div\u003e\n\n---\n\n## What is Course\nCourse is deployed at [course.ibl.ai](https://course.ibl.ai).\n\nCourse is an end-to-end course-authoring workspace on the [ibl.ai](https://ibl.ai) platform. Plan a project, attach mentors, browse or create courses, and chat with an agent that helps draft outlines and unit content — all from one shell powered by the [@iblai/iblai-js](https://www.npmjs.com/package/@iblai/iblai-js) SDK and connected to [iblai.app](https://iblai.app).\n\n## Screenshots\n\n| Home | My Courses |\n|------|------------|\n| ![Course home](docs/screenshots/homepage.png) | ![My Courses](docs/screenshots/my_courses.png) |\n\n| Feature | Description |\n|---------|-------------|\n| **Chat** | Agent chat at `/platform/{tenant}/{mentor}` via the SDK chat surface — streaming, sessions, files, voice |\n| **Explore Agents** | Browse agents through the SDK `\u003cAgentSearch\u003e` component at `/agents` |\n| **My Courses** | Per-tenant course list fetched from the course-creation API (`/api/ai-mentor/orgs/{org}/users/{user_id}/course-creation/course/`) with About / Schedule / Edit / Preview / Delete actions and the \"View Creation Prompt\" dialog |\n| **Course Catalog** | Cross-tenant public marketplace via the SDK `useDiscover({ tenantOverride: \"main\" })` hook |\n| **Course Content** | edX learner UI at `/course-content/[id]/{course,dates,progress,discussion,bookmarks}` |\n| **Projects** | Create + manage projects in the sidebar, attach mentors per project |\n| **Customize** | Tenant-wide configuration surface at `/customize` |\n| **Users** | User directory + role management |\n| **Account** | Profile, social, security, and admin tabs in the SDK account dialog |\n| **SSO Authentication** | Login via iblai.app — no tokens to manage |\n| **Tenant Switching** | Switch organizations from the avatar dropdown |\n\n## AGENTS.md / CLAUDE.md\n\nRefer to `CLAUDE.md` (when present) at the repository root for component priorities, SDK import conventions, and the env-setup flow Claude Code should follow when running the app for the first time.\n\n## Quick Start\n\n### Prerequisites\n\n- Node.js 18+\n- pnpm (fall back to npm only if unavailable)\n- An ibl.ai platform login (or a tenant you can SSO into via [iblai.app](https://iblai.app))\n- The `iblai` CLI — install from source (see below)\n\n### Install the `iblai` CLI\n\nThe CLI is installed from source via `make`. `clone + make install` is the supported install path — the version you run tracks the templates the team is editing.\n\n**macOS / Linux** (Python 3.11+, pip, git, make):\n\n```bash\ngit clone https://github.com/iblai/iblai-app-cli.git\ncd iblai-app-cli\nmake -C .iblai install\ncd -   # back to your project\n```\n\nIf `iblai` isn't found afterwards, add `~/.local/bin` to your `PATH`:\n\n```bash\nexport PATH=\"$HOME/.local/bin:$PATH\"   # add to ~/.bashrc or ~/.zshrc to persist\n```\n\n**Windows** (Python 3.11+, pip, git):\n\n```powershell\ngit clone https://github.com/iblai/iblai-app-cli.git\ncd iblai-app-cli\npip install -e .iblai/\ncd -\n```\n\nIf `iblai` isn't found, ensure Python Scripts is on `PATH` (typically `%APPDATA%\\Python\\Python311\\Scripts\\`).\n\nVerify the install:\n\n```bash\niblai --version\n```\n\n### Install \u0026 Run\n\n```bash\npnpm install\npnpm dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000). You'll be redirected to `https://login.iblai.app` for SSO; on return, the home page resolves your active tenant and lands you on the workspace home.\n\n`.env.local` is already populated with the iblai.app endpoints — no manual platform credentials are needed up front. Tenant + username are resolved at runtime from the SDK after SSO completes.\n\n### Build\n\n```bash\npnpm build\npnpm start\n```\n\n### Tests\n\nVitest covers the libraries, hooks, providers, components, and modals:\n\n```bash\npnpm test                # one-shot\npnpm test:watch          # rerun on file changes\npnpm test:coverage       # html + console v8 report under coverage/\n```\n\nPlaywright covers user journeys via real SSO:\n\n```bash\npnpm test:e2e            # spins up `next dev`, runs auth.setup.ts once, then the journeys\npnpm test:e2e:ui         # Playwright UI mode\npnpm test:e2e:headed     # headed browser\n```\n\n### Deploy to Vercel\n\n```bash\niblai deploy vercel\n```\n\nThe CLI auto-detects the deploy mode from `next.config.mjs`. Course is a server-rendered Next.js app, so the CLI will:\n\n- deploy the repo root to Vercel for a remote build,\n- disable Vercel authentication / password protection,\n- upload env vars from `.env.local` to production + preview (`NEXT_PUBLIC_*` as `plain`, the rest as `encrypted`; reserved keys and `your-…` placeholders are skipped),\n- rerun the deploy with `--force` + `VERCEL_FORCE_NO_BUILD_CACHE=1` whenever env vars changed so the new `NEXT_PUBLIC_*` values are re-inlined into the client bundle.\n\nOverride detection with `--mode static` or `--mode server` when needed. Full guide: [`/iblai-ops-deploy`](https://github.com/iblai/vibe/blob/main/skills/iblai-ops-deploy/SKILL.md).\n\n**Setup:** generate a Vercel token at [https://vercel.com/account/tokens](https://vercel.com/account/tokens) and add it to `iblai.env`:\n\n```bash\necho 'VERCEL_TOKEN=\u003ctoken\u003e' \u003e\u003e iblai.env\n```\n\n\u003e **Tip:** You can change the Vercel domain name by clicking on the three-dot button on your Vercel project on [`vercel.com`](https://vercel.com) and selecting \"Manage Domains\".\n\n### Native builds (iOS, Android, macOS, Linux, Surface)\n\nWrap Course in a native shell with [Tauri v2](https://tauri.app) using the `iblai builds` family of commands (full guide: [`/iblai-ops-build`](https://github.com/iblai/vibe/blob/main/skills/iblai-ops-build/SKILL.md)). All platforms share a single static `next build` export — the CLI runs the frontend build automatically before starting the Tauri dev server, and the WebView loads the same `out/` bundle. **Stop `pnpm dev` (and any other process on port 3000) before running a dev build.**\n\n#### One-time setup\n\n```bash\niblai add builds                    # Add Tauri support to the project\npnpm install\niblai builds iconography logo.png   # Generate per-platform app icons\n```\n\nYou'll also need [Rust via rustup](https://rustup.rs).\n\nFor mobile SSO, set `TAURI_CUSTOM_SCHEME=courseai` in `iblai.env` so the auth SPA redirects via a custom URI scheme (mobile WebViews can't return from an `https://` redirect to a native app).\n\n#### iOS\n\nRequires macOS + Xcode + Xcode Command Line Tools.\n\n```bash\nrustup target add aarch64-apple-ios aarch64-apple-ios-sim\niblai builds ios init                          # one-time\niblai builds device                            # list simulators\niblai builds ios dev \"iPhone 16 Pro Max\"       # run on simulator\niblai builds ios dev --device                  # run on a connected iPhone\niblai builds ios build                         # produce .ipa\niblai builds ci-workflow --ios                 # generate App Store CI\n```\n\n#### Android\n\nRequires Android Studio with the Android SDK + NDK installed.\n\n```bash\nrustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android\niblai builds android init                      # one-time\niblai builds device                            # list emulators\niblai builds android dev \"Pixel_9\"             # run on emulator\niblai builds android dev --device              # run on a connected device\niblai builds android build                     # produce APK\niblai builds ci-workflow --android             # generate Play Store CI\n```\n\n#### macOS desktop\n\nRequires `xcode-select --install`.\n\n```bash\niblai builds dev                               # run as a desktop app\niblai builds build                             # produce .dmg / .app\niblai builds ci-workflow --mac                 # generate macOS CI\n```\n\n#### Linux desktop\n\nSystem deps (Debian/Ubuntu):\n\n```bash\nsudo apt install libwebkit2gtk-4.1-dev build-essential libssl-dev \\\n  libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev\n```\n\n```bash\niblai builds dev                               # dev shell\niblai builds build                             # produce .deb / .AppImage\niblai builds ci-workflow --linux               # generate Linux CI\n```\n\n#### Surface (Windows tablet / desktop)\n\nRequires Visual Studio Build Tools (C++ workload) and WebView2 (bundled with Windows 11).\n\n```bash\niblai builds dev                               # dev shell\niblai builds build                             # produce .msi / .exe\niblai builds ci-workflow --windows             # generate Windows CI\n```\n\n#### Generate every CI workflow at once\n\n```bash\niblai builds ci-workflow --all\n```\n\n## Project Structure\n\n```\napp/\n├── layout.tsx                          # Root layout — wraps with providers\n├── page.tsx                            # Home redirect (auth check → workspace)\n├── login/                              # SSO entry\n├── sso-login-complete/                 # SSO callback (SDK \u003cSsoLogin\u003e)\n├── home/                               # Authed home / dashboard\n├── agents/                             # \u003cAgentSearch\u003e grid\n├── platform/[tenantId]/[mentorId]/     # Mentor chat\n├── chat/                               # Standalone chat surface\n├── course/                             # Per-course landing\n├── course-catalog/                     # Cross-tenant public catalog (useDiscover tenantOverride:\"main\")\n├── course-content/[id]/                # edX learner UI (course / dates / progress / discussion / bookmarks)\n├── courses/                            # My Courses — course-creation list view\n├── customize/                          # Tenant customization\n├── project/                            # Project workspaces\n└── users/                              # User directory + roles\ncomponents/\n├── account-dialog.tsx                  # Profile / social / security / admin tabs in a modal\n├── analytics-navigation.tsx            # Analytics surface (when enabled)\n├── chat-input/                         # Custom chat input form\n├── chat-tabs/                          # Chat tab strip\n├── course-creation-academy-block.tsx   # AI-assisted course-creation entry point\n├── create-academy-dialog.tsx           # School / academy creation flow\n├── credential-detail-modal.tsx         # Integration credential viewer\n└── modals/                             # Shared dialogs (invite, rename, delete, create project, ...)\nlib/iblai/\n├── config.ts                           # NEXT_PUBLIC_* env reader\n├── tenant.ts                           # Tenant resolution\n├── course-actions.ts                   # Course-creation REST helpers (list, delete, brief lookup)\n├── auth-utils.ts                       # redirectToAuthSpa, logout, handleTenantSwitch\n└── use-url-context.ts                  # tenantKey + mentorId + username from URL params\nproviders/\n└── iblai-providers.tsx                 # Redux + AuthProvider + TenantProvider\n```\n\n## Built With\n\n- [Next.js](https://nextjs.org) — App Router\n- [@iblai/iblai-js](https://www.npmjs.com/package/@iblai/iblai-js) — SDK for auth, UI components, and data\n- [@iblai/data-layer](https://www.npmjs.com/package/@iblai/data-layer) — RTK Query data layer\n- [@iblai/web-containers](https://www.npmjs.com/package/@iblai/web-containers) — framework-agnostic SDK components\n- [LiveKit](https://livekit.io) — WebRTC transport for real-time avatar / voice sessions\n- [Tailwind CSS](https://tailwindcss.com) — utility-first styling with ibl.ai design tokens\n- [shadcn/ui](https://ui.shadcn.com) — accessible UI primitives\n- [iblai.app](https://iblai.app) — production backend for auth, AI agents, billing, and analytics\n\n## Contributing\n\n### Setup\n\n1. Fork the repo and clone it\n2. Install dependencies: `pnpm install`\n3. Start the dev server: `pnpm dev`\n\n### Development Workflow\n\n1. Create a branch from `main`: `git checkout -b feat/my-feature`\n2. Make your changes\n3. Run `pnpm build` and `pnpm test` to verify\n4. Commit and push your branch\n5. Open a pull request against `main`\n\n### Guidelines\n\n- **Use ibl.ai SDK components first** — do not build custom components when an SDK equivalent exists\n- **Use shadcn/ui for custom UI** — install via `npx shadcn@latest add \u003ccomponent\u003e`, not raw HTML or third-party libraries\n- **Do not override SDK styles** — SDK components ship with their own styling\n- **Use SDK design tokens** — reference CSS variables like `var(--primary-color)`, `var(--border-color)`, `var(--text-secondary)` instead of hardcoded colors\n- **Course-creation API**: paths like `/api/ai-mentor/orgs/{org}/users/{user_id}/course-creation/course/{id}/` take the **integer `EdxCourse.id`**, not the edX locator. See `lib/iblai/course-actions.ts`.\n- **Use `pnpm`** as the package manager\n\n### Adding Features\n\nUse the iblai CLI and Claude Code skills to add new features:\n\n```bash\niblai add auth           # SSO authentication\niblai add profile        # User profile\niblai add account        # Account/org settings\niblai add analytics      # Analytics dashboard\niblai add notification   # Notification bell\niblai add invite         # Invite dialogs\niblai add builds         # Tauri v2 desktop/mobile shell\n```\n\nSee `CLAUDE.md` for the full list of skills and component priority rules.\n\n## Resources\n\n- [ibl.ai Documentation](https://docs.ibl.ai)\n- [iblai-app-cli](https://github.com/iblai/iblai-app-cli) — CLI for scaffolding ibl.ai apps\n- [@iblai/mcp](https://www.npmjs.com/package/@iblai/mcp) — MCP server for AI-assisted development\n- [Vibe](https://github.com/iblai/vibe) — developer toolkit for building with ibl.ai\n- [Vibe Starter](https://github.com/iblai/vibe-starter) — pre-wired Next.js + ibl.ai SSO template\n\n## License\n\nReleased under the [MIT License](LICENSE).\n\n---\n\n\u003csub\u003eBuilt with \u003ca href=\"https://github.com/iblai/vibe\"\u003eibl.ai Vibe\u003c/a\u003e\u003c/sub\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiblai%2Fcourse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiblai%2Fcourse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiblai%2Fcourse/lists"}