Oracle3
Open-source trading engine and MCP server for prediction markets. Fee-aware no-arbitrage trading across related contracts, live on Kalshi, Polymarket and Solana or on paper.
Relative-strength leadership, macro-catalyst surveillance and ATR position risk on one board. Every figure is real or absent.
FinanceJavaScript · CSSGitHub @logan1937-glitchOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
A dark, institutional-desk trading terminal with two products under one
shell, switchable from the top bar. Built on the TigerTrade Terminal design
system (Obsidian theme): a command palette (⌘K / /), a polar radar scope,
right-side analysis drawers, a persistent watchlist, and animated SVG charts.Read the full README ↗A dark, institutional-desk trading terminal with two products under one
shell, switchable from the top bar. Built on the TigerTrade Terminal design
system (Obsidian theme): a command palette (⌘K / /), a polar radar scope,
right-side analysis drawers, a persistent watchlist, and animated SVG charts.
Volatility & Momentum Radar (default) — a macro-event surveillance dashboard for 2026–2027. Tracks the scheduled catalysts that drive cross-asset volatility, grouped into five regimes:
Views: Radar (next-catalyst card, radar scope + expandable event rows), Full Timeline (month-grouped), Calendar (month grid with event chips), and Playbook + AI (desk briefing + watch list). Each event opens a right-side drawer with historical reaction stats, a move distribution, and cross-asset reaction. Filter by category, minimum weight, or free-text search.
FOMC, quadruple-witching (3rd Friday), Russell reconstitution (last Friday of June), NFP (first Friday) and the US midterms use exact dates. Items marked
~(BoJ, ECB, QRA, CPI/PPI, ISM, earnings windows, conferences, OPEC+) are projected from standard schedules — verify against official calendars before trading.
Leadership Screener — a relative-strength growth screener built on the TigerTrade Leadership Model (LEADERS), our own 7-factor framework: L (Leadership / RS rank), E (Earnings momentum), A (Accumulation / volume demand), D (Durable annual growth), E (Emerging breakout / new high), R (Rising institutional sponsorship), S (Setup — market trend). Each name scores 0–100 with a letter grade. Features:
RS · 3M, Score · 3M).The TigerTrade Leadership Model's factors follow classic leadership-investing principles popularized by William J. O'Neil. TigerTrade is independent and not affiliated with, sponsored by, or endorsed by Investor's Business Daily; CAN SLIM® is a registered trademark of Investor's Business Daily, Inc. Educational use only — not investment advice.
The site uses the dark Obsidian terminal theme (warm amber accent) with a
token-based design system, grain overlay, and motion that respects
prefers-reduced-motion.
A Claude-backed serverless proxy (/api/claude) is available for AI features so
the Anthropic API key never reaches the browser.
The screener attempts to load live quotes on every visit. Its data state is shown in the Leadership Screener hero line:
To turn the feed on, set FMP_API_KEY in your Vercel project env vars (get a key
at https://site.financialmodelingprep.com); requests route through the /api/fmp
proxy (your key never reaches the browser). Single-symbol quotes work on the free
tier; the dashboard tries a batch call first and falls back to per-symbol quotes
automatically.
What's live vs. analyst-maintained: prices, % moves, off-52-week-high and relative volume come live from FMP. The slower-moving Leadership-model inputs — earnings growth, RS rank, institutional read, pivot, base pattern and catalyst — are maintained in the editorial dataset and labeled as model inputs, not live quotes. Verify against your broker before trading.
/api/snapshot computes the whole universe's quotes + momentum signals server-side
and serves them in one request, so the browser doesn't fetch every name. A daily
cron (vercel.json, weekdays 22:00 UTC) refreshes it after the US close.
By default the snapshot is edge-cached. To make it durable (the cron writes it once; user requests only read it, never recompute — needed as the universe grows to hundreds), connect a Vercel Blob store:
Storage tab in the top nav (it's alongside
Overview / Integrations / Activity — not inside the project's Settings,
which is where people look first and don't find it) → Create Database →
pick Blob → name it → Create. Then open it, go to Projects, and
Connect it to this project.BLOB_READ_WRITE_TOKEN env var. Redeploy — env vars
only apply to new builds.Connect Blob before you consider paying for a bigger data plan. Without it every cache miss recomputes the whole universe, and each recompute spends ~13 FMP calls on the macro board, VIX and the earnings calendar before it touches a single quote. That is how those three go blank together: the API quota is spent, not the code broken. With Blob connected the cron computes once per weekday and normal reads cost nothing upstream.
Check which mode you're in: load
/api/snapshotand look at the top level —"blob": trueand"served": "blob"is right;"blob": falsewith"served": "compute"means every visit is burning quota.
The shared snapshot is the same for everyone, so it can't carry report dates for
your holdings outside the tracked universe. /api/earnings?symbols=NBIS,ASML
fills that gap, trying each source in turn and stopping at the first real answer:
| # | Source | Cost | Notes |
|---|---|---|---|
| 1 | Blob cache | 0 requests | A date resolved once is served to everyone afterwards. |
| 2 | Finnhub calendar/earnings | 1 request | Set FINNHUB_API_KEY and this becomes the primary source. A documented, supported API that takes a symbol filter, so one request answers for one name — and it ships the forward EPS/revenue estimate with the date. Skipped entirely without a key. |
| 3 | Yahoo chart events=earn | 1 request | No cookie, no crumb. The same endpoint the snapshot already reaches ~500×/night, so it's the Yahoo path known to work from this deployment. |
| 4 | Yahoo quoteSummary | 3 requests | Richer (projected-date flag, EPS history, revenue) but cookie+crumb gated, so it costs a handshake first. Asked only when the chart returns no date or no reported quarter. |
| 5 | Stale cache | 0 requests | A date from an earlier read, flagged stale, rather than a blank. |
Getting the Finnhub key (free, ~2 minutes, no card):
FINNHUB_API_KEY, paste the value, tick all environments, Save./api/earnings?symbols=NBIS&debug=1 should show a
{"step":"finnhub","status":200} line and src: "finnhub" on the result.The free tier allows 60 calls/minute, and the Blob cache means a symbol is asked at most twice a day, so a normal portfolio uses a handful of calls per day.
Yahoo's endpoints are unkeyed, so they're defended by IP reputation instead —
datacenter ranges get rate-limited, and Vercel's are heavily used. That's the
likeliest reason the cookie/crumb handshake fails in production while the same
code works from a laptop. Setting MASSIVE_PROXY_URL to the full proxy URL
including credentials, exactly as Massive gives it
(http://user:pass@host:port), routes those calls through a residential IP.
Only the small, IP-blocked calls go through it by default — the crumb
handshake, quoteSummary and chart-events lookups in /api/earnings, a few KB
each. Keyed APIs (Finnhub, FMP) authenticate by token and don't care about your
IP, so proxying them would spend bandwidth for nothing and they're left alone.
MASSIVE_PROXY_BULK=1 additionally routes /api/yahoo and the snapshot's ~500
one-year history pulls through the proxy. That's tens of megabytes per full
compute, and a residential proxy bills by the gigabyte — turn it on only if
Yahoo starts refusing the snapshot, and only with a Blob store connected so that
compute runs once a weekday instead of on every request.
FMP is deliberately not in this list. Verified twice against the live API:
per-symbol earnings, income-statement and financial-estimates all answer
ACCESS DENIED on this plan, and the earnings-calendar it does serve returned 21
mega-cap names for a 17-day window — names the nightly snapshot already carries.
It could never answer for the off-universe holdings this endpoint exists for, so
calling it was two guaranteed-failing round trips per request.
Every result is written back to the Blob store, so one success anywhere is
permanent. Add &debug=1 to see the status code of every upstream hop (no
cookie or crumb value is ever echoed), or &refresh=1 to bypass the cache.
If every source is silent for a listing — which happens, these are free feeds —
set the date yourself on the position (Portfolio → add, or Edit position
in the stock drawer). It's stored on-device with the rest of the position and
shown tagged yours everywhere, never as a confirmed date.
sk-ant-...)npm install -g vercel
cd TigerTrade-dashboard
npm install
vercel
Follow the prompts:
canslim-dashboard (or anything)vercel env add ANTHROPIC_API_KEY
Paste your key when prompted. Select Production, Preview, and Development.
vercel --prod
Your dashboard is now live at https://canslim-dashboard-[yourname].vercel.app 🎉
npm install
Create a .env file:
ANTHROPIC_API_KEY=sk-ant-your-key-here
Then run:
npm run dev
npm run builddistANTHROPIC_API_KEY = your keyFor Netlify, rename api/claude.js to netlify/functions/claude.js and update
any /api/claude fetch URL to /.netlify/functions/claude.
tigertrade-dashboard/
├── api/
│ ├── claude.js ← Claude proxy (keeps Anthropic key secure)
│ └── fmp.js ← Live market-data proxy (FMP)
├── src/
│ ├── main.jsx ← React entry point (imports terminal.css)
│ ├── terminal.css ← Design tokens + all terminal styling
│ ├── App.jsx ← Terminal shell: routing, state, drawers, watchlist
│ ├── tt.js ← Data namespace (events, stats, CANSLIM dataset)
│ ├── liveData.js ← Live FMP quote fetch + merge
│ ├── components.jsx ← Top bar, hero, stat strip, radar view, watch ctx
│ ├── radarScope.jsx ← Polar event radar scope
│ ├── charts.jsx ← SVG chart primitives
│ ├── views.jsx ← Calendar / Timeline / Playbook
│ ├── commandPalette.jsx ← ⌘K command palette
│ ├── drawer.jsx ← Drawer shell + event / stock / watchlist bodies
│ └── canslim.jsx ← CANSLIM screener / market health / playbook
├── index.html
├── package.json
├── vercel.json
└── vite.config.js
/) — jump to any view, toggle filters, or open any
event drawer/api/claude) available for future AI features