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 withExecute) - 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/queuerequest — no async roundtrip, no LLM - Holds the sponsor keypair: fee payer, rent collector, and the
Executemember on every vault - Self-calls
/executeon 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

