{
  "name": "unisteps-crm",
  "private": true,
  "version": "0.1.0",
  "type": "module",
  "engines": {
    "node": ">=20"
  },
  "scripts": {
    "dev": "concurrently -n api,web -c blue,magenta \"npm:dev:api\" \"npm:dev:web\"",
    "dev:api": "tsx watch server/index.ts",
    "dev:web": "vite",
    "build": "tsc -p tsconfig.server.json && vite build",
    "start": "node dist/server/index.js",
    "db:push": "tsx server/migrate.ts",
    "db:seed": "tsx server/seed.ts",
    "db:intakes": "tsx server/seed-intakes.ts",
    "demo:reset": "tsx server/demo-reset.ts",
    "demo:passwords": "tsx server/demo-passwords.ts",
    "typecheck": "tsc --noEmit && tsc -p tsconfig.server.json --noEmit",
    "lint": "eslint ."
  },
  "dependencies": {
    "@fontsource/ibm-plex-mono": "^5.3.0",
    "@fontsource/lora": "^5.3.0",
    "@fontsource/noto-sans-bengali": "^5.3.0",
    "@fontsource/plus-jakarta-sans": "^5.3.0",
    "@tanstack/react-query": "^5.83.0",
    "argon2": "^0.44.0",
    "compression": "^1.8.0",
    "cookie-parser": "^1.4.7",
    "date-fns": "^4.1.0",
    "dotenv": "^17.2.1",
    "express": "^5.1.0",
    "express-rate-limit": "^8.1.0",
    "helmet": "^8.1.0",
    "lucide-react": "^0.575.0",
    "mysql2": "^3.15.3",
    "nodemailer": "^7.0.9",
    "otpauth": "^9.5.1",
    "qrcode": "^1.5.4",
    "react": "^19.2.0",
    "react-dom": "^19.2.0",
    "react-router-dom": "^7.9.5",
    "zod": "^3.24.2"
  },
  "devDependencies": {
    "@tailwindcss/vite": "^4.2.1",
    "@types/compression": "^1.8.1",
    "@types/cookie-parser": "^1.4.9",
    "@types/express": "^5.0.5",
    "@types/node": "^22.10.2",
    "@types/nodemailer": "^7.0.4",
    "@types/qrcode": "^1.5.6",
    "@types/react": "^19.2.0",
    "@types/react-dom": "^19.2.0",
    "@vitejs/plugin-react": "^5.1.1",
    "concurrently": "^9.2.1",
    "tailwindcss": "^4.2.1",
    "tsx": "^4.20.6",
    "typescript": "^5.8.3",
    "vite": "^7.3.1"
  }
}
