Personal Data Infrastructure · Financial Information Design
Portfolio Performance
An independent, read-only reporting layer built on IBKR data—designed to move portfolio review outside the brokerage session and make the reporting experience configurable around a defined audience and use case.
The structural question
When data can leave its original interface, reporting can be designed around the user.
IBKR already provides sophisticated portfolio analytics, configurable reports, sharing tools, and multiple performance measures. The opportunity is not to reproduce those capabilities, but to use its structured reporting infrastructure as the foundation for a separate information system.
Different users require different reporting contexts. An individual investor may prioritize annual results and cash flows; a portfolio manager may foreground time-weighted return and attribution; an adviser or family office may need another hierarchy altogether. An independent layer makes access, metric selection, visual organization, and disclosure policy configurable without changing the brokerage record itself.
Separate portfolio review from brokerage execution
The private implementation separates identity, reporting, and brokerage access. Users authenticate through Google; the application reads portfolio records through a repository interface; and IBKR Flex is accessed only by a GitHub Actions worker that imports statements on a schedule or by an authorized manual request. Browser routes neither contact IBKR nor place orders.
During import, the pipeline parses and normalizes the statement, checks selected section totals and snapshot relationships, and then opens the portfolio database transaction. A failed pre-write check leaves the existing rows unchanged. Separate CI tests protect accounting identities and deterministic fixture outputs. These mechanisms test the reporting pipeline; they do not certify the broker’s source data.
The current access model is single-user. Because identity, data access, domain calculations, and presentation are separate boundaries, the architecture can expand toward role-specific views, selective disclosure, and—after account-level data partitioning—multi-account reporting.
The synchronization workflow routes scheduled freshness checks and authorized Settings requests through the same worker. It validates the environment, checks database health, acquires a PostgreSQL advisory lock, polls IBKR with bounded backoff, parses and reconciles the returned XML, commits an idempotent import, performs a post-write read-back check, updates the archive, and releases the lock. Concurrent runs exit safely; a failed reconciliation records a sanitized failure while leaving the last successful portfolio data unchanged.
One data source, different reporting requirements
A reporting interface is a configuration of priorities, not a universal answer. This implementation assembles the measures I review most often into one progression—from account state to performance, attribution, exposure, and daily history. Another role could use the same records and domain model while assigning a different hierarchy to the metrics and views.






Turn machine-readable records into a reporting language
Broker records are structured for account reporting and machine processing. A usable independent interface requires an additional semantic layer: raw sections become account snapshots, cash flows, positions, performance series, and attribution models with explicit dates and definitions.
The interface is a second translation. It determines which measures appear together, which concepts require separate views, what context accompanies a number, and how detail is revealed. The work therefore combines data modeling with audience-oriented information design rather than treating visualization as a final decorative step.
Conclusion
A systems-engineering project expressed through information design.
Portfolio Performance is a working implementation of a broader proposition: structured financial data can support an independent reporting layer whose access policy, semantic model, and visual hierarchy are designed for a defined audience.
The system connects data ingestion, domain modeling, accounting checks, interface architecture, and controlled presentation in one operational pipeline. Its central contribution is the boundary it establishes—from broker record to governed reading experience—and the engineering evidence used to keep that boundary explicit.
Live product
Portfolio Performance
An independent, read-only reporting layer built on IBKR data—designed to move portfolio review outside the brokerage session and make the reporting experience configurable around a defined audience and use case.