package auth import ( "context" "log/slog" ) // EmailSender delivers transactional auth emails (verification, reset). // Block A ships LogSender so dev environments work without Twilio/SES. // Block D replaces this with a real SES-backed sender. type EmailSender interface { SendVerification(ctx context.Context, to, name, link string) error SendPasswordReset(ctx context.Context, to, name, link string) error } type LogEmailSender struct { Logger *slog.Logger } func (l LogEmailSender) SendVerification(_ context.Context, to, name, link string) error { l.Logger.Info("auth email (stub): verification", "to", to, "name", name, "link", link, ) return nil } func (l LogEmailSender) SendPasswordReset(_ context.Context, to, name, link string) error { l.Logger.Info("auth email (stub): password reset", "to", to, "name", name, "link", link, ) return nil }