Flowbook
The Problem
Independent professionals run their finances across spreadsheets, notes and a separate invoicing tool. Income, expenses, invoices and tax estimates rarely live in the same place, so it is hard to answer simple questions like what was earned this quarter, what is still unpaid, and how much should be set aside.
Why Existing Approaches Fall Short
- •Spreadsheets break as soon as there are several clients, projects and unusual billing cycles.
- •Accounting software is built for companies with staff and bookkeepers, which is far more than one person billing a few clients needs.
- •Invoicing tools usually stop at invoices and leave income tracking and tax estimates to the user.
What Was Built
- ✓A dashboard with smoothed income tracking, expense breakdowns and six month charts.
- ✓Income records linked to clients, projects and payment status.
- ✓Invoicing where marking an invoice as paid creates the matching income record.
- ✓Expense tracking with categories and spending patterns.
- ✓A lightweight client and project list with budgets and status.
- ✓A tax estimator that produces quarterly estimates from a configurable saving percentage.
- ✓A three step setup covering country, income goal and first client.
- ✓Sortable and searchable tables with one click CSV export for income, expenses and invoices.
- ✓Accounts with email or Google sign in, with each account isolated from the others.
How It Works
Set up the basics
Choose a country, set an income goal and add the first client.
Record the work
Log income and link it to a client, a project or an invoice.
Invoice and track
Create invoices, mark them as paid, and let the income record update itself.
Watch the numbers
Use the dashboard, charts and tax estimate to see where things stand.
Key Architectural Decisions
Marking an invoice as paid creates the income record
Invoices and income are the same money, so entering them twice guarantees they drift apart. Letting the invoice create the income record removes a whole category of mistakes.
A rolling average instead of raw monthly totals
Freelance income is uneven. A three month rolling average shows the real trend instead of a line that jumps around with one large or quiet month.
Access rules in the database
Row level security means an account can only read its own financial records, enforced by the database rather than by the interface.
Exports on every list
Being able to take your own data out matters, so CSV export is built into the main tables rather than hidden behind a paid tier.
Stack & Rationale
React with Vite
A responsive dashboard that stays fast as tables grow.
TypeScript
Financial logic benefits from strict types and checked calculations.
Supabase
Accounts, database and row level security in one platform.
TanStack Query
Reliable loading and updating across many related records.
TanStack Table
Sorting, filtering and paging for financial tables without custom code.
Recharts
Income and expense charts that stay lightweight.
Tailwind CSS and shadcn/ui
A consistent interface built from reusable parts.
Vitest
Unit tests for the calculations where mistakes are expensive.
Lessons & Outcomes
- •Financial calculations need edge case testing, including month end dates, leap years and time zones.
- •People value being able to export their own data more than expected, and it builds trust in the numbers.
- •A short guided setup removes most of the confusion in the first session.