{
  "name": "qtrial",
  "version": "1.0.0",
  "private": true,
  "description": "Qtrial — Action, Sample Testing & Compliance SaaS (Next.js SSR + API + worker)",
  "scripts": {
    "dev": "next dev",
    "build": "NODE_OPTIONS=--max-old-space-size=512 NEXT_TELEMETRY_DISABLED=1 next build --webpack",
    "start": "NODE_OPTIONS=--max-old-space-size=512 NEXT_TELEMETRY_DISABLED=1 next start",
    "start:standalone": "NODE_OPTIONS=--max-old-space-size=512 NEXT_TELEMETRY_DISABLED=1 node .next/standalone/server.js",
    "typecheck": "tsc --noEmit",
    "test": "vitest run",
    "worker": "NODE_OPTIONS=--max-old-space-size=256 tsx scripts/worker.ts",
    "worker:once": "NODE_OPTIONS=--max-old-space-size=256 tsx scripts/worker.ts --once",
    "migrate": "node scripts/migrate.js",
    "db:check": "node scripts/db-check.js"
  },
  "dependencies": {
    "@hookform/resolvers": "^5.9.1",
    "@tailwindcss/postcss": "^4.3.3",
    "@tanstack/react-query": "^5.40.0",
    "bcryptjs": "^3.0.3",
    "clsx": "^2.1.1",
    "csv-parse": "^7.0.2",
    "dayjs": "^1.11.11",
    "dotenv": "^18.0.3",
    "framer-motion": "^13.4.3",
    "jsonwebtoken": "^9.0.2",
    "mysql2": "^3.9.7",
    "next": "^16.3.6",
    "nodemailer": "^10.0.10",
    "pdfkit": "^0.20.2",
    "react": "^19.3.0",
    "react-dom": "^19.3.0",
    "react-hook-form": "^7.52.0",
    "tsx": "^4.11.0",
    "vite": "^8.3.1",
    "web-push": "^3.6.7",
    "xlsx-populate": "^1.21.0",
    "zod": "^4.6.5"
  },
  "devDependencies": {
    "@types/bcryptjs": "^2.4.6",
    "@types/jsonwebtoken": "^9.0.6",
    "@types/node": "^26.6.2",
    "@types/nodemailer": "^8.0.2",
    "@types/pdfkit": "^0.17.6",
    "@types/react": "^19.3.0",
    "@types/react-dom": "^19.3.0",
    "@types/web-push": "^3.6.3",
    "postcss": "^8.4.38",
    "tailwindcss": "^4.3.3",
    "typescript": "^7.0.2",
    "vitest": "^5.0.1"
  }
}
