Skip to content

Transactional emails that look right and land

Make every email your app sends consistent, readable in any client, and easy to reply to.

  • Free, no sign-up
  • 1 to 2 hours with an agent
  • By Devvrat Hans
  • Version 1.0, updated Oct 26, 2026

1Your site and stack

Optional. The prompt adapts as you type; leave a field blank and the agent works it out.

2Copy it into your agent

transactional-emails.md62 lines, about 865 tokens

Paste into any coding agent: Claude Code, Cursor, Codex, Copilot, Windsurf or Cline.

# Transactional emails that look right and land

The welcome, verification, receipt and reset emails are often the first thing a new user of the production site sees after signing up. Review every email the app sends and make them consistent, readable in Gmail, Outlook and Apple Mail (light and dark), and safe from common template bugs.

Site: not given. Find the production URL in the project config, or ask me.

## Ground rules

1. Read before you write. Explore the parts of the codebase this job touches and tell me what is already in place.
2. Plan, then stop. Give me a numbered plan: what you will change, in which files, and why. Wait for my approval before editing anything.
3. Fix things at their source (the shared layout, the config, the generator), not with one-off patches page by page.
4. Keep the project's conventions: its framework APIs, file layout, naming and code style. Add no new dependency without asking.
5. Where something is already done well, say so and leave it alone.

## You will not

- Edit `.env` files, secrets or API keys, or print their values.
- Deploy, push, merge or publish anything.
- Delete data, or run migrations or scripts against a production database.
- Add tracking, third-party scripts or links to any site I did not ask for.
- Change copy, design or behaviour that this job does not need.
- Send emails to real users.
- Change what triggers an email without asking.

## Your stack

- Framework: Work out the framework, router and build output from the project files (package.json, lockfiles, framework config) before planning, and say which you found.
- Host: Work out where the site is hosted from the config files (vercel.json, netlify.toml, wrangler config, Dockerfile, fly.toml) and say which you found.

## Steps

### 1. Inventory

List every email the app sends, what triggers it, the template file and the sending code. Note duplicates, emails with no plain-text part, and emails built by string concatenation.

### 2. One template system

Move emails to one shared layout (the project's email library if it has one, such as React Email, MJML or the framework's mailer views): header, body, one clear button, footer with the company name and address where the law asks for it. Escape every value that comes from users (names, product names) so it cannot inject markup.

### 3. Readable everywhere

Use table-based or library-generated HTML that survives Outlook, inline styles, a max width near 600px, readable font sizes, and colors that work in dark mode (avoid pure black text on transparent backgrounds and logos that disappear on dark). Always include a plain-text part.

### 4. Senders and links

From addresses on the site's domain with a recognizable name, a Reply-To that reaches a person, absolute HTTPS links, and subject lines that say what the email is. Add a way to preview each template locally with sample data.

## Done means

- [ ] Every email the app sends is listed with its trigger and template.
- [ ] All emails share one layout, escape user values and include a plain-text part.
- [ ] Templates render well in light and dark mode at mobile width.
- [ ] From and Reply-To addresses are on the domain, and every template can be previewed locally.

## Report back

When you finish, give me:

- what you changed, file by file;
- anything you skipped, and why;
- anything I must do by hand (DNS records, dashboards, accounts, deploys);
- how to check each change on the live site.

One-line version

For agents that can read a URL. It fetches this prompt with your settings applied.

Read https://abacklaunch.com/prompts/transactional-emails.md and follow it for this project.

3Check the result

When the changes are live, run these free checks. Add your site URL above and each one opens already running on it.

This prompt will not

  • Edit .env files, secrets or API keys, or print their values.
  • Deploy, push, merge or publish anything.
  • Delete data, or run migrations or scripts against a production database.
  • Add tracking, third-party scripts or links to any site I did not ask for.
  • Change copy, design or behaviour that this job does not need.
  • Send emails to real users.
  • Change what triggers an email without asking.

It reads your code first, shows you a plan, and waits for your approval before it changes anything.

What you get

  • An inventory of every email your app sends
  • One shared, escaped, dark-mode-safe template
  • Local previews for every email

How to use this prompt

  1. 1

    Describe your stack

    Add your site, framework and host. The prompt adapts; blank fields are left for the agent to work out.

  2. 2

    Paste it into your agent

    Open your project in Claude Code, Cursor, Codex, Copilot, Windsurf or Cline, and paste the prompt or the one-line version.

  3. 3

    Approve the plan

    The agent reads your code, shows you a plan with the files it will touch, and waits. Change anything you disagree with.

  4. 4

    Check the result

    When the changes are live, run the free checks below on your site to confirm each fix.

What the agent does

The welcome, verification, receipt and reset emails are often the first thing a new user of the production site sees after signing up. Review every email the app sends and make them consistent, readable in Gmail, Outlook and Apple Mail (light and dark), and safe from common template bugs.

  1. 1. Inventory

    List every email the app sends, what triggers it, the template file and the sending code. Note duplicates, emails with no plain-text part, and emails built by string concatenation.

  2. 2. One template system

    Move emails to one shared layout (the project's email library if it has one, such as React Email, MJML or the framework's mailer views): header, body, one clear button, footer with the company name and address where the law asks for it. Escape every value that comes from users (names, product names) so it cannot inject markup.

  3. 3. Readable everywhere

    Use table-based or library-generated HTML that survives Outlook, inline styles, a max width near 600px, readable font sizes, and colors that work in dark mode (avoid pure black text on transparent backgrounds and logos that disappear on dark). Always include a plain-text part.

  4. 4. Senders and links

    From addresses on the site's domain with a recognizable name, a Reply-To that reaches a person, absolute HTTPS links, and subject lines that say what the email is. Add a way to preview each template locally with sample data.

Done means

  • Every email the app sends is listed with its trigger and template.
  • All emails share one layout, escape user values and include a plain-text part.
  • Templates render well in light and dark mode at mobile width.
  • From and Reply-To addresses are on the domain, and every template can be previewed locally.

Questions

Why does Outlook break my email?

Outlook on Windows renders email with an old engine that ignores much modern CSS. Table layouts and inline styles, or a library that generates them, are the reliable fix.

Do I need a plain-text version?

Yes. Some clients and many spam filters prefer it, and it is what screen readers and watches often show.

Why escape user values in emails?

A user can name their product or profile with HTML. Unescaped, that markup lands in emails other people receive.

Does this prompt add links to Aback Launch to my site?

No. Nothing in the prompt mentions Aback Launch or asks your agent to link to us. The only exception is an optional badge step, which stays off unless you tick it. Some prompt libraries slip their own link into your codebase by default; we think that should always be your choice.

Which coding agents does it work with?

Claude Code, Cursor, Codex, GitHub Copilot, Windsurf, Cline, and any agent that can read your project and edit files. You can copy it as a plain prompt, save it as a Claude Code skill or a Cursor rule, or add it to AGENTS.md.

Is it safe to run on my real codebase?

The prompt makes the agent read first, show a plan and wait for your approval, and it forbids touching secrets, deploying and deleting data. Still review the changes and run your tests before you deploy, as with any change.

Changelog

  • v1.0First version.

Launch your startup on Aback Launch

Get a launch page that search engines and AI assistants can read, a place in the weekly launch list, and a review by a real person. Free to join.