{ "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", "e2e:run": "cypress run", "e2e:ci": "start-server-and-test start http://localhost:3000/ e2e:run", "e2e:local": "start-server-and-test dev http://localhost:3000/ e2e:run", "e2e": "dotenv -e .env.e2e npm run e2e:local", "prepare": "husky install" }, "dependencies": { "@bull-board/express": "3.11.0", "@headlessui/react": "1.6.4", "@maizzle/framework": "3.7.3", "@prisma/client": "3.14.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", "@sentry/browser": "7.3.0", "@sentry/node": "7.3.0", "@sentry/tracing": "7.3.0", "@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", "aws-sdk": "2.1146.0", "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", "nodemailer": "6.7.5", "preview-email": "3.0.5", "react": "18.1.0", "react-dom": "18.1.0", "react-icons": "4.4.0", "react-modal-sheet": "1.5.1", "remix-auth": "3.2.2", "remix-auth-form": "1.1.2", "remix-seo": "0.1.0", "remix-utils": "3.2.0", "secure-password": "4.0.0", "superjson-remix": "0.2.0", "tiny-invariant": "1.2.0", "tslog": "3.3.3", "twilio": "3.77.1", "uuid": "8.3.2", "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/cypress": "8.0.2", "@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/nodemailer": "6.4.4", "@types/preview-email": "2.0.1", "@types/react": "18.0.10", "@types/react-dom": "18.0.5", "@types/secure-password": "3.1.1", "@types/uuid": "8.3.4", "@types/web-push": "3.3.2", "@vitejs/plugin-react": "1.3.2", "c8": "7.11.3", "cypress": "9.7.0", "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": "3.14.0", "prisma": "3.14.0", "start-server-and-test": "1.14.0", "tailwindcss": "3.0.24", "tsx": "3.12.6", "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", "seed": "tsx prisma/seed.ts" } }