diff --git a/internal/adapter/templates/templates/components/service/cmd/server/main.go.tmpl b/internal/adapter/templates/templates/components/service/cmd/server/main.go.tmpl index 1ef61c9..1532773 100644 --- a/internal/adapter/templates/templates/components/service/cmd/server/main.go.tmpl +++ b/internal/adapter/templates/templates/components/service/cmd/server/main.go.tmpl @@ -173,9 +173,11 @@ func main() { } logger.Info("email renderer loaded", "templates", len(emailRenderer.Purposes())) - // Create email sender — notify service in production (NOTIFY_URL set), log-only for dev. + // Create email sender — notify service in production (NOTIFY_URL + NOTIFY_API_KEY set), log-only for dev. + // NOTIFY_URL is a global platform credential; NOTIFY_API_KEY is project-scoped and may not be + // provisioned yet. If either is missing, fall back to log-only mode instead of crashing. var emailSender port.EmailSender - if cfg.NotifyURL != "" { + if cfg.NotifyURL != "" && cfg.NotifyAPIKey != "" { notifyClient, err := notify.NewClient(notify.Config{ URL: cfg.NotifyURL, APIKey: cfg.NotifyAPIKey, @@ -189,7 +191,11 @@ func main() { logger.Info("email sender initialized (notify)", "url", cfg.NotifyURL, "host", cfg.NotifyHost) } else { emailSender = emailadapter.NewLogSender(logger) - logger.Info("email sender initialized (log-only dev mode)") + if cfg.NotifyURL != "" { + logger.Warn("email sender in log-only mode (NOTIFY_API_KEY not set)") + } else { + logger.Info("email sender initialized (log-only dev mode)") + } } // Create services (business logic)