Portfolio Workbench
One local view of holdings, cash, private investments, and how allocation differs from your plan.

01 — The brief
Start with the useful tension.
Reviewing broker-held positions, multi-currency cash, and manually marked private investments needs one local view that explains allocation and policy drift without sending orders.
A portfolio owner or reviewer using an IBKR Flex export and manually tracked private-investment values.
Independently built the local Python and SQLite data layer, read-only Flex import, base-currency calculations, CLI/API surfaces, and React dashboard.
02 — Capability ledger
What exists, what is next.
A plain-language status check, so a polished surface never implies more than the work supports.
Implemented
06- Read-only IBKR Flex import
Parses a local Flex XML report into normalized accounts, instruments, positions, cash balances, trades, dividends, FX rates, private values, and a derived portfolio snapshot; repeated source hashes are skipped.
- Allocation and holdings overview
The dashboard presents base-currency totals for securities, cash, and private values alongside historical value, allocation, PnL/income, cash by currency, holdings, and private-investment tables.
- Base-currency accounting
Summary and performance calculations convert positions, cash, private marks, and income to the account base currency, preferring same-day FX and then the latest prior rate; the UI labels the resulting CHF totals.
- Policy-band strategy drift
A default target policy compares current asset-class weights with target/minimum/maximum bands, reports below/inside/above or unconfigured status, and calculates value deltas with buy/sell/hold labels.
- Scenario simulation and backtest
Simulation compares current and proposed allocations over available local valuation dates and accepts proposed allocation, contributions, fee, and slippage assumptions; insufficient valuation history is surfaced as a warning rather than treated as a measured period return.
- CLI, API, and agent inspection surfaces
Typer/argparse CLI commands and FastAPI routes expose summary, holdings, performance, strategy, rebalance, and simulation payloads; agent context uses a read-only SQLite connection and carries the safety disclaimer.
Planned
00Nothing recorded here yet.
Unverified
00Nothing recorded here yet.
03 — Design decisions
The reasoning stays in the room.
01Use a local SQLite source of truth
The project keeps imported records and derived snapshots in a local database and allows the database path to be overridden, which supports private, inspectable workflows and isolated capture data.
02Keep broker and rebalance actions informational
The project intentionally stops at local import and analysis: rebalance suggestions are value deltas, agent commands open SQLite read-only, and the API payload explicitly says that no orders are placed or staged.
03Normalize monetary values before comparing allocations
Positions, cash, private marks, and income can use different currencies, so calculations convert each amount to the account base currency with an explicit same-day/prior-rate fallback policy.
04Represent strategy as policy bands
Target, minimum, and maximum weights let the preview distinguish acceptable exposure from a breach and make the resulting value delta understandable without producing executable trade instructions.
05Make simulation assumptions and data limits visible
The simulation returns its date range, proposed allocation, transition cost, contributions, warnings, and an informational disclaimer; a single valuation date is explicitly treated as insufficient for period returns.
04 — In the hand
Screens that explain themselves.
Images are shown as captured when available. Missing captures are labelled rather than quietly invented.
05 — A short walk-through
See the shape of the interaction.
Portfolio Workbench: read-only allocation review
- Open the local dashboard and confirm the Fresh as of Jul 9, 2026 and Read-only indicators.
- Review total value, securities/cash/private cards, historical value, and the allocation chart using the labeled synthetic fixture.
- Scroll to Strategy Drift and inspect policy bands, current versus target weights, deltas, and the PRIVATE unconfigured warning.
- Scroll to Holdings to compare VT and AGG with the Seed Fund I private mark, then stop without invoking any broker or order action.
The materials