<feed xmlns='http://www.w3.org/2005/Atom'>
<title>doot.git/internal/config, branch main</title>
<subtitle>doot — personal productivity web app
</subtitle>
<id>https://git.terst.org/doot.git/atom?h=main</id>
<link rel='self' href='https://git.terst.org/doot.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/'/>
<updated>2026-03-25T04:03:13+00:00</updated>
<entry>
<title>feat: gate Claudomator UI behind Doot session auth via reverse proxy</title>
<updated>2026-03-25T04:03:13+00:00</updated>
<author>
<name>Doot Agent</name>
<email>agent@doot.terst.org</email>
</author>
<published>2026-03-25T04:03:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=2db5020047640361066510f29f908ca9fd1c99aa'/>
<id>urn:sha1:2db5020047640361066510f29f908ca9fd1c99aa</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add passkey (WebAuthn) authentication support</title>
<updated>2026-02-06T01:35:01+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-02-06T01:35:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=0a1001eb0bd2d1f7c0624ae1ef8ae7ccdb3447d4'/>
<id>urn:sha1:0a1001eb0bd2d1f7c0624ae1ef8ae7ccdb3447d4</id>
<content type='text'>
Enable passwordless login via passkeys as an alternative to password auth.
Users register passkeys from Settings; the login page offers both options.
WebAuthn is optional — only active when WEBAUTHN_RP_ID and WEBAUTHN_ORIGIN
env vars are set.

Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Improve session handling, shopping UI, and cleanup</title>
<updated>2026-02-05T20:43:19+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-02-05T20:43:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=1eab4d59454fa5999675d51b99e77ac6580aba95'/>
<id>urn:sha1:1eab4d59454fa5999675d51b99e77ac6580aba95</id>
<content type='text'>
Session improvements:
- Extend session lifetime to 7 days for mobile convenience
- Add idle timeout to extend session on activity
- Use standard cookie name for better compatibility

Shopping model:
- Add FlattenItemsForStore helper for extracting store items
- Add StoreNames helper for store list
- Improve shopping-tab.html with inline add forms

Frontend:
- Add WebSocket reconnection and agent approval UI to app.js
- Simplify timeline calendar JS (move event positioning to CSS)
- Update login page styling

Deployment:
- Remove unused git checkout step from deploy.sh
- Update apache.conf WebSocket proxy settings

Documentation:
- Add Agent Context API feature spec to issues/

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add comprehensive test coverage across packages</title>
<updated>2026-02-04T01:16:35+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-02-04T01:16:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=25a5b7ecf9ddd31da54e91f87988b77aea857571'/>
<id>urn:sha1:25a5b7ecf9ddd31da54e91f87988b77aea857571</id>
<content type='text'>
New test files:
- api/http_test.go: HTTP client and error handling tests
- config/config_test.go: Configuration loading and validation tests
- middleware/security_test.go: Security middleware tests
- models/atom_test.go: Atom model and conversion tests

Expanded test coverage:
- api/todoist_test.go: Todoist API client tests
- api/trello_test.go: Trello API client tests
- auth/auth_test.go: Authentication and CSRF tests
- handlers/timeline_logic_test.go: Timeline building logic tests
- store/sqlite_test.go: SQLite store operations tests

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add Google Tasks integration (#43)</title>
<updated>2026-01-27T06:55:50+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-27T06:55:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=a3156a2f399ea03c645ee23b0099d9d722ce7e1e'/>
<id>urn:sha1:a3156a2f399ea03c645ee23b0099d9d722ce7e1e</id>
<content type='text'>
- New GoogleTasksClient for fetching and managing Google Tasks
- Tasks appear in Timeline view with yellow indicator dot
- Tap checkbox to complete/uncomplete tasks via Google API
- Shares credentials file with Google Calendar (GOOGLE_CREDENTIALS_FILE)
- Configure task list via GOOGLE_TASKS_LIST_ID env var (default: @default)
- Supports comma-separated list IDs for multiple lists

New files:
- internal/api/google_tasks.go - Google Tasks API client

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