The stack
Every choice optimises for the same thing: a system one engineer can read,
audit, and rebuild in a sitting — boring, proven technology arranged carefully. The
architecture notes explain the shape; this page names the parts.
Backend
- Python
- The trading, data, and risk engines — the language of quantitative work, held to strict static typing on every money path.
- FastAPI
- The API layer — async-native, tiny surface, with request/response contracts validated at the boundary.
- Pydantic
- Every boundary — API bodies, configs, screen definitions — is a validated, typed contract, never a loose dict.
- APScheduler
- All recurring jobs (nightly pipelines, sweeps, syncs) run in-process — no external job cluster to babysit.
- uv
- Python environments built from one lockfile in seconds — deploys and disposable machines never wait on packaging.
- structlog
- Structured, correlation-id logging — every order's journey is one query away.
Data
- PostgreSQL
- One database is the single source of truth for both the trading book and market history — transactional, joinable, one backup story.
- TimescaleDB
- Postgres grown time-series organs: millions of ticks and candles partitioned, compressed, and rolled up in place.
- Redis
- The live layer — latest quotes in microseconds and real-time fan-out to every open screen.
- Alembic
- Every schema change is a versioned, reviewable migration — the database's history reads like the code's.
Interface
- React + TypeScript
- The terminal — typed end to end against the API's contracts.
- Vite
- Builds the app into static, content-hashed files — served plainly, cached forever, updated atomically.
- Tailwind CSS
- One design-token system — the whole terminal's look defined in one place, enforced by a build-time guard.
- TanStack Query
- Server state, polling, and cache discipline for a screen that must never show stale data as fresh.
- lightweight-charts
- The professional charting canvas — the open-source engine from the TradingView house, driven entirely by Atlas's own data.
Edge & operations
- Caddy
- The single internet-facing door — automatic TLS, static serving, and reverse proxy in a config that fits on one screen.
- Docker Compose
- The whole platform declared in one file, reproducible on any small server — deliberately not an orchestration cluster.
- Cloud object storage
- Nightly encrypted off-site backups with tiered retention — and a weekly automated restore drill that proves them.
- Broker SDK
- The broker's official SDK, confined behind an internal adapter — the one place broker specifics are allowed to exist.
Quality gates
- pytest
- A thousand-plus tests including failure injection on the money paths and a determinism gate on backtests.
- mypy
- Strict static typing on risk, execution, and broker code — the compiler as a second reviewer.
- ruff
- Formatting and linting with zero debate — one style, enforced.
- import-linter
- The architecture itself is a test: forbidden dependencies (UI→broker, strategy→execution) fail the build, not the code review.
Absent by design: no microservices, no message brokers, no Kubernetes, no
external job queues, no third-party analytics or trackers. Every dependency is one more
thing that can break at 9:15 — the bar for inclusion is high.