Skip to content
Back to projects
08 2026
Full-Stack Applied AI Data Science

Farol — Controle Financeiro

Finances for someone who is both an individual and a business owner, with an analyst that reads the numbers and tells you what to do.

Try the demo for 30 minutes
automated tests
244
payoff strategies compared
4
alert types by WhatsApp and email
8

From pain to result

Fig. 08 — Data flow 11 nodes · 11 edges
React SPA dashboard, entries, debts WhatsApp settle by "paid + no." FastAPI admin and read-only roles User manual one source: AI and PDF PostgreSQL Analyst pure engine: snapshot + date in Ollama · Qwen 2.5 local AI, manual only Dashboard and projections Alerts WhatsApp and email Ask Farol PDF manual
Source External Application Store Process Output
01

Before

Someone who is both an individual and a business owner usually has money spread across several accounts, cards and loans, held by different owners. A spreadsheet shows what happened, but does not answer what matters: how much is really left each month, which debt to pay first and on which day the account will go into the red.

And there are traps a spreadsheet misses: a credit-card bill entered as an expense counts the spending twice, owner’s pay becomes both income and expense, and an expense the company will reimburse looks like a living cost.

02

How · 1/5

I built a FastAPI + React application with PostgreSQL. The dashboard brings person and companies together, but every entry has an owner: owner’s pay and capital contributions are transfers between owners, and reimbursable spending stays out of the cost of living.

03

How · 2/5

The credit card follows real life: a purchase is an expense on the purchase date, tied to the bill due date; paying the bill settles the purchases and becomes a transfer from the account to the card — spending never counts twice.

04

How · 3/5

Debts support Price and SAC amortisation (with insurance, fees and indexation). Each one has a sheet with "what if…": prepay an amount or add a monthly extra and instantly see the new term and interest.

05

How · 4/5

The analyst is a calculation engine kept apart from the database: it compares payoff strategies, projects cash day by day — including recurring items and instalments not yet entered — and, when the balance is about to fall short, suggests how to cover it: transfers between accounts before credit, and the cheapest credit by effective rate. Planning sets aside what the goals need before anything is left to pay down debt.

06

How · 5/5

"Ask Farol" answers in plain language: questions about the numbers go to rules that call the analyst itself; questions about how to use the system go to a local AI (Ollama), which writes only from excerpts of the manual — the same text that becomes the PDF manual.

07

After

A web system that brings the accounts, transactions, credit cards, debts and reimbursements of a person and their companies into one place. On top of that data, an analyst works out how much is left each month, which debt to tackle first and when cash will run short — and sends alerts by WhatsApp and email.

244
automated tests
4
payoff strategies compared
8
alert types by WhatsApp and email

Reading the diagram

The API is the only part that reads the database: it builds the data snapshot and hands it to the analyst, which only calculates. The local AI sits alongside, with no database access — it writes from the manual, the same text that becomes the PDF. Alerts come from the same calculation the dashboard shows.

Technical highlights

  1. 1 Pure engine: the analyst opens no connection and does not read the clock — it receives a snapshot of the data and the date. That is what lets every calculation rule be tested without a database, and guarantees the screen shows the same number the analyst computed.
  2. 2 Endless numbers never reach the screen: a strategy that never pays the debt off returns "does not pay off", not an absurd term.
  3. 3 Rates travel as % per month in the API and as fractions in the engine; annual ↔ monthly is always a compound conversion, never a division by 12.
  4. 4 The AI does not decide what to answer: it returns a fixed format, and the code is what refuses an off-topic question or an off-format answer. The AI runs on the server itself, sending no data out.
  5. 5 Alerts by WhatsApp and email, configurable per user, never repeating the same alert on the same day and retrying what failed. A payment can be marked as paid by replying "paid" and its number on WhatsApp.
  6. 6 Tests never touch production: the suite forces a temporary database.