Portfolio Fit
An investing assistant that explains your own portfolio back to you with narrated, generated visuals. Built with a team in 36 hours, it won the Blackstone Challenge at ShellHacks 2026.
Overview.
Blackstone's challenge asked for an app that helps people understand their finances and investments. Portfolio Fit answers in plain language, with visuals generated for the exact question and a voice that walks you through them. You can interrupt it mid-explanation, and it picks up where it left off. I built the personalized explainer and the recommendation system.
Place, Blackstone Challenge
Hackers at ShellHacks
Teams Competing
To Build It
The Challenge
Reimagining the investor experience.
Investors juggle fragmented data across platforms, and most tools show numbers without explaining them. Blackstone's challenge was to build something that helps people understand their finances better, in a way a first-time investor can follow.
- Show real holdings, allocations and performance in one place
- Explain a portfolio in plain language, not a wall of text
- Suggest investments that fit what the user already owns
- Never invent a number the data can't back up
The Portfolio Explainer
Like a video made for you, in real time.
Ask a question such as "how's my portfolio allocated?" or "is AMD returning well for me?" and the system builds the answer on the spot: charts and cards drawn from your holdings, narrated by a voice. None of it is pre-generated. Each question produces its own interface.
A classification model reads the sentiment and intent of the message and picks the visual that best explains it. Skeleton UI holds the place while the narration starts, so the response feels immediate.
Live interrupt
If a term loses you, such as "what is a point?", you can interrupt mid-explanation. The system explains the term, then lets you expand into another visual or resume the walkthrough exactly where you left off, with no restart.
Recommendations
Diversification as the definition of "good."
Ask "what do you recommend as an investment for me?" and the system reads the user's holdings and looks for what's missing. In the demo, a portfolio heavy in US technology stocks gets an international technology stock suggested, along with its projected yield and the effect on the portfolio's expected return.
The team also built an evidence-based composition layer that validates portfolio data before it is shown, so the chat refuses to guess when the data isn't there instead of fabricating figures.
Finding Investments That Fit
Pick an interest, get ranked matches.

Beyond the chat, a dedicated screen lets users choose an interest, like Technology, and see ranked picks. Each card carries a fit score against the user's current holdings, five-year average return, and plain-language reasons, such as adding international exposure to a U.S.-heavy portfolio with low overlap.
Where the fit score comes from
The score isn't a language model's opinion. JEV is asked a fixed list of typed questions about the user's portfolio, 19 per request, and for each one it returns a probability for every answer option we wrote. It never names a ticker and never writes free text. From there, three steps turn those answers into the cards you see.
1 · Classify
Score questions such as "how much new money should go into each asset class?" and choice questions such as "which sector should a new pick be in?" produce a plan. Code turns the answers into recommendation slots across assets like stocks, rental homes and bonds.

2 · Filter
Code narrows the pool of about 500 candidate assets to 20 using those answers, and JEV's confidence sets the order. The surest answer is applied first and strictly. An unsure one goes last, where the filter can widen it or skip it instead of forcing a weak guess.

3 · Score and rank
JEV rates each remaining candidate on a five-step expected-return scale, and code turns that into the fit score. Yield comes from its return-band probabilities. The best scorers fill each category's slots, and a second pass checks every reason on the card with a yes or no.

The split is deliberate: the model makes judgment calls, and code computes every number on screen. If the model service fails, each stage falls back to rules.
Slides from the team's pitch. Figures in the diagrams are illustrative.
How It's Built
Speed first, since we had 36 hours.
Next.js and TypeScript on both the front and back end. GPT-4.1 was chosen for the voice path because response speed mattered most. ElevenLabs provides the narration. We couldn't train a model in 36 hours, so intent and sentiment classification runs on JEV, a zero-shot classifier that had just been released.
Stack & Tools
Additional Photos
The team at ShellHacks.

Let's Talk
Pick a message, leave your email, and I'll reach out.