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.
Every Nasdaq-100 holding with weights, delayed quotes, and monthly allocation history.
FinanceJavaScript · CSSGitHub @hondoentertainmentOnlineOwner 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
Stock Analysis for QQQQ
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗A web dashboard for every component of QQQQ with current weights, live prices, and a month-by-month allocation history — plus a recurring cron job that keeps the data fresh.
What is "QQQQ"?
QQQQis the legacy ticker for the Invesco QQQ Trust (renamed toQQQin 2011), the ETF that tracks the Nasdaq-100 Index. Its "components" are the ~100 Nasdaq-100 constituents — that's what this tracker shows.
aria-sort / aria-expanded state; press / to jump to the
filter box. A skip link, a screen-reader status region, labelled charts, and
a prefers-reduced-motion pass round out the accessibility support.npm test); the only dev dependency
is ESLint (npm run lint).index.html / styles.css / app.js The dashboard interface
server.js Zero-dep static server (+ /api/refresh, /api/quotes)
lib/holdings.js Pure, tested data-pipeline helpers
lib/quotes.js Shared live-quote fetching (FMP or Yahoo)
api/quotes.js Vercel serverless function for /api/quotes
scripts/fetch-holdings.js Fetches holdings + prices, writes data/*.json
test/*.test.js Unit tests (data pipeline, quotes, server)
e2e/smoke.test.js Browser smoke test of the dashboard
data/holdings.json Current holdings snapshot
data/monthly-allocations.json Per-ticker monthly allocation history
data/changes.json Log of constituent additions/removals
data/price-history.json Daily QQQ closing prices (fund performance)
vercel.json Vercel deploy config (static + function)
.github/workflows/ci.yml Lints and runs the test suite on every PR
.github/workflows/refresh.yml The recurring data-refresh cron job
.github/workflows/pages.yml Deploys the dashboard to GitHub Pages
ROADMAP.md Planned features and project direction
See ROADMAP.md for where the project is headed.
Requires Node.js 20+. The app itself has no runtime dependencies; run
npm install once to get the dev tooling (ESLint, Playwright, Vercel CLI)
for lint / test / test:e2e.
npm install # install dev tooling — one time
npm start # serve the dashboard at http://localhost:3000
npm run refresh # refresh data/*.json once, right now
REFRESH_MINUTES=30 npm start # serve + auto-refresh data every 30 min
npm run lint # lint the JavaScript sources
npm test # run the unit tests
npm run test:e2e # browser smoke test (needs `npx playwright install chromium`)
Data is refreshed by .github/workflows/refresh.yml, a scheduled GitHub
Actions workflow. It runs scripts/fetch-holdings.js, which:
FMP_API_KEY is set, then the latest SEC N-PORT filing,
then the last good data. Weights are never invented from market cap.data/holdings.json, appends the current month's weights to
data/monthly-allocations.json, and logs any constituent changes to
data/changes.json.Schedule: every 30 minutes during US market hours, plus a post-close snapshot. Trigger it manually any time from the Actions tab ("Run workflow").
GitHub only runs scheduled workflows from the repository default branch.
That default is currently claude/qqqq-component-tracker-O4OBc, not main,
so cron refreshes (and their data commits) land there. Switching the default
to main is a repo-settings change this codebase cannot make; until then,
keep refresh fixes on the default branch so the cron actually sees them.
If a data source is temporarily unreachable, the script falls back to the last good data so the job stays green and the site keeps working. When that happens the workflow opens (and later auto-closes) a GitHub issue, so a silently stale dashboard gets noticed.
FMP_API_KEY secretInvesco's download endpoint and Yahoo Finance both block automated requests, so the free path can be unreliable. For dependable data, get a free API key from Financial Modeling Prep and add it to the repo:
Settings → Secrets and variables → Actions → New repository secret
— name FMP_API_KEY, value = your key.
refresh.yml already passes it through; locally, run
FMP_API_KEY=yourkey npm run refresh or put FMP_API_KEY=yourkey in a
.env file (gitignored — the npm scripts load it automatically).
npm start), the page also calls GET /api/quotes every
20s; the server fetches fresh quotes (15s cache) so prices update between
cron runs. On static hosting this call simply no-ops.The dashboard is fully static. .github/workflows/pages.yml publishes it
to GitHub Pages on every push to main (including the cron's data commits).
One-time setup: Settings → Pages → Source = "GitHub Actions".
vercel.json deploys the same static dashboard to Vercel, plus a
serverless function (api/quotes.js) that backs GET /api/quotes — so
live price polling works on Vercel (unlike GitHub Pages, where it no-ops).
One-time setup: import the repo at vercel.com/new.
For reliable prices, add an FMP_API_KEY environment variable in the Vercel
project settings — without it the function falls back to Yahoo Finance.
The Vercel CLI is included as a dev dependency: run npx vercel dev to
preview the dashboard and the /api/quotes function together locally, or
npx vercel deploy to deploy from the command line. The CLI bundles many
transitive packages, so npm audit reports advisories from them — all
dev-only and never shipped to the app; see SECURITY.md.
FMP_API_KEY is set, or the
latest SEC N-PORT filing. Last-good / seed is used only when every live
source fails.data/*.json ships with a sample dataset (source: "seed")
so the dashboard works immediately; the first successful cron run replaces it
with live data.For informational purposes only — not investment advice.