A business operating system
I open one window and see how the business is doing.
A business operating system
I open one window and see how the business is doing.
There was no single place to look. To understand how things were going I opened Shopify, the ad account, a spreadsheet of expenses, my task notes and email. Half the time went into pulling numbers together and remembering where things lived. By the time the picture was assembled, there was no time left to decide anything.
First came a spreadsheet that I filled in by hand. It lived exactly as long as I kept updating it, which was not long. Then I looked at ready-made analytics dashboards. They show sales, but they don't know what a specific bundle costs once shipping and fees are included. And they have no idea which decisions are waiting on me.
I built a dashboard that data flows into on its own, every hour. Sales, expenses, margin, stock, ads, tasks, the publishing calendar, the team, newsletters. A separate block holds the queue of decisions only I can make: while it is not empty, any new work matters less than that queue.
At first I called it a dashboard, then the name "operating system" stuck. In practice it is a custom CRM, only broader. A typical CRM holds customers and orders. This one also holds money, stock, ads, content and what I have to decide today. Any new piece can be added and linked to the rest, so it fits one particular person and the way they run things.
A model works on top of this data. At night an agent rereads it and looks for places where the numbers contradict each other, and in the morning a brief arrives with what is worth doing today. That part has its own breakdown below.








Assembling the picture used to take an evening. Now I open a tab and see everything at once, so decisions don't get postponed.
Technical
- Python collectors run hourly on a schedule: Shopify Admin API, Meta Marketing API, GA4 Data API, the bank, stock.
- PostgreSQL is the source of truth. A JSON mirror sits next to it on disk, and the dashboard reads from it when the database is unreachable.
- Flask under gunicorn serves the HTML dashboard. Margin is calculated from the real cost of each SKU, not from a store-wide average.
- The decision queue (
gates.json) holds what is waiting on a person: every entry has a deadline, the cost of delay and the one who closes it. - The model is connected through the Claude API: the night agent and the briefs are started from the same server on a schedule.
- Deployed on Render. A Cloudflare Worker keeps the schedule and wakes the server every hour, so no machine under a desk is needed.















