A personal ledger for fractional work across brands.
A fractional seat across brands leaves the work in pieces. Promises, hours, and open actions live in an inbox, a Slack, a project board, and the margin of a calendar. Inio is a fractional operator practice: one operator sits across several brands at once. Nothing off the shelf fit that seat. A team CRM, or a workspace built around one company, is the wrong shape for one person working across several. So we built Adjuta, a personal ledger, for ourselves.
The before-state: scattered, and easy to drop
Two brands in one week is ordinary. Two in one afternoon happens. Brand A needs a follow-up on a draft agreement. Brand B needs a billing tier confirmed after a list cleanup. Jordan is waiting on a revised scope note. Alex wants to see the draft emails by Friday.
The brands stay unnamed because the work is quiet and the brands are the loud part.
None of these is big, and none of them started in the same place. A promise begins as a sentence in Slack. The due date lands in a calendar hold, if it lands anywhere. Asana gets a task when someone remembers to make one. Who asked lives in an email thread. Whether it already happened lives in sent mail, a meeting note, or nowhere.
That holds until the week gets loud. I said I would send the one-pager before Monday, and then Brand A's fire drill ate the day. By Thursday the promise has no record, only a feeling that Jordan is owed something. It fails the other way too. Someone promised a clear staging window, and three days later there is no telling a commitment from a CC.
A rented dashboard does not catch this. Those tools assume a team, a pipeline, and a process shaped like everyone else's. Our loop is one person and four objects: promises, actions, hours, and a daily log. A tool that does not match those four becomes one more tab nobody checks.
The turn: the smallest system that matches the loop
So we stopped shopping for a closer dashboard and built the smallest system that matches those four objects. Sign-in is Google, against an allowlist. There is no public signup, and access today is private and by invitation. The brands keep their own tools. The ledger belongs to the operator.
This is the second tool Inio has built for a seat it fills. The first was the outbound system in We replaced a sales stack, which runs a sales motion. Adjuta does not. It does not source prospects, run sequences, or stand in for a team CRM. It remembers what was promised, what is still open, and which hours are still a draft.
The build: one Worker, one database, the screens we open
What shipped is small on purpose. A Cloudflare Worker serves the app. Cloudflare D1 holds the data in one store, so a promise never exists in three places with three opinions. The UI is server-rendered from that database, and it is live at adjuta.com.
The screens are the loop, named:
- Today is home.
- Promises are first-class, in both directions.
- Actions are the open work.
- People are the humans on a brand: Alex, Jordan, and whoever else is actually in the thread.
- Brands keep Brand A from blurring into Brand B.
- Week, Shipped, and Rollup are the look back: the week as it happened, what went out, and hours gathered across brands.
Rollup gathers hours across brands. It does not finalize a bill or confirm the numbers. On a phone the app runs as a PWA with a short tab bar: Today, Triage, Actions, People, and More.
Today is the screen we actually open
Today opens on Needs you now. Filtered to Brand A, two things need attention: the follow-up on the draft agreement is two days late, with Alex, and Jordan's revised scope note is due today. Each item carries its brand, its person, and its state, so nobody has to reconstruct the thread to remember which is which. Under the queue, the day's hours sit as a draft, and Confirm waits for a person.
Looks done lives in Triage
Triage is where the system asks questions instead of answering them. One of them is Looks done. The card here is a reply to Alex on Brand A, and the evidence is the kickoff reply sitting in Sent in Gmail. Triage thinks that might close the item and offers two buttons: Done and Not yet. A person makes the call, with the evidence on the card. A message in Sent is not the same thing as done.
The rest of Triage works the same way, one step earlier. Ingest pulls the signal in. Dedupe collapses the same thread when it shows up twice. Tidy cleans up the wording. What Triage will not do is invent work from a CC or an FYI: if nobody asked, it is not an item. Sharper triage is still ahead of us. What is live today is a queue of suggestions, not a clerk that clears the day.
Promises, both directions
Promises were the object we kept losing, so they are not a checkbox buried in a task. On Actions, All shows everything, and I owe and Owed to me split it by direction. Each promise can be late, kept, or broken.
I owe Alex a draft of the series email. Alex owes me a view of the draft emails. Those are different facts, and a flat task list treats them as the same kind of row. The screen below is Actions, held to Brand A, with both directions on one list.
Hours stay a draft
Hours are a suggestion until a person says otherwise. Brand A's day comes up as a draft: a check-in call, a scope note, and inbox triage, each with a duration the system thinks fits. The control is Confirm day, and nothing presses it automatically. Nothing downstream treats the guess as a timesheet, and nothing turns the draft into a bill.
A working principleAI suggests. You decide.
That is Inio's working principle, in this ledger and in client work: tools draft, operators decide. Adjuta can draft, match, and tidy. Four decisions stay human:
- Confirming hours. The draft can be wrong. A person owns the number.
- Closing an item with no evidence. Looks done can ask. It cannot press Done on its own.
- Sending in the operator's name. The keystroke stays human. Nothing leaves as you unless you send it.
- Inventing work from a CC or an FYI. Noise is not a promise. If nobody asked, it stays out of the queue.
Still soft, on purpose
Two things are still soft, and both come before any new feature. The phone experience is being hardened, and Triage is not yet as sharp as the rest of the ledger. We are not bolting on a team layer, a shared inbox, or a billing integration to make the system look finished. Widening it now would add surface and keep the same dropped promise.
Most of the work was naming the objects. The Worker and the database were the smaller half. The harder half was admitting that "task" was too vague a word for this job, and that an hour nobody confirms is just a story about the week.
If you are about to rent another dashboard
- Name the objects you actually lose. For us that was promises in both directions, not a longer task list.
- Match the system to one person if one person does the work. A team CRM is the wrong shape for a fractional seat.
- Keep suggest and decide on opposite sides of a button. A record the machine can close, send, or confirm alone is a record you will stop trusting.
- Leave hours as a draft until a person owns them. A confident suggestion is not a timesheet.
- Harden the daily screen before you add a feature. For us, phone feel and triage still come before anything new.
Questions operators ask about Adjuta
What is Adjuta?
Does Adjuta replace a CRM or a sales stack?
Does Adjuta confirm hours or send messages on its own?
Who can sign in to Adjuta?
The seat is what a brand can get.
Inio does not sell Adjuta. We built the ledger for our own fractional seat. What a brand can get is the operator in that seat: one person across the brands, owning the promises, the hours, and the calls. Tell us what your week looks like.
Let's Talk →Built for ourselves. Live at adjuta.com.