Files
claudemesh/apps/web/package.json
Alejandro Gutiérrez 8a50e4fe56
Some checks failed
CI / Tests / 🧪 Test (push) Has been cancelled
feat(web): create-mesh form + invite-link generator with QR code
- create-mesh-form: RHF + zod + shadcn Form. Fields name, slug (auto-
  derived from name, editable), visibility, transport. Slug validation
  matches server (lowercase letters, digits, hyphens). Slug collision
  errors surface on the slug field.
- invite-generator: RHF + zod. Fields role, maxUses, expiresInDays.
  After generation: renders the ic://join/... invite link as a 256px
  QR code (PNG data URL, Claude-palette colors) + copy-to-clipboard
  button + "claudemesh join <link>" snippet for teammates.

Add: qrcode 1.5.4 + @types/qrcode 1.5.5 (QR generation runs client-side).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-04 22:56:49 +01:00

80 lines
2.4 KiB
JSON

{
"name": "web",
"version": "1.0.0",
"private": true,
"type": "module",
"scripts": {
"build": "next build",
"clean": "git clean -xdf .cache .next .turbo node_modules",
"dev": "next dev",
"format": "prettier --check . --ignore-path ../../.gitignore",
"lint": "eslint",
"start": "next start",
"typecheck": "tsc --noEmit"
},
"prettier": "@turbostarter/prettier-config",
"dependencies": {
"@ai-sdk/react": "2.0.86",
"@anaralabs/lector": "3.7.3",
"@formatjs/intl-localematcher": "0.6.2",
"@hookform/resolvers": "5.2.2",
"@next/bundle-analyzer": "16.0.10",
"@number-flow/react": "0.5.10",
"@tanstack/react-query": "catalog:",
"@tanstack/react-query-devtools": "catalog:",
"@tanstack/react-table": "catalog:",
"@turbostarter/analytics-web": "workspace:*",
"@turbostarter/api": "workspace:*",
"@turbostarter/auth": "workspace:*",
"@turbostarter/billing": "workspace:*",
"@turbostarter/db": "workspace:*",
"@turbostarter/email": "workspace:*",
"@turbostarter/i18n": "workspace:*",
"@turbostarter/monitoring-web": "workspace:*",
"@turbostarter/shared": "workspace:*",
"@turbostarter/ui": "workspace:*",
"@turbostarter/ui-web": "workspace:*",
"accept-language": "3.0.20",
"dayjs": "1.11.19",
"envin": "catalog:",
"marked": "16.4.1",
"motion": "12.23.24",
"negotiator": "1.0.0",
"next": "16.0.10",
"next-i18n-router": "5.5.5",
"next-themes": "0.4.6",
"nuqs": "2.7.2",
"pdfjs-dist": "5.4.530",
"qrcode": "1.5.4",
"react": "catalog:react19",
"react-dom": "catalog:react19",
"react-dropzone": "14.3.8",
"react-hook-form": "catalog:",
"react-markdown": "10.1.0",
"react-qr-code": "2.0.18",
"react-shiki": "0.9.1",
"rehype-katex": "7.0.1",
"rehype-raw": "7.0.0",
"remark-gfm": "4.0.1",
"remark-math": "6.0.0",
"sonner": "2.0.7",
"zod": "catalog:",
"zustand": "5.0.8"
},
"devDependencies": {
"@svgr/webpack": "8.1.0",
"@tailwindcss/postcss": "4.1.16",
"@turbostarter/eslint-config": "workspace:*",
"@turbostarter/prettier-config": "workspace:*",
"@turbostarter/tsconfig": "workspace:*",
"@types/node": "catalog:node22",
"@types/qrcode": "1.5.6",
"@types/react": "catalog:react19",
"@types/react-dom": "catalog:react19",
"autoprefixer": "10.4.21",
"eslint": "catalog:",
"prettier": "catalog:",
"typescript": "catalog:"
}
}