RESEND_API_KEY unset, the application starts normally and logs a warning instead of sending. This makes local development easier because you can register and verify accounts without a real email provider.
Resend setup
To enable email sending, create a free Resend account at resend.com, then add your API key and sender address to.env:
.env
Email types sent
Shipfastai sends three types of transactional emails automatically:
The
FRONTEND_URL variable controls the base URL used in all email links. Make sure it matches your deployed frontend address in production.
Customizing email templates
Email templates are defined inbackend/app/core/email.py as inline HTML strings inside three methods on the EmailService class:
To customize a template, open
backend/app/core/email.py and edit the html variable inside the corresponding method. The templates are plain HTML strings — you can replace them with any HTML you like, including full branded designs.
For example, to change the verification email subject line:
backend/app/core/email.py
self._send.
Testing locally
You have two options for testing email flows during local development: Option 1: LeaveRESEND_API_KEY empty (recommended)
When RESEND_API_KEY is not set, the EmailService logs the would-be email to the console instead of sending it. You can still test the full registration flow — check the backend logs to see the verification token URL.
re_ key to .env and set FROM_EMAIL to your verified sender.
.env