live in Mumbai, London, NYC 2FA · Audit log · TLS
Client portal

The view your client used to ask for.

A clean, branded portal where each client sees their projects, the hours behind each invoice, and their payment history. They raise a dispute with a comment instead of an email. The numbers settle the argument. One link. No back-and-forth.

No card needed · 14-day full-access trial
portal.getfruitful.io · Acme Holdings
Welcome back
Acme Holdings
2 active projects · billed in USD
All current
Latest invoice
$22,693
INV-2026-114 · due 14 Jun
Open balance
$0
last payment · $18,400
Your projects · this month
Project Hours Billable
Atlas redesign 142h 30m $20,663
Pricing teardown 14h 00m $2,030
View invoice Download statement signed in · magic link
Self-serve
Clients see their hours and invoices
Stops the “send me the report” emails
In thread
Disputes happen on the invoice
Not in your inbox
One link
Magic-link sign-in for each client
No password to forget
Branded
Your logo, your colour, your domain
White-label module
01 · What clients see

The numbers behind
each invoice. On their schedule, not yours.

Every client gets their own portal — only their projects, only their hours, only their invoices. Open an invoice and they see the hours that built it: project, week, total. No support ticket, no Friday-afternoon export, no waiting on the agency.

Invoice detail

Hours linked
to the line items.

Each invoice line ties back to the hours that built it. Clients hover a row, see the week, the project, the total. They can download a PDF or a statement of account at any time. The portal is read-only — they can’t edit the underlying numbers, only see them.

  • Their projects, not yours A client sees only the projects you have set them up on. They never see another client’s work, your internal projects, or your team utilisation numbers.
  • Hours linked to line items Each invoice line ties back to the time entries behind it. Clients can audit a number without asking you for an export.
  • Statement on demand A running statement of account — every invoice, every payment, every credit note — available as a PDF whenever they want it.
portal.getfruitful.io · INV-2026-114
Invoice · INV-2026-114
Acme Holdings · May 2026
Sent · due 14 Jun
Description Hours Rate Amount
Atlas redesign · May 142.5 USD 145 USD 20,663
Pricing teardown · May 14.0 USD 145 USD 2,030
Total USD 22,693
Read-only. Clients can see and download, never edit. Disputes go through the comment thread on each entry.
02 · Sign-in

Magic-link, every time.
No passwords to lose. One click in their inbox.

How clients get in

Email. Click. Inside.

Each client has portal access by invitation. Sign-in is a magic link sent to their email — they click it, they are in. No password to set, forget, or rotate. The link is short-lived and single-use; sessions are scoped to one device until they sign out or the session expires.

  • Short-lived, single-use links Sign-in links expire quickly and only work once. Sharing the email forward does not share access — the link burns on first use.
  • Rate-limited at the door Brute-force token guessing is rate-limited per IP. Failed attempts back off before they get anywhere.
  • Revoke access in one click Toggle portal access off for any client and the next sign-in attempt fails immediately. Reactivate the same way — the audit log captures both.
portal.getfruitful.io · sign in
Sign in

Welcome back to your portal

Enter the email we have on file and we will send you a link.

finance@acme.com
No password to set or forget
·
Link expires after one use
03 · Disputes

A comment,
not an email thread. The numbers do the rest.

What happens when a client disagrees
  1. 1
    Flag the entry
    The client opens an invoice line and flags it with a one-line comment — ‘these three hours look wrong’.
  2. 2
    Lands in approval queue
    The flagged entry returns to the manager’s approval queue with the comment attached. Same queue you already check daily.
  3. 3
    Approve, edit, or reject
    The manager reviews, edits the entry, or replies in the thread. Every action writes an audit row — who, when, what was changed.
  4. 4
    Client sees the response
    The thread is visible in the portal. The client sees the resolution without another email exchange.

The argument lives next to the number it’s about. Not in your inbox.

portal.getfruitful.io · dispute · row #4
Disputed entry
Atlas redesign · 14 May · 3h 15m
Under review
Acme · 14 May 17:42
These three hours look wrong — we were on a call the whole afternoon. Can someone check the entry?
Sarah · agency · 14 May 18:05
Looked into this — entry was tagged to the wrong project. Edited to 0h 45m. Statement will reflect the change on your next invoice.
14 May 18:05 · Sarah Lim edited row #4 · 3h 15m → 0h 45m
Resolved in 23 minutes audit log entry · #1842
04 · Anonymisation

Show the work,
not the people. When it matters.

Per-client toggle

One switch.
Names become roles.

For sensitive engagements, you can hide individual employee names from one specific client. They still see hours, projects, dates, totals — just not who personally logged each row. Useful for confidential projects, anonymous research panels, or relationships where the partner you signed is not the partner you delivered with.

  • Per-client, not org-wide One client can be anonymised while another sees full names. Whatever fits the relationship.
  • Internally, nothing changes Your dashboard, your approvals, your audit log all use real names. Only the portal projection is anonymised.
  • Reversible any time Toggle off and the next page load shows real names again. The audit log captures every toggle, with who and when.
