Vectra

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.

Rust 1.83 · 63 cratesNext.js 16 · React 19Tailwind v4 · @themeFramer Motion 12PostgreSQL 16 + Redis 7axum 0.7 · proto WS-RPCSerwist PWA · 4 cache strategiesHetzner EU · systemd unit
Rust 1.83 · 63 cratesNext.js 16 · React 19Tailwind v4 · @themeFramer Motion 12PostgreSQL 16 + Redis 7axum 0.7 · proto WS-RPCSerwist PWA · 4 cache strategiesHetzner EU · systemd unit
Rust 1.83 · 63 cratesNext.js 16 · React 19Tailwind v4 · @themeFramer Motion 12PostgreSQL 16 + Redis 7axum 0.7 · proto WS-RPCSerwist PWA · 4 cache strategiesHetzner EU · systemd unit

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

  • Rust

    63-crate workspace

    1.83 stable
  • tokio

    async runtime

    1.52
  • sqlx

    compile-time SQL

    0.8
  • lightgbm3

    ML inference

  • anyhow + thiserror

    errors

Broker adapters

  • MEXC (futures)

    crypto · vectra-exchange

    live
  • IBKR Client Portal

    equities · vectra-broker-ibkr

    PAPER-ready
  • OANDA REST v20

    FX majors · vectra-broker-oanda

    PAPER-ready
  • async-trait

    object-safe BrokerAdapter

    0.1
  • wiremock

    broker integration tests

    0.6

Storage

  • PostgreSQL

    trades · equity · regime

    16
  • Redis

    live state bus

    7
  • DuckDB

    backtest tick storage

API + ops

  • axum

    typed proto WS-RPC

    0.7
  • Hetzner CAX21

    ARM64 host

    EU
  • systemd --user

    service units

  • ufw

    firewall

Marketing + dashboard

  • Next.js

    App Router · webpack build

    16.2
  • React

    Compiler-ready

    19.2
  • TypeScript

    noUncheckedIndexedAccess

    5 (strict)
  • Tailwind CSS

    @theme tokens

    v4
  • shadcn/ui

    26 primitives

Animations + UI

  • Framer Motion

    every transition

    12
  • Magic UI

    16 components copy-paste

  • Motion-Primitives

    6 wrappers

  • lucide-react

    iconography

  • Recharts

    equity curves

    3
  • sonner

    toast notifications

    2

Mobile + offline

  • Serwist

    service worker

    9
  • vaul

    drawer (More tab)

    1
  • embla-carousel-react

    swipe

    8
  • 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.