Velloo documentation
Markdown for LLMs ↗Tour the sample
A tour of Elsewhere, the welcome sample velloo init ships for every provider, with two boards, seven screens, three snippets, photography, notes, and dark frames.
velloo init seeds new folders with Elsewhere, a fictional boutique travel product. It’s the “Elsewhere welcome sample” goal in the wizard, and the default when you run velloo init --start=sample non-interactively. It isn’t a toy: it’s a complete design folder built through Velloo’s own tools, and the fastest way to learn the model is to open it and poke at it.
Every provider gets the same sample. shadcn folders receive the canonical version. For MUI, Ant Design, Chakra, and no-library folders, init rebuilds each screen and snippet with that provider’s own components: Badge becomes a Chip or Tag, NativeSelect becomes the library’s Select, and shadcn’s Chart becomes a static SVG. Tailwind classes are translated into the native style channel: sx for MUI and Chakra, and inline style for Ant Design and no-library. For those last two, rules that can’t be written inline, such as media queries, are appended to theme/custom.css. Screen ids, snippet ids, node $ids, boards, and assets are identical across all five.
What ships
Two boards:
| Board | Id | Frames |
|---|---|---|
| Elsewhere · The journey | main | Eight frames over four screens: Discover, Stay, Itinerary, and Overview at desktop (1440). Discover and Itinerary also get a mobile frame (390), and Discover and Overview each get a dark-mode frame |
| Agentic trip creation exploration | elsewhere-details | Three tall desktop frames, one per concept, with a canvas note above each |
Seven screens:
| Screen id | Name | What it shows |
|---|---|---|
elsewhere-discover | 01 · Discover your elsewhere | Photo hero, search InputGroup, three destination cards |
elsewhere-stay | 02 · A stay in Kyoto | Accommodation page with photos, badges, reviews, and a booking Field group |
elsewhere-itinerary | 03 · A day in Kyoto | Trip Tabs, a day picker, activity cards, and the illustrated route map |
elsewhere-overview | 04 · Your trip, at a glance | Four trip metrics, budget and weather charts, progress, and a bookings Table |
elsewhere-trips-library | A · The conversational concierge | A chat built from the Message family beside a persistent trip summary |
elsewhere-trips-board | B · The brief-to-plan workspace | A structured brief (Field, Input, Switch) next to an editable plan |
elsewhere-trips-journal | C · The inspiration-led companion | Visual choices that grow into a destination, dates, and an itinerary |
Three snippets. Every param is a string:
| Snippet id | Name | Params | Used by |
|---|---|---|---|
elsewhere-nav | ElsewhereNav | none | The top bar on all seven screens |
elsewhere-destination | DestinationCard | image, name, country, note | Discover’s Kyoto, Bali, and Dolomites cards |
elsewhere-metric | TripMetric | label, value, note | Overview’s four metric tiles |
Also in the folder:
theme/default.json: the curated Elsewhere palette, which isvelloo init’s defaultelsewherepreset. Colors are hex values in shadcn’s slot shape (for example,primaryis{ "DEFAULT": "#244D3C", "foreground": "#FFFFFF" }), and an explicitcolorsDarktree defines the dark palette. Typography declaressansas DM Sans,displayas DM Serif Display, andmono, loaded throughgoogleFonts, plus five typesets:default,docs,chat,compact, andreading. If init detected your app’s theme, or you passed--theme-preset, those colors replace the Elsewhere ones.theme/custom.css: two small sample classes.ew-photo-shadedarkens the hero photos, andew-route-mapletterboxes the map on narrow screens.assets/: six travel photographs (elsewhere-kyoto.jpg,-japan,-bali,-alps,-room,-forest) and an authored SVG route map,elsewhere-kyoto-map.svg.assets.json: seeded prompt metadata for all seven assets. When you select an Image node, the canvas shows a prompt and generation controls. These are demo prompts: the photos weren’t generated from them.ASSET-SOURCES.md: where each photograph came from and a note that the map was drawn for the sample.boards/elsewhere-details.notes.json: the three evaluation notes on the exploration board.
What to look at first
Discover’s three frames. On main, the elsewhere-discover screen sits in a desktop frame, a 390px mobile frame, and a dark frame. There is one tree. Frames are only placements, so the tree reflows at 390px and flips to the dark palette in the dark frame. Edit the hero copy in any one of them and all three update, because there’s nothing to sync. This is the core of the Board → Frame → Screen model.
The pinned schemes. Open boards/main.json. The two dark frames carry "scheme": "dark", the Discover and Overview desktop frames carry "scheme": "light", and the rest have no pin, so they follow the canvas’s light/dark toggle. A pin fixes how one placement renders, which is how a single board can show light and dark side by side. Because elsewhere-discover is hosted with conflicting schemes, a screenshot of it has to name a mode explicitly.
DestinationCard. Discover’s grid is three instances of one snippet, each passing different args:
{
"$snippet": "elsewhere-destination",
"args": {
"image": "/assets/elsewhere-kyoto.jpg",
"name": "Kyoto",
"country": "JAPAN / 35.0116° N",
"note": "Ancient rituals. A slower rhythm."
}
}
Inside the body, { "$param": "image" } feeds an Image’s src and the other three params fill the text. One definition, three cards, zero copy-paste. In compose JSX the snippet is also addressable by its PascalCase tags, <DestinationCard> or <ElsewhereDestination>. See Snippets.
The Overview screen. TripMetric carries the four headline numbers. The budget and weather panels are the built-in Chart component (a bar chart and a line chart), and the bookings list is a real Table. Overview also has a dark frame, so it’s a good place to judge dark-mode adaptation.
The exploration board. elsewhere-details compares three agentic trip-creation approaches as full-height flows. The notes above the frames are canvas notes, free-positioned markdown in board coordinates that agents can read and write with list_notes, add_note, and update_note. Use this board as an example of how to lay out and annotate alternatives for review.
The theme. Open theme/default.json. The screens use semantic tokens (bg-background, text-muted-foreground, bg-primary) and the font-display role, so changing the theme or the mode restyles all seven screens at once. See Themes.
How it teaches the model
- Frames sharing screens. Discover and Itinerary appear at desktop and mobile. Same tree, multiple viewports, edits sync.
- Scheme pins. Dark frames sit next to light ones on the same board without forking a screen.
- Boards per purpose. The product journey and the concept exploration live on separate boards.
- Snippets over copy-paste. The nav, destination card, and metric tile are defined once each.
- Stable ids. Every component node in the seven screens carries an
$idsuch aselsewhere-discover-44, so@idlocators keep working as the tree changes. - Notes as review context. The exploration board carries its rationale beside the frames.
Try things
The sample is meant to be remixed, not preserved. These are good first requests for your agent, shown as the operations it would call. The JSON examples use the shadcn version’s class names.
-
Add a fourth destination by appending a snippet tag to Discover’s card grid:
{ "screenId": "elsewhere-discover", "mode": "append", "parentPath": "@elsewhere-discover-44", "jsx": "<DestinationCard image=\"/assets/elsewhere-forest.jpg\" name=\"Yakushima\" country=\"JAPAN / 30.3582° N\" note=\"Moss, mist and cedar.\" />" }That’s
compose. The grid ismd:grid-cols-3, so the card wraps onto a second row. -
Change one card without touching the others.
update_snippet_instancewith{ "screenId": "elsewhere-discover", "path": [2, 1, 1], "argPatch": { "note": "Temples at first light." } }edits the Bali card only. -
Change every TripMetric at once.
update_snippetwith{ "snippetId": "elsewhere-metric", "patch": { "innerPatch": { "innerPath": "1", "propPatch": { "className": "font-display font-normal tracking-[-0.035em] text-4xl" } } } }changes the value heading in all four tiles. Check a snippet on its own withrender_snippet. -
Compare light and dark. Run
screenshotwith{ "screenId": "elsewhere-overview", "mode": "compare" }. Any class or theme problems come back in the result’sdiagnostics. -
Pin another frame.
update_framewith{ "boardId": "main", "patches": [{ "frameId": "elsewhere-stay-desktop", "patch": { "scheme": "dark" } }] }renders the Stay screen dark on the board. -
Try a new palette without losing this one. Call
add_themewith{ "name": "harbour" }, thenset_themewith{ "theme": "harbour", "from": { "seedColor": "#1f4e79" } }, thenupdate_boardwith{ "boardId": "main", "patch": { "theme": "harbour" } }. Runscore_theme_contrastwith{ "theme": "harbour" }to check the result. -
Put the exploration away.
update_boardwith{ "boardId": "elsewhere-details", "patch": { "archived": true } }hides the board from the sidebar andlist_boardswithout deleting it.
When you’re done exploring, the loop for real work is in Design a screen.