The Workbench · Cloudbase
Live at cloudbase.day · in daily use since august 2026

Practice management for the person who does all the jobs.

Cloudbase runs a one-person practice — the work, the record, and the money — without ever once telling you how you did. I built it because every tool I paid for assumed I was a team of twelve, and then billed me per seat for the eleven I don't have.

It's the biggest thing I've ever built, it's in production, and it's what I open first every morning.

Visit cloudbase.day → Walk the screens
Flask · Postgres · Fly.io 600+ tests, green Multi-tenant from day one Built and run by one person
Why this exists

For years I ran my own work out of a private Flask app I called the Cockpit. It knew my projects, my hours, my mileage, and the twelve small requests that arrive in a week. It was ugly in places and it was mine, and it beat every subscription I'd tried.

Then other people started asking for it. Cloudbase is that app rebuilt properly — multi-tenant, productized, and rewritten from the assumption that the person using it is the whole company.

Here's what running a small practice actually costs: not the hours, the switching. A request in email, a note in one app, the hours in a spreadsheet, the miles on a receipt in the truck. By Friday you can't say what an hour of your week earned, and you'd rather not find out.

So one place holds all of it, and none of it scores you. There are no streaks in here, no productivity number, no capacity bar. Twelve people want something and four of them are waiting on you — that's a sentence, not a dashboard.

The walkthrough

Two screens, and the whole argument.

Real screens, real numbers, live controls — tick a task and watch what it does. The notes underneath are mine: six things on these two screens that no other tool I've paid for would do.

Running 1:12:04 Brightside rebuild — Write the invoice copy 2
Wednesday, August 19 · late summer

Morning, Aaron.

Twelve people want something, four of them are waiting on you.3

Projects

+ New project
Brightside rebuildBrightside Dental
5 open
2 open · invested

Mileage · August

Log a trip
412
miles · $280.16 claimable
Time today
3h 41m a timer's running Time ›
Today's line
"Do the work in front of you, and let it be enough."
— a note I left myself
Planning today · Wednesday, August 19

23 things are open. Let's find today's four.

23 open across everything · 5 waiting on somebody else, not shown.
1 · What today already holds5
The constraints come first, and they're facts rather than a budget — nothing here subtracts hours from a capacity bar. You're a person, not a resource with a utilization.
2 · Yesterday's, if you still want them6
Photograph the finished cabinetsBrightside rebuild
Call the supplier back about the hingesVine Street clinic
Offered, never re-starred. They arrive unstarred, with no age and no colour — and if you ignore them three days running they simply stop being offered and go back to the pile.
3 · The pile · everything open, by client By client By project Oldest first
Caught, not filed · the Inbox 2 unfiled
Ask Lindsay about the trailer weekend
Give it a project ▾
Find out what the state form actually wants
Give it a project ▾
Two moves, either order: star it for today, or give it a project. Starring doesn't file it.
Brightside Dental 5 open · 1 waiting
Write the invoice copydue today
Swap the two hero photos11 days
3 more · 1 waiting on Dana
Vine Street clinic 4 open · 2 waiting
Send Dana the revised estimate2 days
Their card reader won't take tapsGC-114 · 3 days
4 · That's the day

4 picked, 2 appointments, about 2 hours already gone.

Said once, in plain words, and then it gets out of the way. No warning, no capacity bar, and nothing stops you starring a fifth. ✓ Start the day
Order matters: the day first, then what carried over, then the pile. Showing the pile before the constraints is how every other tool produces an impossible day.
1
Two numbers, total
The whole sidebar is allowed exactly two figures: how many things you picked for today, and a timer that is running. No unread badges, no counts that imply you are behind.
2
The strip follows you
One timer per project, startable from any task row, pinned to every screen. Leave one running late and it offers to end it at the top of the hour instead of billing you nine hours.
3
A sentence, not a stat
"Twelve people want something, four of them are waiting on you." Every other tool shows you 12 and a red badge.
4
Nothing is instantly final
Tick a task above: it strikes through and hands you an Undo for about eight seconds before it settles. A mis-tick is never a loss.
5
Constraints before the pile
On Planning today, what the day already holds comes first — meetings, drive time, school pickup. Showing the pile first is how every other planner produces an impossible day.
6
Yesterday is an offer
Carry-over arrives unstarred, with no age and no colour, and nothing is ever labelled overdue. Ignore an offer three mornings running and it quietly goes back to the pile.
7
Yes, that is a music player
Because I wanted one, and I am the whole product committee. It sits under the lenses, it is three lines tall, and it never once tells you how many minutes you listened. Nobody asked me for this — but when somebody does ask me for something, that is exactly how fast it gets built.
Live controls · tick a task, hit Undo Both screens · switch above, or click Today in the sidebar Demo data · a practice a lot like mine Night flight is a tweak away
The best thing about it

