Try the demo
Open the demo → No account, no install, nothing uploaded.
The demo opens on a choice of two starting points, because there are two questions people arrive with: what does a finished report look like, and what is it like starting from nothing.
| Starting point | What it is |
|---|---|
| Client investment review | A finished six-section report: a cover, an adviser summary, KPIs, an area chart, a donut, two data tables, a repeater of recommendations and a signature block. Three sample clients, three brands, and a custom acme.risk-profile block registered by the host. |
| Blank page | Nothing on the canvas and the review's schemas to bind to. Where your own users start. |
Each keeps its own draft in the browser, so you can leave one half-edited and come back to it. Reset restores the one you are looking at.
Nothing is uploaded and no key is needed. The PDF is rendered in your own browser by the WebAssembly engine — there is no server in the loop at all.
To have the same thing running in your own application rather than in ours, the quick start is about twenty lines and every file in it is complete. For a whole application — a designer, a viewer, a .NET back end and server-side rendering, in Angular and in React — the sample application is a repository you can clone.


What to try
| Try this | What it shows |
|---|---|
| Switch to Blank page | An empty document with the same schemas beside it: what your own users see on their first day. |
| Hover a bar, slice or point in Preview | Tooltips and highlighting on the chart. The SVG being pointed at is the one the PDF contains; nothing is drawn twice. See Charts. |
| Switch the brand in the toolbar | One template, three identities. Nothing in the document names a colour or a font. |
| Switch the sample client | Conditional blocks appear and disappear; the "Edge case" client exercises missing data. |
| Click Checks | Two separate answers: whether the template is sound, and what this data does to it. |
| Drag a field from Data onto the page | Scalars become a field block, lists become a table. |
Type {{ inside a text block | The binding autocomplete, over your own schema. |
| Preview → Export | A four-page PDF, rendered in the browser. |
Add ?measure=dom to the URL | Switches the canvas back to measuring with the browser, so you can see the difference between the two measurers. |
The example output
Download the example PDF the demo produces (Meridian Wealth brand, balanced client). Four pages, selectable text, vector charts, a repeated table header on the holdings table.
How the demo is put together
Seven files, and an integration of your own has the same shape. Nothing in the list is demo scaffolding — every one of them is a thing you will write.
| What it is | |
|---|---|
schema.ts | The host's data contract — the DataSource[] the designer is given. |
samples.ts | Three sample clients. Every figure is derived from the holdings, so the report cannot contradict itself. |
template.ts | The investment review template, built with createNode/createSection. |
scenarios.ts | The two starting points. A scenario is schemas, sample data and template together — changing the template without the schemas would leave every binding pointing at a field that no longer exists. |
themes.ts | Three brands. |
risk-profile.ts | A custom block, registered the way yours would be. |
pdf-export.ts | Browser-side PDF export. |

