General tags
The remaining output tags: dates, currency, links, page SEO fields, component inclusion and
forms. Tier-2 tag attributes must always be quoted (either quote form) — an unquoted
key=value on a Tier-2 tag is dropped, because by request time the variable maps are
long gone. To feed a variable into a Tier-2 tag, let Tier 1 resolve it inside the quotes,
as the currency example below does.
{{date}} — per request, never a stale cached year
<p>Bare (ISO 8601): <strong>{{date}}</strong></p>Bare (ISO 8601): 2026-08-23T08:22:25+00:00
With no attributes the format defaults to ISO 8601 (PHP c).
<p>Formatted: <strong>{{date format="l, F j Y"}}</strong></p>Formatted: Sunday, August 23 2026
format= takes any PHP date() format string.
<p>Relative: 30 days from now is <strong>{{date offset="+30 days" format="F d, Y"}}</strong></p>Relative: 30 days from now is September 22, 2026
offset= takes a PHP strtotime() expression ("+30 days", "next monday", "-1 week"). An unparseable offset renders empty with a warning.
{{currency}} — geo-driven symbol + locale formatting
<p>Literal value: <strong>{{currency value="8.00"}}</strong></p>Literal value: $8
Formats per the visitor's geo currency: "$8" (US style, whole numbers lose the decimals) or "8,00€" (EU style, comma decimals, symbol suffix). No geo → USD fallback.
<p>From a variable: <strong>{{currency value="{{var.offer_price}}"}}</strong></p>From a variable: $29
The nested Tier-1 tag resolves at publish, so Tier 2 sees a plain quoted literal — this is the canonical way to feed a variable into any Tier-2 attribute.
Links
<a class="demo-btn demo-btn--ghost" href='{{page_url path="/media"}}'>Internal link to /media</a>{{page_url}} is prefix-aware: if this SITE lived at /keto instead of /, the same tag would render /keto/media. path="/" is the SITE root.
<p>The platform CTA resolves to: <strong>"{{redirect_link}}"</strong></p>The platform CTA resolves to: ""
Takes no attributes. Filled per request from the inbound ?ref= query param that trackers append: visiting this page with ?ref=trcklink.com renders it as https://trcklink.com/click. The value is sanitized to a bare host (invalid/absent → empty string, never raw input) — with no ?ref= the quotes above are empty. Try adding ?ref=trcklink.com to the URL.
<a href='{{outbound_link url="{{global.privacy_url}}"}}'>Outbound link to the privacy policy</a>A direct outbound link with no platform redirect. The nested global resolves at publish; note the quoted attribute.
Page SEO fields — {{page.*}}
<p>meta_title: <strong>{{page.meta_title}}</strong></p>
<p>meta_description: <strong>{{page.meta_description}}</strong></p>meta_title: General tags — NY Health Labs
meta_description: date, currency, page_url, redirect_link, outbound_link, page.*, component inclusion and forms.
The layout uses these in <head>; they render this page's own SEO fields (which may themselves contain variables — the title here resolves {{global.brand_name}}).
Component inclusion — all four forms
{{component.demo-cta}}Bare inclusion: every variable falls back through the precedence chain to the schema defaults ("Limited time" / "Claim offer" / "No credit card required.").
{{component.demo-cta kicker="Inline arg" label="Inline args seed this usage"}}Inline args are the top of the precedence chain and also seed the SITE component-variable defaults on first push.
{{component.demo-cta instance="top"}}A named instance gets its own independent variable set in the SITE panel — these values are the seeded "top" rows.
{{component.demo-cta instance="bottom" subtitle="Inline seed on a named instance"}}Named instance + inline arg: the inline subtitle beats the "bottom" panel row; kicker/label still come from the panel.
Forms
<p>The capture endpoint URL: <strong>{{form name="demo-lead"}}</strong></p>The capture endpoint URL: /api/form/demo-lead
Resolves to /api/form/{slug} — point a form's action at it.
Inside a component body, {{form}} (like every page-context tag) is banned — the endpoint rides in through a self variable whose schema default is {{form name="demo-lead"}}, resolved once in page context at expansion time. The demo-form-card body:
<!-- component: demo-form-card -->
<div class="demo-form-card">
<p class="demo-form-card__title">{{self.title}}</p>
<form action='{{self.form_endpoint}}' method="post">
<input type="email" name="email" placeholder="you@example.com" required>
<button type="submit" class="demo-btn">{{self.button_label}}</button>
</form>
</div>{{component.demo-form-card title="Live form wired via self.form_endpoint"}}Live form wired via self.form_endpoint
The related unquoted-ref shorthand {{form name=self.varname}} (unquoted = Tier-1 variable reference) resolves the slug from a component variable the same way. It is a Tier-1-only affordance — Tier-2 tags never accept unquoted refs.
Coming in Phase 2
Two tags exist in the spec but are not implemented yet — shown escaped only:
{{countdown to="2026-12-31"}}Server-side countdown: PHP injects the target timestamp, JS renders the clock. Until then, the Vue-powered demo-countdown component below is the available alternative.
{{random}}
<h2>Headline variant A</h2>
{{or}}
<h2>Headline variant B</h2>
{{/random}}Server-side random variant selection.
Promo ends in