What matters next?

That inspired LifeBot—a privacy-first financial decision cockpit made on a student budget. It keeps the underlying ledger visible while turning complex financial information into a short, practical daily brief.

## What it does

LifeBot helps users understand their complete financial position and take verified actions from one interface. It supports:

  • Multiple accounts and currencies
  • Transactions and linked account transfers
  • Preview-before-confirm CSV statement imports
  • Category budgets and cash-flow analysis
  • Subscriptions, debts, investments, and net worth
  • Savings goals with projected arrival dates
  • Locally ranked public RSS intelligence
  • Deterministic recommendations that work without AI
  • Optional reports through OpenAI, Ollama, or LM Studio
  • 47 MCP tools with explicit confirmation for every data-changing action

LifeBot deliberately excludes paid OSINT APIs, people search, credential search, leak databases, and personal- identifier lookup. Public information comes in, while private financial context remains local unless the user deliberately selects a configured model backend.

## How I built it

LifeBot uses a responsive HTML, CSS, and JavaScript interface backed by Python, Pydantic, a local JSON store, and a Streamable HTTP/stdio MCP server.

I reconstructed the most refined financial logic from an older LifeBot EC2 backup and moved it into a separate, clean Build Week repository. During Build Week, I added the redesigned interface, unified transaction ledger, working multi- account transfers, flexible statement import, financial management controls, public RSS engine, authentication, model- backend selection, responsive themes, and automated tests.

Codex accelerated codebase archaeology, implementation, refactoring, MCP schema design, security review, browser automation, debugging, and documentation. I made the key product decisions: the student-budget focus, privacy boundary, visual direction, confirmation model, public-source allowlist, and exclusion of risky OSINT capabilities.

GPT-5.6 contributes through the optional OpenAI reporting path. It transforms a minimized financial snapshot into exactly three schema-validated, read-only recommendations. The same reporting interface also supports private local models through Ollama and LM Studio.

## Challenges

The largest challenge was making the interface and underlying logic tell the same truth. Early versions looked complete but contained static balances and demonstration-only transfers. I replaced them with live MCP data and confirmed server actions, then tested persistence after reload.

Bank statement formats were another challenge. Different exports use different delimiters, dates, signs, and column names. LifeBot now recognizes common amount, debit, credit, payee, merchant, and description fields. It previews valid rows, duplicates, and errors before saving anything.

Public feeds initially produced noisy relevance matches. Automated tests exposed substring and feed-category false positives. I changed the engine to use whole-word matching, local topic comparison, source-diversity limits, and preserved source links.

Authentication also had to protect the dashboard, static assets, and MCP endpoint on the same port without exposing credentials or API keys to browser JavaScript.

## What I learned

I learned that a trustworthy financial agent depends more on boundaries than automation:

  • Separate recommendations from actions
  • Keep the ledger behind every summary visible
  • Require confirmation before changing data
  • Minimize information sent to AI models
  • Clearly label AI output and fallback behavior
  • Preserve sources behind intelligence claims
  • Never let generated advice automatically execute financial actions

I also learned that one focused workflow—signal → decision → verified action—is more useful than several disconnected AI features.

Built With

Share this project:

Updates