# 🔷 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 - **Market Bar** — Live S&P 500, NASDAQ, DOW, and VIX at the top of every page - **Overview** — Price chart (1M / 3M / 6M / 1Y / 5Y), key stats (market cap, P/E, 52W range, beta) - **Financials** — Annual and quarterly Income Statement, Balance Sheet, and Cash Flow Statement with year-over-year % change columns - **Valuation** — Key ratios grid (P/E, EV/EBITDA, margins, ROE, etc.), interactive DCF model with adjustable WACC and growth rate, comparable companies table - **News** — Recent articles with Bullish / Bearish / Neutral sentiment badges and a 7-day sentiment summary --- ## Setup ### 1. Clone / navigate to the project ```bash cd ~/Work/prism ``` ### 2. Activate the virtual environment ```bash source .venv/bin/activate ``` ### 3. Add API keys ```bash 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](https://financialmodelingprep.com/developer/docs) — 250 requests/day - **Finnhub** — [finnhub.io](https://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 ```bash streamlit run app.py ``` Opens at `http://localhost:8501` --- ## Daily Usage ```bash 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).