User Guide

Clients & projects

Clients are your billable customers; projects are the engagements under them.

What each client carries

📞

Contact info

Name, email, phone, address. Flows into invoice headers + email signatures.
📅

Billing cycle

Weekly · biweekly · monthly · on-demand. Drives the Generate Invoice modal's default date range.
🕓

OT multiplier

1.0× to 3.0×. Applied at invoice-generation time to overtime hours. Frozen onto the line so historical invoices stay intact.
💰

Tax + terms

Default tax rate + payment terms. Per-invoice override on the generation modal. Optional ledes_client_id for legal billing.
Clients list — searchable + filterable by status.  Row click drills into per-client detail with projects, team, and billing-history tabs.
Clients list — searchable + filterable by status. Row click drills into per-client detail with projects, team, and billing-history tabs.

Projects belong to one client

  • ✓Billing method: hourly / fixed-fee / retainer
  • ✓Optional budget + start/end dates
  • ✓Team: employees + contractors authorized to log time
  • ✓uses_tasks toggle for finer-grained breakdown
  • ✓is_legal_matter flag + matter IDs for LEDES
  • ✓Stamped onto every emitted invoice line
Team assignment is per-project
Team membership is per-project, not per-employee. An employee's timesheet only shows the projects they've been assigned to. Add/remove on the project detail page Team tab. For vendor-routed contractors: project membership + active outbound PO together authorize time entry — membership alone isn't enough.
Tip
For 1099 contractor roles (SSN sole-prop paid directly by the firm), project assignment AUTO-stamps a vendor- clients row for their single-person wrapper. Same mental model as W2 employees: project assignment IS the client authorization.

Client team rollup

The client detail page deduplicates team members across all of the client's projects, with a per-member project list. Useful for "who's working on this client this week?"

One-click project create

The "New Project" button on the client detail page opens the project form pre-filled with that client — saves a toggle back to the clients list.

Retainers tab (advance deposits)

Both the client detail page and the project detail page (for legal matters) expose a Retainers tab where admins record advance deposits with an initial balance + low-balance threshold. Every drawdown is a ledger row with a frozen balance_after; refunds, replenishments, and adjustments are separate kinds. Not legal-only — consultants call them monthly retainers, agencies do retainer engagements, CPAs collect tax-prep deposits. Same mechanics.

Client attachments (file cabinet)

Every client detail page has a Documents tab for generic client-scoped file storage — signed MSAs, brand guides, W-9s, SOWs, etc. 25 MB cap per file; PDF / images / Word / Excel / CSV / plain text allowlist. This is a file cabinet, not a workflow driver: nothing else in the app references these files, so admins can upload whatever they want without side effects.

Legal-matter pill on lists

When the attorney module is enabled + a project carries is_legal_matter=true, the clients list, projects list, and invoices list surface a small indigo "Legal" pill on the matching rows. Companion columns (LEDES ID on clients, Matter ID on projects, LEDES export status on invoices) auto-show when any row in the tenant carries a value, auto-hide otherwise.