Wealth management firm · 2023 — 2025

Investor portal & reporting pipeline

Self-service access to portfolios and statements for a wealth manager's clients, fed by automated daily imports from the systems that already held the data.

Role
CTO — solution design and delivery
Scope
Investor app, admin system, data pipelines
Sensitivity
Client financial data — strict access scoping
Status
Delivered and in client use

Problem

Investors could only see their position when someone at the firm sent it to them. Portfolio valuations and statements lived in the administration systems the firm's providers operated; every client question turned into manual work for a small team, and the answer was always slightly out of date.

The firm did not want to replace those systems, and could not. The data had to keep arriving the way it already arrived — as scheduled file drops — while clients got a portal that looked and behaved like it was live.

Approach

I built the portal against an internal model of clients, portfolios, holdings and statements, and treated ingestion as a separate concern feeding that model. Files land over SFTP; a scheduled job fetches, validates and imports them as queued work, with each import recorded as an auditable run rather than a side effect.

Every import is idempotent and every failure is visible. A malformed or partial file fails its run and leaves the previous good state intact — in financial reporting, showing yesterday's correct number is always better than showing today's wrong one.

Access scoping was designed before any screen was: an investor sees only their own portfolios, an adviser only their book, and the firm's operations team the whole estate through a separate administration surface.

Pipeline

01 Source
Provider drops files to SFTP, daily
02 Fetch
Scheduled task collects and checksums
03 Validate
Schema and totals checked before write
04 Import
Idempotent queued jobs, per run
05 Serve
Portal and statements, access-scoped
Failed run → previous good state retained, operations alerted
Every run auditable: source file, counts, outcome
Credentials and SFTP keys are held in AWS Secrets Manager; statement documents are stored privately and served through signed, time-limited access rather than guessable URLs.

Outcome