Ask me for something and the answer is almost always yes.

That isn't a support promise — it's how the thing is built. I'm the only person who has to agree, there's no roadmap committee, and most of what people ask for is a config field I haven't written yet. So it gets written.

Every dead end in the app carries a line that says tell me and I'll build it in, and it goes straight to me. That's the whole support model, and it's why Cloudbase ends up looking like your practice instead of mine.

Your words win
Clients, customers, students, families, parishioners — you name them once and every screen, button, report and email uses your word. Same for a project, and for a unit of work.
Your project screen
Pick the panels, the layout and your own custom fields in a split-screen builder that shows the real page as you set it up. A project page for a contractor and one for a tutor share no furniture.
Your pay model
Salary, hourly, fixed fee, a fully custom bonus schedule, or not billed at all. Unpaid work reads INVESTED, never $0.00 — because those aren't the same thing.
Your lens
A mode hides the instruments you're not using this afternoon and filters who you're working for. Hiding something never stops it recording, and never deletes anything.
What's inside

Eleven instruments, one ship.

Turn any of them off per project and the seam reads "soon", not "upgrade". Two of them cost twelve dollars extra; the rest come with it.

Today
The planning session. Holds, then carry-over, then the pile, then the day in a sentence.
Projects
Configurable pages with phases, sub-tasks, rhythms, notes and the people involved.
Tickets
Requests sorted by whose move it is. The row you type is the row it becomes. Closing one says SORTED.
Ground Control +$12
The doors other people come in through: public intake, changes, releases, estimates they decide on without an account.
Time
One timer per project, startable anywhere, add-after-the-fact, and the only chart in the app — twelve weeks of hours with no target line.
Mileage
Two odometer readings and a route. Miles derived, the rate copied at log time, vehicles retired and never deleted.
Meetings
A before, a during and an after. Move one instance without dragging the series; turn an action item into a task or a ticket.
Formation +$12
Video calls in the browser. No accounts, no install — guests join from a link, and the notes land in the meeting record.
The Logbook
A writing room at a real reading size. Select a line and make something of it — a task, a ticket, a document — and the note stays whole.
Files
No folder tree, ever. A file can't exist without a host, so ticking a task never loses its attachment. Paste is the primary path.
Reports & Views
Filters that read as sentences over your own fields. Add a schedule and the same saved view becomes a report that runs at 4am — silent when there's nothing.
The one you need
Not here yet. Tell me and I'll build it in — that's the line at every dead end in the app, and it comes to me.
What it refuses to do

Nothing in here scores you.

Most of this software's design work went into things it deliberately doesn't have. These are rules, not preferences — a screen that breaks one is a failed screen.

No score, no streak
No productivity number, no capacity bar, no goal, no word count while you write. One chart in the whole product, and a week off is pale, never red.
No counts that imply debt
No unread badges, no "7 unfiled", no inbox zero. Age is a plain fact in quiet ink — never bold, never red, and nothing is labelled overdue.
Nothing is instantly final
A tick holds for about eight seconds with an Undo before it settles. Offline keeps what you typed; a fault says "that's on me, not you" and hands you a ref code.
Soft landings only
No "upgrade now", no "you've reached your limit", no countdown. Stop paying and the workspace goes dormant, not deleted — everything exports, and the lamp's still where you left it.
How it's built

Flask with an app factory, SQLAlchemy 2.0, Alembic, Postgres on Neon, deployed to Fly.io with migrations on release. One shared core that ships single-tenant or multi-tenant, with per-request tenant binding as the enforced scoping layer — not a filter someone remembers to add.

No component library and no icon font: the interface is hairlines, four typefaces and Unicode glyphs set in mono. Server-rendered pages that swap only their main element, so the music never stops when you navigate. Past six hundred tests and still climbing.

StatusLive in production
Homecloudbase.day
Tests600+, green
Team1
Dogfoodedevery day

If your practice is you, come look at it.

Bring me the thing your current tool won't do. That's usually the shortest conversation we'll have, and I'd rather build it than talk you out of it.

Visit cloudbase.day → ⟩ Write to me Back to the Workbench