Skip to main content
An answer is one to three components from a closed catalog of 13. The agent picks the components and fills their fields; it cannot invent a fourteenth, cannot emit HTML, and cannot write a URL. Every component is validated against its schema on the server before a single byte reaches the visitor, and a component that fails validation is dropped while the rest of the answer still arrives.

The 17 components

Rules that apply to every component

  • Text fields carry no HTML, no URLs and no markdown. The only exception is the body of info, which allows markdown formatting but still refuses HTML, raw URLs and inline links.
  • References are ids, never addresses. assetId names an image in your registry, actionId names one of the actions you declared on the page, linkId names one of your approved links. Ids are lowercase with single hyphens or underscores, a shape a URL cannot match. The server swaps each id for the real value after validation.
  • Icons come from a fixed vocabulary of generic names (shield, clock, truck, message-circle, …). They are interface vocabulary, not your data, so they are a closed list.
  • At most one instance of each component per answer.

Props, component by component

heading

media

Landscape assets only. A portrait one belongs in mediaCard, where it fits without stretching.

mediaCard

timeline

accordion

Rows of one theme, hidden until the visitor clicks, so the accordion carries secondary detail only. Content that answers the actual question goes to grid, timeline, metrics, faq or info; visitor-phrased questions belong in faq.

cta

metrics

Only figures that appear literally in your material. Third-party numbers belong in stats, where they carry a source.

grid

faq

stats

Both the number and its attribution must exist in the material. An attribution is never dropped or altered.

leadForm

The agent chooses which form to show; you own its fields and where a submission goes. A form submits internally (stored and emailed to you) or externally (posted to your own API), and only an external form may include a password — wondeya never stores one.

features

chips

logos

plans

info

How the catalog is enforced

The same schema contract is enforced by the server before anything streams and mirrored by the client’s renderer registry. That registry is closed: a component type it does not recognise is never guessed at (the visitor sees a short note asking them to refresh the page instead), and a component whose image fails to load degrades to a neutral placeholder instead of a broken box. Because the catalog is closed and its text fields refuse markup, the worst outcome of a malicious instruction hidden inside uploaded knowledge is a component that fails validation and disappears, not markup on your visitor’s screen.