Skip to main content

Components

Client

  • Next.js 15 App Router, React 18, TypeScript, Tailwind CSS, Framer Motion
  • Privy for auth + an embedded Solana wallet
  • Deploys a Squads V4 multisig per user (member = user’s wallet with all; co-signer = server with Execute)
  • Builds vaultTransactionCreate + proposalCreate + proposalApprove, the user signs as a member, then the server sponsors the fee
  • Registers the proposal with POST /queue
  • Portfolio via Zerion (live balances, prices, history)

Server

  • Express with TypeScript, backed by Supabase
  • Runs analyzeRisk() inline on every /queue request — no async roundtrip, no LLM
  • Holds the sponsor keypair: fee payer, rent collector, and the Execute member on every vault
  • Self-calls /execute on APPROVE; brokers Telegram on REVIEW / BLOCK
  • Calls GoPlus, Rugcheck, and Zerion for deep analysis and portfolio data

Agent

  • Nanobot skill pack — conversational layer, authenticated with AGENT_SECRET
  • Routes Telegram messages and button taps to the Sage API
  • Has access to security tools over MCP (GoPlus, Rugcheck, sanctioned-address lookups) for ad-hoc analysis
  • Owns no deterministic logic — it calls endpoints and reports the actual result

Data Flow

Persistence

All state lives in Supabase (Postgres). Key tables:

Tech Stack