🔷 Prism

A local financial analysis dashboard. Enter any stock ticker to get a formatted view of financial statements, valuation metrics, a DCF model, and a news feed — all in your browser.


Features


Setup

1. Clone / navigate to the project

cd ~/Work/prism

2. Activate the virtual environment

source .venv/bin/activate

3. Add API keys

cp .env.example .env

Open .env and fill in your keys:

FMP_API_KEY=your_key_here
FINNHUB_API_KEY=your_key_here

Both are free: - FMP (Financial Modeling Prep) — financialmodelingprep.com — 250 requests/day - Finnhub — finnhub.io — 60 requests/minute

No keys? The app still works. Price data, financials, and market indices are sourced from yfinance (no key required). Ratios, comps, and news won't load until keys are added.

4. Run the app

streamlit run app.py

Opens at http://localhost:8501


Daily Usage

cd ~/Work/prism
source .venv/bin/activate
streamlit run app.py

Project Structure

prism/
├── app.py                    # Entry point
├── requirements.txt
├── .env                      # Your API keys (not committed)
├── .env.example              # Key template
├── .streamlit/
│   └── config.toml           # Dark theme + layout settings
├── services/
│   ├── data_service.py       # yfinance — price, financials, indices
│   ├── fmp_service.py        # FMP API — ratios, peers
│   ├── news_service.py       # Finnhub — news + sentiment
│   └── valuation_service.py  # DCF engine (Gordon Growth Model)
├── components/
│   ├── market_bar.py         # Index metrics row
│   ├── overview.py           # Company header + price chart
│   ├── financials.py         # Statement tables
│   ├── valuation.py          # Ratios, DCF, comps
│   └── news.py               # News feed
└── utils/
    └── formatters.py         # Number formatting helpers

DCF Model Notes

The DCF model uses 5 years of historical Free Cash Flow from yfinance to compute an average growth rate, then projects forward using your chosen assumptions:

Input Default Range
WACC 10% 5–20%
Terminal Growth Rate 2.5% 0.5–5%
Projection Years 5 3–10

The model uses the Gordon Growth Model for terminal value. Intrinsic value per share is compared against the current market price to show upside/downside.


API Rate Limits

Source Limit Used For
yfinance None Price, financials, indices
FMP (free) 250 req/day Ratios, comps, news
Finnhub (free) 60 req/min News, sentiment

Data is cached in-memory per session to minimize API calls (financials: 1h, news: 10min, indices: 5min).