All projects
Software2026

Portfolio Vision

A full-stack ETF portfolio decomposer that breaks any portfolio down into its true underlying holdings, with live prices, sector and geographic exposure, and saved user accounts.

Built first as a Python CLI, then rebuilt entirely as a production web application deployed at portfoliovision.online.

Part 1 · Python CLI
Full-featured terminal decomposer with recursive ETF unwrapping, mixed USD/CAD currency detection, tabular holdings output with sector and geographic breakdowns, and a captured/untracked coverage summary. Handles circular references and depth capping.
PythonCLIJSON
Portfolio Vision Python CLI decomposing a portfolio in the terminal
The CLI output, trimmed: currency detection, the input portfolio, and the top of the unwrapped holdings table.
Part 2 · Web App
Production web application with live stock prices via a Yahoo Finance proxy, Google OAuth and OTP email authentication via Supabase, saved portfolios with per-user row-level security, a USD/CAD display toggle with real-time Frankfurter API conversion, and Logo.dev company logo resolution. Deployed on Vercel with analytics.
ReactViteTailwind CSSSupabaseGoogle CloudVercel
The Portfolio Vision web app showing a decomposed portfolio with live prices
The deployed app at portfoliovision.online, with live prices and saved per-user portfolios.
Highlights
Recursive ETF decomposition across 500+ tickers with configurable depth cap and circular reference protection
Live price fetching across US and Canadian exchanges (TSX, NEO, CSE) through a Vercel serverless proxy to Yahoo Finance, removing API key requirements and exchange restrictions
Google OAuth and OTP email auth via Supabase with row-level security policies per user
Real-time USD/CAD conversion via Frankfurter API with per-position and display-level currency toggling
400+ page views in the first week of launch, tracked via Vercel Analytics
Deployed end-to-end on Vercel with a custom domain and environment-based secrets management