Newsletter
Full email newsletter infrastructure built into the editor. Write in the newsletter compose view, send to your subscribers.
Sending
- SendGrid backend (fetch-based, no SDK)
- Batched sending: 1,000 recipients per API call
- Auto image extraction: local images → base64 → R2 upload → email embed
- Tiptap → Markdown → HTML + plaintext conversion
- Juice CSS inlining for email client compatibility
- Table-based layout for Outlook support
- Send as HTML or plaintext
- Resend an issue to subscribers who didn’t open it, with a new subject line (
resend_to_unopened, once per issue)
Email template
Every issue uses one email template. It switches to dark mode automatically in email clients that support it.
Custom domains
Send from your own domain (e.g., updates@yourbrand.com):
- Add your domain in the newsletter settings, or with
setup_custom_domain - Auto-DNS setup for Cloudflare-managed domains
- SendGrid Domain Authentication (CNAME, SPF, DKIM)
- Check verification with
check_domain_status, and send it again withresend_domain_verification
Subscriber management
- Add and list subscribers with pagination
- Import subscribers from a CSV file with
import_subscribers, including exports from Substack, Beehiiv, Mailchimp, and ConvertKit. Unsubscribed rows are skipped - Get a signup form for your site with
get_subscribe_embed - Per-recipient HMAC-signed unsubscribe URLs
- Test email support before sending
Analytics
Via SendGrid Event Webhook:
- Delivered count, open rate, click rate
- Bounce tracking (hard + soft)
- Unsubscribe tracking
- Per-issue aggregation