Files
simone 5bf5dfce71 infra(04-00): route /c/ → /client/, Dockerfile, Gitea deploy
- 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>
2026-05-21 16:12:05 +02:00

6.1 KiB

FEATURES.md — ClientHub Freelancer Client Portal

Domain: Freelancer client portal — solo personal branding consultant Project: ClientHub (welcomeclient.iamcavalli.net) Researched: 2026-05-09 Confidence: HIGH


Context

Two asymmetric roles. Admin (the freelancer) has full CRUD. Client (read + lightweight interaction) accesses via secret URL — no login, no account — and can view, comment, and approve. The product competes indirectly with Notion client portals, HoneyBook, Dubsado, and bespoke agency portals. The differentiator is zero-friction secret link access and personal brand positioning.


Table Stakes

Features clients expect when opening any project portal. Missing these causes confusion, distrust, or support overhead.

Feature Why Expected Complexity Notes
Project overview at a glance Client needs to know "where we are" without reading walls of text Low Name, brand, brief, current phase
Phase + task status visibility Primary client question is "what's done, what's next" Low Phases with nested tasks; status per task (todo / in progress / done)
Deliverable approval Client must formally sign off on outputs Medium Per-deliverable approve action; state persists; admin sees approval timestamp
Inline commenting on tasks/deliverables Feedback and questions without email Medium Flat comments sufficient for v1; threading is nice-to-have
Document / file links Deliverables, briefs, contracts surface in the portal Low Links to Google Drive, PDF, external URL; no file hosting needed
Payment status visibility Client needs to know what they owe Low Deposit 50% + balance 50%; three states each: pending / invoiced / paid
Total quoted amount (not itemized) Client expects to see the agreed number Low Single total; line items are admin-only
Mobile-readable layout Clients open links on phones Low Responsive web; no native app
Persistent secret link Link must not expire or rotate without notice Low UUIDs in DB, never regenerated unless admin resets explicitly
Trustworthy, branded appearance First impression determines confidence in the consultant Low Logo, brand colors, professional typography — not a generic SaaS look

Differentiators

Not expected, but meaningfully improve experience or workflow.

Feature Value Proposition Complexity Notes
Decision log / history Running record of agreed decisions — eliminates "we never agreed on that" disputes Low Append-only note stream visible to client; admin writes entries
Phase progress indicator Visual progress bar gives a sense of momentum Low Derived from task completion %; no extra data model needed
"Last updated" timestamp on dashboard Shows the portal is live and maintained Low Trivially derived from DB updated_at
Admin overview: all clients at a glance Freelancer scans all active projects and overdue payments in one view Medium List with status badges; payment alert if overdue
Payment status badge with clear labels Color-coded states (red = unpaid, yellow = invoiced, green = paid) Low Client sees their own; admin sees all
Shareable link reset Admin can invalidate and regenerate a client's link if it leaks Low DB field update + redirect; rarely used but reassuring
Service catalog Admin builds quotes from a curated menu of services; reusable across clients Medium Lookup table; admin-only; used by Claude in v2
Claude-assisted onboarding (v2) Generates phases + quote draft from a brief — massively speeds up admin work High Explicitly v2 in PROJECT.md

Anti-Features

Deliberately NOT building these.

Anti-Feature Why Avoid What to Do Instead
Client login / account creation Adds friction with no benefit for a small client list Secret UUID link
In-app invoicing / PDF generation Accounting is out of scope Show payment status only
File upload / storage Massive complexity Link to Google Drive or Dropbox
Email / SMS notifications Transactional email infrastructure is heavy Manual communication fine for small client list
Multi-admin / team roles Freelancer works alone Single admin
Client-editable project structure Clients editing phases corrupts admin's source of truth Comment and approve only
Itemized pricing visible to client Erodes commercial confidentiality Single total; detail is admin-only
Kanban / drag-and-drop board Phases are sequential, not a fluid backlog Ordered phase list
Time tracking Out of scope for project-based billing Not relevant
Multi-language / i18n Single consultant, single-market Hardcode interface language

Feature Dependencies

Secret link (UUID) → Client dashboard
Client dashboard → Phase/task display
Phase/task display → Deliverable approval
Phase/task display → Inline commenting
Admin client management → Secret link generation
Admin client management → Payment tracking
Service catalog → Quote building (admin picks from catalog)
Quote building → Payment tracking (total = basis for deposit/balance)
Service catalog → Claude onboarding v2

Key insight: Admin must create data before the client dashboard shows anything meaningful. Admin-first, then client.


MVP Build Order

  1. Admin: create/edit client record with secret link generation
  2. Admin: create/edit phases and tasks per client
  3. Admin: set payment amounts and statuses
  4. Client dashboard: read-only view (overview, phases, tasks, payment status, documents)
  5. Client: deliverable approval
  6. Client: inline comments
  7. Admin: all-clients overview
  8. Admin: service catalog
  9. v2: Claude-assisted onboarding

Open Questions

  • What happens when a client accidentally shares their secret link? Is link reset sufficient, or should there be an access log?
  • Does the decision log need to be visible to clients from day one, or deferred?
  • Should approval actions be reversible (un-approve)?