
What it is
Design Engineer turns the Live Preview into a first-class editor. Click any element and the code that renders it opens, highlighted, in Monaco. Inspect the element’s computed CSS, tweak props visually, insert new components from a palette, and let the agent keep track of what changed. No context-switching from browser to editor.Click to source
Click any rendered element, land on the exact file and line that produced it.
Two-way sync
Changes in the editor update the preview. Edits on the preview update the source.
CSS inspector
Inspect any element’s computed styles, classes, and Tailwind utilities.
Insert palette
Drop pre-built sections, components, or primitives into the running app.
How click-to-source works
OpenSail’s dev server injects adata-oid attribute on every JSX element it compiles. The attribute encodes the file path and the AST location. When you click an element in the preview iframe, the overlay reads data-oid and tells Monaco to jump to the exact line.
The
data-oid attribute is only added in dev mode. Production builds strip it automatically. Your shipped app never leaks source paths.The workflow
Enable Design mode
Toggle the Design tab in the builder. The preview iframe gets a transparent selection overlay that tracks hover and click.
Click anything
Hover to highlight an element’s bounding box. Click to select. The editor jumps to the source and highlights the matching JSX block.
Inspect
The CSS inspector panel opens beside the preview with computed styles, applied classes, parent chain, and bounding box metrics.
Edit
Change a class, a prop, or the tree structure. Save. The preview hot-reloads with the change in place.
The CSS inspector
- Computed
- Classes
- Layout
- Source
Every computed CSS property resolved at the browser layer. Useful for understanding cascade conflicts or unexpected values.
Two-way sync
Every edit source roundtrips both directions.| You do | What updates |
|---|---|
| Save a file in Monaco | Preview hot-reloads via Vite HMR |
| Click an element in the preview | Editor jumps to the source block |
| Change a class in the inspector | File is patched and saved atomically |
| Drag a block from the Insert palette | JSX is inserted at the chosen position; file saves |
Agent runs apply_patch | Preview hot-reloads; any selected element re-highlights |
The inspector’s class edits go through
patch_file under the hood, so they produce clean diffs the agent can see and you can commit. Nothing is edited in memory only.The Insert palette
The Insert palette is a grid of pre-built sections, components, and primitives keyed to your project’s framework and design system. It ships with curated content for Vite React and Next.js projects and picks up custom entries from your project’s.tesslate/components.json.
Pick a block
Browse by category (Hero, Pricing, Feature Grid, Nav, Footer, Form, Table). Every block is a live preview itself.
Drop it in
Drag the block onto the preview. A drop indicator shows the insertion point. Release to insert.
Agent + Design Engineer together
The visual layer is complementary to the agent. Typical patterns:Point and tell
Point and tell
Select an element and say “this is too cramped”. The agent sees the element OID, reads the surrounding code, and suggests spacing changes with a preview diff.
Theme, batch-apply
Theme, batch-apply
Select one card. Ask: “apply this pattern to every card on this page”. The agent finds all matching elements and applies the update consistently.
Refactor from the preview
Refactor from the preview
Select a block. Ask: “extract this into a reusable component”. The agent creates the file, replaces the inline block with a call, and the preview stays identical.
Build from a sketch
Build from a sketch
Drop a screenshot into chat. Say “rebuild the hero section to match this”. The agent generates the JSX, you refine the spacing and colors visually.
Frameworks supported
Design Engineer is framework-aware:| Framework | OID injection | Insert palette | Inspector |
|---|---|---|---|
| Vite + React (TSX/JSX) | Yes | Yes | Full |
| Next.js (App Router, Pages Router) | Yes | Yes | Full |
Astro (.astro components) | Yes | Limited | Full |
| SvelteKit | Roadmap | Roadmap | Basic |
| Vue (Vite) | Roadmap | Roadmap | Basic |
Performance
Click-to-source resolves in under 50 ms on normal page sizes. The overlay is a single absolutely-positioned React tree that only re-renders on hover or selection change. Classes applied via the inspector write through the same file-patch pipeline as the agent, so no special handling needed.Keyboard
| Shortcut | Action |
|---|---|
I | Open Insert palette |
Esc | Clear selection |
Shift + click | Select parent element |
Alt + click | Inspect without selecting |
Cmd/Ctrl + click | Jump to source, keep preview focused |
Best practices
Start with the palette
Drop a hero or a pricing table, then customize. Faster than building from zero.
Iterate visually, commit in code
Every inspector tweak is a real file edit. Review diffs and commit when you like what you see.
Pair with the agent
Selection context gives the agent a head start. “Fix this” with an element selected beats “fix the hero section”.
Use typed components
TypeScript props light up better in the inspector. Use
interface or type declarations on every component.Troubleshooting
Click does not jump to source
Click does not jump to source
The dev server may not have injected OIDs yet. Hard-refresh the preview. If it persists, restart the dev container; the OID plugin picks up on Vite’s next boot.
Inspector shows stale classes
Inspector shows stale classes
Wait for the HMR patch to land. If the file was just edited and the inspector shows old values, click the element again to re-query the DOM.
Insert palette is empty
Insert palette is empty
The palette indexes from your framework and from
.tesslate/components.json. Make sure your project runtime is supported or the custom catalog file exists.Related
Live Preview
The iframe the overlay runs on top of.
Code Editor
Monaco’s end of the click-to-source jump.
Architecture Panel
Canvas-level structure; Design Engineer handles the rendered output.
Using Agents
Pair selections with chat for visual-first development.