Features

Everything a studio bills with, in one plan.

Nothing below is reserved for a higher tier, and nothing below is metered. What follows is how each part behaves at the edges, since that is where a billing tool either holds or quietly loses money.

Tracking time

Two ways to record an hour, because people work in two ways.

A running timer
One at a time per person, enforced by a unique index rather than by hoping.
A weekly grid
Project and task down the side, days across. Fill it in on Friday if that is how you work.
Hours as you think of them
Type 7:15 or 7.25. An unparseable value leaves the previous figure alone rather than storing zero.
Several entries a day
The same task twice on one day, with different notes, stays two entries and shows as their sum.
The weekly timesheet: project and task rows against seven days, with per-day and weekly totals.

Approvals

A week is the unit, and a rejection carries a reason.

Submit a week
Not an entry at a time. A week belongs to a person and is reviewed as one thing.
Approve or send back
Sending back requires a comment, refused in the database and not merely in the form.
Approved time locks
It stops being editable, because it is about to be invoiced.
Reported on, not just recorded
See unapproved billable value as a figure, so you know what approval is holding up.
The approvals queue: billable value blocked by approval, weeks awaiting review, and one sent back with a note.

Invoicing

From tracked time, or written by hand, and immutable once sent.

Built from time
Choose a period, projects and people; group by task, person, project or entry.
Non-billable at zero
Pull goodwill onto the invoice as a no-charge line, so the client sees what they were not charged for.
Totals computed by trigger
The client never posts a total. A total nobody can reconcile against its lines is a number to distrust.
Sent means sent
Line items freeze. Void and reissue leaves a record; a silent edit leaves two versions and no trace.
A link for the client
A public invoice on an opaque token, so the person paying does not need an account.

Rates, cost and margin

What an hour bills for, what it costs you, and what is left.

Rates resolve most-specific-first
Person on this project, then task on this project, then the project, then the person, then the task default.
Stamped at write time
Resolved once in the database, so tracking and invoicing cannot disagree about what an hour was worth.
Effective-dated, never overwritten
A raise is a new row with a later date. Last year's margin stays last year's margin.
Cost rates come from the person
Not from the task. What somebody costs per hour does not change because they switched jobs for an afternoon.
The team screen: seats in use and what they cost, with a bill rate and a cost rate against each person.

Clients and what they owe

Who you work for, in their own currency, with the overdue money called out.

Each client bills in their currency
Set per client. Totals are never added across currencies into one figure.
Outstanding and overdue, separately
Overdue is coloured and labelled, so a page can be scanned for problems.
Archived, never deleted
A client whose invoices exist stays referenceable forever; archiving just removes them from pickers.
Contacts for addressing invoices
One primary per client, enforced by a unique index.
The clients screen: outstanding balances per client, one overdue balance in red, and an archived client kept below because invoices still reference it.

Expenses

Costs that belong to a job, on the same invoice as the hours.

Categories and receipts
Recorded against a project, with the receipt attached.
Billable or absorbed
Mark up, pass through at cost, or carry it yourself.
On the invoice
Alongside the time, in the client's currency.
The expenses screen: receipts against projects, billable and reimbursable flags, and an invoiced row locked.

Reports

Filtered, saved, and honest about currency.

Filter by anything that matters
Client, project, person, task, billable state, approval state, date range.
Bucketed per currency
Never summed into one figure across currencies, because that figure would be meaningless.
Utilization against capacity
Weekly capacity per person, scaled to the period. Somebody with no capacity recorded returns null, not zero.
Unpriced and stranded time
Billable hours with no rate, and billable work nobody has invoiced.
The reports screen: filters across the top, hours tracked and billable value, unpriced time called out in amber, a client breakdown with bars, team utilization against capacity, and a billing summary with overdue in red.

How the arithmetic is done

The parts that would be invisible if they were wrong.

Money is exact, never a float

Every amount is stored in minor units with its ISO currency code and added with exact arithmetic. Rounding happens in one place, and only where someone has named the mode.

Currencies refuse to mix

Adding dollars to euros throws rather than quietly producing a number. Reports bucket per currency, because a single total across currencies is a lie.

Rates are effective-dated

A raise today does not rewrite what a client was billed last year. The rate is stamped onto the entry when it is written, so a historical invoice keeps reproducing the figure actually charged.

Sent invoices do not change

Once a client has a copy, its line items are immutable. Void and reissue leaves a record; a silent edit leaves two versions and nothing saying they differ.

What is deliberately missing

Each of these ships in a competing tracker’s higher tier. None is on a roadmap here.

No screenshots

We do not photograph anyone's screen. A timesheet is a record of work, not evidence against the person who did it.

No GPS or location tracking

Where somebody was standing is not an input to an invoice.

No activity or idle monitoring

Keystroke counts and mouse movement measure compliance, not value, and the studios buying this bill for judgement.

Nothing is ever logged automatically

We will suggest a meeting that has no entry against it. We will never write the entry for you. That line is the difference between helpful and surveillance.