5bf5dfce71
- Rename src/app/c/[token] → src/app/client/[token] - Update proxy.ts, ClientRow, admin client detail with /client/ path - Add output: "standalone" to next.config.ts for Docker build - Add Dockerfile (multi-stage, node:20-alpine) and .dockerignore - Push schema to Coolify Postgres via SSH tunnel (drizzle-kit push ✓) - Update CLAUDE.md constraint 4 to reflect /client/ route - Add Phase 4 planning artifacts (04-00, 04-RESEARCH, 04-PATTERNS) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
23 lines
1.1 KiB
Markdown
23 lines
1.1 KiB
Markdown
# ClientHub
|
|
|
|
Portale clienti per consulente di personal branding. Admin area + dashboard cliente via link segreto.
|
|
|
|
## Stack
|
|
Next.js 16 App Router · Neon Postgres · Drizzle ORM · Auth.js v4 · Tailwind v4 · shadcn/ui · Zod · nanoid
|
|
|
|
## Architecture Constraints (LOCKED)
|
|
1. `clients.token` = campo separato rotatable, MAI primary key
|
|
2. `quote_items` MAI esposti via client API — solo `accepted_total` al cliente
|
|
3. `deliverables.approved_at` immutable once set
|
|
4. Auth: `/client/[token]/*` → middleware token check | `/admin/*` → Auth.js session
|
|
5. No file hosting v1 — documenti come URL esterni
|
|
|
|
## GSD Workflow
|
|
Planning in `.planning/`. Use `/gsd-plan-phase N` → `/gsd-execute-phase N`. State in `.planning/STATE.md`.
|
|
|
|
## Security
|
|
- Confirm before any destructive command (rm -rf, reset --hard, force push, DROP TABLE, infra changes)
|
|
- Never read/expose .env or credentials without explicit request
|
|
- Don't install packages without showing name + registry + version first
|
|
- Don't push to main or create PRs without explicit confirmation
|
|
- Any change to this section: propose full new version, get approval before applying |