- Replace hand-coded skeleton CSS/JSX with boneyard-js auto-generated bones - Remove skeleton.css and @keyframes shimmer from base.css - Add <Skeleton> wrappers with fixtures to all 25+ page components - Generate 20 bone captures via boneyard CLI (CDP auth-gated capture) - Refactor data fetching from useEffect+useState to TanStack Query - Extract query hooks into src/admin/lib/queries/ and apiAdapter - Add usePaginatedQuery hook replacing useApiCall/useListData - Fix parseFloat || 0 anti-pattern in OfferDetail and OffersTemplates inputs - Fix customer_id mandatory validation on offer creation - Fix leave-requests comma-separated status filter (Prisma enum in: []) - Add cross-entity cache invalidation for orders/offers/invoices/projects - Make rate limits configurable via env vars (RATE_LIMIT_MAX, RATE_LIMIT_REFRESH, etc.) - Add boneyard.config.json with routes and breakpoints Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
87 lines
2.4 KiB
JSON
87 lines
2.4 KiB
JSON
{
|
|
"name": "app-ts",
|
|
"version": "1.5.6",
|
|
"description": "",
|
|
"main": "dist/server.js",
|
|
"scripts": {
|
|
"dev:server": "tsx watch src/server.ts",
|
|
"dev:client": "vite",
|
|
"dev": "tsx watch src/server.ts",
|
|
"build:server": "tsc -p tsconfig.server.json",
|
|
"build:client": "vite build",
|
|
"build": "npm run build:server && npm run build:client",
|
|
"start": "node dist/server.js",
|
|
"preview": "vite preview",
|
|
"db:generate": "prisma generate",
|
|
"db:pull": "prisma db pull",
|
|
"db:push": "prisma db push",
|
|
"db:studio": "prisma studio",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest",
|
|
"bones": "boneyard-js build http://localhost:3000"
|
|
},
|
|
"keywords": [],
|
|
"author": "",
|
|
"license": "ISC",
|
|
"type": "commonjs",
|
|
"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",
|
|
"@fastify/cookie": "^11.0.2",
|
|
"@fastify/cors": "^11.2.0",
|
|
"@fastify/multipart": "^9.4.0",
|
|
"@fastify/rate-limit": "^10.3.0",
|
|
"@fastify/static": "^9.0.0",
|
|
"@prisma/client": "^6.19.2",
|
|
"@tanstack/react-query": "^5.100.5",
|
|
"@types/jsdom": "^28.0.1",
|
|
"bcryptjs": "^3.0.3",
|
|
"boneyard-js": "^1.8.1",
|
|
"date-fns": "^4.1.0",
|
|
"dompurify": "^3.3.3",
|
|
"dotenv": "^17.3.1",
|
|
"fastify": "^5.8.2",
|
|
"file-type": "^16.5.4",
|
|
"framer-motion": "^12.38.0",
|
|
"hi-base32": "^0.5.1",
|
|
"jsdom": "^29.0.2",
|
|
"jsonwebtoken": "^9.0.3",
|
|
"leaflet": "^1.9.4",
|
|
"node-cron": "^4.2.1",
|
|
"nodemailer": "^8.0.2",
|
|
"otpauth": "^9.5.0",
|
|
"prisma": "^6.19.2",
|
|
"puppeteer": "^24.40.0",
|
|
"qrcode": "^1.5.4",
|
|
"react": "^18.3.1",
|
|
"react-datepicker": "^9.1.0",
|
|
"react-dom": "^18.3.1",
|
|
"react-quill-new": "^3.8.3",
|
|
"react-router-dom": "^6.30.3",
|
|
"zod": "^4.3.6"
|
|
},
|
|
"devDependencies": {
|
|
"@types/bcryptjs": "^2.4.6",
|
|
"@types/dompurify": "^3.0.5",
|
|
"@types/jsonwebtoken": "^9.0.10",
|
|
"@types/leaflet": "^1.9.21",
|
|
"@types/mysql": "^2.15.27",
|
|
"@types/node": "^25.5.0",
|
|
"@types/node-cron": "^3.0.11",
|
|
"@types/nodemailer": "^7.0.11",
|
|
"@types/qrcode": "^1.5.6",
|
|
"@types/react": "^19.2.14",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@types/supertest": "^7.2.0",
|
|
"@vitejs/plugin-react": "^6.0.1",
|
|
"concurrently": "^9.2.1",
|
|
"supertest": "^7.2.2",
|
|
"tsx": "^4.21.0",
|
|
"typescript": "^5.9.3",
|
|
"vite": "^8.0.0",
|
|
"vitest": "^4.1.0"
|
|
}
|
|
}
|