{ "name": "opentutor-web", "version": "1.0.0", "private": true, "scripts": { "dev": "node --max-old-space-size=4096 ./node_modules/next/dist/bin/next dev", "dev:turbo": "node --max-old-space-size=6144 ./node_modules/next/dist/bin/next dev --turbopack", "build": "next build", "start": "next start", "lint": "eslint .", "test:node": "node ./scripts/run-node-tests.mjs", "perf:check": "node ./scripts/route_budgets.mjs", "build:perf": "npm run build && npm run perf:check", "i18n:parity": "node ./scripts/i18n_parity.mjs", "i18n:audit": "node ./scripts/i18n_audit.mjs", "i18n:audit:strict": "node ./scripts/i18n_audit.mjs --strict", "i18n:check": "npm run i18n:parity && npm run i18n:audit", "audit": "playwright test --project=ui-audit", "audit:ui": "playwright test --ui --project=ui-audit", "audit:report": "playwright show-report" }, "dependencies": { "chart.js": "^4.5.1", "clsx": "^2.1.1", "cytoscape": "^3.33.1", "docx-preview": "^0.3.7", "exceljs": "^4.4.0", "framer-motion": "^12.24.0", "html2canvas": "^1.4.1", "i18next": "^25.8.0", "jspdf": "^4.2.0", "lucide-react": "^0.562.0", "mermaid": "^11.14.0", "next": "^16.2.3", "react": "^19.0.0", "react-chartjs-2": "^5.3.1", "react-dom": "^19.0.0", "react-i18next": "^16.5.3", "react-markdown": "^10.1.0", "react-syntax-highlighter": "^16.1.1", "rehype-katex": "^7.0.1", "rehype-raw": "^7.0.0", "remark-gfm": "^4.0.0", "remark-math": "^6.0.0", "tailwind-merge": "^3.4.0" }, "devDependencies": { "@playwright/test": "^1.53.2", "@types/node": "^25", "@types/react": "^19", "@types/react-dom": "^19", "@types/react-syntax-highlighter": "^15.5.13", "autoprefixer": "^10.4.20", "eslint": "^9", "eslint-config-next": "16.2.3", "postcss": "^8", "tailwindcss": "^3.4.17", "typescript": "^5" } }