OpenBooks

Open source accounting, tax preparation, and business intelligence dashboard

TypeScriptNext.jsPostgreSQLFastAPIMicroservice ArchitectureRailwayAI

From QuickBooks to OpenBooks

QuickBooks keeps you on a subscription, keeps your data in its cloud, and still leaves gaps where tax prep and real reporting should be. The result is more tools, more handoffs, and less control over the books than there should be. If you want something tailored, transparent, or self-hosted, it's not really built for that.

That pushed me toward building something of my own: a system shaped around a small business with multiple revenue streams, with a data model I control end to end. No paying for features I never use. No digging through a cluttered interface just to get basic work done. The goal wasn't to rebuild accounting software in the abstract. It was to build the version this business actually needed.

AI that actually helps

QuickBooks AI felt more like a checkbox than a capability. It was there, but it wasn't especially smart or especially useful. That made me want to see what AI could look like when it was built around an actual business workflow.

After cancelling QuickBooks, I fell back to managing everything in a spreadsheet. That worked just enough to be annoying. The next question was whether AI could pull in my business bank transactions and sort them into income and tax deductible expenses without turning bookkeeping into another manual chore.

That turned into open-books: Plaid pulls in the bank data, Postgres stores it, and an agent uses my rules and prompt to classify transactions into income and expenses. I run it from the dashboard when I need it. The point isn't to let AI blindly do the books. The point is to make the repetitive parts faster while keeping the structure and review process under my control. It's already saved me a ton of hours of work.

Behind the scenes

Under the hood, bank data moves from Plaid through Next.js API routes into Postgres, where the dashboard can read it back instantly without calling the bank on every page load. The first sync can pull up to 24 months of history, then everything shifts to incremental updates. The classification agent runs as a separate service, reading rules and prompt from the database and writing structured income and expense records back into the system. That architecture matters because it keeps the data model visible, editable, and easy to extend as the business changes.

Current state

Today, the core loop is in place: connect the bank, sync transactions, review the results, and classify them into usable records. The broader vision is still bigger than the current build, but the foundation is there and already useful.

Back to OpenBooksBack to Projects