Self-hosting
Solana setup.
Two variables light up the whole crypto layer: a Privy app id for wallets, and an RPC URL for reliable on-chain reads and broadcasts.
1 · Privy (embedded wallets)
- 1Create a Privy appdashboard.privy.io → new app. Copy the App ID into
NEXT_PUBLIC_PRIVY_APP_ID. No app secret is needed, signing happens client-side. - 2Enable Solana embedded walletsIn the Privy dashboard enable Embedded wallets → Solana (create on login), and turn on at least one login method (email is easiest).
- 3Allow your originsAdd
http://localhost:3000and your production domain to Privy's allowed origins, connect fails from unlisted origins.
2 · RPC
- Without config, the app uses the public mainnet RPC, fine for trying things, rate-limited in practice.
- For real use set
SOLANA_RPC_URLto a provider like Helius or QuickNode. It's used only server-side by/api/solana/rpc; the key never reaches the client, and the route rejects cross-site callers.
3 · Jupiter
- Swaps and prices use Jupiter's keyless lite API by default (
lite-api.jup.ag) via the allowlisted proxy, nothing to configure. - Override with
NEXT_PUBLIC_JUPITER_BASEif you have a paid Jupiter tier.
Everything is mainnet and non-custodial: your deployment never holds user keys or funds. Send/swap tools are hard-wired to show an approval sheet on every call and cannot be added to the always-allow list.