Approvals and surcharges

When a project runs over budget or you need to charge extra for materials/travel/etc., the portal has a structured approval flow so the client always agrees to extra spending before it happens. No more "surprise" invoices.

When approval is required

Three triggers fire approval requests:

  1. Budget exceeded — a billable work session would push the project's tracked value past its budget cap.
  2. Surcharge added — you add a surcharge to a project that wasn't set up with surchargesPossible = true at creation.
  3. Manual budget extension request — you preemptively ask for more budget before crossing the cap.

The approval flow

1. You request approval

From the project's Approvals section in the admin workspace, click Request approval and pick the type:

  • Budget extension — ask for an extra dollar amount on top of the original budget.
  • Hourly limit — ask for N extra billable hours.
  • Subscription overage — for retainer projects, ask the client to approve overage hours billed at the overage rate.

Add an optional message explaining why. The portal:

  • Sends the client an email + in-portal notification.
  • Marks the project's Approval Status section with a red badge.
  • Blocks billable work on the project until the request is approved or declined (non-billable work continues).

2. Client responds

The client opens the email or their Approvals tab. They see:

  • The original project budget and current spend.
  • The requested extension amount.
  • Your message explaining the request.
  • Approve / Decline buttons + an optional response note.

3. After their response

Approved:

  • The project's effective budget cap increases by the approved amount.
  • Billable work resumes immediately.
  • You get a notification.

Declined:

  • Billable work stays blocked on the project.
  • You get a notification with their response note.
  • You can request again with a smaller amount or talk it through offline.

Surcharges

A surcharge is a one-off or recurring extra cost on a project — materials passthrough, fuel, equipment rental, third-party fees. They appear as line items on the next invoice generated for the project.

Disclosed vs not disclosed

At project creation, you tick Surcharges possible?. This sets the project's surchargesPossible flag and controls how new surcharges are treated:

  • Disclosed (yes) — surcharges can be added freely and apply automatically. Often paired with a surchargesDisclosure text field describing what kinds of surcharges may apply.
  • Not disclosed (no) — every new surcharge requires explicit client approval before it can be billed.

Adding a surcharge

From the project's Surcharges section:

  1. Name the surcharge (e.g., "Lumber pass-through").
  2. Amount in cents.
  3. Frequency: monthly, quarterly, annually, or one-time.
  4. Optional notes.

If surcharges are disclosed, the surcharge is approved immediately and shows up on the next invoice. If not, the surcharge is created in pending status and an email goes to the client.

Client response

Same flow as approval requests — the client opens an email + sees the surcharge on their portal with Approve/Decline + an optional response note. Once approved, it bills on the next invoice cycle.

Recurring product costs (expenses)

A heads-up disclosure to the client about ongoing third-party costs they'll be responsible for as a result of the project. Common examples: cloud infrastructure (AWS, GCP, Azure) for an app you're building them, AI API usage (OpenAI, Anthropic) for an automation, SaaS subscriptions, hosting, domain renewals.

The client pays the vendor directly. These costs do not appear on any invoice you send, and the portal does not bill or forward them.

Add them in the project's Recurring Product Costs section so the client sees the full cost-of-ownership picture upfront. The client can acknowledge each cost from their portal — useful as a written record that they understood the ongoing costs before you started the work.

The distinction vs. surcharges:

  • Surcharge — an extra amount you charge the client (your fuel, your equipment rental, materials you fronted). Bills on your invoice.
  • Recurring product cost — a cost from a third party the client will pay directly (their cloud bill, their AI API bill, their SaaS subscription). Informational only — never bills through you.

Approval Status section attention badge

The project accordion's Approval Status section shows a red badge with a count of pending items requiring client decision. This includes:

  • Pending budget extensions
  • Pending hourly limit requests
  • Pending surcharge approvals

A non-zero badge means the client owes you a decision and (if it's a budget block) billable work is paused.

What clients see in their portal

Clients have an /dashboard/approvals tab that lists every pending approval request across all their projects. They can:

  • Approve / Decline each one
  • Leave a response note
  • See the history of past approvals/declines

Approvals don't expire — they sit pending until the client decides.

When billable work is blocked

If the project has a pending budget extension OR a budget that's exceeded with no extension approved, the Start Work button is greyed out with a "Billable work paused" hover tooltip. You can still log non-billable work.

The block lifts as soon as the client approves the extension or the budget is increased manually (admins can override the budget cap in the project's settings — but the audit log records the override).