Fortune Favors Foresight
iOS · Android · Web · Built by EBOD Inc.
This is a public overview of Fortuna, a production application built and maintained by EBOD Inc. The application source lives in a private repository — this repo documents the system's architecture and the engineering decisions behind it. Read access to the private source is available on request.
Fortuna is a personal finance app that does more than show people where their money went — it helps them decide where it should go next, and then does part of that work for them.
It links to a person's bank accounts, learns their income and spending patterns automatically, and pairs that with Aura, an AI financial coach that talks to the user in plain language, explains why a recommendation makes sense, and nudges them at the right moment instead of burying them in charts.
Most people don't have a spending problem — they have a visibility problem. Budgeting apps show a ledger of the past; they rarely explain what to do about it, and almost none act on a person's behalf. The result is the same story for most people: good intentions in January, a forgotten app by March, and no real change in their financial position by December.
- It explains itself. Every suggestion from Aura comes with a plain-language reason, not just a number.
- It asks how a purchase felt, not just what it cost. Expenses can be logged with the emotion, trigger, and urgency behind them — the same behavioral signal a financial therapist would ask for — so patterns become visible instead of invisible.
- It acts, not just reports. Goals are funded automatically through round-ups, scheduled transfers, and yield-aware savings — "autopilot" saving that runs quietly in the background.
- It closes the loop. A personalized Monthly Wrap turns a month of transactions into a short, human narrative of what happened and what it means — closer to a check-in with a coach than a bank statement.
| Feature | What it does |
|---|---|
| Bank linking | Connects checking, savings, and credit accounts through Plaid in a few taps. |
| Automatic learning | Detects recurring income, bills, and subscriptions without manual entry. |
| Aura, the AI coach | Chats with the user (text or voice), explains spending patterns, and adapts its tone to what the person wants. |
| Smart budgets & goals | Generates a starting budget from real transaction history and turns savings goals into funded, trackable plans. |
| Autopilot saving | Funds goals automatically via round-ups, scheduled transfers, and optimized yield — no manual transfers required. |
| Receipt scanning | Photograph a receipt and Aura reads it, itemizes it, and categorizes it automatically. |
| Monthly Wrap | A personalized, AI-written recap of the month's spending, wins, and opportunities. |
| Savings challenges | Short, gamified challenges that make cutting back feel like a game instead of a punishment. |
Fortuna is a single product across three surfaces — iOS, Android, and web — backed by one API and one source of truth for a user's financial data.
flowchart LR
subgraph Client["Fortuna App"]
iOS[iOS]
Android[Android]
Web[Web]
end
Client -->|secure API calls| Backend[Fortuna Backend]
Backend --> DB[("Database\nAccounts, transactions, goals")]
Backend --> Plaid[Plaid\nBank connections]
Backend --> Claude[Anthropic Claude\nAura, the AI coach]
Backend --> Push[Push notifications\nAPNs / FCM]
The typical relationship a person has with the app looks like this:
flowchart LR
A[Link accounts] --> B[Aura learns\nspending patterns]
B --> C[Set budgets & goals]
C --> D[Daily coaching +\nautomatic saving]
D --> E[Personalized\nMonthly Wrap]
E --> B
These are specific decisions behind the product, not a technology list. Each one exists because of a real constraint the system has to handle.
-
AI calls fail gracefully, not silently. Every AI-backed feature — coaching, receipt scanning, savings advice — is wrapped in a circuit breaker with exponential backoff and a deterministic fallback response. If the AI provider is degraded, a user gets a sensible default, not a broken screen.
-
PII never reaches a third-party model unfiltered. Before any financial text is sent to an LLM, it passes through pattern-based redaction for SSNs, account numbers, emails, and phone numbers — enforced at the integration boundary, independent of what the provider claims to do with the data.
-
Authorization lives at the database, not just the API. Row-level security in Postgres means a bug in application code can't leak one user's transactions to another user's request — the database itself refuses the query.
-
The AI coach runs on two channels, not one. Response generation and response selection happen in parallel — a "conscious" channel that streams what's said, and a separate channel that scores and picks between candidate responses — so a reply can be interrupted and redirected mid-stream instead of blocking until one LLM call finishes.
-
Savings goals are composed, not hard-coded. A goal isn't a single function — it's an investable bucket built from independent, composable services for round-ups, scheduled transfers, and yield optimization, so each piece can change without touching the others.
-
A dependency change surfaced three latent bugs, and all three were caught in one pass. When an upstream AI provider retired a model version, every AI-backed feature started failing. Tracing it back also surfaced two dormant issues it exposed: a request parameter the new model generation silently rejects, and response-parsing logic that assumed the model's first output block would always be plain text — an assumption a newer reasoning mode could break. All three were fixed together, not discovered one incident at a time.
- App: React Native (iOS, Android, and web from one codebase), TypeScript
- API: Python, FastAPI
- Data: Postgres with row-level security, via Supabase
- AI: Anthropic's Claude models, for coaching, chat, and receipt understanding
- Banking data: Plaid
- Infrastructure: Render
Fortuna is built by EBOD Inc. We're a small team building financial software that acts more like a good advisor than a spreadsheet.
© EBOD Inc. All rights reserved. · Interested in the source? Reach out and we'll set up access.