{ "name": "business-crm", "version": "1.2.0", "description": "GOD CRM - Universal Workspace Management System (Clean Architecture)", "type": "module", "main": "dist-electron/electron/main.js", "scripts": { "dev": "concurrently \"npm run server\" \"npm run client\"", "server": "node backend/server.js", "client": "vite", "build": "vite build", "preview": "vite preview", "build:desktop:renderer": "vite build --config vite.config.desktop.ts", "build:desktop:main": "tsc -p electron/tsconfig.json && node -e \"require('fs').writeFileSync('dist-electron/package.json', JSON.stringify({type:'commonjs'}))\"", "build:desktop": "npm run build:desktop:renderer && npm run build:desktop:main", "electron:dev": "npm run build:desktop && electron .", "dist:linux:appimage": "npm run build:desktop && electron-builder --linux AppImage", "dist:win": "npm run build:desktop && electron-builder --win --x64", "dist:mac": "npm run build:desktop && electron-builder --mac --universal", "dist:all": "npm run build:desktop && electron-builder -lwm", "smoke:adr-0042": "node scripts/smoke-adr0151.mjs", "test": "vitest run", "test:isolated": "env -u BUSINESS_CRM_IS_PROD POSTGRES_DB=godcrm_test vitest run", "typecheck": "tsc --noEmit", "lint": "eslint \"src/**/*.{ts,tsx}\"", "lint:backend": "eslint backend/ --ext .js", "format": "prettier --check .", "format:write": "prettier --write .", "docs:generate": "node backend/scripts/generate-openapi.js" }, "dependencies": { "@dnd-kit/core": "^6.3.1", "@dnd-kit/modifiers": "^9.0.0", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@google/model-viewer": "^4.2.0", "@hookform/resolvers": "^3.3.4", "@mendable/firecrawl-js": "^1.21.1", "@modelcontextprotocol/sdk": "^1.28.0", "@monaco-editor/react": "^4.7.0", "@preact/signals-react": "^3.10.1", "@radix-ui/react-checkbox": "^1.3.3", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-dropdown-menu": "^2.1.16", "@radix-ui/react-icons": "^1.3.2", "@radix-ui/react-popover": "^1.1.6", "@radix-ui/react-select": "^2.2.6", "@radix-ui/react-switch": "^1.2.6", "@radix-ui/react-tooltip": "^1.1.7", "@tanstack/react-query": "^5.0.0", "@tanstack/react-table": "^8.11.0", "@types/react-grid-layout": "^1.3.5", "@types/react-syntax-highlighter": "^15.5.13", "@xyflow/react": "^12.10.0", "ajv": "^8.17.1", "axios": "^1.13.2", "bcrypt": "^6.0.0", "better-sqlite3": "^12.4.1", "cookie-parser": "^1.4.7", "cors": "^2.8.5", "crypto-js": "^4.2.0", "csv-parse": "^6.1.0", "date-fns": "^3.0.0", "dompurify": "^3.3.1", "dotenv": "^16.3.1", "electron-store": "^8.2.0", "electron-updater": "^6.8.3", "express": "^4.22.1", "express-rate-limit": "^8.2.1", "framer-motion": "^12.0.0", "googleapis": "^171.4.0", "helmet": "^7.1.0", "highlight.js": "^11.11.1", "i18next": "^25.8.0", "imapflow": "^1.4.3", "jsonwebtoken": "^9.0.2", "knex": "^3.1.0", "livekit-client": "^2.19.0", "lucide-react": "^0.553.0", "mailparser": "^3.9.12", "markdown-it": "^14.1.0", "multer": "^2.0.2", "mysql2": "^3.15.3", "node-cron": "^4.2.1", "nodemailer": "^7.0.10", "openai": "^4.104.0", "pg": "^8.16.3", "pino": "^10.1.0", "pino-pretty": "^13.1.3", "pixi.js": "^8.17.1", "playwright": "^1.58.2", "qrcode": "^1.5.3", "react": "^19.0.0", "react-dom": "^19.0.0", "react-grid-layout": "^1.5.2", "react-hook-form": "^7.49.0", "react-hot-toast": "^2.6.0", "react-i18next": "^16.5.3", "react-is": "^19.2.4", "react-markdown": "^10.1.0", "react-player": "^3.4.0", "react-quill-new": "^3.8.3", "react-router-dom": "^7.13.0", "react-syntax-highlighter": "^16.1.0", "react-window": "^1.8.10", "reactflow": "^11.11.4", "recharts": "^3.4.1", "remark-gfm": "^4.0.1", "rss-parser": "^3.13.0", "sharp": "^0.34.5", "socket.io": "^4.8.3", "socket.io-client": "^4.8.3", "speakeasy": "^2.0.0", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.1", "transliteration": "^2.6.0", "ts-morph": "^27.0.2", "zod": "^3.22.0", "zustand": "^4.5.7" }, "overrides": { "tar": "^7.5.7" }, "devDependencies": { "@playwright/test": "^1.40.0", "@preact/signals-react-transform": "^0.8.1", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.9.1", "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", "@types/dompurify": "^3.0.5", "@types/node": "^20.10.8", "@types/qrcode": "^1.5.6", "@types/react": "^18.3.11", "@types/react-dom": "^18.3.5", "@typescript-eslint/eslint-plugin": "^7.0.0", "@typescript-eslint/parser": "^7.0.0", "@vitejs/plugin-react": "^4.7.0", "@vitest/ui": "^4.0.8", "autoprefixer": "^10.4.17", "concurrently": "^8.2.2", "electron": "^31.7.7", "electron-builder": "^25.1.8", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-jsx-a11y": "^6.8.0", "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.6.0", "jsdom": "^27.1.0", "postcss": "^8.4.35", "prettier": "^3.2.5", "supertest": "^7.1.4", "tailwindcss": "^3.4.0", "typescript": "^5.3.3", "vite": "^5.4.21", "vitest": "^4.0.8" }, "_test_scripts_stripped": true }