app.getfruitful.io/dashboard/clients/acme · settings
Client portal settings · Acme Holdings
Portal access
Allow this client to sign in and view their projects
Anonymise employee names
Replace names with role-id codes in this client’s portal only
What Acme sees
Worked by Hours
Designer · D-002 12h 30m
Designer · D-002 8h 00m
Engineer · E-001 24h 00m
Designer · D-003 14h 00m

Internally, names stay real — only the portal view is anonymised.

Also in client portal

The boring bits done right. So clients answer their own questions.

Recurring invoices

Set a cadence per client — monthly, quarterly, annually. Missed periods are filled in automatically when a paused template comes back online. No silent gaps.

Payment history

Every payment, refund, and credit note shows on the client’s statement. Read-only — they can see, they cannot edit.

Their currency

Each client carries their own billing currency. Invoices land in USD for a US client, EUR for a EU client — automatically.

Audit trail

Every dispute, every edit, every comment writes to the audit log. Auditors and lawyers get a clean trail without having to ask.

Branded PDF

Invoice and statement PDFs carry your white-label brand — name, logo, primary colour. Optional support email override for the footer.

In-app notifications

A bell in the header and a full feed of every invoice, payment, and dispute event. Clients never miss a beat — even if they ignore email.

Their inbox, their rules

Every client picks which emails they want — new invoices, overdue reminders, payment receipts, dispute updates. The portal feed is always on; email is opt-out.

Self-serve profile

Clients update their own contact name, phone, address, and display timezone. No more “please change the address on this invoice” tickets.

Send + read receipts

When an invoice is sent, you see when the client opens it. Optional reminder emails fire on a cadence you control.

Who turns this on

Three buyers, one portal.

Agency owner
Pain

"Friday afternoons were the ‘send me the hours’ queue. Three clients, four exports, sometimes a Saturday."

Fruitful does

Clients sign in. They see the hours. The export queue is empty. Disputes drop because the numbers are already visible.

−85% export requests (illustrative)
Consulting partner
Pain

"Senior clients wanted ‘more transparency’ on retainer hours. We had nothing to offer except a fresh PDF."

Fruitful does

The portal is the transparency answer. Retainer hours, project allocation, invoice trail — read-only, branded, fits the relationship.

Higher renewal confidence (illustrative)
Studio finance lead
Pain

"Disputes used to end in a phone call, an email, and a credit note. Days of churn for a 45-minute correction."

Fruitful does

Client flags the row with a comment. Approval queue handles it. Resolved in minutes — credit note auto-generated if needed.

~25min dispute resolution (illustrative)
The first thing our oldest client said after we turned on the portal was ‘why did this take you ten years’. We didn’t lose any clients that quarter.
R
Ravi Krishnan
Founding partner · Linework Studio
Disputes used to be an email chain and a Friday call. Now they’re a comment thread. The argument lives next to the number.
S
Sarah Lim
Head of Operations · Coalpine Studio
Honest questions

Things agency owners ask first.

Can clients pay an invoice from the portal?
Not yet. The portal currently shows invoices and a payment history, but the ‘pay now’ button is not live — payment still happens through your existing channel (bank transfer, Stripe link, whatever you use today). We are building it for a future release; we will not pretend it ships before it does.
How is sign-in handled — passwords or magic links?
Magic links only. Each sign-in sends a short-lived, single-use link to the client’s email. No password to set, no password to forget, no password to reset. The link burns the moment it is used.
Can one company see another company’s data?
No. Each client account is scoped to their own projects, invoices, and payment history. There is no shared view, no ‘see all clients’ toggle. The same scope rule runs server-side on every page load.
What happens when a client disputes a row?
The flagged entry returns to your approval queue with the comment attached. You can approve, edit, or reply — every action writes an audit row. The thread is visible on the invoice line, so the client sees the resolution without another email.
Can I anonymise employee names for one specific client?
Yes. Per-client toggle replaces names with role-id codes (Designer · D-002 etc.) in that client’s portal only. Internally — your dashboard, your audit log, your approvals — names stay real.
Do invoices show in the client’s currency?
Yes. Each client has a billing currency. A US client gets USD, a EU client gets EUR, an India client gets INR — automatic, with an exchange rate locked at the moment you send the invoice.
Can we turn off the portal for a specific client?
One toggle per client. Off means the next sign-in attempt fails immediately, and any active session is invalidated. Flip it back on the same way. Every toggle writes to the audit log.
How are clients notified when an invoice goes out?
Two channels. A row lands in their portal notification feed the moment the invoice is sent — bell in the header, full feed at /notifications. The matching email fires too, unless the client has opted out of that one event type from their settings. The feed always records, the email is the polite reminder.
Can clients silence email reminders without leaving the portal?
Yes. Each client has a settings page with four switches — new invoice, overdue, payment received, dispute reviewed. Flip the ones they want; the rest still land in the portal feed. No mass-unsubscribe, no missed bill.

Turn on the portal. Watch the email queue empty. Self-serve, on day eight.

14 days, full access, no card. We will pre-populate a sandbox portal during onboarding so you can hand a client a link in week one.

No card needed · Cancel anytime · Onboarding in under 10 minutes