Personal finance tooling · Local-first application
Local-first multi-broker portfolio rebalancer
Consolidates portfolio data across brokers and currencies, measures allocation drift, and identifies buy-only contributions that move a portfolio toward its target model.
The challenge
A portfolio spread across brokers, accounts, and currencies is difficult to compare with a single target allocation. The practical question is not only what is out of balance? but also where should the next contribution go?
The approach
This local-first Python application consolidates manually entered, Interactive Brokers, and Questrade portfolio data. It normalizes holdings across accounts and currencies, measures current allocation drift, and calculates buy-only contributions that move the overall portfolio closer to its target model.
The application includes:
- a tested domain layer for portfolio and rebalancing rules;
- SQLite persistence that keeps financial data local;
- command-line and browser interfaces over the same core behavior; and
- optional synchronization of foreign-exchange rates.
Engineering focus
Portfolio calculations live outside the interface and persistence layers, making them easier to test and reuse. Broker-specific inputs are normalized before they reach the domain model, and optional network synchronization does not prevent the application from working locally. That separation keeps a growing set of integrations from leaking into the rebalancing logic.