{ "name": "frontend", "private": true, "sideEffects": false, "type": "module", "scripts": { "dev": "remix vite:dev", "build": "vite build", "preview": "vite preview", "serve:static": "node server/static.js", "typecheck": "tsc", "lint": "eslint --cache --cache-location ./node_modules/.cache/eslint .", "format": "prettier --write .", "clean": "rm -rf dist", "start": "node server/static.js", "generate:html": "node server/entry.server.js" }, "dependencies": { "@heroicons/react": "^2.2.0", "@radix-ui/react-icons": "^1.3.2", "@radix-ui/themes": "^3.1.6", "@remix-run/node": "^2.14.0", "@remix-run/react": "^2.14.0", "@remix-run/serve": "^2.14.0", "@tailwindcss/typography": "^0.5.15", "@types/axios": "^0.14.4", "@types/react-syntax-highlighter": "^15.5.13", "@types/three": "^0.170.0", "axios": "^1.7.7", "bootstrap-icons": "^1.11.3", "cors": "^2.8.5", "express": "^4.21.1", "gsap": "^3.12.5", "html-react-parser": "^5.1.19", "isbot": "^4.1.0", "r": "^0.0.5", "react": "^18.2.0", "react-dom": "^18.2.0", "react-markdown": "^9.0.1", "react-syntax-highlighter": "^15.6.1", "rehype-raw": "^7.0.0", "three": "^0.171.0" }, "devDependencies": { "@remix-run/dev": "^2.14.0", "@types/cors": "^2.8.17", "@types/express": "^5.0.0", "@types/lodash": "^4.17.13", "@types/react": "^18.2.20", "@types/react-dom": "^18.2.7", "@typescript-eslint/eslint-plugin": "^6.7.4", "@typescript-eslint/parser": "^6.7.4", "autoprefixer": "^10.4.19", "concurrently": "^9.1.0", "cross-env": "^7.0.3", "eslint": "^8.57.1", "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-import": "^2.28.1", "eslint-plugin-jsx-a11y": "^6.7.1", "eslint-plugin-react": "^7.33.2", "eslint-plugin-react-hooks": "^4.6.0", "postcss": "^8.4.38", "prettier": "^3.3.3", "tailwindcss": "^3.4.4", "tsx": "^4.19.2", "typescript": "^5.1.6", "vite": "^5.4.11", "vite-tsconfig-paths": "^4.2.1" }, "engines": { "node": ">=20.0.0" }, "markdownlint-config": { "$schema": null }, "remix": { "future": { "v3_lazyRouteDiscovery": true } } }