SET50 Alternative Data Platform
Tourism-first vertical slice for a deterministic SET50 alternative-data research system.
Current scope:
fixture observation
→ Tourism Pulse surprise
→ versioned exposure score
→ ranked target weights
→ English dashboard
→ internal paper ledger
No external webhook receiver and no live MT5 execution are enabled.
Run the backend
python -m venv .venv
.venv/bin/pip install -r backend/requirements.txt
PAPER_WRITE_TOKEN=local-paper-token PYTHONPATH=backend .venv/bin/python backend/run.py
Health check:
curl http://127.0.0.1:5000/api/v1/health
Run the dashboard
In a second terminal:
cd frontend
npm install
npm run dev -- --host 127.0.0.1
Open http://127.0.0.1:5173.
The frontend reads the live API through Vite's /api proxy. Paper writes require the operator to unlock an HttpOnly browser session using the backend PAPER_WRITE_TOKEN; the token is never embedded in the frontend bundle. The paper-entry action records an assumed fill in the in-memory paper ledger only.
For HTTPS/non-local deployment, set PAPER_COOKIE_SECURE=1. The M0 session store is intentionally in-memory and single-process; use a shared session store before running multiple workers or replicas.
Tests and build
PYTHONPATH=backend .venv/bin/python -m unittest discover -s backend/tests -v
cd frontend && npm run build
Current M0 boundary
- English UI and analysis vocabulary
- Research mode and paper mode only
- Tourism Pulse fixture adapter
- Data lineage: source, publication time, retrieval time, vintage
- Deterministic surprise × exposure × confidence score
- Paper ledger endpoint
- No LLM call yet; the deterministic result is the source of truth
- No webhook receiver yet
- No MT5 bridge yet
The next implementation step is replacing the fixture with one replayable Tourism source adapter while preserving the same snapshot contract.