{ "name": "chess_tutor", "version": "0.1.0", "license": "GPL-3.0", "private": true, "scripts": { "dev": "next dev -p 3050", "build": "next build", "start": "next start -p 3050", "lint": "eslint", "test": "jest", "test:e2e": "playwright test", "test:e2e:ui": "playwright test --ui", "test:e2e:headed": "playwright test --headed", "test:all": "npm test && npm run test:e2e", "build:opening-index": "node scripts/buildOpeningIndex.js", "generate:test-fixtures": "npx tsx scripts/generate-test-fixtures.ts", "cache:wikipedia": "tsx scripts/fetch-wikipedia-openings.ts", "update:wikipedia-slugs": "tsx scripts/add-wikipedia-to-openings.ts", "build:mobile": "./scripts/build-mobile.sh", "mobile:build": "npm run build:mobile && npx cap sync", "mobile:ios": "npm run mobile:build && npx cap open ios", "mobile:android": "npm run mobile:build && npx cap open android", "cap:sync": "npx cap sync", "cap:copy": "npx cap copy" }, "dependencies": { "@capacitor/android": "^7.4.4", "@capacitor/cli": "^7.4.4", "@capacitor/core": "^7.4.4", "@capacitor/ios": "^7.4.4", "@google/generative-ai": "^0.24.1", "chess.js": "^1.4.0", "clsx": "^2.1.1", "lucide-react": "^0.554.0", "next": "^16.0.7", "react": "19.2.0", "react-chessboard": "^5.8.4", "react-dom": "19.2.0", "react-markdown": "^10.1.0", "stockfish.js": "^10.0.2", "tailwind-merge": "^3.4.0", "uuid": "^13.0.0" }, "devDependencies": { "@playwright/test": "^1.57.0", "@tailwindcss/postcss": "^4", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.0", "@types/jest": "^30.0.0", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", "@types/uuid": "^10.0.0", "baseline-browser-mapping": "^2.9.4", "eslint": "^9", "eslint-config-next": "16.0.3", "jest": "^30.2.0", "jest-environment-jsdom": "^30.2.0", "tailwindcss": "^4", "ts-jest": "^29.4.5", "ts-node": "^10.9.2", "tsx": "^4.19.2", "typescript": "^5" } }