
The problem
I knew how much I was paying.I didn’t know where the money had gone.
In my old spreadsheet, the card showed up as a single line: “Invoice”.
Purchase≠Payment
A card purchase is spending.Paying the invoice is cash outflow.
- Card purchase
- Accrual monthThe installment’s monthSpending
- Invoice
- PaymentCash outflow
So the same money isn’t counted twice.
How it works
- Record
- Classify
- Card / upfront
- Invoice
- Payment
- Reports
Paid upfront
Spending and cash together.
Credit card
Spending now, cash later.
Cards & installments
One purchase, installments by accrual month
Each installment on the right invoice
Full or partial payment
Installments add up to the total, to the cent

Rules that protect the data
The system would rather not know than make things up.
Unclassified
Old records with no payment method don’t get one by guesswork.
Explicit reconciliation
Reconciling is a declared action, never an assumption by the system.
Invoices have no category
The payment has no category: the spending was counted at purchase.
Recalculate, don’t duplicate
Derived values are recalculated — never duplicated.
Engineering
End‑to‑end conception and development: product, financial rules, backend, frontend, migration and deployment.
- Frontend
- ReactTypeScript
- Backend
- PythonFastAPISQLModel
- Data
- PostgreSQLAlembic
- Infrastructure
- VercelRenderNeon
- Quality
- pytest285 testes
Custom authenticationAccount isolationMigrationsRead-only demo
Result
Sentavos replaced my spreadsheet. It’s where I track my money today.
Real use changed the product too: features were dropped, reworked or born as problems showed up.
14 months
Of history preserved, with no discrepancies, through the card migration
285
Automated tests
Live
Since September 2026
Evolution
- Spreadsheet
- Web app
- Production
- Cards & invoices
- Reports
In the app
Monthly dashboardTransactionsCategory budgetsCardsInvoicesInstallmentsPersonal, Family and BusinessReportsNet worthInvestments