{ "name": "vibe-learn", "productName": "Vibe Learn", "version": "2.3.0", "private": true, "description": "Offline courses and projects, with learner-owned workspaces.", "author": "James Milne", "license": "MIT", "main": "build/app/main/bootstrap.js", "scripts": { "dev": "npm run content && electron-vite dev", "app": "npm run dev", "content": "tsx src/content/compile.ts", "validate:content": "tsx src/content/compile.ts --check", "build": "npm run content && electron-vite build && tsx scripts/build-preview.ts", "preview": "npm run build && vite preview --host 127.0.0.1 --port 5173 --strictPort", "typecheck": "tsc --noEmit", "lint": "eslint src scripts/*.ts tests/v2", "test": "vitest run", "test:ui": "playwright test", "verify": "npm run typecheck && npm run lint && npm run validate:content && npm test && npm run build && npm run test:ui", "prepare:desktop": "npm run build && tsx scripts/prepare-app.ts", "package:desktop": "npm run prepare:desktop && electron-forge package", "make:desktop": "npm run prepare:desktop && electron-forge make", "smoke:desktop": "tsx scripts/smoke-desktop.ts", "new-course": "tsx scripts/create-course.ts", "publish:app-update": "tsx scripts/publish-app-update.ts" }, "dependencies": { "@fontsource-variable/source-serif-4": "^5.3.0", "@fontsource/ibm-plex-mono": "^5.3.0", "@fontsource/ibm-plex-sans": "^5.3.0", "@radix-ui/react-dialog": "^1.1.15", "@tanstack/react-query": "^5.90.0", "better-sqlite3": "^13.0.3", "cheerio": "^1.1.2", "highlight.js": "^11.11.1", "js-yaml": "^4.1.0", "marked": "^15.0.0", "react": "^19.2.0", "react-dom": "^19.2.0", "react-router-dom": "^7.9.0", "sanitize-html": "^2.17.0", "ts-fsrs": "^5.4.2", "zod": "^4.1.0" }, "devDependencies": { "@electron-forge/cli": "^7.11.2", "@electron-forge/maker-dmg": "^7.11.2", "@electron-forge/maker-squirrel": "^7.11.2", "@electron-forge/maker-zip": "^7.11.2", "@eslint/js": "^9.39.0", "@playwright/test": "^1.58.0", "@types/better-sqlite3": "^7.6.13", "@types/js-yaml": "^4.0.9", "@types/node": "^24.0.0", "@types/react": "^19.2.0", "@types/react-dom": "^19.2.0", "@types/sanitize-html": "^2.16.0", "@vitejs/plugin-react": "^5.1.0", "electron": "^43.0.0", "electron-vite": "^5.0.0", "eslint": "^9.39.0", "tsx": "^4.20.0", "typescript": "^5.9.0", "typescript-eslint": "^8.48.0", "vite": "^7.3.0", "vitest": "^4.0.0" }, "engines": { "node": ">=24" } }