Skip to content
Miss Blue
Templates

Write it once.
It still sounds like you.

Save the message you have typed from memory a hundred times. Each person gets their own name, their own time, their own details — and you see exactly what it says before it goes.

Merge variables, done carefully

The bit everyone
gets wrong once.

Every business that sends templated messages has one story about the day four hundred people got “Hi {{first_name}}”. The fix is not being careful. It is a preview that counts how many people have an empty field before you press send.

Liquid Fallbacks Live preview
Miss Blue / TemplatesPreview
Appointment reminder

What it will actually say.

Rendered by the same code that sends it.

Template
Hi {{ contact.name | default: "there" }}, see you at {{ appointment.time }}.Hi Dana, see you at 10:00 AM. contact.name is empty for 38 of 412 — add a fallback
What a template has to do

Four things, and the last one is the hard one.

Saving text is easy. Knowing what it will say for four hundred different people is the part worth building.

01

Liquid, not a bespoke syntax

The same tags as Shopify, Mailchimp and Jekyll. {% if %}, | upcase and | default: all mean what you already expect them to mean.

02

A preview that cannot lie

Rendered by the same code that sends it. A preview with its own copy of the rules eventually disagrees with what goes out, and the first you hear of it is a customer reading the disagreement.

03

A missing value never prints itself

“Hi ,” is bad. “Hi {{contact.name}},” is worse — it does not look like a missing field, it looks like a company that cannot operate its own software, and it goes to everybody at once.

04

Editing one cannot rewrite the past

Picking a template into a message copies the text. Change the template next month and nothing you already queued or sent changes with it.

Frequently asked questions

What teams ask about templates.

What happens if somebody has no first name?+

The variable renders as nothing, never as its own source text — and the composer tells you how many people that affects before you send, with one click to add a fallback. Write {{ contact.name | default: "there" }} and those people get “Hi there”.

What syntax is it?+

Liquid — the same as Shopify, Mailchimp and Jekyll. Conditionals, filters and defaults all work as you would expect, so most of what you already know transfers.

Is the preview accurate?+

It calls the same function the sender calls, with the same data. That is deliberate: a preview rendered by a second implementation of the rules eventually disagrees with what actually goes out, and the first anybody hears about it is a customer reading the disagreement.

If I edit a template, does it change messages I already sent?+

No. Picking a template into a message copies the text. Editing or deleting the template afterwards leaves everything already written from it exactly as it was — including anything queued.

What if I write a template that does not work?+

It is refused when you save it, with the problem in one line, by the person who wrote it. The send path has no good option for broken syntax: printing the raw text to a customer is worse than not sending at all.

Can I use templates from the API?+

Yes — create, update, list and preview are all in the REST API, and every message body the API accepts takes the same Liquid.

No more retyping

The message you send
every single day.