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
- Sign up at resend.com
- Verify your email address
- You get 100 emails/day on the free tier
2. Get API Key
- Go to API Keys in Resend Dashboard
- Click "Create API Key"
- Give it a name (e.g., "LaunchSaaS")
- Add to your
.envfile:
RESEND_API_KEY="re_..."3. Setup Resend Audiences
- Go to Audiences in Resend Dashboard
- Create an audience for newsletter subscriptions
- Copy the Audience ID and add to your
.envfile:
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:
- Create a new provider class in
src/lib/newsletter/providers/implementing theNewsletterProviderinterface - Register in
src/lib/newsletter/factory.ts - Add to the
Featurestype insrc/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.