LogoLaunchSaaS

Newsletter

Configure newsletter providers for managing subscriptions

Newsletter

LaunchSaaS supports newsletter subscriptions with an extensible provider architecture. You can easily switch between providers, add custom implementations, or disable newsletter entirely.

Supported Providers

  • Resend - Newsletter management using Resend Audiences
  • Custom - Extend with your own newsletter provider

Configuration

Configure your newsletter provider in src/configuration/features.ts:

export const features: Features = {
  newsletter: {
    provider: "resend", // "resend" | "disabled"
  },
  // ... other features
};

Setup Resend Newsletter

1. Create Resend Account

  1. Sign up at resend.com
  2. Verify your email address
  3. You get 100 emails/day on the free tier

2. Get API Key

  1. Go to API Keys in Resend Dashboard
  2. Click "Create API Key"
  3. Give it a name (e.g., "LaunchSaaS")
  4. Add to your .env file:
RESEND_API_KEY="re_..."

3. Setup Resend Audiences

  1. Go to Audiences in Resend Dashboard
  2. Create an audience for newsletter subscriptions
  3. Copy the Audience ID and add to your .env file:
RESEND_AUDIENCE_NEWSLETTER="audience-id-for-newsletter"

4. Optional: Waitlist Audience

You can also create a separate audience for waitlist subscriptions:

RESEND_AUDIENCE_WAITLIST="audience-id-for-waitlist"

If you are setting up the environment, now you can go back to the Environment Setup guide and continue.

Custom Newsletter Provider

To add a custom newsletter provider:

  1. Create a new provider class in src/lib/newsletter/providers/ implementing the NewsletterProvider interface
  2. Register in src/lib/newsletter/factory.ts
  3. Add to the Features type in src/schemas/site-configuration.ts

Example:

import { NewsletterProvider } from "../provider";

export class CustomNewsletterProvider implements NewsletterProvider {
  async subscribe(
    email: string,
    metadata?: Record<string, unknown>,
  ): Promise<void> {
    // Implement subscription logic
  }

  async unsubscribe(email: string): Promise<void> {
    // Implement unsubscription logic
  }
}

Register in factory:

case "custom":
  return new CustomNewsletterProvider();

Disable Newsletter

To disable newsletter functionality:

export const features: Features = {
  newsletter: {
    provider: "disabled",
  },
};

When disabled, the system uses a no-op provider that logs subscription requests to console instead of processing them.

References

Next Steps