🔷 Prism

A local financial analysis dashboard. Search any stock ticker to get a comprehensive view of financials, valuation, options flow, insider activity, SEC filings, and news — all in your browser.


Features

Market Bar

Live S&P 500, NASDAQ, DOW, and VIX at the top of every page.

Overview

Financials

Annual and quarterly Income Statement, Balance Sheet, and Cash Flow Statement with year-over-year % change columns color-coded green/red (cost/debt rows are correctly inverted). CSV export on every statement.

Valuation

Seven sub-tabs:

TabContents
Key RatiosP/E, Forward P/E, P/S, P/B, EV/EBITDA, EV/Revenue, margins, ROE, ROA, ROIC, D/E, current/quick ratio, interest coverage, dividend yield, payout ratio
Historical RatiosAnnual P/E, P/B, P/S, EV/EBITDA, margins, ROE, ROA, D/E charted over time
DCF ModelAdjustable WACC, terminal growth, projection years, FCF growth; waterfall chart; EV/EBITDA implied price below
CompsPeer valuation table with editable ticker set
Forward EstimatesAnalyst revenue, EPS, and EBITDA estimates with low/avg/high ranges and chart overlay
Analyst TargetsPrice target range (low/mean/median/high), upside to mean, recommendation distribution chart
Earnings HistoryEPS actual vs. estimate, surprise %, color-coded table, chart; CSV export

All Key Ratios are self-computed from raw yfinance quarterly statements — no FMP quota consumed.

Options

Insiders

Buy/sell transaction history with monthly activity bar chart and filterable table.

Filings

Recent 10-K, 10-Q, and 8-K filings with direct EDGAR exhibit links, color-coded by type.

News

Recent articles with Bullish / Bearish / Neutral sentiment badges and a 7-day sentiment summary.


Setup

1. 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:

No keys? Most of Prism still works. Overview, Financials, Key Ratios, Historical Ratios (yfinance fallback), Options, Insiders, Filings, and the DCF model all run without any API key. The Comps peer list, Forward Estimates, and News require FMP/Finnhub keys.

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 — sidebar, market bar, tab routing
├── requirements.txt
├── .env                          # Your API keys (not committed)
├── .env.example                  # Key template
├── .streamlit/
│   └── config.toml               # Dark theme + layout settings
├── assets/
│   └── logo.png                  # Sidebar logo
├── services/
│   ├── data_service.py           # yfinance — price, financials, options, compute_ttm_ratios
│   ├── fmp_service.py            # FMP API — peers, forward estimates, historical ratios, news
│   ├── news_service.py           # Finnhub — news + sentiment
│   └── valuation_service.py      # DCF engine + EV/EBITDA implied price
├── components/
│   ├── market_bar.py             # Index metrics row
│   ├── overview.py               # Score card, 52W bar, short interest, price chart
│   ├── financials.py             # Color-coded statement tables + CSV export
│   ├── valuation.py              # 7-tab valuation panel
│   ├── options.py                # Options flow — P/C ratio, IV smile, OI chart
│   ├── insiders.py               # Insider buy/sell history
│   ├── filings.py                # SEC filings
│   └── news.py                   # News feed + sentiment
└── utils/
    └── formatters.py             # Number formatting helpers

DCF Model Notes

The DCF uses historical Free Cash Flow from yfinance and projects forward using your chosen assumptions:

InputDefaultRange
WACC10%5–20%
Terminal Growth Rate2.5%0.5–5%
Projection Years53–10
FCF Growth RateHistorical median−20–30%

Terminal value uses the Gordon Growth Model. Enterprise value is bridged to equity value using net debt before calculating value per share. The FCF growth slider defaults to the historical median and can be overridden.

The EV/EBITDA section derives an implied price from a target multiple applied to trailing EBITDA (sourced from the income statement, not the info dict). The slider defaults to the current computed market multiple.


API Usage

SourceLimitUsed For
yfinanceNonePrice, financials, options, insiders, filings, all key ratios
FMP (free)250 req/dayPeer discovery, forward estimates, historical ratios, news
Finnhub (free)60 req/minNews sentiment

All key ratios are computed locally from quarterly statements — Prism only calls FMP for data that cannot be derived from raw statements. Data is cached per session (financials: 1h, news: 10min, indices: 5min, options: 15min).