posted an update —

X-Ray now looks through your portfolio, not just the demo

X-Ray is the heart of Aperture: it looks through your ETFs to the companies inside them, so you can see what you actually own. Until this weekend it only knew one hand-built demo portfolio. Now it works on any portfolio you bring, with real prices and real fund holdings.

What's new

Live prices and company logos (Finnhub)

  • Your portfolio value and daily change update every minute from live quotes.
  • Every holding shows its real company logo and industry.
  • A new Holdings table lists each position with live price, day change, value and weight.
  • If Finnhub is unreachable, X-Ray quietly falls back to the last snapshot, so it never breaks.

Real look-through for any portfolio

  • 20 of the most popular US ETFs (VOO, SPY, QQQ, VTI, SCHD, SMH, VNQ, ARKK and more) are loaded with their full published holdings from Alpha Vantage. Any other ETF is fetched on demand.
  • X-Ray adds up every path to every company: shares you hold directly plus the slices inside each fund.
  • The whole page is computed from your numbers: the map, the True Top 10, sector breakdown, ETF overlap, concentration flags, and the headline at all three experience levels.
  • Funds we can't see inside are named, so nothing is silently wrong.

Switch between the demo and your own portfolio from the masthead at any time, without losing either.

What it found

A 12-position test portfolio (VOO, QQQ, NVDA, AMZN, GOOGL, BRK.B, JPM, KO, SCHD, TSLA, META and one fake ticker):

NVIDIA isn't one position. It's three, and 18.0% of your money.

  • 11 positions open up into 571 underlying companies.
  • VOO and QQQ overlap 54% by weight (88 of QQQ's 102 companies are also in VOO).
  • Technology is 38.9% of look-through value, flagged against a 35% limit.
  • The fake ticker was caught at import and left out of the total.

How it stays trustworthy

The math is plain code, not AI. Every number comes from prices and fund holdings, and a test script checks the look-through against a portfolio calculated by hand:

// Direct shares count once; every fund adds its slice of each company it holds.
for (const h of etf.holdings) addExposure(h.ticker, h.name, fund.ticker, fundValue * h.weight);

// ETF overlap: the weight both funds share, company by company.
for (const h of b.holdings) {
  const w = weightsA.get(h.ticker);
  if (w !== undefined) overlap += Math.min(w, h.weight);
}

Also in this update

Bring your portfolio in any way you like: a brokerage screenshot (read by Gemini), your broker's CSV export, or type it in. If you don't own anything yet, build a practice portfolio with pretend money and real prices, and X-Ray looks through that too.

Log in or sign up for Devpost to join the conversation.