<feed xmlns='http://www.w3.org/2005/Atom'>
<title>doot.git/internal/api/trello.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-27T02:49:44+00:00</updated>
<entry>
<title>Use configured timezone throughout codebase</title>
<updated>2026-01-27T02:49:44+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-27T02:49:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=42a4e32daca13b518e64e5821080ff3d6adf0e39'/>
<id>urn:sha1:42a4e32daca13b518e64e5821080ff3d6adf0e39</id>
<content type='text'>
- Add config/timezone.go with timezone utilities:
  - SetDisplayTimezone(), GetDisplayTimezone()
  - Now(), Today() - current time/date in display TZ
  - ParseDateInDisplayTZ(), ToDisplayTZ() - parsing helpers

- Initialize timezone at startup in main.go

- Update all datetime logic to use configured timezone:
  - handlers/handlers.go - all time.Now() calls
  - handlers/timeline.go - date parsing
  - handlers/timeline_logic.go - now calculation
  - models/atom.go - ComputeUIFields()
  - models/timeline.go - ComputeDaySection()
  - api/plantoeat.go - meal date parsing
  - api/todoist.go - due date parsing
  - api/trello.go - due date parsing

This ensures all dates/times display correctly regardless
of server timezone setting.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Phase 4: Extract magic numbers to constants</title>
<updated>2026-01-26T18:08:17+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-26T18:08:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=aff60af8ba24c8d5330c706ddf26927d81436d79'/>
<id>urn:sha1:aff60af8ba24c8d5330c706ddf26927d81436d79</id>
<content type='text'>
Create config/constants.go with centralized configuration values:
- Concurrency limits (MaxConcurrentTrelloRequests)
- Timeouts (HTTP, Google Calendar, graceful shutdown, request)
- Meal times (breakfast, lunch, dinner hours)
- Database pool settings (connections, lifetime)
- Session and rate limiting settings

Update all files to use these constants instead of hardcoded values.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Phase 2: Fix data race in GetBoardsWithCards</title>
<updated>2026-01-26T17:02:20+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-26T17:02:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=ff7339acfdf533110f3ab1f902e153df739eed1b'/>
<id>urn:sha1:ff7339acfdf533110f3ab1f902e153df739eed1b</id>
<content type='text'>
Add mutex synchronization for writes to board slice elements
(Cards and Lists fields) from concurrent goroutines.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Fix bugs and add bug management scripts</title>
<updated>2026-01-25T21:56:29+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-25T21:56:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=ec8a9c0ea46dec7d26caa763e3adefcaf3fc7552'/>
<id>urn:sha1:ec8a9c0ea46dec7d26caa763e3adefcaf3fc7552</id>
<content type='text'>
Bug fixes:
- #36: Hide recurring tasks until due day (add IsRecurring to Task/Atom)
- Trello cards missing: change filter=visible to filter=open
- Build fix: add missing fmt import in atom.go

Infrastructure:
- Add scripts/bugs and scripts/resolve-bug for DB bug tracking
- Remove issues/ directory (bugs now tracked in DB)
- Add timeline_logic_test.go

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<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 high priority issues from code review</title>
<updated>2026-01-24T01:59:12+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-24T01:59:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=d11334c0999efb670a8eab93527a50f644fdfceb'/>
<id>urn:sha1:d11334c0999efb670a8eab93527a50f644fdfceb</id>
<content type='text'>
- Default password: Fatal error in production if DEFAULT_PASS not set
- API timeouts: Reduce from 30s to 15s (4 APIs × 15s &lt; 60s global)
- Trello lists: Log warning when list fetch fails instead of silent ignore

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add debug logging for Trello card fetching</title>
<updated>2026-01-23T01:54:25+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-23T01:54:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=c9c17431cdddb64a8d44f77c43281a29270f81c2'/>
<id>urn:sha1:c9c17431cdddb64a8d44f77c43281a29270f81c2</id>
<content type='text'>
Log API responses and errors to diagnose empty boards issue.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Implement efficient sync for Todoist and Trello APIs</title>
<updated>2026-01-20T20:40:29+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-20T20:40:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=6a59098c3096f5ebd3a61ef5268cbd480b0f1519'/>
<id>urn:sha1:6a59098c3096f5ebd3a61ef5268cbd480b0f1519</id>
<content type='text'>
- Add Todoist Sync API v9 support with incremental sync tokens
- Store sync tokens in SQLite for persistence across restarts
- Add field filtering to Trello API calls to reduce payload size
- Update handlers to use incremental sync (merge changes vs full replace)

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Refactor Trello client to use url.Values for query params</title>
<updated>2026-01-19T19:58:10+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-19T19:58:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=bff78e417d2bf41e16eb1e4141bcaaa7d2d566e0'/>
<id>urn:sha1:bff78e417d2bf41e16eb1e4141bcaaa7d2d566e0</id>
<content type='text'>
Replace manual string concatenation with url.Values for cleaner,
safer query parameter construction in GetBoards, GetCards, and getLists.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Fix Trello closed boards bug - filter API and clear stale cache</title>
<updated>2026-01-19T01:47:51+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-19T01:47:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=791034f1b588bf679f45a0f89168515fcbde66d5'/>
<id>urn:sha1:791034f1b588bf679f45a0f89168515fcbde66d5</id>
<content type='text'>
Closed boards were appearing because:
1. API fetched all boards including closed ones
2. Cache used upsert logic that never removed old data

Fixes:
- Add filter=open to GetBoards API call
- Add filter=visible to GetCards API call
- Clear boards/cards tables before inserting fresh data in SaveBoards

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