<iframe> tag. There is no JavaScript to install and no events to listen for. Pick a plugin, point it at a basket, choose a width, and you are done.
The URL
<plugin-name> is one of hero-card, performance, overview, or pill-row. <slug> is the basket’s slug, which is the same value used in app.cesto.co/product/<slug>.
The four plugins
| Plugin | <plugin-name> | Aspect ratio | Min width |
|---|---|---|---|
| Hero card | hero-card | 5 : 4 | 360 px |
| Performance | performance | 15 : 8 | 540 px |
| Overview | overview | 2 : 1 | 480 px |
| Pill row | pill-row | 15 : 2 | 300 px |
Embed snippet
Drop this into any HTML page. Replacehero-card and ai-leaders-portfolio with the plugin and basket slug you want.
app.cesto.co/product/<slug> in a new tab when the user taps Invest.
Finding a basket slug
Every basket onapp.cesto.co has a slug in its URL. Open the basket on the website and copy the last path segment, which is the slug:
ai-leaders-portfolio. You can also discover slugs programmatically through the Cesto API at GET /products.
Sizing
The plugin’s interior uses CSS container queries, so it scales proportionally with whatever pixel width its parent column gives it. The recommended pattern iswidth: 100% plus aspect-ratio, letting the page decide width and letting the aspect ratio decide height.
- Keep
width: 100%whenever possible and let the host column drive the width. The plugin will reflow itself. - Use
loading="lazy"for plugins below the fold so the iframe defers until it scrolls into view. - The plugin host sets
X-Frame-Options: ALLOWALLandframe-ancestors *, so any origin can embed it.
What you can change, and what you cannot
Embedding is intentionally minimal. The only knob the host page controls is size: width, height, or aspect ratio. Everything else (theme, fonts, copy, behavior, the Invest destination) is fixed by the plugin and stays consistent with the rest of the Cesto product. If you need anything beyond a Cesto-styled basket card on your page, that is a different surface and not a plugin.Next
Open the playground
Try every plugin against any live basket, right inside the docs.