import { createFileRoute } from '@tanstack/react-router'; const sections = [ { icon: '🤖', title: 'What is an agent?', content: 'Agents are AI-powered services that expose entrypoints—callable operations that perform specific tasks. Each agent publishes a manifest describing capabilities, pricing, and available inputs/outputs.', }, { icon: '🔌', title: 'Entrypoints', content: 'Every entrypoint accepts JSON input and returns structured output. Some entrypoints support streaming for real-time updates using Server-Sent Events (SSE).', }, { icon: '💳', title: 'Payments & wallets', content: 'Agents can require blockchain-backed micropayments. Connect a local test wallet or a WalletConnect-compatible wallet via AppKit to invoke protected entrypoints using the x402 protocol.', }, { icon: '🌐', title: 'Network support', content: 'Agents operate across multiple chains (Base, Base Sepolia, Optimism, and more). The dashboard surfaces the required network and pricing details for each entrypoint.', }, ]; const walletGuide = [ { type: 'WalletConnect via AppKit', description: 'Connect MetaMask, Rainbow, or any WalletConnect-compatible wallet once WALLET_CONNECT_PROJECT_ID is configured.', steps: [ 'Set WALLET_CONNECT_PROJECT_ID in your .env', "Click 'Connect Wallet' and select your provider", 'Approve the connection in your wallet', 'Switch to the prompted network before invoking paid entrypoints', ], }, ]; const devWorkflow = [ { title: 'Bootstrap', code: 'bun install', description: 'Install dependencies across the monorepo.', }, { title: 'Develop', code: 'bun run dev', description: 'Start TanStack Start with HMR and SSR on port 3000.', }, { title: 'Inspect entrypoints', code: 'curl http://localhost:3000/api/agent/entrypoints', description: 'List available entrypoints served directly from the agent core.', }, { title: 'Build for production', code: 'bun run build', description: 'Generate an optimized output ready for deployment.', }, ]; const integrationExample = `// Using x402-fetch to invoke an entrypoint import { createSigner, wrapFetchWithPayment } from "x402-fetch"; const signer = await createSigner("ethereum", process.env.PRIVATE_KEY!); const fetchWithPayment = wrapFetchWithPayment(fetch, signer); const response = await fetchWithPayment( "https://localhost:3000/api/agent/entrypoints/echo/invoke", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ input: { text: "Hello, agent!" } }), } ); const result = await response.json(); console.log(result); `; export const Route = createFileRoute('/about')({ component: AboutPage, }); function AboutPage() { return (

Build full-stack agent experiences

This dashboard replaces the legacy Vite landing page with a unified TanStack Start application. Agents run in-process, server routes expose entrypoints, and shared TypeScript types keep invoke and streaming logic perfectly in sync.

{sections.map(section => (
{section.icon}

{section.title}

{section.content}

))}

Wallet setup guide

{walletGuide.map(guide => (

{guide.type}

{guide.description}

    {guide.steps.map((step, index) => (
  1. {index + 1}. {step}
  2. ))}
))}

Development workflow

{devWorkflow.map(step => (

{step.title}

{step.description}

{step.code}
))}
Looking for more? Check DEV.md{' '} for environment variables, deployment notes, and end-to-end payment walkthroughs.

API integration example

Use{' '} x402-fetch {' '} to wrap fetch calls with automatic payment handling. When the agent requests payment, the wrapper signs and forwards proof headers transparently.

{integrationExample}
); }