https://asset-manager-hackathon.vercel.app

Inspiration

Blackstone's "Reimagining the Investor Experience" challenge called out a real, everyday problem: investors have more data available to them than ever, but it's scattered across dashboards, filings, news feeds, and market data providers. Turning that noise into a clear answer to "what do I own, and what should I do next?" is hard. We wanted one place to see your real portfolio, understand it in plain language, and get investment ideas that actually account for what you already hold.

What it does

PortfolioFit is an investing companion built around three things:

  • Current investments: a dashboard and analytics view of your real holdings (stocks, a 401(k) target-date fund, cash), valued from live and snapshot market data, with allocation, performance history, and look-through exposure into what your funds actually hold underneath.
  • New opportunities: a recommendation engine that scores candidate stocks, bonds, and real estate against your actual portfolio composition and a stated interest, such as technology or real estate, explaining why each pick complements what you own rather than just ranking by hype.
  • Chat: a natural-language assistant, with a full-screen dedicated page, that answers questions like "how is my portfolio allocated?" or "what should I invest in next?" by composing a visual, such as a chart, stat, or comparison, directly from your real portfolio data and narrating it out loud, instead of returning a wall of text.

How we built it

The app is a Next.js and TypeScript app with a snapshot-based real-data layer: portfolio holdings and quotes are fetched from Yahoo Finance and Finnhub (real prices, real news, real macro rates from FRED), refreshed via a snapshot script, with live quotes layered on top when configured. On top of that sits a recommendation pipeline, built with Jev (TypeSafe AI), that scores candidate investments in two stages, an "investment shape" pass and a scoring pass, falling back to deterministic rules when the AI is unavailable, so the app never breaks.

The chat experience is the most novel piece. Rather than letting an LLM freely narrate numbers, which risks it inventing or misremembering figures, we built an evidence-based composition system. The app collects typed "evidence" from the real portfolio service, validates it (consistent units, complete percentages, ordered dates, no fabricated benchmarks), and only then composes a scene: a chart, a stat, a narrated walkthrough, strictly from that validated evidence. If the data needed to answer a question honestly isn't available, such as a requested benchmark or a longer time period than we have loaded, the app says so instead of guessing.

Challenges we ran into

The biggest challenge was data consistency. Early on, the app had three disconnected "portfolios" in different places: a real one on the dashboard, an old mock persona on the Analytics page, and a third, entirely fictional dataset feeding the chat's live explainer. A user could see one total on the dashboard and a completely different one when asking the chat to summarize their portfolio, exactly the kind of trust-breaking inconsistency the challenge brief warns against. We traced every screen back to a single real data source and added an evidence-validation layer so the chat can never silently fall back to fictional numbers.

Accomplishments that we're proud of

We got every screen, the dashboard, analytics, explore, and chat, agreeing on one real portfolio, so a user never sees two different numbers for the same holding. We built a recommendation pipeline that explains its reasoning against the user's actual holdings instead of a generic model. Most of all, we built a chat assistant that can turn a plain-language question into a live, narrated visual grounded entirely in real data, and that visibly refuses to guess when it does not have the data to answer honestly. Along the way, systematic testing caught and fixed real regressions, including a recommendation flow that had reverted to an old code path and a test-isolation bug in a shared data registry, before they could ship.

What we learned

Building trustworthy financial UX is less about the AI and more about the plumbing around it: provenance tracking, validated data shapes, and honest "I don't have that" fallbacks matter more than clever narration. A recommendation engine is only as trustworthy as the portfolio it's scored against, and that portfolio has to be the same portfolio everywhere in the app.

What's next for PortfolioFit

Broadening real market-data coverage beyond the current holdings, deeper look-through exposure for fund holdings, and extending the evidence-composition system to cover risk, fees, and benchmark comparisons with real, not illustrative, data.

Built With

  • elevenlabs
  • eslint
  • finnhub
  • fred-api
  • github
  • motion
  • next.js
  • node.js
  • npm
  • openai
  • react
  • recharts
  • tailwind-css
  • typesafe-ai-(jev)
  • typescript
  • vercel-ai-gateway
  • vitest
  • yahoo-finance
  • zod
  • zustand
Share this project:

Updates

Submission history