Certificates of completion

Enablement runs this at the end of a training cohort. You have a list of people who finished, and you need one certificate image each. Names have to be spelled right. Course, date, and the signature block stay the same for the cohort.

This is end-of-cohort work. The list is usually late. Someone will still find a typo the morning you generate the set. The names have to be proofread as text before anything is printed.

The job is one export per recipient. Each run reads that person’s data file and writes one PNG at the certificate’s print size. Thirty people means thirty runs over the same component. Delivering the files is outside this. The deliverable here is the image.

Give Lerret a React component under .lerret/ and optional data. export writes a PNG. Same component, data swapped, many images. There is no batch product, no queue, no orchestrator.

The component is .lerret/ops/certificate.jsx. It lays out the recipient name, the course, the date, and a signature block. Those are the fields the artboard knows. You don’t rebuild the certificate for each person. You change the data and re-run. The signature block is part of the component.

Data is one file per recipient, one export run each. That’s bulk pattern 1: re-run export with a different --data file. Same component, new values, new image. Someone can proofread the names as text before you generate anything. A typo is a one-line edit and another run, not a pass over a design file looking for the wrong glyph. The loop is your shell. Export does one file per run.

The image is a PNG at print resolution for the certificate size in use. The size is the one your print path already expects. Lerret writes the image. It doesn’t print it and it doesn’t send it.

You use Lerret because thirty certificates come with thirty correctly spelled names, each from a file someone can proofread as text. That’s the bound: an image per run, not a list iterator. If you need thirty files, you run the command thirty times. Duplicating a design file thirty times, or screenshotting a filled-in HTML page, is the thing this replaces.

npx @lerret/cli@latest export --data

Pass one recipient file per run. Start a project with npx create-lerret@latest. More in the use cases index.