Schwab Financial News Chat
RAG-powered chat interface for surfacing real-time financial news with market context — a personal exploration of GenAI patterns I work with at scale during the day.
Note from Alex: This is a scaffold. Sections marked
TODOare where I'll fill in the actual technical decisions, architecture diagrams, and lessons. The structure is the structure — the substance comes next.
Why I built this
TODO: 2–3 paragraphs on the motivation. Key beats to hit:
- The personal use case (you're a Schwab customer? you trade? you wanted better context than what their app surfaces?)
- The professional crossover (it's a personal-scale version of the RAG patterns you operate at enterprise scale at Merck — which means it's also a sandbox to try things you can't easily try inside a Fortune 500 change-management cycle)
- What "good" looks like from the user side — what answer should this thing give that a vanilla Schwab dashboard or generic LLM can't?
Architecture
TODO: high-level diagram or paragraph covering:
- Data sources — Schwab API for portfolio context? A news API (Bloomberg, Polygon, Alpha Vantage, NewsAPI)? RSS feeds? Web scraping?
- Retrieval layer — what's indexed (news articles, earnings transcripts, filings)? Which vector DB (Pinecone, Weaviate, pgvector, Qdrant)? Embedding model (OpenAI text-embedding-3, Voyage, local)?
- LLM — which model (GPT-4o, Claude Sonnet, open-weight)? Why?
- Frontend — Next.js (yes), what UI (streaming chat, citations, charts)?
- Hosting — where the API runs, where the DB lives, what it costs
Mermaid or ASCII diagram would land really well here.
What's working
TODO: 2–4 bullets on what shipped and feels right. Examples:
- Latency under X seconds for typical queries
- Cited sources every time (no hallucinated quotes)
- Streaming UX so users see something within ~500ms
- Cost per query at $X — sustainable for personal use
What I'm still figuring out
TODO: honest open questions. This section is what separates a portfolio piece from a marketing page — recruiters and peers read it carefully because it shows how you think.
Candidates:
- Re-ranking strategy when retrieval returns junk
- How to handle questions outside scope (refuse vs degrade gracefully)
- Whether to cache responses (and how, given news is time-sensitive)
- Evaluation — how do you know when the answers got worse?
What this taught me that applies at work
TODO: the bridge paragraph. The reason this matters as a portfolio piece isn't the project itself — it's that it teaches you things you can apply to the enterprise GenAI infrastructure you maintain at Merck. Examples to consider:
- A pattern you tried here that you'd recommend (or warn against) for the Merck stack
- A failure mode at personal scale that would be catastrophic at enterprise scale (and how you'd guard against it)
- An eval approach worth adopting upstream
Tech stack (so far)
TODO: replace with actual stack once written:
- Frontend: Next.js + TypeScript
- LLM:
- Vector DB:
- Embeddings:
- News data:
- Hosting:
Links
- Live: TODO (or "internal" / "not yet public")
- Source: TODO (or "closed source for now")