Skip to main content
Vendo brings the loop, the model, and the chat surface. You paste three things into your own client. This picks up after the two commands on the main quickstart:
Those leave you app/api/vendo/[...vendo]/route.ts written, and a model credential settled. Which credential depends on how you answered init’s models question. Vendo Cloud ran the browser login and put a VENDO_API_KEY in .env.local. Bring my own key took your paste and put it in the same file, under ANTHROPIC_API_KEY, OPENAI_API_KEY, or GOOGLE_GENERATIVE_AI_API_KEY. Decide later wrote no key at all — the steps below still work, and vendo login (or your own key in .env.local) is what makes the first turn answer. Model credentials covers all three.
1

Mount the provider

Paste what init printed into your client layout. Your paths and theme are already filled in.
app/layout.tsx
Leave that props type alone. Next already types children for you — create-next-app writes Readonly<{ children: React.ReactNode }>, and an app on typed routes has a generated props type of its own — so annotating it again as { children: ReactNode } only throws away what your app already knows.baseUrl is where the route is mounted, path prefix included. An app served under /maple passes baseUrl="/maple/api/vendo".
2

Add the overlay

One line inside the provider puts your agent on every page. It opens over your app, or docks beside it with placement="dock".
app/layout.tsx
Prefer a command bar? Mount <VendoPalette /> beside the overlay and ⌘K opens the same panel in its compact form.
3

Add the slot

Put a slot where a card would go. A screen the agent builds can live there instead of in the panel.VendoSlot comes from the package you already installed — no second one.The id and the file are both yours. spend-breakdown on a bank’s overview page is this example’s choice: pick any string, and put the slot on whichever page you want the surface to appear on. The one rule is that the same string appears in both places — on VendoSlot here, and on the provider’s pinSlot below.
app/overview/page.tsx
Name that slot on the provider. It is where the panel’s pin button sends a finished view.
app/layout.tsx
Empty, the slot shows a ghost with prompts that open the panel. Ask for a view, press Pin to dashboard on the card that comes back, and it renders in your grid and stays there.
Maple's overview page with its own quick actions, balance chart, and account tiles, and a generated spend by category card holding the slot beside them

Your page, your grid. The card in the middle is generated.

Start the app and click the launcher pill in the corner.
Ask for something you would otherwise click through to, like “Where did my money go?” The agent calls your own API as the person signed in, and answers with a screen instead of a paragraph when the answer is one to look at.
The Vendo panel open over Maple, answering a spending question with a generated screen that lists each category and its total

The panel is Vendo. The fonts, colors, and data are yours.

Where to go next

The surface is up. These three are what people change first.
product-how-it-works

How it works

What the panel does, and what runs on your side.app/api/vendo/[...vendo]/route.ts
product-theming

Theming

Fonts, colors, and radii, taken from your own tokens..vendo/theme.json
generated-apps

Generated apps

Real screens built from your data, pinned where you want.<VendoSlot id="home-hero" />