Pranav Yadav monogramCase study · Story of a Stock
Case study · Solo build · Two systems

Story of a Stock

Indian equity investors spend hours per company per quarter reading concall transcripts, investor presentations, and annual reports. Most of the signal is buried in unstructured text. Story of a Stock turns those documents into structured, comparable, queryable research data.

PythonGeminiNext.jsSupabaseVercel
Story of a Stock — screenshot
01

Context

  • Two systems with a clean split: Concallyser (Python) extracts; Story of a Stock (Next.js) renders. The contract between them is the Supabase schema — neither side needs to know anything about the other beyond the shape of those tables.
  • LLM hallucination is unacceptable when the output feeds investment decisions — silently wrong is worse than missing.
  • Outputs have to be schema-conformant for downstream use: search across companies and quarters, comparison views, credibility-weighted summaries.
  • Solo build. Opinionated stack. Sequential batch is fine at the current company count; that constraint shapes a lot of the design.

Concallyser is the factory. Story of a Stock is the showroom. The contract between them is the Supabase schema.

02

What I built

The backend orchestrator (`run-seeds`) reads company codes from `seeds.txt` and iterates through four extraction phases per company. Each phase has its own JSON Schema, its own prompt, and its own normalizer.

Shared infrastructure: one unified prep entry point for CSV discovery, FY/quarter normalization, PDF caching, and Gemini Files API upload. A minimal LLM provider abstraction (Gemini default; Claude available for text-only flows). PDFs cached locally; Gemini file IDs cached with a 20-day TTL aligned to the provider's actual retention window — not picked from convenience.

The frontend is a Next.js app on Supabase, deployed on Vercel — a read-and-render layer over the same tables the pipeline writes. Because both halves only talk through the schema, the schema-first discipline on the backend is what keeps the frontend from silently breaking when a field shifts.

Phase 101 / 04

Company foundation

Metadata, business snapshot, industry analysis, transcript scoring, moat analysis.

Phase 502 / 04

Forward growth outlook

Fact base of up to 12 forward-looking facts, top-3 ranked catalysts with also-considered rejections, and base/upside/downside scenarios.

Phase 603 / 04

Guidance & credibility

Management guidance tracking with a credibility verdict from a fixed enum (high_trust → not_assessable).

Phase 704 / 04

Key variables & KPIs

Non-financial key-variable discovery and KPI history extraction.

03

Key decisions

04

Outcome

  • Live at concall-alpha.vercel.app, indexing Indian listed-company filings.
  • Replaces hours of manual concall review per company per quarter.
  • The architectural patterns (provider-pluggable LLM + JSON contracts + deterministic verification) became the template I now reuse on client work — most recently the Letters of Experience pipeline at Risk Management & Compliance.