14 SaaS Product Emails — Sonar / Lifecycle

Free React Email Trial Ending Template

The deadline first, then the work that would be lost, then a real offer to extend. Customize it in the free React Email playground and export production-ready TSX — no sign-up.

Sample subject
3 days left on your Sonar trial
Format
React Email TSX · Free
Trial Ending React Email template preview

Template details

What this trial ending template includes

The deadline first, then the work that would be lost, then a real offer to extend. Customize it in the free React Email playground and export production-ready TSX — no sign-up. The source is standard TypeScript and React Email, so it can be sent with Resend or rendered to HTML for another email provider.

  • Production-ready lifecycle email structure
  • Editable in the visual React Email playground
  • Free TSX source for personal and commercial projects

How to use it

  1. 1. Customize the copy and styles in the playground above.
  2. 2. Export or copy the typed TSX source.
  3. 3. Pass dynamic props and send it from a server route with your email provider.
Follow the Resend and Next.js implementation guide

React Email TSX source

Free for personal, commercial, and client projects under the site license.

View full source code
import * as React from 'react';

import {
  Band,
  BodyText,
  Brand,
  colors,
  CTAButton,
  Display,
  EmailLayout,
  Kicker,
  Lead,
  Note,
  SectionTitle,
  Stat,
  StatRow,
} from './components';

export interface TrialEndingEmailProps {
  brand?: Brand;
  subject?: string;
  preview?: string;
  label?: string;
  kicker?: string;
  headline?: React.ReactNode;
  lead?: React.ReactNode;
  /** What they built during the trial — the reason to keep paying. */
  built?: { title: string; stats: Stat[] };
  terms?: React.ReactNode;
  cta?: { label: string; href: string };
  note?: React.ReactNode;
}

/**
 * Trial ending — leads with the deadline, then shows the work that would be
 * lost. The offer to extend is real, and stated.
 */
export function TrialEndingEmail({
  brand,
  subject = '3 days left on your Sonar trial',
  preview = 'Your trial ends Aug 27 — here’s what you built and what happens next.',
  label = 'Trial · 3 days left',
  kicker = 'Ends Thursday, Aug 27',
  headline = (
    <>
      3 DAYS
      <br />
      LEFT.
    </>
  ),
  lead = 'You’ve done real work in here. Add a card and nothing stops — no re-onboarding, no lost dashboards.',
  built = {
    title: 'What you’ve built so far',
    stats: [
      { value: '1.4M', label: 'events tracked' },
      { value: '11', label: 'dashboards' },
      { value: '6', label: 'teammates' },
    ],
  },
  terms = (
    <>
      On <strong>Aug 27</strong> the workspace switches to read-only. Data is
      kept for 30 days, then deleted. Pro is <strong>$99/mo</strong> for the
      whole team — annual saves two months.
    </>
  ),
  cta = {
    label: 'Keep Sonar running',
    href: 'https://sonar.example.com/billing/upgrade',
  },
  note = 'Need longer to evaluate? Reply with “extend” and we’ll add 14 days, no questions.',
}: TrialEndingEmailProps = {}) {
  return (
    <EmailLayout
      brand={brand}
      subject={subject}
      preview={preview}
      label={label}
      accent="orange"
    >
      <Band tone="orange" padding="52px 32px 46px 32px">
        <Kicker color={colors.ink}>{kicker}</Kicker>
        <Display size={60}>{headline}</Display>
        <Lead>{lead}</Lead>
      </Band>

      <Band padding="38px 32px">
        <SectionTitle size={24}>{built.title}</SectionTitle>
        <StatRow stats={built.stats} />
        <BodyText>{terms}</BodyText>
        <CTAButton href={cta.href}>{cta.label}</CTAButton>
        <Note>{note}</Note>
      </Band>
    </EmailLayout>
  );
}

export default TrialEndingEmail;

Related templates

More from 14 SaaS Product Emails — Sonar.

View the complete bundle