Skip to main content
The Stellar app lives in the Vanna_Finance_Backend monorepo at apps/stellar (package @vanna/stellar-app). It is a Next.js application with both the frontend screens and their server API routes. Header, sign-in dialog, funds modal and mascot come from the shared workspace package packages/shared, which the Solana app also uses. The live testnet build is at test.vanna.finance.

Screens

There is no Pro/Lite mode in the current app. A visible pool row is not proof of an enabled controller route: the Aquarius config also has an XLM/USDT pool, which Farm hides (HIDDEN_POOL_IDS); the lending markets remain the four documented assets.

Wallets and state

The Sign in to Vanna dialog (packages/shared/v4/connect-modal.tsx) offers: lib/wallet-adapter.ts gives every call site the same getAddress / requestAccess / signTransaction shape for Freighter, OneKey and Dynamic. It still contains a Privy raw-hash signing path, but the current sign-in dialog does not offer Privy. Zustand stores hold wallet, selections, the margin account and transaction progress. TanStack Query and ledger-tick hooks refresh data. App-side safety constants live in lib/account-model.ts: LIQ_HF = 1.1 (the contract line), SAFE_HF = 1.15 (Spot blocks a swap that lowers health below it) and WARN_HF = 1.25. The Margin leverage slider is capped at 10x and by the RiskEngine borrow limit.

APIs

All server routes are under /api/stellar/.

Data limitations

The Analytics account scan reads up to the 200 most recent margin accounts from the Registry. Risk Explorer scenarios run on that live snapshot; only their stress presets come from lib/analytics/data/mock.ts. Scenario outputs are conditional calculations, not forecasts. Derived equity is not realized profit, and history can be missing when Mercury or RPC retention has gaps.

Copilot integration

lib/copilot includes intent routing, planning, asset readiness, plan sanitization, approval checks, wallet binding, conditional guards, write deduplication, auto-approve budgets and execution receipts. The agent runs inside the Next.js server and calls a configured MCP service. With Freighter, every transaction still opens the wallet for a signature. Presence of these code paths does not prove the external services are configured or available.

Source reference

  • Vanna_Finance_Backend/apps/stellar/app
  • Vanna_Finance_Backend/apps/stellar/lib/constants.ts
  • Vanna_Finance_Backend/apps/stellar/lib/account-model.ts
  • Vanna_Finance_Backend/apps/stellar/lib/wallet-adapter.ts
  • Vanna_Finance_Backend/apps/stellar/lib/copilot/config.ts
  • Vanna_Finance_Backend/packages/shared/v4/connect-modal.tsx
  • Vanna_Finance_Backend/packages/shared/dynamic/dynamic-session.tsx