<feed xmlns='http://www.w3.org/2005/Atom'>
<title>doot.git/internal/api/google_calendar.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-07-12T11:12:55+00:00</updated>
<entry>
<title>feat(widget): add recurrence lookup endpoint (GET /api/widget/recurrence)</title>
<updated>2026-07-12T11:12:55+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-07-12T11:12:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=6fdd09bfe030ce91ee188f18c198fd6a57c7b42f'/>
<id>urn:sha1:6fdd09bfe030ce91ee188f18c198fd6a57c7b42f</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat(widget): capture and forward RecurringEventID for calendar events</title>
<updated>2026-07-12T11:06:32+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-07-12T11:06:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=f31b4722243b8b69564c94e47e07678153c31815'/>
<id>urn:sha1:f31b4722243b8b69564c94e47e07678153c31815</id>
<content type='text'>
</content>
</entry>
<entry>
<title>fix: support multiple enabled Google Task lists and Calendars</title>
<updated>2026-03-23T08:59:35+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-23T08:59:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=23c670442392af1c75b935b3296ae2fc4fd094ba'/>
<id>urn:sha1:23c670442392af1c75b935b3296ae2fc4fd094ba</id>
<content type='text'>
- Update Google API interfaces with setters for list/calendar IDs
- Update fetchCalendarEvents and fetchGoogleTasks to use enabled IDs from source_configs
- Update timeline logic tests to reflect interface changes and seed config data
- Ensure dashboard respects user-selected lists from settings
</content>
</entry>
<entry>
<title>Add feature toggles system with settings UI (#74)</title>
<updated>2026-02-01T06:16:12+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-02-01T06:16:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=cbb0b53de1d06918c142171fd084f14f03798bc1'/>
<id>urn:sha1:cbb0b53de1d06918c142171fd084f14f03798bc1</id>
<content type='text'>
- Add feature_toggles table (migration 012)
- Add source_config table for future source selection (migration 013)
- Create settings page at /settings with:
  - Feature toggle management (enable/disable/create/delete)
  - Data source configuration (sync and toggle boards/calendars)
- Add store methods for feature toggles and source config
- Add GetCalendarList and GetTaskLists to Google API clients
- Document feature toggle workflow in DESIGN.md

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Fix calendar timezone handling with configurable display timezone</title>
<updated>2026-01-27T02:44:33+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-27T02:44:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=8de1b5cb8915ed9a6e32566431d05fafafeb338d'/>
<id>urn:sha1:8de1b5cb8915ed9a6e32566431d05fafafeb338d</id>
<content type='text'>
- Add TIMEZONE config option (defaults to Pacific/Honolulu)
- Store display timezone in GoogleCalendarClient
- Convert all event times to configured display timezone
- Parse events in their native timezone then convert for display

This fixes the issue where events were showing 10 hours off
due to server running in UTC while user is in Hawaii.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Fix Google Calendar timezone handling</title>
<updated>2026-01-27T02:37:25+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-27T02:37:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=b4d061cb93d992febb5b70c9d7645afdd3a41890'/>
<id>urn:sha1:b4d061cb93d992febb5b70c9d7645afdd3a41890</id>
<content type='text'>
- Use event's TimeZone field when parsing DateTime
- Handle cases where DateTime has no timezone offset
- Parse in event timezone then convert to local for display

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Fix Google Calendar credential loading</title>
<updated>2026-01-26T23:02:01+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-26T23:02:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=b4b663ccb87cbfe7c2bccdca959038e629d09a31'/>
<id>urn:sha1:b4b663ccb87cbfe7c2bccdca959038e629d09a31</id>
<content type='text'>
Use option.WithCredentialsFile instead of non-existent
option.WithAuthCredentialsFile function.

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Fix all static analysis errors (golangci-lint)</title>
<updated>2026-01-26T06:55:58+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-26T06:55:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=f5b997bfc4c77ef262726d14b30d387eb7acd1c6'/>
<id>urn:sha1:f5b997bfc4c77ef262726d14b30d387eb7acd1c6</id>
<content type='text'>
- Fix errcheck: handle all error return values in production code
- Fix errcheck: handle all error return values in test files
- Fix staticcheck: replace deprecated WithCredentialsFile with WithAuthCredentialsFile
- Remove unused code: authHeaders, planToEatPlannerItem, planToEatResponse
- Use defer func() { _ = x.Close() }() pattern for ignored close errors

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Refactor: extract helpers and clean up hardcoded HTML</title>
<updated>2026-01-26T06:04:03+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-26T06:04:03+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=fa95c71494458070b78270e3d9170076028fc974'/>
<id>urn:sha1:fa95c71494458070b78270e3d9170076028fc974</id>
<content type='text'>
- Extract parseEventTime() and deduplicateEvents() in google_calendar.go
- Add scanTask() and scanTasks() SQL helpers in sqlite.go
- Move completed-atom HTML to partial template
- Add loadTestTemplates() test helper for template-dependent tests

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Fix timezone and date handling bugs #40, #41, #42</title>
<updated>2026-01-26T03:15:23+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-26T03:15:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=4420aace9c0ee1bb3255190234f4a2035619b473'/>
<id>urn:sha1:4420aace9c0ee1bb3255190234f4a2035619b473</id>
<content type='text'>
#40, #41: Fix calendar event timezone handling
- Parse all-day events in local timezone using ParseInLocation
- Convert timed events to local time after parsing RFC3339
- Update ComputeDaySection to normalize both now and item time to local
  before comparison, ensuring consistent today/tomorrow classification

#42: Mobile conditions page now uses 2 columns
- Changed 600px breakpoint from 1 column to 2 columns

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