{ "name": "@rallly/web", "version": "0.0.0", "private": true, "scripts": { "dev": "portless run --name web.rallly sh -c 'NEXT_PUBLIC_BASE_URL=$PORTLESS_URL DEV_DOMAIN=${PORTLESS_URL#https://} pnpm exec next dev'", "build": "next build", "build:test": "NODE_ENV=test next build", "analyze": "cross-env ANALYZE=true next build", "start": "next start", "type-check": "tsc --pretty --noEmit", "i18n:scan": "i18next-cli extract", "i18n:sync": "i18next-cli extract --sync-primary", "openapi:generate": "tsx scripts/generate-openapi.ts", "test:integration": "playwright test", "test:unit": "vitest run", "test:codegen": "playwright codegen http://localhost:3000", "docker:start": "./scripts/docker-start.sh", "better-auth:generate": "pnpx @better-auth/cli@latest generate --config ./src/lib/auth.ts --output ../../packages/database/prisma/models/user.prisma" }, "dependencies": { "@ai-sdk/openai": "^3.0.128", "@aws-sdk/client-s3": "^3.1155.0", "@aws-sdk/s3-request-presigner": "^3.1155.0", "@casl/ability": "^6.7.3", "@casl/prisma": "^1.6.0", "@casl/react": "^5.0.0", "@googleapis/calendar": "^20.1.0", "@googleapis/meet": "^9.1.0", "@googleapis/oauth2": "^10.0.1", "@hono-rate-limiter/redis": "^0.1.4", "@hono/standard-validator": "^0.2.1", "@hono/zod-validator": "^0.7.2", "@hookform/resolvers": "^5.2.2", "@marsidev/react-turnstile": "^1.5.3", "@next-safe-action/adapter-tanstack-query": "0.1.2", "@next/env": "16.4.2", "@prisma/adapter-pg": "^7.8.0", "@prisma/client": "^7.8.0", "@rallly/billing": "workspace:*", "@rallly/database": "workspace:*", "@rallly/emails": "workspace:*", "@rallly/languages": "workspace:*", "@rallly/logger": "workspace:*", "@rallly/posthog": "workspace:*", "@rallly/tailwind-config": "workspace:*", "@rallly/ui": "workspace:*", "@rallly/utils": "workspace:*", "@scalar/hono-api-reference": "^0.9.30", "@sentry/nextjs": "^11.8.0", "@svgr/webpack": "^8.1.0", "@t3-oss/env-nextjs": "^0.13.10", "@tailwindcss/postcss": "^4.1.18", "@tanstack/react-query": "^5.90.12", "@tanstack/react-query-devtools": "^5.91.1", "@tanstack/react-table": "^8.9.1", "@trpc/client": "^11.8.0", "@trpc/next": "^11.8.0", "@trpc/react-query": "^11.8.0", "@trpc/server": "^11.8.0", "@upstash/ratelimit": "^1.2.1", "@upstash/redis": "^1.36.2", "@vercel/functions": "^3.3.6", "ai": "^6.0.307", "better-auth": "1.6.30", "calendar-link": "^2.6.0", "class-variance-authority": "^0.7.1", "cookie": "^0.7.2", "copy-to-clipboard": "^3.3.3", "dayjs": "^1.11.13", "effect": "4.0.0", "es-toolkit": "^1.39.9", "hono": "^4.13.11", "hono-openapi": "1.2.0", "hono-rate-limiter": "^0.2.1", "i18next": "^26.3.0", "i18next-icu": "^2.4.3", "i18next-resources-to-backend": "^1.2.1", "ics": "^3.1.0", "intl-messageformat": "^10.7.15", "iron-session": "^6.3.1", "js-cookie": "^3.0.8", "linkify-react": "^4.3.2", "lucide-react": "^0.479.0", "micro": "^10.0.1", "motion": "^12.6.2", "nanoid": "^5.1.16", "next": "16.4.2", "next-safe-action": "^8.6.0", "pg": "^8.17.1", "php-serialize": "^4.1.1", "postcss": "^8.5.31", "react": "19.2.6", "react-dom": "19.2.6", "react-hook-form": "^7.68.0", "react-hook-form-persist": "^3.0.0", "react-i18next": "^17.0.8", "react-image-crop": "^11.0.10", "react-use": "^17.6.0", "superjson": "^2.0.0", "tailwindcss": "^4.1.18", "tldts": "^6.1.86", "undici": "^7.29.1", "zod": "^4.3.6", "zustand": "^5.0.14", "zxcvbn": "^4.4.2" }, "devDependencies": { "@axe-core/playwright": "^4.12.1", "@babel/core": "^7.29.7", "@next/bundle-analyzer": "16.4.2", "@playwright/test": "^1.64.1", "@rallly/test-helpers": "workspace:*", "@rallly/tsconfig": "workspace:*", "@testing-library/jest-dom": "^6.7.0", "@testing-library/react": "^16.3.0", "@testing-library/user-event": "^14.6.1", "@types/js-cookie": "^3.0.1", "@types/node": "^24.1.0", "@types/react": "19.2.13", "@types/react-dom": "19.2.3", "@types/zxcvbn": "^4.4.5", "@vitejs/plugin-react": "^5.0.0", "cheerio": "^1.0.0-rc.12", "cross-env": "^7.0.3", "dotenv": "^17.2.4", "i18next-cli": "^1.58.1", "jsdom": "^26.1.0", "tsx": "^4.6.2", "vitest": "^4.1.11" } }