diff options
| author | Tyler <tyler@tylerhoang.xyz> | 2026-03-28 23:01:14 -0700 |
|---|---|---|
| committer | Tyler <tyler@tylerhoang.xyz> | 2026-03-28 23:01:14 -0700 |
| commit | 23675b39b8055a8568cdcf71f66482b9d0cf90a9 (patch) | |
| tree | 14e42cf710b47072e904b1c21d7322352ae1823c /README.md | |
Initial commit — Prism financial analysis dashboard
Streamlit app with market bar, price chart, financial statements,
DCF valuation engine, comparable companies, and news feed.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'README.md')
| -rw-r--r-- | README.md | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..c98a363 --- /dev/null +++ b/README.md @@ -0,0 +1,119 @@ +# 🔷 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). |
