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.

Description
No description provided
Readme 2.6 MiB
Languages
Python 90.1%
Vue 6.4%
CSS 3.1%
Dockerfile 0.2%
Shell 0.1%