All projects
Active2026· Builder

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.

AI / RAGNext.jsTypeScriptLLM

Note from Alex: This is a scaffold. Sections marked TODO are 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:
  • Live: TODO (or "internal" / "not yet public")
  • Source: TODO (or "closed source for now")