Ploutos

A visual financial sandbox and expansion planner for Canadian SMBs. Built at Hack Canada 2026.

Ploutos Cover


1. THE PROBLEM

Most small business owners manage their finances in their heads, a three-year-old spreadsheet, or a napkin. Professional tools like QuickBooks assume financial literacy. Accountants are expensive. Neither tells you whether opening a second location in Winnipeg actually makes sense.

Ploutos approaches this differently: drag your revenue streams and expenses onto a canvas, wire them together, and let AI agents analyze what it all means — in real time, grounded in real Canadian economic data.


2. THE CANVAS

React Flow canvas screenshot with revenue/expense nodes and edges Suggested image: screenshot of the /sandbox page showing a live canvas with connected revenue and expense nodes

The core of Ploutos is a drag-and-drop financial board built with React Flow. Three node types populate the canvas:

  • Revenue nodes — product lines, service tiers, recurring contracts
  • Expense nodes — staff costs, overhead, operating expenses
  • Edges — directed connections that model how money flows between entities

Every change to the canvas triggers a 1.5-second debounce, after which two parallel POST requests fire to the FastAPI backend — one to the Accountant agent, one to the Scout agent. No button press. No manual refresh. The AI reacts to the canvas state continuously.

The Wire Matcher agent (POST /auto-wire) can also be invoked to automatically propose and draw edges between expenses and revenue streams, inferring logical financial relationships from node labels and amounts.


3. THE DUAL-AI ENGINE

Side-by-side of Gemini report output and Backboard agent thread Suggested image: split screenshot showing a FinancialHealthReport card from Gemini alongside a Backboard agent thread response, or a diagram of the two parallel pipelines

Ploutos runs two independent AI stacks simultaneously, each solving a different problem.

Layer 1 — Google Gemini (google-genai SDK)

Gemini handles structured reasoning over Canadian economic data. It powers three agents:

  • Gemini Accountant → produces a FinancialHealthReport: burn rate, health score, flagged risks, and recommendations derived from the canvas state
  • Gemini Scout → produces a GeminiExpansionReport: a ranked list of Canadian cities with viability scores, lat/lng coordinates for map rendering, and reasoning for each recommendation
  • Gemini Wire Matcher → analyzes node labels and values to propose logical expense-to-revenue connections

Layer 2 — Backboard.io (Persistent Agent Threads)

Backboard handles memory. Unlike stateless LLM calls, Backboard agents maintain conversation threads across sessions — meaning the Scout remembers your business from last week and builds on prior analyses rather than starting cold. Three agents run on Backboard:

  • Ploutos-Accountant — financial health analysis with session continuity
  • Ploutos-Scout — expansion specialist using tool-call loops to query census data, rent estimates, and foot traffic signals
  • Ploutos-Ingestor — parses CSV and Google Sheets uploads into structured canvas nodes

The frontend always prefers Gemini responses. If Gemini is unavailable or returns an error, it falls back to the Backboard equivalent automatically.


4. LOCATION INTELLIGENCE

Interactive expansion map showing Canadian cities with viability scores Suggested image: screenshot of the /maps or /expansion page showing pins across Canadian cities color-coded by viability score

The Scout agent doesn't guess at expansion viability — it computes it from five live data sources:

Source Data API
Bank of Canada Overnight rate, prime rate, CPI Valet API
Statistics Canada 2021 Census: population, income, business density REST API
FRED Cross-reference CPI + macro indicators Federal Reserve
Square Sandbox Real POS product catalogs Transactions API
UPC Item DB Product lookup for inventory matching Public DB

These feeds are consumed by five service modules in the FastAPI backend (bankofcanada_service.py, statscan_service.py, fred_service.py, square_service.py, upc_service.py), each with TTL digest caching to prevent redundant external calls.

The composite viability formula:

Ve = (projected_revenue × demographic_score) / ((rent_cost × competition_factor) + fixed_overhead) × 40

Capped at 100. Results are ranked and rendered as pins on the interactive expansion map across 47+ Canadian cities.


5. TECHNICAL DECISIONS

Why two AI layers? Gemini and Backboard solve different problems. Gemini is fast, structured, and grounded in external data via tool calls. Backboard provides persistent memory — the ability to reference previous sessions without manually stitching context. Neither does both well, so both run.

Why FastAPI over Node.js for the backend? The Python ecosystem has mature clients for every Canadian data API used. google-genai, statscan, and fredapi are all first-class Python packages. A Node.js backend would require either wrapping these in a subprocess or finding inferior JS equivalents.

Why React Flow? Financial modeling is inherently a graph problem — entities with directed relationships. React Flow's node-edge paradigm maps directly to revenue-expense relationships, and its built-in layout utilities handle dynamic canvas state without custom graph rendering logic.

TTL caching (utils/cache.py): External APIs like Bank of Canada and StatsCan don't change by the minute. A TTL digest cache stores API responses and serves them for a configurable window, dramatically reducing latency and preventing rate limit exhaustion during heavy canvas interaction.


6. ARCHITECTURE OVERVIEW

ploutos/
├── frontend/                         # Next.js 14 App Router
│   ├── app/
│   │   ├── sandbox/                  # Main canvas page
│   │   ├── dashboard/                # Business metrics
│   │   ├── expansion/                # Location selection
│   │   └── maps/                     # Interactive viability map
│   ├── components/
│   │   ├── FinancialSandbox.tsx      # Canvas container + handlers
│   │   ├── SummarySidebar.tsx        # Financial summary panel
│   │   └── nodes/                    # Revenue / Expense / Group nodes
│   └── hooks/
│       ├── useCanvasFinancials.ts    # Local financial calculations
│       └── useSession.ts             # Session state
└── backend/                          # FastAPI + Python 3.11
    ├── gemini_agents/
    │   ├── accountant_agent.py       # Financial analysis
    │   ├── scout_agent.py            # Location expansion
    │   └── wire_agent.py             # Connection matching
    ├── routers/                      # Active Gemini routes
    ├── routes/                       # Legacy Backboard routes
    ├── services/                     # 5 external API clients
    └── utils/
        ├── cache.py                  # TTL digest caching
        └── digest.py                 # API response → briefing conversion

WHY IT MATTERS

Canada has 1.2 million small businesses. The vast majority can't afford a financial advisor, a data analyst, or a consultant to evaluate expansion decisions. They make those calls on instinct.

Ploutos gives them a tool that thinks with them — grounded in the same economic data a professional would use, delivered through an interface that requires no financial literacy to operate.

Built in a weekend at Hack Canada 2026.