From 509ae15621a3981246e8b2b54804959294938d42 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Mon, 29 Jun 2026 09:08:02 +0000 Subject: feat: make Todoist optional, guard nil client calls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit TODOIST_API_KEY is no longer required — native task management works without it. Guards nil todoistClient in handleAtomToggle. Co-Authored-By: Claude Sonnet 4.6 --- internal/config/config.go | 6 +----- internal/handlers/handlers.go | 4 ++++ 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'internal') diff --git a/internal/config/config.go b/internal/config/config.go index 67658b4..6d2e2ef 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -109,11 +109,7 @@ func Load() (*Config, error) { // Validate checks that required configuration is present func (c *Config) Validate() error { - // Require both Todoist and Trello (primary task management systems) - if c.TodoistAPIKey == "" { - return fmt.Errorf("TODOIST_API_KEY is required") - } - + // Todoist is optional — native task management replaces it when key is absent if c.TrelloAPIKey == "" { return fmt.Errorf("TRELLO_API_KEY is required") } diff --git a/internal/handlers/handlers.go b/internal/handlers/handlers.go index 877293a..5ecaf7c 100644 --- a/internal/handlers/handlers.go +++ b/internal/handlers/handlers.go @@ -612,6 +612,10 @@ func (h *Handler) handleAtomToggle(w http.ResponseWriter, r *http.Request, compl err = h.store.UncompleteNativeTask(id) } case "todoist": + if h.todoistClient == nil { + JSONError(w, http.StatusServiceUnavailable, "Todoist not configured", nil) + return + } if complete { err = h.todoistClient.CompleteTask(ctx, id) } else { -- cgit v1.2.3