mirror of
https://github.com/Luchexx/wacrm.git
synced 2026-11-02 17:29:45 +00:00
Re-applies PR #182's next-intl scaffold with defensive measures aimed at the most-likely-but-unconfirmed causes of the 503 that hit prod after that PR merged. PR #183 reverted #182 to restore service; this branch carries the same i18n payload plus the safeguards below. Defensive changes vs PR #182: 1. **`outputFileTracingRoot: __dirname`** in next.config.ts. Builds were warning that Next.js inferred the workspace root as the parent GHWebhosting directory (because of a stray lockfile there). With the wrong root, file tracing for the production artifact can include the wrong files or skip ours. Pinning the root to the wacrm directory silences the warning and makes tracing deterministic across local / CI / Hostinger. 2. **`outputFileTracingIncludes: { "/**/*": ["./messages/**/*.json"] }`**. Belt-and-suspenders: explicitly force the i18n message dictionaries into the production artifact even if static-import tracing somehow misses them in Hostinger's build environment. 3. **Static locale import map in `src/i18n/request.ts`**. Replaces `import(\`../../messages/\${locale}.json\`)` with an explicit `{ en: () => import(...), es: ..., lt: ... }` map. Template-literal dynamic imports are well-supported by Turbopack's tracer but the static form leaves zero room for the tracer to skip a locale. 4. **Try/catch around the intl middleware call**. If `intlMiddleware(request)` ever throws at runtime, fall through to auth-only handling and log the error rather than 503-ing every page request behind a single bad call. 5. **Try/catch around `LOADERS[locale]()`** with English fallback. Same idea: a missing locale bundle at runtime returns English content instead of crashing the render path. 6. **`engines.node: ">=20.10.0"`** (was `>=20.0.0`). Next 16.2's actual minimum. Tells Hostinger's Node.js app picker not to land us on a too-old subversion. Verified locally: - npm run lint → 0 errors (same 18 pre-existing warnings) - npm run typecheck → clean - npm run test → 366 passing - npm run build → 62 prerendered pages across en/es/lt; workspace root warning gone; messages bundled into `.next/server/chunks/ssr/ messages_{en,es,lt}_json_[json]_cjs_*.js` - npm start probes: / → 307 → /en /en/login → 200 /es/login → 200 /lt/login → 200 /en/dashboard → 307 → /en/login (signed out) /api/whatsapp/templates → 401 If 503 reappears in prod after this lands, the local repro is clean, so the next step is hPanel build/runtime logs. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
85 lines
2.1 KiB
JSON
85 lines
2.1 KiB
JSON
{
|
|
"name": "wacrm",
|
|
"version": "0.2.2",
|
|
"private": true,
|
|
"description": "Self-hostable CRM template for WhatsApp built on Next.js and Supabase — shared inbox, contacts, sales pipelines, broadcasts, and no-code automations.",
|
|
"license": "MIT",
|
|
"author": "Arnas Donauskas",
|
|
"homepage": "https://github.com/ArnasDon/wacrm",
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "git+https://github.com/ArnasDon/wacrm.git"
|
|
},
|
|
"bugs": {
|
|
"url": "https://github.com/ArnasDon/wacrm/issues"
|
|
},
|
|
"keywords": [
|
|
"crm",
|
|
"whatsapp",
|
|
"whatsapp-business-api",
|
|
"nextjs",
|
|
"supabase",
|
|
"automation",
|
|
"broadcast",
|
|
"self-hosted",
|
|
"template"
|
|
],
|
|
"engines": {
|
|
"node": ">=20.10.0"
|
|
},
|
|
"scripts": {
|
|
"dev": "next dev",
|
|
"build": "next build",
|
|
"start": "next start",
|
|
"lint": "eslint",
|
|
"typecheck": "tsc --noEmit",
|
|
"format": "prettier --write .",
|
|
"format:check": "prettier --check .",
|
|
"test": "vitest run",
|
|
"test:watch": "vitest"
|
|
},
|
|
"dependencies": {
|
|
"@base-ui/react": "^1.5.0",
|
|
"@dagrejs/dagre": "^3.0.0",
|
|
"@dnd-kit/core": "^6.3.1",
|
|
"@dnd-kit/sortable": "^10.0.0",
|
|
"@dnd-kit/utilities": "^3.2.2",
|
|
"@supabase/ssr": "^0.10.3",
|
|
"@supabase/supabase-js": "^2.106.2",
|
|
"@xyflow/react": "^12.10.2",
|
|
"class-variance-authority": "^0.7.1",
|
|
"clsx": "^2.1.1",
|
|
"date-fns": "^4.3.0",
|
|
"lucide-react": "^1.16.0",
|
|
"next": "16.2.6",
|
|
"next-intl": "^4.13.0",
|
|
"react": "19.2.4",
|
|
"react-dom": "19.2.4",
|
|
"recharts": "^3.8.1",
|
|
"shadcn": "^4.2.0",
|
|
"sonner": "^2.0.7",
|
|
"tailwind-merge": "^3.6.0",
|
|
"tw-animate-css": "^1.4.0"
|
|
},
|
|
"devDependencies": {
|
|
"@tailwindcss/postcss": "^4",
|
|
"@types/node": "^25",
|
|
"@types/react": "^19",
|
|
"@types/react-dom": "^19",
|
|
"eslint": "^9",
|
|
"eslint-config-next": "16.2.6",
|
|
"prettier": "^3.8.3",
|
|
"prettier-plugin-tailwindcss": "^0.8.0",
|
|
"tailwindcss": "^4",
|
|
"typescript": "^6",
|
|
"vitest": "^4.1.7"
|
|
},
|
|
"overrides": {
|
|
"postcss": "^8.5.10",
|
|
"ip-address": "^10.1.1",
|
|
"fast-uri": "^3.1.2",
|
|
"hono": "^4.12.18",
|
|
"@swc/helpers": "^0.5.17"
|
|
}
|
|
}
|