← All projects

Product study · Portfolio tooling

Portfolio Workbench

Review holdings, cash and private investments against a target allocation from one local dashboard.

01 / The task

What needed to work

IBKR positions, cash in several currencies and manually tracked private investments need a consistent view of total value and allocation drift.

My role

I built the local import and data layer, portfolio calculations, API and React dashboard.

02 / Decisions

Where judgment mattered

Store portfolio data in SQLite

Imported records and portfolio snapshots live in SQLite, with a configurable database path for isolated work.

Show allocation changes by asset class

The dashboard presents allocation differences as value changes by asset class.

Convert amounts before comparing weights

Positions, cash, private values and income are converted to the account currency before weights are compared.

Compare allocations with policy bands

Target, minimum and maximum weights show where each asset class sits against the portfolio policy.

Record simulation assumptions

Each scenario records its date range, allocation, contributions, fees, slippage and warnings.

03 / Agent contribution

How the work was directed

I use AI coding assistants to build independent projects, while owning product decisions, review and testing.

Owner account · General working method

These product decisions are grounded in the implementation and capture notes. The broader workflow is my account of how I work across these projects.

04 / Verification & result

What the evidence supports

Implemented functionality

  • IBKR Flex import. Imports Flex XML into local accounts, positions, cash, trades, dividends and FX rates, then builds a portfolio snapshot.
  • Portfolio overview. Shows asset allocation, value history, P&L, income, cash by currency, holdings and private-investment details.
  • Base-currency accounting. Converts positions, cash, private investments and income using dated FX rates, then reports totals in the account currency.

Implementation inspected

The screenshots show demo data, public observations or labelled report presentations, as described in each caption.

Supporting detail

Technology

  • Python
  • SQLite
  • FastAPI
  • Uvicorn
  • Typer
  • React
  • Vite
  • TanStack Query
  • Recharts
  • lucide-react
  • PyYAML