Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 

Repository files navigation

Fortuna logo

Fortuna

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.

What Fortuna is

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.

The problem

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.

How Fortuna is different

  • 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.

Core features

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.

How it works, at a glance

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]
Loading

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
Loading

Engineering highlights

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.

Built with

  • 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

About EBOD

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.

About

AI personal finance app with JWT/MFA, row-level security, PII sanitization, and fault-tolerant AI coaching.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors