{"id":"df1616f6-b47a-46ee-b660-e247cc9f5153","slug":"coursenest","kind":"mcp","name":"CourseNest","summary":"CourseNest — High-Performance, Local-First, Offline Educational Studio with Multi-Platform Desktop & Mobile Support","owner":"PixelApprentice","repoUrl":"https://github.com/PixelApprentice/CourseNest","license":"Apache-2.0","licenseTier":"permissive","trust":"community","stars":1,"match":null,"fewStars":true,"format":"mcp","createdAt":"2026-10-23T12:54:05.000Z","addedAt":"2026-10-28T09:29:46.673Z","logoUrl":"https://avatars.githubusercontent.com/u/193057258?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["cloud-infra"],"tags":["capacitor","education","electron","fastapi","local-first","offline-first","open-source","react"],"runtime":"binary","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-28T09:40:03.408Z","sample":false,"url":"https://conduits.dev/tools/coursenest","language":"TypeScript","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"# CourseNest 🎓\n> **Open-Source, Local-First, Multi-Audience Educational Studio, Course Creator & Video Player**\n\n[![License: Apache-2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Release: v2.0.0](https://img.shields.io/badge/Release-v2.0.0-emerald.svg)](https://github.com/PixelApprentice/Korse/releases)\n[![Node.js](https://img.shields.io/badge/Node.js-20_LTS-green.svg)](https://nodejs.org/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue.svg)](https://www.typescriptlang.org/)\n[![Python](https://img.shields.io/badge/Python-3.14+-blue.svg)](https://python.org/)\n[![Electron](https://img.shields.io/badge/Electron-33-47848F.svg)](https://www.electronjs.org/)\n[![Capacitor](https://img.shields.io/badge/Capacitor-Android_7-119EFF.svg)](https://capacitorjs.com/)\n[![pnpm](https://img.shields.io/badge/pnpm-10.34-orange.svg)](https://pnpm.io/)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)\n\n**Keywords:** `local-first lms` • `offline course player` • `custom course creator` • `youtube course embed` • `pptx presentation reader` • `vlc web player` • `air-gapped learning` • `educational studio` • `desktop electron` • `android learning`\n\n---\n\nCourseNest is a modern, privacy-first, **air-gapped educational studio and curriculum player** designed for students, educators, and institutions. It lets you create custom courses, ingest course folders, view PowerPoint presentations, watch video lectures with VLC-grade audio controls, embed YouTube tutorials, and study offline with private local AI.\n\n---\n\n## 🎨 Multi-Audience Theme & Aesthetic Studio\n\nCourseNest features a **built-in 9-theme design studio** with bespoke typography (SIL OFL open-source fonts), atmospheric SVG scenic artwork with contrast scrims, theme-adaptive vector logos, and zero-CPU pure CSS GPU keyframe loaders:\n\n| Theme | Aesthetic Character | Emblem & Backdrop | Display Typography |\n| :--- | :--- | :--- | :--- |\n| 🕌 **Halal Edition** | Islamic modesty & serenity | Rub el Hizb 8-point geometric star & Mosque minaret skyline | Plus Jakarta Sans |\n| 🌸 **Sakura Bloom** | Kawaii pastel & cozy floral | 5-petal cherry blossom seal & Mt. Fuji Japanese garden vista | Nunito Rounded |\n| 🧱 **Toybox Playful** | Children & claymorphism | 3D interlocking brick & bubbly floating landscape | Fredoka Bubbly |\n| ⚡ **Neo-Tokyo Mecha** | High-tech cyberpunk | HUD targeting reticle & neon metropolis skyline | Chakra Petch Tech |\n| 💥 **Manga Screentone** | Japanese comic action | Comic burst stamp, halftone screentone & speedlines | Chakra Petch Bold |\n| 🍃 **Studio Ghibli Nature** | Whimsical woodland meadow | Sprouting seedling & ancient camphor tree canopy | DM Sans Organic |\n| 🪨 **Obsidian Moss** | Deep-focus engineering | Monolith geometric blueprint & emerald glow | DM Sans Slate |\n| 🌑 **OLED Midnight** | 0% true black battery saver | Celestial orbital ring & emerald hairlines | JetBrains Mono |\n| 📰 **Clean Editorial** | Daylight academic paper | Swiss drafting grid & minimalist layout | Inter / DM Sans |\n\n> **Reusable Engine**: The entire theme engine is built modularly with open-source typography, SVG scenic backdrops, and theme-adaptive vector emblems inside [`packages/ui`](packages/ui) and [`packages/config`](packages/config).\n\n---\n\n## 📸 Visual Showcase & UI Gallery\n\n| Learning Overview (Obsidian Moss) | Multi-Archive Importer (4-Step Stepper) |\n| :---: | :---: |\n| ![Home Dashboard](docs/screenshots/01_home_dashboard.png) | ![Import Wizard](docs/screenshots/05_import_wizard_fresh.png) |\n\n| Lesson Player & Multi-Format Subtitles | Syntax-Highlighted Code Block (1-Click Copy) |\n| :---: | :---: |\n| ![Lesson Subtitles](docs/screenshots/06b_lesson_subtitles_menu.png) | ![Code Viewer](docs/screenshots/06c_lesson_code_snippet.png) |\n\n| In-App Mini Window Documentation Viewer | Local AI Study Buddy & Timestamps |\n| :---: | :---: |\n| ![Mini Window](docs/screenshots/06d_lesson_mini_window_modal.png) | ![Local AI Buddy](docs/screenshots/06g_lesson_ai_study_buddy.png) |\n\n| Curriculum Roadmap Diagram | Append Supplementary Materials Mode |\n| :---: | :---: |\n| ![Curriculum Diagram](docs/screenshots/04b_course_diagram_view.png) | ![Append Mode](docs/screenshots/05b_import_wizard_append.png) |\n\n| Course Dossier & Inline Title Editor | Storage Purge Confirmation Modal |\n| :---: | :---: |\n| ![Course Landing](docs/screenshots/04_course_landing_dossier.png) | ![Delete Purge Modal](docs/screenshots/04c_delete_purge_modal.png) |\n\n| Free Cloud AI TokenHarbor Verification | System Logs Ring-Buffer Explorer |\n| :---: | :---: |\n| ![Settings AI](docs/screenshots/07d_settings_ai_byo_tokenharbor.png) | ![System Logs](docs/screenshots/07e_settings_system_logs.png) |\n\n| Custom Course Studio & Authoring Engine | Native PowerPoint (.pptx) Slide Presentation Reader |\n| :---: | :---: |\n| ![Course Studio](docs/screenshots/09_custom_course_studio.png) | ![PPTX Presentation Viewer](docs/screenshots/10_pptx_presentation_viewer.png) |\n\n| Active Recall Flashcards Deck (3D Flip) | In-App AI Tool Actions & Temporal Grounding |\n| :---: | :---: |\n| ![Flashcards Deck](docs/screenshots/06i_lesson_ai_flashcards_deck.png) | ![AI Tool Actions](docs/screenshots/06j_lesson_ai_tool_action_chips.png) |\n\n| 🕌 Halal Edition Wallpaper | 🌸 Sakura Bloom Garden |\n| :---: | :---: |\n| ![Halal Edition](docs/screenshots/theme_halal_mosque.png) | ![Sakura Bloom](docs/screenshots/theme_sakura_bloom.png) |\n\n| 🧱 Toybox Playful Valley | ⚡ Neo-Tokyo Mecha Skyline |\n| :---: | :---: |\n| ![Toybox Valley](docs/screenshots/theme_toybox_playful.png) | ![Neo-Tokyo Mecha](docs/screenshots/theme_neo_tokyo_mecha.png) |\n\n---\n\n## 🎯 Design Engineering & Polish (Emil Kowalski Philosophy)\n\nThe user interface follows strict design engineering standards:\n* **Zero `transition: all`**: Every transition in the codebase explicitly targets composite-only GPU properties (`transform`, `opacity`, `background-color`, `border-color`, `box-shadow`) to maintain a steady 60fps frame budget.\n* **Physical `:active` Feedback**: Buttons and cards give immediate tactile feedback (`scale(0.97)` / `active:scale-95`). In the Manga theme, buttons physically compress into the page (`translate(1px, 1px)` with reduced shadow).\n* **Origin-Aware Popovers**: Dropdowns and popovers (such as the notification flyout) scale from their trigger origin (`origin-top-right zoom-in-95 ease-out`), while dialog modals remain centered in the viewport.\n* **Custom Cubic-Bezier Easing**: Uses strong deceleration curves (`--ease-out: cubic-bezier(0.23, 1, 0.32, 1)`) rather than sluggish browser defaults.\n* **Accessibility & Touch Safeguards**: Full `@media (prefers-reduced-motion: reduce)` motion dampening and `@media (hover: none)` sticky-hover prevention for touch screens.\n\n---\n\n## ⚡ Core Architectural Pillars\n\n### 1. 100% Offline-First Learning Core (Zero Cloud Overhead)\n* **Zero Telemetry or Remote Tracking**: All course manifests, notes, bookmarks, quiz scores, and video progress are saved strictly to local device storage (SQLite WAL / IndexedDB).\n* **Low-End Hardware Optimization**: Students with budget dual-core laptops run the application with **0% idle CPU**. The app loads instantly and does not strain battery life or system memory.\n* **HashRouter Navigation**: Complete independence from web server rewrites—works under `http://`, `file://`, and Android WebView.\n\n### 2. VLC-Grade Media Suite Player\n* **200% Web Audio Super-Gain Booster**: Amplifies quiet professor recordings up to double standard volume using the Web Audio API.\n* **Speech Presence Clarity Equalizer**: A dedicated Biquad bandpass boost (+6dB @ 2.5kHz) brings vocal frequencies to the foreground over background room echo.\n* **Frame-by-Frame Stepper**: Step backward or forward by exactly 1/30th of a second for technical diagrams or code walkthroughs.\n* **A-B Looping**: Set custom loop markers to repeat difficult lecture segments continuously.\n* **Full-Width Mouse Wheel Scroll**: Unified scroll pipeline across 100% of the viewport width—smooth scrolling remains completely fluid whether hovering over video margins, controls, or code blocks.\n* **Picture-in-Picture (PiP) & Mini-Window**: Seamless floating video playback while continuing to read course texts and lecture materials.\n* **Auto-Completion & \"Next Lesson\" Flow**: Automatically marks units as complete when a lecture video finishes, prompting the student with an intuitive celebratory card to advance to the next unit with a single click or keyboard shortcut.\n* **External `vlc://` Protocol Bridge**: One-click stream handoff to desktop VLC Media Player.\n\n### 3. Decoupled Media Tier & Storage Disconnection Resilience\n* **Separation of State and Multimedia**: Heavy video files can be stored on removable USB flash drives or external SD cards, while learning state (notes, progress, quiz submissions) resides on internal device storage.\n* **Unplugged Resilience**: If an external media drive is unexpectedly unplugged during playback, the application preserves all notes and checkpoint data, transitions gracefully to an informative reconnect prompt, and automatically resumes video upon re-insertion.\n\n#### 🗄️ Where Are Decompressed Files Stored? (e.g. LangChain Course)\nCourseNest operates with an **air-gapped, zero-cloud architecture**. Decompressed archive files and media are stored depending on your runtime surface:\n\n1. **Web Browser (PWA / Chrome / Firefox)**:\n   - **Binary Media Blobs (Video, PDF, Audio)**: Stored directly in the browser's high-performance **IndexedDB** database under `coursenest_media_vault_v1`, in the `media_files` object store. Each file is keyed by `${courseId}::${filePath}` (e.g., `langchain-101::01-intro/lecture.mp4`).\n   - **Course Manifests & Tree Structure**: Persisted in `localStorage` (`coursenest_custom_courses_v1`), containing structured chapter outlines, lesson trees, and durations.\n   - **Progress & User State**: Persisted in `localStorage` under `coursenest_course_progress_v1` and `coursenest_lesson_notes_v1`.\n   - **Storage Purge on Deletion**: When you click **Delete Course**, `deleteCourseFromVault(courseId)` opens a transaction against IndexedDB and permanently purges every binary chunk associated with that course ID, immediately reclaiming browser disk space.\n2. **Electron Desktop (Windows / Linux / macOS)**:\n   - Stored in the local user data folder:\n     - **Windows**: `%APPDATA%\\CourseNest\\vault\\courses\\{course_id}\\`\n     - **Linux**: `~/.config/CourseNest/vault/courses/{course_id}/`\n     - **macOS**: `~/Library/Application Support/CourseNest/vault/courses/{course_id}/`\n   - Mirrored into desktop Chromium IndexedDB for instant streaming.\n   - Course deletion unlinks both the filesystem directory and the IndexedDB records.\n3. **FastAPI Institutional Central Server (Optional)**:\n   - Stored on server disk under `apps/server/storage/courses/{course_id}/`.\n   - Course deletion asynchronously purges the directory and metadata.\n\n### 4. Hardened Multi-Archive Ingestion Pipeline\n* **Multi-ZIP Aggregation**: Supports selecting and merging multiple ZIP archives representing a single course in one folder.\n* **Zip Slip Defense**: Canonical path boundary validation strictly rejects archive entries containing `../`, root paths, or null bytes (`\\0`).\n* **Atomic Staging & Rollback**: Ingestion executes inside a temporary staging sandbox. If any validation fails, partial state is automatically rolled back to prevent corrupting the local vault.\n* **Untrusted Code Sandboxing**: Ingested `.html`, `.js`, `.py`, or `.sh` files are parsed strictly as plain text within an inert preview pane—preventing arbitrary local code execution.\n\n### 5. In-Browser Vector RAG, Tool-Calling Agent & Active Recall Suite\n* **In-Browser Semantic Vector Store**: Sub-millisecond client-side vector search and BM25 term scoring engine that indexes video transcripts, PPTX slides, and reading materials completely offline with **zero cloud dependencies and zero API costs**.\n* **In-App Tool Calling & Temporal Provenance**:\n  - `seek_video_player(timestampSeconds, reason)`: Directly navigates the video player to exact moments referenced in lecture discussions.\n  - `navigate_to_slide(slideNumber, reason)`: Automatically jumps the presentation viewer to referenced slide diagrams and presenter notes.\n  - `create_flashcard(question, answer, hint)`: Generates high-yield study cards saved directly to the student's review vault.\n  - `save_study_note(title, content)`: Automatically appends key takeaways and lecture checkpoints to student notes.\n* **Pedagogical Tutoring Modes**:\n  - 🧑‍🏫 **Socratic Tutor**: Guides the student with conceptual hints and thought-provoking questions rather than dumping raw answers.\n  - ⚡ **Technical Reference**: Dense bullet takeaways, mathematical formulas, and exact temporal citations.\n  - 🃏 **Active Recall Quiz**: Generates adaptive self-test questions.\n* **Interactive Active Recall Flashcards Deck**:\n  - 3D perspective flip cards with spaced repetition ratings (`Hard`, `Good`, `Easy`).\n  - Lesson and whole-course filtering.\n  - 1-click Anki TSV and JSON export for cross-platform review.\n* **Local Ollama & Bring-Your-Own-API**: Seamlessly connects to local offline Ollama models (`llama3.2`, `qwen2.5-coder`, `mistral`) or remote cloud gateways (**Gemini Pro**, **DeepSeek**, **TokenHarbor**) with automatic tool calling and offline heuristic fallback.\n\n### 6. Interactive Developer & Reference Suite\n* **Syntax-Highlighted Code Block Viewer**: Built-in dark terminal chrome with line numbers, regex-based keyword/string/comment syntax highlighting, and tactile 1-click \"Copy Code\" with checkmark verification. Automatically parses inline code blocks (` ```lang ... ``` `) within course lecture notes.\n* **In-App Mini Window Documentation Viewer**: Sandboxed browser iframe modal with traffic light controls, address bar, reload button, URL copy, and expand/minimize options. Allows students to read official documentation, MDN references, and course links without switching browser tabs or desktop applications.\n\n### 7. Custom Course Studio & Visual Authoring Engine\n* **Visual Course Creation & Editing (`#/studio` & `#/create`)**: Educators and self-learners can create custom courses from scratch or edit existing curricula directly in the browser or desktop app.\n* **Multi-Format Content Blocks**:\n  - **YouTube Video Embeds**: Instant YouTube URL parsing (`youtube.com/watch`, `youtu.be/`, `youtube.com/embed/`) with privacy-enhanced embed playback (`youtube-nocookie.com`), custom play controls, and automated lesson completion.\n  - **Direct Video Streams & Local Media**: Support for MP4, WebM, and local filesystem/media vault video assets.\n  - **PowerPoint Slide Decks**: Embed `.pptx` and `.ppt` presentations directly into course curriculum lessons.\n  - **PDF & Document Readers**: Embed local textbooks, scientific papers, and supplementary study guides.\n  - **Code Labs & Markdown Notes**: Rich syntax-highlighted code blocks, lecture summaries, and markdown instructions.\n* **One-Click Vault Persistence & Export**: Save directly to the local IndexedDB/localStorage vault (`coursenest_custom_courses_v1`) or export a standardized course JSON manifest to share with peers.\n\n### 8. Native PowerPoint (.pptx) Slide Presentation Reader\n* **Client-Side Slide Parser**: Zero cloud conversion or external server required—extracts and renders PowerPoint slides, shapes, bullet lists, formatting, and speaker notes directly in the browser via Web APIs and `jszip`.\n* **16:9 Responsive Stage & Fullscreen Mode**: Presentation-grade widescreen viewport with slide thumbnail rail, previous/next controls, keyboard hotkeys (Arrow Left/Right, Space), and fullscreen toggle.\n* **Integrated Speaker Notes Drawer**: Collapsible presenter notes panel for reading detailed lecture commentary alongside slides.\n* **Web Speech TTS Slide Narration**: In-slide text-to-speech audio narration reads slide titles, body bullets, and speaker notes aloud.\n* **AI Study Buddy Integration**: One-click prompt transfer sends current slide content and speaker notes directly to the AI Study Buddy for instant comprehension Q&A and concept breakdowns.\n\n---\n\n## 🛠️ Monorepo Architecture\n\n```mermaid\nflowchart TD\n    subgraph Storage[\"Storage & Hardware Tiers\"]\n        INT[\"Internal Vault (SQLite WAL / IndexedDB)\\nProgress • Notes • Bookmarks • Quizzes\"]\n        EXT[\"Removable Volume (USB-OTG / SD Card)\\nHeavy Video Lectures • Raw PDFs\"]\n    end\n\n    subgraph Core[\"Core Packages\"]\n        IMP[\"@coursenest/importer\\nMulti-ZIP • Zip-Slip Guard • MIME Sniffer\"]\n        MAN[\"@coursenest/course-manifest\\nPortable JSON Course Specification\"]\n        SQL[\"@coursenest/sqlite-adapter\\nClean Architecture Database Repositories\"]\n        UI[\"@coursenest/ui\\nTheme Studio Tokens • StatusBadges • Roadmap\"]\n        MCP[\"@coursenest/mcp-server\\nModel Context Protocol Stdio Server\"]\n    end\n\n    subgraph Platforms[\"Cross-Platform Surfaces\"]\n        DESK[\"Electron Desktop\\nLinux AppImage/deb • Windows .exe\"]\n        ANDR[\"Capacitor Android Shell\\nPhones & Tablets (.apk)\"]\n        WEB[\"React 19 + Vite Web Client\\nZero-Cloud Air-Gapped Mode\"]\n    end\n\n    subgraph Optional[\"Optional Extensions\"]\n        AI[\"AI Reading Companion\\nGemini Pro • Ollama • Offline Heuristics\"]\n        SRV[\"FastAPI Sync Server\\nSQLite / PostgreSQL • Institutional Fleet Management\"]\n    end\n\n    IMP --> MAN --> SQL\n    SQL <--> INT\n    Platforms <--> Core\n    Platforms <--> Storage\n    Platforms -.->|When Connected| AI\n    INT -.->|Optional Sync| SRV\n    MCP <--> SQL\n```\n\n---\n\n## 🔌 Model Context Protocol (MCP) Server\n\nCourseNest includes an official **Model Context Protocol (MCP) server** (`@coursenest/mcp-server`), enabling AI coding assistants, agents, and desktop companions (such as **Claude Desktop**, **Claude Web**, **Gemini CLI**, **Cursor**, or **Antigravity**) to inspect courses, explore curriculums, search transcripts, and save study notes directly through standardized JSON-RPC stdio.\n\n### ⚙️ Claude Desktop Configuration\nAdd the CourseNest MCP server to your `claude_desktop_config.json`:\n- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows**: `%APPDATA%\\Claude\\claude_desktop_config.json`\n- **Linux**: `~/.config/Claude/claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"coursenest\": {\n      \"command\": \"node\",\n      \"args\": [\n        \"/absolute/path/to/Korse/packages/mcp-server/dist/index.js\"\n      ]\n    }\n  }\n}\n```\n\n### 🛠️ Available MCP Tools & Resources\n\n| Tool / Resource | Type | Description |\n| :--- | :--- | :--- |\n| `coursenest_list_courses` | Tool | Lists all enrolled courses in the local vault with statistics, lesson counts, and progress |\n| `coursenest_get_curriculum` | Tool | Returns the structured chapter and lesson tree for a course with lesson IDs, types, and durations |\n| `coursenest_get_lesson` | Tool | Retrieves the full lesson content, lecture notes, video URL, code blocks, and transcript for study |\n| `coursenest_search` | Tool | Performs keyword and full-text search across all enrolled courses, lecture notes, and transcripts |\n| `coursenest_save_note` | Tool | Creates or updates study notes and markdown summaries for a specific lesson |\n| `coursenest_get_notes` | Tool | Retrieves saved study notes and annotations for a specific lesson |\n| `coursenest_create_flashcard` | Tool | Generates a new active recall question-answer flashcard for a lesson or topic |\n| `coursenest_get_flashcards` | Tool | Lists all generated flashcards for a specific lesson or the entire course |\n| `coursenest_get_progress` | Tool | Returns completion status, study time, and percentages across lessons and courses |\n| `coursenest://courses` | Resource | Read-only JSON resource containing all enrolled courses and metadata |\n| `coursenest://progress` | Resource | Real-time JSON resource containing offline study progress and completion timestamps |\n| `coursenest://flashcards` | Resource | Real-time JSON resource containing user active-recall flashcard decks |\n\n### 🧪 Running MCP Standalone\nYou can run the MCP server directly via stdio:\n```bash\n# Build the MCP server\npnpm --filter @coursenest/mcp-server build\n\n# Launch over stdio JSON-RPC\nnode packages/mcp-server/dist/index.js\n```\n\n---\n\n## 🚀 Quickstart & Testing\n\n### 1. Prerequisites\n- **Node.js**: `>= 20.0.0` (LTS recommended)\n- **pnpm**: `>= 9.0.0`\n- **Python**: `>= 3.11` (for optional FastAPI backend)\n\n### 2. Monorepo Installation & Build\n```bash\n# Clone the repository\ngit clone https://github.com/PixelApprentice/Korse.git\ncd Korse\n\n# Install all workspace dependencies\npnpm install\n\n# Build all packages and the client\npnpm build\n```\n\n### 3. Launching the Applications\n- **Web Client (Live Testing)**:\n  ```bash\n  pnpm dev\n  # Open http://localhost:5173\n  ```\n  *Immediately explore pre-bundled university courses (\"CS 101: Systems Programming & Operating Principles\" & \"Machine Learning: Algorithms & Inference\") with video lectures, lecture notes, and quizzes, or navigate to `/import` to drag-and-drop your own `.zip` archives or video folders.*\n\n- **Electron Desktop Application**:\n  ```bash\n  pnpm dev:desktop\n  ```\n\n- **Python FastAPI Central Server (Optional)**:\n  ```bash\n  cd apps/server\n  python -m venv .venv\n  source .venv/bin/activate\n  pip install -e .\n  uvicorn app.main:app --host 127.0.0.1 --port 8000\n  # API Docs: http://localhost:8000/docs\n  ```\n\n---\n\n## 📦 Building Platform Packages\n\n### 🪟 Windows Desktop (`.exe` Installer)\nCourseNest uses `electron-builder` with an NSIS target to package standalone Windows installers:\n```bash\n# Build desktop assets\npnpm --filter @coursenest/client build\npnpm --filter @coursenest/desktop build\n\n# Build Windows NSIS executable installer & portable .exe\ncd apps/desktop\npnpm dist:win\n# Output located in: apps/desktop/release/CourseNest-Setup-1.1.0.exe\n```\n\n#### 🛡️ Zero-Certificate Standalone Operation\nCourseNest runs completely out-of-the-box in standard user-mode (`requestedExecutionLevel: asInvoker`) without needing administrator rights or any external code-signing certificate keys. Simply run the generated executable or portable `.exe` on any Windows 10/11 system. Optional Authenticode signing environment variables (`CSC_LINK` / `CSC_KEY_PASSWORD`) can still be provided if custom enterprise PKI or cloud signing is configured.\n\n### 📱 Android Tablet & Mobile (`.apk`)\nCourseNest uses Capacitor 7 to embed the React client into a native Android application:\n```bash\n# 1. Build the client web assets\npnpm --filter @coursenest/client build\n\n# 2. Sync web assets into Android\ncd apps/android\nnpx cap sync android\n\n# 3. Compile the debug APK using Gradle\ncd android\n./gradlew assembleDebug\n# Output APK: apps/android/android/app/build/outputs/apk/debug/app-debug.apk\n```\n\n### 🐧 Linux Desktop (`.AppImage` & `.deb`)\n```bash\ncd apps/desktop\npnpm dist:linux\n# Output: apps/desktop/release/*.AppImage and *.deb\n```\n\n---\n\n## 🧪 Testing & Verification\n\n```bash\n# 1. Monorepo unit test suites (importer, sqlite-adapter, domain)\npnpm -r test\n\n# 2. Client TypeScript & Vite build\npnpm --filter @coursenest/client build\n\n# 3. Model Context Protocol (MCP) server build & verification\npnpm --filter @coursenest/mcp-server build\n\n# 4. FastAPI pytest suite\ncd apps/server && .venv/bin/pytest -v\n\n# 5. Comprehensive 50-Scenario Playwright End-to-End Suite\nnode scripts/test_all_scenarios.cjs\n```\n\n### 🛡️ Quality Assurance & Security Engineering\nCourseNest is built with strict adherence to production-grade engineering principles:\n* **Playwright E2E Automation**: Comprehensive 50-scenario test matrix verifying all 9 themes, video player, mini-window, slide presentation viewer, course studio, notes, and progress persistence.\n* **Zip Slip & Path Traversal Guards**: Canonical boundary checks prevent unauthorized file writing or sandbox escaping.\n* **Content Sandboxing**: Strict inert text extraction for untrusted code, HTML, and script files.\n* **Zero Main-Thread Blocking**: All media processing, decompression, and IndexedDB transactions execute asynchronously without hitching the UI render loop.\n\n---\n\n## 💖 Open Source Acknowledgements & Credits\n\nCourseNest is built upon world-class free and open-source software, standards, and community tools. We proudly credit and attribute these core foundations:\n\n| Technology / Tool | Role in CourseNest | License | Project Link |\n| :--- | :--- | :--- | :--- |\n| **[SQLite](https://www.sqlite.org/)** (`better-sqlite3` & `aiosqlite`) | Local relational storage, ACID transaction management, and course index caching | Public Domain / MIT | [sqlite.org](https://www.sqlite.org/) |\n| **[VideoLAN (VLC)](https://www.videolan.org/)** | Media playback architecture inspiration, Web Audio API 200% Super-Gain booster, speech clarity EQ, and frame stepper | GPL-2.0 / LGPL-2.1 | [videolan.org](https://www.videolan.org/) |\n| **[Electron](https://www.electronjs.org/)** | Air-gapped cross-platform desktop runtime for Linux, macOS, and Windows with hardened IPC filesystem bridges | MIT | [electronjs.org](https://www.electronjs.org/) |\n| **[Capacitor](https://capacitorjs.com/)** | Native runtime for Android tablet deployment and Storage Access Framework (SAF) external micro-SD card access | MIT | [capacitorjs.com](https://capacitorjs.com/) |\n| **[React 19](https://react.dev/) & [React Router 7](https://reactrouter.com/)** | Declarative concurrent UI rendering, responsive dockable split-workbenches, and offline hash-based routing | MIT | [react.dev](https://react.dev/) |\n| **[Tailwind CSS v4](https://tailwindcss.com/)** | Pure cascade layer utility CSS engine powering 9 bespoke themes, accessible tokens, and GPU keyframe animations | MIT | [tailwindcss.com](https://tailwindcss.com/) |\n| **[Model Context Protocol (MCP)](https://modelcontextprotocol.io/)** | Standard open protocol connecting offline AI assistants (Claude, Gemini, Ollama) directly to local course syllabi and flashcards | MIT | [modelcontextprotocol.io](https://modelcontextprotocol.io/) |\n| **[Tabler Icons](https://tabler.io/icons)** | Over 5,000 crisp, pixel-perfect SVG vector icons rendered inline with zero external network requests | MIT | [tabler.io/icons](https://tabler.io/icons) |\n| **[JSZip](https://stuk.github.io/jszip/), [Yauzl](https://github.com/thejoshwolfe/yauzl) & [7z-wasm](https://github.com/jinfeihan57/7z-wasm)** | Sandboxed client-side archive decompression, PPTX slide XML extraction, and Zip Slip path traversal defense | MIT / BSD | [stuk.github.io/jszip](https://stuk.github.io/jszip/) |\n| **[SIL Open Font License](https://scripts.sil.org/OFL) Typography** | Plus Jakarta Sans, Nunito, Fredoka, Chakra Petch, DM Sans, and JetBrains Mono for optimal reading legibility | SIL OFL 1.1 | [scripts.sil.org/OFL](https://scripts.sil.org/OFL) |\n| **[Zod](https://zod.dev/) & [Pydantic](https://docs.pydantic.dev/)** | Runtime schema validation, course manifest verification, and tamper detection across TypeScript and Python | MIT | [zod.dev](https://zod.dev/) |\n| **[FastAPI](https://fastapi.tiangolo.com/) & [SQLAlchemy 2.0](https://www.sqlalchemy.org/)** | Headless async Python backend engine and dialect-agnostic ORM for optional multi-user local network lab servers | MIT | [fastapi.tiangolo.com](https://fastapi.tiangolo.com/) |\n\n> In-app attribution is also accessible directly within the application under **Settings → Open Source Credits**.\n\n---\n\n## 📄 License\n\nCourseNest is open-source software licensed under the **[Apache License 2.0](LICENSE)**.\nFeel free to use, modify, distribute, and integrate CourseNest in personal, educational, or commercial projects.\n"}