Personalized-looking campaign images at low volume
Sales or lifecycle runs this for a small named list. You want a hero that greets a company by name and shows its logo. The list is tens of accounts, not thousands. Thirty accounts is small enough that one data file and one run per company is the whole job.
This is per-run, not a mail-merge engine. Export does not iterate a list and it does not send anything. Each image is one export run over one component. The loop is your shell.
The job is one named hero PNG per recipient company. You write one data file per company. You run export once per file. For a list of 30 accounts this is 30 command runs over one component.
Give Lerret a React component under .lerret/ and optional data. export writes a PNG. Same component, data swapped. There is no batch product, no queue, no orchestrator.
The component is .lerret/email/named-hero.jsx. It is a greeting with a company name and a logo slot. One component. The name and the logo come from data. The greeting layout stays put.
The data is one data file per recipient company, one export run each. That is bulk pattern 1: re-run export with a different --data file each time. Same component, new values, new image. --data applies to the run and is never written back into .lerret/.
The image is a PNG at email hero size. One company, one run, one file.
For a list of 30 accounts this is 30 command runs over one component. That is the honest limit. Lerret makes an image per run. It does not walk a list for you. If the list is that small, 30 runs is the whole job.
Point --data at one company’s file, run export, then point it at the next file. Thirty accounts is thirty runs over .lerret/email/named-hero.jsx. --data is never written back into .lerret/. Export does not walk the list and it does not send the email.
npx @lerret/cli@latest export --data
Start a project with npx create-lerret@latest. More in the use cases index.