{ "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", "postbuild": "node scripts/prerender-money-pages.mjs", "test": "vitest run", "test:ci": "vitest run --reporter=verbose && npm run test:api", "test:api": "npm --prefix mim-api test", "test:e2e": "playwright test", "test:e2e:lan": "MIM_E2E_BASE_URL=http://192.168.11.37 playwright 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": { "@playwright/test": "^1.61.0", "@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" } }