Stack
Built in Rust + Next. Audited end-to-end.
The full technology stack behind the engine, the data plane, and this site — and why each piece earns its place.
How a request flows
From DB to your phone in under 100ms.
The bot writes to Postgres + Redis. axum serves them over a typed protobuf WS-RPC plane — every operator number is decoded, contract- checked, and streamed live to the cockpit. No JSON blobs.
PostgreSQL
trades · equity
Redis
state bus
Vectra bot
Rust · 63 crates
axum
proto WS-RPC
Next.js 16
React 19 · TS
Desktop
dashboard
Mobile PWA
installable
Every dependency
Pinned, documented, swappable.
Bot core
- 1.83 stable
Rust
63-crate workspace
- 1.52
tokio
async runtime
- 0.8
sqlx
compile-time SQL
lightgbm3
ML inference
anyhow + thiserror
errors
Broker adapters
- live
MEXC (futures)
crypto · vectra-exchange
- PAPER-ready
IBKR Client Portal
equities · vectra-broker-ibkr
- PAPER-ready
OANDA REST v20
FX majors · vectra-broker-oanda
- 0.1
async-trait
object-safe BrokerAdapter
- 0.6
wiremock
broker integration tests
Storage
- 16
PostgreSQL
trades · equity · regime
- 7
Redis
live state bus
DuckDB
backtest tick storage
API + ops
- 0.7
axum
typed proto WS-RPC
- EU
Hetzner CAX21
ARM64 host
systemd --user
service units
ufw
firewall
Marketing + dashboard
- 16.2
Next.js
App Router · webpack build
- 19.2
React
Compiler-ready
- 5 (strict)
TypeScript
noUncheckedIndexedAccess
- v4
Tailwind CSS
@theme tokens
shadcn/ui
26 primitives
Animations + UI
- 12
Framer Motion
every transition
Magic UI
16 components copy-paste
Motion-Primitives
6 wrappers
lucide-react
iconography
- 3
Recharts
equity curves
- 2
sonner
toast notifications
Mobile + offline
- 9
Serwist
service worker
- 1
vaul
drawer (More tab)
- 8
embla-carousel-react
swipe
manifest.webmanifest
installable
Why this stack
Rust for the bot
Deterministic memory, predictable latency, no GC pauses while a fill is in flight. Compile-time SQL via sqlx means a column rename can't ship a runtime bug.
Next.js for the surfaces
Marketing pages stay static + SEO-ready. The dashboard hydrates client-side with SWR polling. Same codebase, both audiences served.
Hetzner EU for the host
ARM64 CAX21 — €15/mo, 4 vCPU, 8 GB RAM, Frankfurt. GDPR-friendly. systemd --user units + ufw. No cloud bill mystery.
Read the source.
Inspect every line.
The bot core, web frontend, and acceptance-gate CLI live in one workspace. Clone it. Run the backtest. Fork the strategy.