Track your Magic: The Gathering collection like a stock portfolio — with price charts, technical analysis, daily movers, arbitrage detection, and tournament data.
KPI dashboard with total collection value, cost basis, P&L, and a 90-day portfolio value chart. Top gainers and losers by 30-day performance, plus breakdowns by binder and rarity.
Interactive per-card price charts powered by Lightweight Charts. Includes EMA 8/21, SMA 50, Bollinger Bands, RSI, and signal detection (crossovers, overbought/oversold, BB breakouts). Switch between TCGPlayer, CardKingdom, and Cardmarket pricing.
Ingests daily movers from MTGStocks and cross-references with your collection. Filter by date, price type, or collection-only. Click any card in your collection to jump straight to its price chart.
Surfaces cards in your collection with notable technical patterns — bullish EMA crossovers, RSI oversold conditions, Bollinger Band breakouts. Scan for buying or selling opportunities at a glance.
Finds cross-vendor price gaps >15% between TCGPlayer, CardKingdom, and Cardmarket. Exploit market inefficiencies with direct links to each vendor's buy page.
Scrapes upcoming events from magic.gg and recent tournament results from MTGTop8. Calendar view with event dots, upcoming event cards with type badges, and a metagame snapshot showing top archetypes by format.
Searchable, sortable, paginated table of every card in your collection with current prices, P&L, and period changes. Filter by binder, rarity, or name.
ManaBox CSV → preprocess.py → dashboard/public/data/*.json
AllPrices.json (MTGJSON 1.2GB) ─┘
preprocess.py — Single-pass streaming extraction of price history from MTGJSON's AllPrices.json. Computes technical indicators (EMA, SMA, RSI, Bollinger Bands), detects signals, calculates P&L, and identifies arbitrage opportunities.
update.py — Downloads fresh MTGJSON data and re-runs the preprocessor. python3 update.py for daily prices, --full for full 90-day history rebuild.
scrape_events.py — Playwright-based scraper for magic.gg schedule and MTGTop8 tournament results/metagame data.
- Frontend: Vanilla JS + Vite + Lightweight Charts (TradingView)
- Styling: Custom CSS dark theme with glassmorphism and HUD aesthetics
- Data: MTGJSON price data + Scryfall card images
- Collection: ManaBox CSV export
- Scraping: Playwright for tournament data
- External Data: MTGStocks daily movers
# Install dependencies
cd dashboard && npm install
# Export your collection from ManaBox as CSV
# Place ManaBox_Collection.csv in the project root
# Download MTGJSON price data
python3 update.py --full
# Run the preprocessor
python3 preprocess.py
# Start the dev server
cd dashboard && npm run devEvery card name, price, and event links to external resources:
| Element | Links To |
|---|---|
| Card names | Scryfall |
| Prices | TCGPlayer / CardKingdom |
| Movers | MTGStocks |
| Events | magic.gg / MTGTop8 |
MIT






