{ "name": "memohanzi", "version": "0.1.0", "private": true, "description": "Self-hosted spaced repetition app for learning Chinese characters", "scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint", "test": "vitest", "test:unit": "vitest run --coverage", "test:integration": "vitest run --config vitest.integration.config.ts", "test:watch": "vitest watch", "test:e2e": "playwright test", "test:ci": "npm run test:unit && npm run test:integration && npm run test:e2e", "db:migrate": "prisma migrate dev", "db:generate": "prisma generate", "db:seed": "prisma db seed", "db:studio": "prisma studio", "db:push": "prisma db push" }, "dependencies": { "@auth/prisma-adapter": "^2.7.4", "@hookform/resolvers": "^3.10.0", "bcrypt": "^5.1.1", "date-fns": "^4.1.0", "next": "16.0.3", "next-auth": "^5.0.0-beta.25", "react": "19.2.0", "react-dom": "19.2.0", "react-hook-form": "^7.54.2", "recharts": "^2.15.0", "zod": "^3.24.1" }, "devDependencies": { "@playwright/test": "^1.49.1", "@prisma/client": "^6.19.0", "@tailwindcss/postcss": "^4", "@testcontainers/postgresql": "^11.8.1", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^16.1.0", "@types/bcrypt": "^5.0.2", "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", "@vitejs/plugin-react": "^4.3.4", "@vitest/coverage-v8": "^2.1.8", "eslint": "^9", "eslint-config-next": "16.0.3", "jsdom": "^25.0.1", "prisma": "^6.19.0", "tailwindcss": "^4", "testcontainers": "^11.8.1", "tsx": "^4.19.2", "typescript": "^5", "vitest": "^2.1.8" }, "prisma": { "seed": "tsx prisma/seed.ts" } }