A self-hosted daily trading dashboard for multi-asset equity analysis. Runs locally on your machine, pulls end-of-day market data from Polygon in my case, computes a layer of derived metrics, and serves a browser-based dashboard styled market overview. Optional live intraday price overlay.
What it does
The dashboard tracks 690 tickers in two groups: roughly 260 hand-curated names organized across 22 themes (AI Infrastructure, Semiconductors, Robotics, Defense, Nuclear, Quantum, Crypto Equities, Power/Grid, Metals, Rare Earths, and more), plus roughly 400 additional S&P 500 names that broaden the scanning pool without affecting theme analysis. Each ticker carries a theme, sub-theme, and liquidity tier classification.
For every ticker on every trading day, it computes returns over multiple horizons, moving averages, ATR with Wilder smoothing, ATR extension, volume ratios, new-high flags, and relative strength against both QQQ and the equal-weight RSP.
Tabs
Daily Board — morning-glance view. Regime read, dominant/emerging/fading themes, index and benchmark snapshot, universe-wide breadth, three ETF Pulse cards (style rotation, risk pulse, sector rotation), and a 5-day theme rotation tracker.
Themes — all 22 themes ranked by a composite score blending breadth, leadership, momentum, and relative strength. Status labels run from Dominant through Strong, Emerging, Improving, Neutral, Deteriorating, Fading, and Weak. Click any row to see its constituent names.
Breadth — three charts tracking trend over time. Percentage of names above 20/50/200 day moving averages with reference zones, daily impulse bars showing advancers minus decliners with new 20-day highs overlaid, and the cumulative advance-decline line plotted against SPY to surface divergences. Theme dropdown filters the first two charts to a single theme.
Momentum — the scanner. Four ranked top-25 lists for 1-week, 1-month, 3-month, and 6-month horizons. Each window computes absolute momentum (close versus trailing minimum) and relative momentum (close versus trailing average). The 1-week list includes a single-day return column and a "1D SPIKE" flag that highlights weekly moves concentrated in a single day. Configurable filters for minimum dollar volume, required moving averages, and liquidity tiers.
Extension — "Too Hot" names stretched far above their 50DMA (chase risk), and "Fading/Weak" names losing trend.
Clean Momentum — a filtered list of names meeting a quality screen: above 20 and 50 day moving averages, positive recent return, ATR extension within a healthy band, volume confirming.
Live intraday overlay
A LIVE toggle in the top bar fetches Polygon's full-market snapshot (15-minute delayed on the Starter plan, real-time on Advanced) and overlays current prices next to every ticker on the board. Auto-polls every 60 seconds. Detects intraday moving-average crosses and flags them with chips. The slow structural analysis (theme scores, breadth, momentum rankings) stays anchored to the last completed daily close, by design — recomputing those measures off a partial day's bar produces noise rather than signal.
Architecture
Python ingestion pulls daily bars from Polygon into a single-file DuckDB database. A metrics layer computes per-ticker indicators. A FastAPI server exposes JSON endpoints. A vanilla JavaScript frontend with locally bundled Chart.js renders the dashboard at localhost:8000. All on one machine, no external dependencies once installed.
Configurability
A settings panel adjusts moving average periods, the breadth big-move threshold, the ATR cutoff for the Too Hot list, and Clean Momentum filter bands. The 690-ticker universe lives in an editable CSV — add, remove, or reclassify names directly. A desktop shortcut runs the full daily routine (data pull, metrics, server launch, browser open) in one click.
What it isn't
It uses end-of-day data for the structural analysis. It does not backtest. Its scores are descriptive, not prescriptive — they characterize what the market is doing, not what to trade. It is a structural read of regime, breadth, themes, and momentum, designed to tell you what environment you are in before you act.
Setup requirements
Your friend will need Python 3.11+, your own Polygon.io Stocks Starter subscription ($29/month) for the API key or something comparable, and about 30 minutes for first-time setup. The included README walks through everything step by step. install_check.py diagnoses common setup problems if anything fails.
Enjoy!

