{ "name": "frontend", "private": true, "sideEffects": false, "type": "module", "scripts": { "build": "remix vite:build", "dev": "tsx start.ts", "format": "prettier --write \"./**/*.{ts,tsx,js,jsx}\"", "lint": "eslint \"./**/*.{ts,tsx,js,jsx}\" --fix", "start": "cross-env NODE_ENV=production tsx start.ts", "typecheck": "tsc" }, "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", "markdown-it": "^14.1.0", "markdown-it-toc-done-right": "^4.2.0", "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", "remark-emoji": "^5.0.1", "remark-gfm": "^4.0.0", "remark-parse": "^11.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/markdown-it": "^14.1.2", "@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", "terser": "^5.37.0", "tsx": "^4.19.2", "typescript": "^5.1.6", "vite": "^5.1.0", "vite-tsconfig-paths": "^4.2.1" }, "engines": { "node": ">=20.0.0" } }