The work, the people and the customers, in one database
These are usually three products that email each other spreadsheets. Keeping them together is what makes a sprint’s capacity answerable at all — and what lets a booking page know that the person a client is choosing a time with is on leave that week.
Work
An organisation-level backlog, because that is how agencies actually work.
- One cadence, many clients
- A sprint collects work items from any project. The unified backlog interleaves them into a single order, so the question 'what are we doing next' has one answer rather than one per project.
- A project board is a filter
- The same board with one condition added. There is no second ordering to keep in sync, and no drift between the project view and the company view.
- Drag is one row
- Backlog position is a fractional index, so reordering writes a single row rather than renumbering the list. Clients reorder by naming neighbours; the server decides what a drop means.
People
Records that still give the right answer a year later.
- Effective-dated by default
- Engagements and compensation carry a from and a to. A question about last March reads March's row, not today's — which is the difference between a report and a guess.
- An insert-only leave ledger
- A balance is the sum of its entries. Corrections post a reversal pointing at the original; nothing is ever edited or deleted, so the history of a balance is always recoverable.
- Everything in minutes
- Leave, capacity, working patterns, estimates. It is what lets a US hourly sick-leave accrual and a UAE half-day share one unit without a conversion nobody can audit.
- Permits, properly
- Work authorisation and residence are separate axes, because in several countries they are separate documents. An application under appeal is a state the system understands, not a blank field.
Customers
A CRM, not a marketing platform bolted to one.
- There is no Lead object
- A lead is a stage, not a kind of record. Nothing is created, converted or merged when somebody becomes a customer — which is what keeps the contact list free of the duplicates every convert-on-qualification model produces.
- Consent is a record, not a checkbox
- What was obtained, how, and the exact wording somebody was shown — stored per record, so editing a form later cannot change what they agreed to. Quiet hours are computed in the recipient's own time zone, and refused where that zone cannot be known.
- Forms, booking links and chat, on your own site
- Enquiries arrive as contacts with the consent people actually gave. The chat panel never claims somebody is watching it, because nothing here would make that claim true.
- Your accounts, your recordings
- Calls go through your Twilio account and recordings never reach our storage. Proposals run on the same engine as employment contracts, so there is one renderer rather than two that disagree about a page break.
Where they meet
The payoffs are the answers no two of these products could give separately.
- Scheduled, minus holidays, minus leave
- Per person, resolved as of the sprint's start date, against that person's own working pattern and holiday calendar.
- Holiday calendars compose
- Federal plus state plus company, deduplicated by date. A US team gets both federal and state days without anyone maintaining a merged list.
- Provisional dates stay visible
- A holiday announced by decree that has not been confirmed still removes the day from capacity — people do not work it — but the number is shown as provisional rather than presented as settled.
- A booking page that sees leave
- A client picking a time never sees the days the host is away, because the approved leave is one join away rather than in another vendor's database. Nothing has to be kept in step: leave is approved, and the days stop being offered.
Several companies
A group of entities is the ordinary case, and most of it happens inside one country.
- An entity is a boundary, not a label
- Payroll emits an immutable snapshot per entity per period. Invoice numbering is a separate gapless series per entity. Every ledger line carries the entity it belongs to, so one subsidiary's August and the whole group's August are the same query with one clause more.
- Rules follow the entity, and the work
- Leave policy, overtime rules and holiday calendars resolve on the engagement's entity and where the work is actually done — a Wyoming company employing somebody in California owes California's rules. Most specific wins, and a rule scoped elsewhere is never used as a fallback.
- One person, two employers
- Somebody can hold concurrent engagements at two of your entities: two titles, two managers, two salaries paid by two companies. Each entity owes leave under its own jurisdiction at its own FTE, and neither loses sight of them. Resolving that to one engagement is the bug this design exists to prevent.
- The group consolidates
- Statements per entity or for the group, with intercompany balances eliminated and what does not net out reported rather than absorbed. Where entities keep different currencies, translation uses rates you supply — closing for the balance sheet, average for the profit and loss.
Payroll
Calculated from the records that are already there, and frozen once it is filed.
- Gross to net, per jurisdiction
- Tax bands, employer and employee contributions and statutory deductions are rows a tenant can see and argue with, not a branch on country code buried in the calculation. A jurisdiction we ship no preset for still runs; it starts generic.
- Leave paid at the right band
- Absence comes from the same insert-only ledger the rest of the product reads, already split into its pay bands — full pay, half pay, state-funded — so nobody re-derives it and gets a different answer.
- A snapshot, not a live query
- A run emits an immutable record per entity per period. Re-reading it in two years reproduces exactly what was filed, because HR data is effective-dated and retroactively corrected and a live re-query would not.
- Corrections are deltas
- A retro adjustment is a line in a later period pointing at the one it corrects. A closed period is never rewritten, which is what makes a filed return still tie out afterwards.
Service desk
A clock a customer would accept, and business hours it actually knows.
- The clock is derived, never stored
- First response and resolution are replayed from an append-only event log on every read. A stored countdown is wrong the moment a policy, a calendar or a state changes — and wrong invisibly.
- Business hours that compose
- A working pattern plus federal, state and company holiday calendars, unioned and deduplicated. That is the half a standalone desk cannot do: its business calendar is a list somebody typed once and will not maintain.
- Five outcomes, and none collapses
- No target is not 'met', paused is not 'at risk', and breached-but-answered is not breached-and-still-waiting. One is a post-mortem; the other is a customer still sitting there.
- Escalation is a link
- A ticket keeps its clock running while the fix enters a sprint. How long the customer waited and how long the fix took are two people's questions, and merging them makes both unanswerable.
Money
Invoices that post themselves, and books that reconcile without a spreadsheet.
- Double entry, enforced by the database
- A deferred trigger checks that debits equal credits at commit; a CHECK refuses a line carrying both sides. A ledger that balances only because every writer remembered to make it balance is not a ledger.
- Bank feeds, and the files every bank exports
- Named profiles for banks that speak the published open-banking standards, plus camt.053, MT940, Excel and CSV. Thirty-two of thirty-three profiles connect on your own credentials or your own corporate agreement.
- Delivered, charged, and the margin between
- What the work was worth at your rates, what you actually charged, and what it cost — with the gap split into what the deal gave away and what somebody decided to write off.
- Your accountant keeps their own books
- Invoices raised here are filed into Xero or Zoho Books and the payments they record come back. The chart, the tax codes and the ledger deliberately do not cross: two systems each keeping books and trying to agree is not an integration.
What it deliberately does not do
Benefit claims are not ours. An HR system of record answers eligibility — who is covered, under what, from when. Adjudicating and paying a claim is an insurance function with its own actors and its own regulator, and a product that guessed at one would be wrong about somebody’s medical bill.
Nor do we author your knowledge articles, price a recorded call, keep a transcript, or guess at a tax rate, a billing rate or an exchange rate that nothing on file supports. Where nothing matches, nothing is suggested — a plausible wrong number is the one that gets invoiced and then argued about.
Nor is there marketing automation: no bulk sending, no landing pages, no ad management. That is a marketing platform rather than a CRM, and it is the half of HubSpot nobody would switch to us for. What the CRM does instead is the half that needs the rest of the company’s data to answer at all.
See pricing