{ "name": "shellphone.app", "private": true, "sideEffects": false, "scripts": { "dev:build": "NODE_ENV=development dotenv npm run build:server -- -- --watch", "dev:css": "NODE_ENV=development tailwindcss -i ./styles/tailwind.css -o ./app/styles/tailwind.css --watch", "dev:remix": "NODE_ENV=development remix watch", "dev:server": "NODE_ENV=development dotenv node ./server/index.js", "dev:worker": "NODE_ENV=development npm run build:worker -- --watch", "dev:init": "NODE_ENV=development dotenv run-s build:remix build:server", "dev": "npm run dev:init && run-p dev:build dev:worker dev:css dev:remix dev:server", "build:server": "node ./scripts/build-server.js", "build:css": "tailwindcss -i ./styles/tailwind.css -o ./app/styles/tailwind.css -m", "build:remix": "remix build", "build:worker": "node ./scripts/build-worker.js", "build": "NODE_ENV=production run-s build:css build:remix build:worker build:server", "start": "NODE_ENV=production node ./server/index.js", "test": "vitest", "test:coverage": "vitest run --coverage", "lint": "eslint --ignore-path .gitignore --ext .js,.ts,.tsx .", "db:setup": "prisma migrate deploy", "prepare": "husky install" }, "dependencies": { "@bull-board/express": "3.11.0", "@headlessui/react": "1.6.4", "@prisma/client": "4.13.0", "@react-aria/interactions": "3.9.0", "@remix-run/express": "1.14.3", "@remix-run/node": "1.14.3", "@remix-run/react": "1.14.3", "@remix-run/server-runtime": "1.14.3", "@tailwindcss/forms": "0.5.2", "@tailwindcss/line-clamp": "0.4.0", "@tailwindcss/typography": "0.5.2", "@twilio/voice-sdk": "2.1.1", "awesome-phonenumber": "3.0.2", "bullmq": "1.85.1", "clsx": "1.1.1", "compression": "1.7.4", "express": "4.18.1", "ioredis": "5.0.6", "jotai": "1.7.0", "luxon": "2.4.0", "morgan": "1.10.0", "nanoid": "3.3.4", "react": "18.1.0", "react-dom": "18.1.0", "react-icons": "4.4.0", "react-modal-sheet": "1.5.1", "remix-seo": "0.1.0", "remix-utils": "3.2.0", "superjson-remix": "0.2.0", "tiny-invariant": "1.2.0", "tslog": "3.3.3", "twilio": "3.77.1", "web-push": "3.5.0", "zod": "3.17.3" }, "devDependencies": { "@remix-run/dev": "1.14.3", "@remix-run/eslint-config": "1.14.3", "@testing-library/jest-dom": "5.16.4", "@types/compression": "1.7.2", "@types/express": "4.17.13", "@types/luxon": "2.3.2", "@types/morgan": "1.9.3", "@types/react": "18.0.10", "@types/react-dom": "18.0.5", "@types/web-push": "3.3.2", "@vitejs/plugin-react": "1.3.2", "c8": "7.11.3", "dotenv-cli": "5.1.0", "esbuild": "0.14.42", "esbuild-node-externals": "1.4.1", "eslint": "8.16.0", "glob": "7.2.3", "happy-dom": "5.0.0", "husky": "7.0.4", "lint-staged": "13.0.0", "npm-run-all": "4.1.5", "prettier": "2.6.2", "prettier-plugin-prisma": "4.12.0", "prisma": "4.13.0", "start-server-and-test": "1.14.0", "tailwindcss": "3.0.24", "typescript": "4.7.2", "vite": "2.9.9", "vite-tsconfig-paths": "3.5.0", "vitest": "0.13.1" }, "lint-staged": { "*.{js,ts,tsx,css}": "prettier --write", "*.prisma": "prisma format" }, "prettier": { "bracketSameLine": false, "printWidth": 120, "quoteProps": "as-needed", "semi": true, "singleQuote": false, "tabWidth": 4, "trailingComma": "all", "useTabs": true }, "eslintConfig": { "env": { "node": true }, "extends": [ "@remix-run/eslint-config" ] }, "engines": { "node": "18" }, "prisma": { "schema": "prisma/schema.prisma" } }