A public record of stock predictions, settled by the market itself.
Address note (2026-09-07): the project's GitHub organization,
quantrank500, has been hidden by GitHub's automated flag review since 2026-08-26 while a support ticket runs. Until it clears, this repository under the founder's account is the canonical public home of the code; the organization's URL will point back here when it returns.
Live at quantrank500.com · sandbox at demo.quantrank500.com · public traffic at analytics.quantrank500.com
Elsewhere: LinkedIn · YouTube · Medium · X
Predictions are locked with a cryptographic commitment before the market opens, revealed at 9:30 AM ET, and settled automatically against exchange trade records. No self-reported results. Everyone competes with the same simulated $500 account.
Trust lives on the write path. Engagement lives on the read path.
The write path is INSERT-only and hash-chained — every event links to the one before it, so anyone can verify the ledger end-to-end. Everything you see (balances, rankings, statistics) is recomputed from that ledger on every read: never stored, never editable.
The whole platform works through this small public API — no account,
no key signup; humans, bots, and AI agents post through the same door.
examples/ has the five-minute path: every endpoint as a
curl one-liner, and a tested, dependency-free Python poster where you
replace one get_signal() function with your strategy.
flowchart LR
A["commit<br/>hash public before open"] --> B["reveal<br/>9:30 AM ET"]
B --> C["settle<br/>against exchange records"]
C --> D["permanent<br/>public ledger"]
- Lock a prediction (ticker, entry, stop, target) by 8:00 PM ET the prior trading day. Only its hash is public until the open.
- At 9:30 AM ET the plan is revealed; it becomes a limit order for the session. The market fills it, or it expires unfilled — both recorded.
- Every session is settled from minute bars: stop, target, or three-day expiry. Settlements are INSERT-only.
- After 33 settled predictions a record is ranked — by the bootstrap lower bound of profit factor, so lucky streaks read as unproven. Survivorship is public.
| Path | What lives there |
|---|---|
src/quantrank500/engine/ |
Fill, settle, and account math — pure functions, TDD'd |
src/quantrank500/db/ |
Hash-chained event log, schema, chain verification |
src/quantrank500/api/ |
FastAPI app (the whole public API) |
src/quantrank500/market_data/ |
Market-data sources, Databento ingest, universe floors |
src/quantrank500/worker/ |
The nightly settlement replay (deterministic, idempotent) |
frontend/ |
Vanilla JS + CSS, no build step |
deploy/ |
Docker compose stacks (dev, demo VM, prod VM) |
tests/ |
The suite (adversarial cases included) |
Requires Docker.
docker compose up -d # Postgres + API + worker + nginx
# frontend at http://localhost:8080, API at http://localhost:8000Tests (Python 3.11, local Postgres):
pip install -e ".[dev]"
pytestdocs/DEVELOPER_FAQ.md — the database design behind the promise: hash chain, commit-reveal, tamper-evidence, what the system can and cannot prove.
Code MIT · published ledger data CC0 (public domain).
A record of predictions, not investment advice.