{
  "name": "wp-spboucher-ai",
  "version": "1.0.0",
  "private": true,
  "type": "module",
  "description": "Research Working Papers \u2014 Simon-Pierre Boucher Research Observatory (wp.spboucher.ai)",
  "scripts": {
    "dev": "next dev -p 8560",
    "build": "next build",
    "start": "next start -p 8560 -H 0.0.0.0",
    "lint": "eslint .",
    "typecheck": "tsc --noEmit",
    "db:migrate": "tsx scripts/migrate.ts",
    "db:roles": "tsx scripts/db-roles.ts",
    "bootstrap": "tsx scripts/bootstrap-owner.ts",
    "seed:import": "tsx scripts/seed-import.ts",
    "ingest:scan": "tsx scripts/ingest-scan.ts",
    "relations:rebuild": "tsx scripts/relations-rebuild.ts",
    "worker": "tsx src/worker/index.ts",
    "backup": "tsx scripts/backup.ts",
    "restore:drill": "tsx scripts/restore-drill.ts",
    "test": "vitest run",
    "test:e2e": "playwright test",
    "test:security": "tsx scripts/security-audit.ts",
    "verify:deploy": "tsx scripts/verify-deploy.ts"
  },
  "dependencies": {
    "@node-rs/argon2": "^2.2.2",
    "d3-force": "^3.0.0",
    "date-fns": "^4.4.0",
    "dotenv": "^18.0.9",
    "lucide-react": "^1.66.0",
    "next": "16.4.3",
    "otplib": "^13.5.0",
    "postgres": "^4.0.0",
    "qrcode": "^1.5.4",
    "react": "19.3.1",
    "react-dom": "19.3.1",
    "tailwindcss": "^4.3.3",
    "@tailwindcss/postcss": "^4.3.3",
    "zod": "^4.6.7"
  },
  "devDependencies": {
    "@playwright/test": "^1.64.1",
    "@types/d3-force": "^3.0.10",
    "@types/node": "^26.6.6",
    "@types/qrcode": "^1.5.6",
    "@types/react": "^19.3.0",
    "@types/react-dom": "^19.3.0",
    "tsx": "^4.23.15",
    "typescript": "^7.0.2",
    "vitest": "~5.0.0"
  }
}
