<feed xmlns='http://www.w3.org/2005/Atom'>
<title>doot.git/internal/handlers/heuristic_test.go, branch master</title>
<subtitle>doot — personal productivity web app
</subtitle>
<id>https://git.terst.org/doot.git/atom?h=master</id>
<link rel='self' href='https://git.terst.org/doot.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/'/>
<updated>2026-01-24T07:37:18+00:00</updated>
<entry>
<title>Refactor: reduce code duplication with shared abstractions</title>
<updated>2026-01-24T07:37:18+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-24T07:37:18+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=465093343ddd398ce5f6377fc9c472d8251c618b'/>
<id>urn:sha1:465093343ddd398ce5f6377fc9c472d8251c618b</id>
<content type='text'>
- Add BaseClient HTTP abstraction (internal/api/http.go) to eliminate
  duplicated HTTP boilerplate across Todoist, Trello, and PlanToEat clients
- Add response helpers (internal/handlers/response.go) for JSON/HTML responses
- Add generic cache wrapper (internal/handlers/cache.go) using Go generics
- Consolidate HandleCompleteAtom/HandleUncompleteAtom into handleAtomToggle
- Merge TabsHandler into Handler, delete tabs.go
- Extract sortTasksByUrgency and filterAndSortTrelloTasks helpers
- Update tests to work with new BaseClient structure

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Fix critical resilience issues from code review</title>
<updated>2026-01-24T01:55:48+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-24T01:55:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=54f091e1b920943967c6aebc9c1f3122ce52e267'/>
<id>urn:sha1:54f091e1b920943967c6aebc9c1f3122ce52e267</id>
<content type='text'>
- DB connection pool: Allow 5 connections instead of 1 for better concurrency
- JSON unmarshal: Add error handling to prevent nil slice issues
- Context cancellation: Check ctx.Done() in aggregateData goroutines
- Migration path: Make configurable via MIGRATION_DIR env var

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add Google Calendar integration</title>
<updated>2026-01-23T01:31:50+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-23T01:28:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=e97a1bc259d3aa91956ec73a522421cdb621ae57'/>
<id>urn:sha1:e97a1bc259d3aa91956ec73a522421cdb621ae57</id>
<content type='text'>
- Add GoogleCalendarClient for fetching upcoming events
- Add GoogleCalendarAPI interface and CalendarEvent model
- Add config for GOOGLE_CREDENTIALS_FILE and GOOGLE_CALENDAR_ID
- Display events in Planning tab with date/time formatting
- Update handlers and tests to support optional calendar client

Config env vars:
- GOOGLE_CREDENTIALS_FILE: Path to service account JSON
- GOOGLE_CALENDAR_ID: Calendar ID (defaults to "primary")

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Refactor: Add cache key constants and configurable template path</title>
<updated>2026-01-19T19:54:42+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-19T19:54:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=a38abc90ee4fe00bf0fbdf897c5ef93e80e0c256'/>
<id>urn:sha1:a38abc90ee4fe00bf0fbdf897c5ef93e80e0c256</id>
<content type='text'>
Code quality improvements:
- Define CacheKey* constants in store package for type safety
- Add TemplateDir to config (default: web/templates, env: TEMPLATE_DIR)
- Update handlers to use store.CacheKey* instead of hardcoded strings
- Update NewTabsHandler to accept templateDir parameter
- Use filepath.Join for cross-platform template path construction

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Implement Trello task heuristics for Tasks tab (Phase 3 Step 6)</title>
<updated>2026-01-19T00:06:26+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-19T00:06:26+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=143166ce759ce2cb0133b7438db36b844a9db1a7'/>
<id>urn:sha1:143166ce759ce2cb0133b7438db36b844a9db1a7</id>
<content type='text'>
Add filtering logic to show Trello cards as actionable tasks when they
have due dates OR are in lists named like "todo", "doing", "in progress",
"tasks", "next", or "today". This makes the Tasks tab more useful by
surfacing cards that represent work items even without explicit due dates.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
