Waulter legal documents — every integration pattern

One page markup, one agreement id, and the visitor gets the document in the right language for the page they are on. Each demo below isolates one integration pattern, so nothing on the page can be doing the work for it. Start with #1 — it is the pattern already deployed on customer sites, running unchanged.

PATTERN 1

Legacy appendDocument()

The existing GTM snippet, verbatim and unmodified. Proves no deployed integration has to change to gain scenario resolution.

PATTERN 2

The data-waulter-document attribute

One attribute, no script. Includes an element injected after load, to show the observer picks up late DOM.

PATTERN 3

Custom JS on the result

Reading the four provenance attributes from your own listener, plus the two dataLayer events GTM can trigger on.

PATTERN 4

One scenario, two document types

Cookie policy and privacy policy resolved side by side through the same scenario. Why a second scenario is not needed.

PATTERN 5

GCM v2 default consents

What consent state fires before the visitor touches the banner — captured at the top of <head>, before GTM, because the default fires once and early.

How to read the provenance panel

Every demo shows a panel above the document. It reports only what the SDK wrote — it never infers. resolved from is the field that matters:

scenarioThe scenario was evaluated and chose this document. Resolution happened.
requestedNo resolution was attempted — you got exactly what you asked for.
fallbackResolution was attempted and failed. You got the declared document rather than nothing.
(nothing yet)The SDK has not filled this element. Not the same as a failure — check state.

Reference

Full written documentation — implementation, the API contract, all three integration patterns, fail-open behaviour and known limitations: multilang-documents.md

Environment. Scenario resolution requires the multi-language backend, which is deployed to stage only. If every panel reads resolved from: requested or (nothing yet), the SDK build serving this page is talking to production, or is a build that does not send the scenario id and page url. That is a deployment fact, not a fault in these pages — and the panel is deliberately built so you can tell the difference.
Multi-language resolution cannot work on localhost. Resolution is bound to the configuration that owns the page's host, and a localhost href owns no configuration, so it fails closed to fallback. This is correct behaviour: substituting a different host would resolve against a configuration the page does not belong to. These pages must be opened on demo-3.consentizer.cz to demonstrate switching.