A personalized welcome image is the first branded pixels after signup. jsontoimg renders it when your app hears the user create event — name and plan on named layers — and you drop the PNG into email or the empty dashboard.
Keep it a still
This is not a video onboarding. A 1200×630 JPG with the first name readable at 600px display width is enough. Countdown layers and live usage stats belong in a later email, rendered at send time so the numbers are not stale.
Handle the data you will actually get
Signup data is dirty in predictable ways. first_name is empty, or it is an email address, or it is 40 characters of company name. Decide the fallback in your code before the POST, not in the template: if the name is missing or looks like an address, render the generic plate instead. A card that says “Welcome, ” with nothing after it is worse than no card.
For the names that are real but long, turn on auto-fit on the layer so the text scales down rather than spilling past the frame. Give every copy layer a sensible default in the editor too, so a field you forget to send renders as something deliberate instead of a gap.
Where the file lives and how it reaches the inbox
Render once on the signup event, store the file, and reference a stable URL. The first email is the only consumer, and re-rendering it on every open buys nothing. Assume the image is blocked: most clients hide images until the reader allows them, so the width, height, and alt attributes are doing the real work in the markup.
Send JPEG. Email client support for WebP is still well short of universal, and Gmail re-fetches everything through its own image proxy, so the reader is not the one hitting your URL. The email hero guide covers the client-safety constraints in full, and getting started has the first render.
Related
- Email heroes
- Tickets
- Email hero images at scale
- How JSON-to-image conversion works
- Image automation API guide
FAQ
When should the welcome image render?
On the signup event. POST /api/v1/render?wait=30 and inline the asset in the first email. Do not batch a day’s signups unless the email is a nightly digest.
Personalization fields?
first_name, plan, and optionally a referral code. Long company names need auto-fit on the layer. Do not promise a live company-logo fetch unless you already host that file.
Day-7 milestone image?
Same template family, different copy layers, triggered from your billing or analytics webhook — not a jsontoimg cron.