{"id":51001871,"url":"https://github.com/iblai/lms","last_synced_at":"2026-06-20T15:30:41.551Z","repository":{"id":363873446,"uuid":"1172859268","full_name":"iblai/lms","owner":"iblai","description":"Skills intelligence platform — discover courses, track competencies, earn credentials, and accelerate workforce development. Built with Next.js 15, React 19, and the ibl.ai SDK.","archived":false,"fork":false,"pushed_at":"2026-06-10T18:32:10.000Z","size":8833,"stargazers_count":9,"open_issues_count":12,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-10T19:16:18.167Z","etag":null,"topics":["competency-based-learning","coursework","digital-credentials","e-learning","edtech","education","ibl-ai","learners","learning-management-system","lms","mooc","nextjs","online-learning","react","school","skills","typescript","university","upskilling","workforce-development"],"latest_commit_sha":null,"homepage":"https://lms.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":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-04T19:03:29.000Z","updated_at":"2026-06-10T17:11:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/iblai/lms","commit_stats":null,"previous_names":["iblai/lms"],"tags_count":102,"template":false,"template_full_name":null,"purl":"pkg:github/iblai/lms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iblai%2Flms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iblai%2Flms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iblai%2Flms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iblai%2Flms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/iblai","download_url":"https://codeload.github.com/iblai/lms/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/iblai%2Flms/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":["competency-based-learning","coursework","digital-credentials","e-learning","edtech","education","ibl-ai","learners","learning-management-system","lms","mooc","nextjs","online-learning","react","school","skills","typescript","university","upskilling","workforce-development"],"created_at":"2026-06-20T15:30:40.825Z","updated_at":"2026-06-20T15:30:41.546Z","avatar_url":"https://github.com/iblai.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003cimg src=\"https://ibl.ai/images/iblai-logo.png\" alt=\"ibl.ai\" width=\"300\" /\u003e\n\n# LMS\n\n**Open-source skills intelligence platform — discover courses, track competencies, earn credentials, and accelerate workforce development.**\n\n[![Next.js](https://img.shields.io/badge/Next.js-15-black?logo=next.js)](https://nextjs.org)\n[![React](https://img.shields.io/badge/React-19-61DAFB?logo=react)](https://react.dev)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.9-3178C6?logo=typescript)](https://www.typescriptlang.org)\n[![Tailwind CSS](https://img.shields.io/badge/Tailwind-4-38BDF8?logo=tailwindcss)](https://tailwindcss.com)\n[![Tauri](https://img.shields.io/badge/Tauri-2-FFC131?logo=tauri)](https://tauri.app)\n\n[Features](#features) • [Quick Start](#quick-start) • [Deployment](#deployment) • [Architecture](#architecture) • [Configuration](#configuration) • [Contributing](#contributing)\n\n_Deployed at [lms.ibl.ai](https://lms.ibl.ai)_\n\n\u003c/div\u003e\n\n---\n\n## AGENTS.md\n\nAgent-facing guidance for AI assistants (Claude Code, Cursor, etc.) lives in [`AGENTS.md`](AGENTS.md). It covers prettier formatting, the `--no-verify` ban on git pushes, and the e2e coverage maintenance protocol. `CLAUDE.md` is a symlink to `AGENTS.md`.\n\nSkill files referenced from `AGENTS.md`:\n\n- [`.claude/skills/prettier-format.md`](.claude/skills/prettier-format.md) — formatting protocol\n- [`.claude/skills/safe-push.md`](.claude/skills/safe-push.md) — pre-push hook handling (build, lint, typecheck, unit tests, coverage, e2e)\n- [`.claude/skills/e2e-coverage.md`](.claude/skills/e2e-coverage.md) — when and how to update `e2e/coverage.json` and `e2e/COVERAGE.md`\n\n---\n\n## What is LMS?\n\nLMS is a production-ready learning and skills management platform that connects learners with courses, tracks competency growth, issues credentials, and delivers actionable analytics. It ships as a modern web application backed by a powerful multi-tenant API with integrated LMS and AI mentor capabilities.\n\nWhether you're an enterprise building an internal upskilling program, a university offering online courses, or an EdTech startup creating a branded learning marketplace — LMS gives you the complete stack out of the box.\n\n---\n\n## Features\n\n### Course Discovery \u0026 Enrollment\n\n- **Faceted search** — filter courses by subject, difficulty, skills, credential type, and content type\n- **Personalized recommendations** — AI-powered course suggestions based on learner profile and goals\n- **Course detail pages** — rich metadata with syllabus, learning outcomes, instructor bios, and prerequisites\n- **Flexible enrollment** — self-enrollment, invitation-only, and Stripe-powered paid courses\n- **EdX LMS integration** — embedded course content, progress tracking, and grading via iframe\n\n### Skills \u0026 Competency Tracking\n\n- **Skill inventory** — track earned skills with proficiency levels (0–5 scale)\n- **Skill points** — accumulate points from course and unit completions\n- **Skill leaderboards** — compare mastery across learners and cohorts\n- **Self-reported skills** — onboarding flow for learners to declare existing competencies\n- **Skills-to-course mapping** — see which courses develop which skills\n\n### Credentials \u0026 Badges\n\n- **Digital credentials** — earn and display certificates, badges, and micro-credentials\n- **Credential verification** — issuer metadata, expiration tracking, and sharing\n- **Course-linked credentials** — automatic credential issuance on course completion\n\n### Programs \u0026 Learning Pathways\n\n- **Multi-course programs** — structured program enrollments with progress tracking\n- **Curated pathways** — guided learning sequences toward specific career goals\n- **Program management** — pricing, enrollment windows, and custom metadata\n- **Pathway creation** — build and share custom pathways for teams or organizations\n\n### Learner Profile \u0026 Analytics\n\n- **Activity dashboard** — courses enrolled, courses completed, skills acquired, time spent\n- **Time-spent charts** — daily/weekly learning activity visualization\n- **Public profile** — shareable learner profile with education, experience, and credentials\n- **Resume builder** — education history, work experience, and portfolio links\n\n### Analytics (Admin)\n\n- **Overview dashboard** — platform-wide usage stats and engagement metrics\n- **User analytics** — per-learner activity and cohort trends\n- **Topic analysis** — most popular subjects and content breakdowns\n- **Transcript viewer** — searchable session and activity logs\n- **Financial reporting** — revenue tracking and billing analytics\n- **Custom reports** — generate and download data exports\n\n### Enterprise \u0026 Platform\n\n- **Multi-tenancy** — full tenant isolation with per-org configuration, branding, and user management\n- **Role-based access control (RBAC)** — granular permissions with roles, policies, and group-based access\n- **SSO authentication** — Single Sign-On with configurable identity providers\n- **Stripe billing** — paid courses, subscription management, and checkout flows\n- **Notifications** — in-app notification system with alert templates\n- **White-labeling** — custom themes, logos, and advanced CSS per tenant\n- **AI mentor sidebar** — embedded conversational AI assistant for learner support\n- **Configurable onboarding** — skill self-assessment and profile setup flows\n\n---\n\n## Tech Stack\n\n| Layer     | Technology                                                                                                       |\n| --------- | ---------------------------------------------------------------------------------------------------------------- |\n| Framework | Next.js 15, React 19, TypeScript 5.9                                                                             |\n| Styling   | Tailwind CSS 4, Radix UI, shadcn/ui                                                                              |\n| State     | Redux Toolkit, React-Redux                                                                                       |\n| Forms     | React Hook Form, TanStack Form, Zod                                                                              |\n| Charts    | Recharts                                                                                                         |\n| Animation | Framer Motion                                                                                                    |\n| PDF       | react-pdf, pdfjs-dist                                                                                            |\n| Desktop   | Tauri 2 (Windows, macOS, Linux, iOS, Android shell)                                                              |\n| Testing   | Vitest, Testing Library, Playwright                                                                              |\n| SDK       | [@iblai/iblai-js](https://www.npmjs.com/package/@iblai/iblai-js) — unified data layer, components, and utilities |\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n- **Node.js 25.3.0+** (we recommend using [nvm](https://github.com/nvm-sh/nvm))\n- **pnpm 10+** — `npm install -g pnpm`\n\n### 1. Clone the repository\n\n```bash\ngit clone https://github.com/iblai/lms.git\ncd lms\n```\n\n\u003e The repo is named `lms`; the application inside is **LMS**.\n\n### 2. Install dependencies\n\n```bash\npnpm install\n```\n\n### 3. Configure environment\n\n```bash\ncp .env.example .env.local\n```\n\nEdit `.env.local` with your ibl.ai platform URLs and feature flags — see [Configuration › Environment Variables](#environment-variables) for the full reference.\n\n### 4. Start the dev server\n\n```bash\npnpm dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) in your browser.\n\n\u003e **Node.js 25+ note:** The `dev` script already includes `NODE_OPTIONS='--no-experimental-webstorage'` to prevent conflicts with the SDK's browser storage guards. If you customize the script, keep that flag.\n\n### Tests\n\n```bash\npnpm test            # vitest unit tests\npnpm test:coverage   # unit tests with coverage report\npnpm test:e2e        # playwright e2e suite (headless)\npnpm test:e2e:ui     # playwright UI mode\npnpm test:e2e:headed # playwright in a headed browser\n```\n\nPlaywright auth fixtures live under `e2e/`. Coverage tracking (`e2e/coverage.json` + `e2e/COVERAGE.md`) is enforced by the pre-push hook — see [`.claude/skills/e2e-coverage.md`](.claude/skills/e2e-coverage.md).\n\n---\n\n## Deployment\n\n### Docker\n\nBuild and run with Docker:\n\n```bash\ndocker build -t lms .\ndocker run -p 3000:3000 --env-file .env.local lms\n```\n\n### Standalone\n\n```bash\npnpm build\npnpm start\n```\n\n`pnpm start` runs `pnpm exec next start` — a standard Next.js production server. Deploy to any host with Node.js 25+ installed.\n\n### Desktop \u0026 Mobile (Tauri)\n\nLMS ships with a [Tauri 2](https://tauri.app) shell in [`src-tauri/`](src-tauri) so the same Next.js bundle can be packaged as a native desktop app for Windows, macOS, and Linux, or a mobile app for iOS and Android.\n\nThere are **no `pnpm tauri:*` scripts** — invoke the Tauri CLI directly from the `src-tauri/` directory:\n\n```bash\n# desktop dev (hot reload)\ncd src-tauri \u0026\u0026 cargo tauri dev\n\n# desktop production build\ncd src-tauri \u0026\u0026 cargo tauri build\n\n# iOS / Android\ncd src-tauri \u0026\u0026 cargo tauri ios init\ncd src-tauri \u0026\u0026 cargo tauri android init\n```\n\nRequirements: Rust toolchain (`rustup`), plus platform-specific dependencies (Xcode for iOS, Android SDK + NDK for Android). See the [Tauri prerequisites guide](https://tauri.app/start/prerequisites/).\n\n---\n\n## Architecture\n\n```\nlms/\n├── app/                          # Next.js App Router\n│   ├── home/                     # Learner dashboard\n│   ├── discover/                 # Course discovery \u0026 search\n│   ├── recommended/              # Personalized recommendations\n│   ├── courses/[course_id]/      # Course details \u0026 enrollment\n│   ├── course-content/           # EdX LMS integration (iframe)\n│   │   └── [course_id]/          # Course, progress, bookmarks, forums\n│   ├── programs/[program_id]/    # Program enrollments\n│   ├── profile/                  # Learner profile\n│   │   ├── skills/               # Skills inventory\n│   │   ├── credentials/          # Earned credentials\n│   │   ├── courses/              # Enrollment history\n│   │   ├── programs/             # Program enrollments\n│   │   ├── pathways/             # Learning pathways\n│   │   └── public/               # Shareable profile\n│   ├── analytics/                # Admin analytics\n│   │   ├── courses/              # Course-level analytics\n│   │   ├── users/                # User-level analytics\n│   │   ├── programs/             # Program analytics\n│   │   ├── topics/               # Topic breakdowns\n│   │   ├── transcripts/          # Activity transcripts\n│   │   ├── financial/            # Revenue \u0026 billing\n│   │   ├── monetization/         # Monetization metrics\n│   │   └── reports/              # Custom analytics reports\n│   ├── notifications/            # Notification center\n│   │   └── [notificationId]/     # Notification detail\n│   ├── reports/[tenantKey]/      # Per-tenant reports\n│   ├── start/                    # Onboarding flow\n│   ├── sso-login/                # SSO authentication\n│   ├── sso-login-complete/       # SSO completion handler\n│   ├── error/[code]/             # Error pages\n│   └── version/                  # App version info\n│\n├── components/                   # React components\n│   ├── ui/                       # 52 shadcn/ui primitives\n│   ├── header/                   # Navigation \u0026 user profile\n│   ├── profile/                  # Profile cards (education, experience, skills)\n│   ├── edx-iframe/               # LMS content embedding\n│   ├── onboarding/               # Setup wizard slides\n│   ├── chat/                     # Chat / mentor UI\n│   └── ...                       # Feature components (course cards, dialogs, skeletons)\n│\n├── hooks/                        # 58 custom React hooks\n│   ├── courses/                  # Course data, enrollment, navigation\n│   ├── profile/                  # Profile stats, time spent, pathways\n│   ├── skills/                   # Skill tracking \u0026 reporting\n│   ├── discover/                 # Search \u0026 filtering\n│   ├── search/                   # Catalog search \u0026 personalization\n│   └── ...\n│\n├── features/                     # Feature modules (state + logic)\n│   ├── mentor/                   # AI mentor sidebar\n│   ├── rbac/                     # Role-based access control\n│   └── tenant/                   # Multi-tenant context\n│\n├── services/                     # API service definitions\n├── types/                        # TypeScript interfaces\n├── config/                       # Runtime configuration\n├── providers/                    # React context providers\n├── lib/                          # Utilities\n├── styles/                       # Global CSS\n├── src-tauri/                    # Tauri desktop / mobile shell\n├── e2e/                          # Playwright e2e suite + coverage tracking\n├── docs/                         # Project docs ([theme-customization.md](docs/theme-customization.md))\n└── public/                       # Static assets\n```\n\n### Data Flow\n\n```\nUser → React Components → Custom Hooks → Redux (RTK Query) → ibl.ai API\n                                              ↓\n                                        @iblai/iblai-js SDK\n                                        ├── /data-layer  (API slices, reducers)\n                                        ├── /web-utils   (auth, providers, tenant hooks)\n                                        └── /web-containers (shared UI components)\n```\n\nThe app uses **[@iblai/iblai-js](https://www.npmjs.com/package/@iblai/iblai-js)** as its unified SDK, which bundles the data layer, authentication utilities, and shared components under a single package.\n\n---\n\n## Configuration\n\n### Environment Variables\n\nAll app config is `NEXT_PUBLIC_*` (exposed to the browser). Defaults below match `.env.example`.\n\n| Variable                                              | Required | Default                          | Description                                                       |\n| ----------------------------------------------------- | -------- | -------------------------------- | ----------------------------------------------------------------- |\n| `NODE_ENV`                                            | No       | `development`                    | Node environment                                                  |\n| `NEXT_PUBLIC_API_BASE_URL`                            | Yes      | `https://api.iblai.app`          | Base API URL — `/dm`, `/axd`, `/lms`, `/studio` are derived from this |\n| `NEXT_PUBLIC_LMS_URL`                                 | Yes      | `https://learn.iblai.app`        | EdX LMS host                                                      |\n| `NEXT_PUBLIC_DM_URL_TEST`                             | No       |                                  | Override DM URL for testing                                       |\n| `NEXT_PUBLIC_AUTH_URL`                                | Yes      | `https://login.iblai.app`        | Authentication service URL                                        |\n| `NEXT_PUBLIC_MFE_URL`                                 | Yes      | `https://apps.learn.iblai.app`   | Open edX micro-frontends host                                     |\n| `NEXT_PUBLIC_SPA_ANALYTICS_URL`                       | No       | `https://analytics.iblai.app`    | Analytics SPA URL                                                 |\n| `NEXT_PUBLIC_MENTOR_URL`                              | No       | `https://mentorai.iblai.app`     | AI mentor service URL                                             |\n| `NEXT_PUBLIC_PLATFORM_BASE_DOMAIN`                    | No       |                                  | Tenant subdomain root                                             |\n| `NEXT_PUBLIC_SUPPORT_EMAIL`                           | No       | `support@ibl.ai`                 | Support contact email                                             |\n| `NEXT_PUBLIC_COPYRIGHT`                               | No       |                                  | Footer copyright string                                           |\n| `NEXT_PUBLIC_HIDE_RECOMMENDED_TAB`                    | No       | `false`                          | Hide the recommendations page                                     |\n| `NEXT_PUBLIC_COURSE_ELIGIBILITY_ENABLED`              | No       | `false`                          | Enable enrollment prerequisite checks                             |\n| `NEXT_PUBLIC_ENABLE_COURSE_ELIGIBILITY_LICENSE_CHECK` | No       | `false`                          | Gate eligibility on license status                                |\n| `NEXT_PUBLIC_ENABLE_START_ROLE`                       | No       | `false`                          | Enable onboarding skill self-assessment                           |\n| `NEXT_PUBLIC_ENABLE_MENTOR`                           | No       | `true`                           | Enable embedded AI mentor sidebar                                 |\n| `NEXT_PUBLIC_ENABLE_GRAVATAR_ON_PROFILE_PIC`          | No       | `true`                           | Use Gravatar for profile pictures                                 |\n| `NEXT_PUBLIC_ENABLE_RBAC`                             | No       | `false`                          | Enable role-based access control                                  |\n| `NEXT_PUBLIC_USE_FOOTER_MENUS`                        | No       | `false`                          | Enable custom footer navigation                                   |\n| `NEXT_PUBLIC_ENABLE_COMBINED_RECOMMENDATION_REPORT`   | No       | `false`                          | Aggregate recommendation reports                                  |\n| `NEXT_PUBLIC_DISCOVER_FACETS_FILTERS_TO_HIDE`         | No       |                                  | Comma-separated list of discover facets to hide                   |\n| `NEXT_PUBLIC_FOOTER_MENUS`                            | No       |                                  | JSON array of footer menu items                                   |\n| `NEXT_PUBLIC_DEFAULT_EMBEDDED_MENTOR_NAME`            | No       | `mentorAI`                       | Default mentor identifier                                         |\n| `NEXT_PUBLIC_COMBINED_RECOMMENDATION_REPORTS`         | No       |                                  | Combined recommendation reports config                            |\n\n### Theming\n\nBrand colors, fonts, and theme override entrypoints are documented in [`docs/theme-customization.md`](docs/theme-customization.md). Tenant-specific theming lives in tenant metadata.\n\n### Feature Flags\n\nFeature flags are set via `NEXT_PUBLIC_*` environment variables and control which features are visible at runtime:\n\n- **Onboarding flow** — `NEXT_PUBLIC_ENABLE_START_ROLE=true`\n- **AI mentor** — `NEXT_PUBLIC_ENABLE_MENTOR=true`\n- **RBAC** — `NEXT_PUBLIC_ENABLE_RBAC=true`\n- **Course eligibility** — `NEXT_PUBLIC_COURSE_ELIGIBILITY_ENABLED=true`\n- **Recommendations tab** — `NEXT_PUBLIC_HIDE_RECOMMENDED_TAB=false`\n- **Skill leaderboard** — configured via tenant metadata (`isSkillsLeaderBoardEnabled`)\n\n---\n\n## Scripts\n\n| Script                 | Description                              |\n| ---------------------- | ---------------------------------------- |\n| `pnpm dev`             | Start dev server (port 3000)             |\n| `pnpm build`           | Production build                         |\n| `pnpm start`           | Start production server (`next start`)   |\n| `pnpm lint`            | ESLint with auto-fix + typecheck         |\n| `pnpm typecheck`       | TypeScript type checking                 |\n| `pnpm format`          | Format with Prettier                     |\n| `pnpm test`            | Unit tests (Vitest)                      |\n| `pnpm test:coverage`   | Unit tests with coverage report          |\n| `pnpm test:e2e`        | Playwright e2e suite (headless)          |\n| `pnpm test:e2e:ui`     | Playwright UI mode                       |\n| `pnpm test:e2e:headed` | Playwright in a headed browser           |\n| `pnpm release`         | Release via release-it                   |\n| `pnpm prepare`         | Husky pre-commit / pre-push hook install |\n\n\u003e Tauri builds are not exposed as npm scripts — run `cargo tauri dev` / `cargo tauri build` from `src-tauri/` directly (see [Deployment › Desktop \u0026 Mobile](#desktop--mobile-tauri)).\n\n---\n\n## ibl.ai Platform\n\nLMS is built on the [ibl.ai](https://ibl.ai) platform. To use this app, you need access to an ibl.ai backend instance which provides:\n\n- **Skills \u0026 Course API** — course catalog, enrollment, progress tracking, and skill management\n- **EdX LMS** — course content delivery, grading, and certificate issuance\n- **Authentication** — SSO, OAuth, JWT-based auth with multi-tenant support\n- **Data Platform** — analytics, billing, user management, and notification services\n- **AI Mentor API** — conversational AI for learner support (optional)\n\nVisit [ibl.ai](https://ibl.ai) to set up your backend or request a hosted instance.\n\n---\n\n## Contributing\n\nWe welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on how to get started.\n\nBefore pushing, review [`AGENTS.md`](AGENTS.md) and the skill files under [`.claude/skills/`](.claude/skills/) — the pre-push hook runs build, lint, typecheck, unit tests, coverage, and e2e validation, and `--no-verify` is **not** an option.\n\n---\n\n## Built With\n\n- [Next.js 15](https://nextjs.org) — React framework with App Router\n- [React 19](https://react.dev) — UI library\n- [TypeScript 5.9](https://www.typescriptlang.org) — type safety\n- [Tailwind CSS 4](https://tailwindcss.com) — utility-first styling\n- [shadcn/ui](https://ui.shadcn.com) — accessible component primitives\n- [Tauri 2](https://tauri.app) — desktop \u0026 mobile shell\n- [Redux Toolkit](https://redux-toolkit.js.org) — state management\n- [Vitest](https://vitest.dev) + [Playwright](https://playwright.dev) — unit \u0026 e2e testing\n- [@iblai/iblai-js](https://www.npmjs.com/package/@iblai/iblai-js) — ibl.ai SDK\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\nMade with care by the [ibl.ai](https://ibl.ai) team\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiblai%2Flms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fiblai%2Flms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fiblai%2Flms/lists"}