Files
miracles_in_motion/package.json
T
defiQUGandCursor 6c0de165d3 P0: mim-api, live conversion paths, and CWV sprint to ~2.56s LCP.
Ship VMID 7811 API (assistance, contact, Stripe checkout), wire donate and forms to API with accessible success UI, static LCP shell with deferred React mount, and perf gate tooling (P0 72/2600ms; world-class 85/2500ms tracked separately).

Co-authored-by: Cursor <[email protected]>
2026-06-15 23:42:45 -07:00

117 lines
4.6 KiB
JSON

{
"name": "miracles-in-motion-web",
"private": true,
"version": "1.0.0",
"type": "module",
"description": "Public website for Miracles In Motion 501(c)3 non-profit organization",
"scripts": {
"dev": "vite",
"brand:export": "bash scripts/brand/export-brand-assets.sh",
"photos:optimize": "bash scripts/optimize-community-photos.sh",
"prebuild": "npm run brand:export && npm run photos:optimize",
"build": "tsc && vite build",
"test": "vitest run",
"test:ci": "vitest run --reporter=verbose && npm run test:api",
"test:api": "npm --prefix mim-api test",
"test:watch": "vitest",
"type-check": "tsc --noEmit",
"validate:ci": "npm run type-check && npm run test:ci && npm run a11y:header-audit",
"validate:ci:strict": "npm run validate:ci && npm run perf:gate",
"perf:gate": "node scripts/a11y/audit-perf-gate.mjs --min=72 --max-lcp=2600",
"perf:gate:world-class": "node scripts/a11y/audit-perf-gate.mjs --min=85 --max-lcp=2500",
"brand:trace-svg": "node scripts/brand/trace-nav-svg.mjs",
"a11y:header-audit": "node scripts/a11y/audit-header-wcag.mjs",
"a11y:header-audit:live": "node scripts/a11y/audit-header-wcag.mjs --lighthouse",
"a11y:site-lighthouse": "node scripts/a11y/audit-site-lighthouse.mjs",
"evidence:header-screenshots": "node scripts/evidence/capture-header-screenshots.mjs",
"evidence:full": "npm run a11y:site-lighthouse && npm run perf:gate && npm run evidence:header-screenshots",
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
"prepreview": "npm run build",
"preview": "vite preview",
"deploy": "echo 'Production deploy: use proxmox/scripts/mim4u-deploy-to-7810.sh' && exit 1",
"diagram:png": "node scripts/export-architecture.mjs --format=png",
"diagram:svg": "node scripts/export-architecture.mjs --format=svg",
"docs:index": "node scripts/generate-doc-index.mjs",
"docs:refresh": "npm run docs:index && npm run diagram:png",
"lighthouse": "npx lighthouse https://mim4u.org --only-categories=accessibility --output=json --output-path=./reports/status/lighthouse-a11y-mim4u-latest.json --chrome-flags='--headless --no-sandbox'",
"lighthouse:local": "CHROME_PATH=${CHROME_PATH:-/usr/bin/google-chrome} npm run lighthouse"
},
"keywords": [
"non-profit",
"charity",
"501c3",
"miracles-in-motion",
"community",
"donations",
"volunteers",
"react",
"vite",
"tailwind"
],
"author": "Miracles In Motion",
"license": "MIT",
"repository": {
"type": "git",
"url": "https://github.com/Miracles-In-Motion/public-web.git"
},
"homepage": "https://mim4u.org",
"dependencies": {
"@fontsource/inter": "^5.2.8",
"@fontsource/playfair-display": "^5.2.8",
"@react-three/fiber": "^8.16.8",
"@stripe/react-stripe-js": "^2.8.1",
"@stripe/stripe-js": "^4.7.0",
"@tanstack/react-query": "^5.59.20",
"@tensorflow/tfjs": "^4.22.0",
"@testing-library/dom": "^10.4.1",
"@types/node": "^24.6.2",
"date-fns": "^4.1.0",
"framer-motion": "^11.11.17",
"framer-motion-3d": "^11.5.6",
"i18next": "^25.5.3",
"i18next-browser-languagedetector": "^8.2.0",
"i18next-http-backend": "^3.0.2",
"lucide-react": "^0.446.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-i18next": "^16.0.0",
"react-query": "^3.39.3",
"recharts": "^3.2.1",
"socket.io-client": "^4.8.1",
"three": "^0.180.0",
"zustand": "^5.0.8"
},
"devDependencies": {
"@resvg/resvg-js": "^2.6.2",
"@tailwindcss/typography": "^0.5.10",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1",
"@types/jest": "^30.0.0",
"@types/react": "^18.3.25",
"@types/react-dom": "^18.3.7",
"@types/react-helmet-async": "^1.0.1",
"@typescript-eslint/eslint-plugin": "^7.18.0",
"@typescript-eslint/parser": "^7.18.0",
"@vitejs/plugin-react": "^4.7.0",
"@vitest/ui": "^3.2.4",
"autoprefixer": "^10.4.16",
"eslint": "^8.57.1",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-react-refresh": "^0.4.4",
"gh-pages": "^6.0.0",
"jsdom": "^27.0.0",
"playwright": "^1.61.0",
"postcss": "^8.4.31",
"potrace": "^2.1.8",
"react-helmet-async": "^2.0.5",
"tailwindcss": "^3.4.18",
"terser": "^5.44.0",
"typescript": "^5.6.3",
"vite": "^7.1.9",
"vite-bundle-analyzer": "^1.2.3",
"vite-plugin-pwa": "^1.0.3",
"vitest": "^3.2.4"
}
}