<feed xmlns='http://www.w3.org/2005/Atom'>
<title>doot.git/go.mod, 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-02-06T01:35:01+00:00</updated>
<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>Add Agent Context API for external agent integration</title>
<updated>2026-01-29T08:19:28+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-29T08:19:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=05b1930e04ac222d73ffb2f45c1b1febb69f893d'/>
<id>urn:sha1:05b1930e04ac222d73ffb2f45c1b1febb69f893d</id>
<content type='text'>
Phase 1: Authentication and read-only context
- POST /agent/auth/request - request access with name + agent_id
- GET /agent/auth/poll - poll for approval status
- POST /agent/auth/approve|deny - user approval (browser auth required)
- GET /agent/context - 7-day timeline context (agent session required)

Phase 1.5: Browser-only agent endpoints (HTML pages)
- GET /agent/web/request - request page with token
- GET /agent/web/status - status page with polling
- GET /agent/web/context - context page with timeline data

WebSocket notifications:
- GET /ws/notifications - push agent requests to browsers
- Approval modal with trust indicators and countdown timer

Database:
- agents table for registered agent tracking
- agent_sessions table for pending/active sessions

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>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>Add sqlmock dependency for auth unit tests</title>
<updated>2026-01-21T01:35:24+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-21T01:35:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=31b7d10ff0df0dba469c67d532aabbc29cceb5f0'/>
<id>urn:sha1:31b7d10ff0df0dba469c67d532aabbc29cceb5f0</id>
<content type='text'>
Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add session-based authentication</title>
<updated>2026-01-20T21:34:33+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-20T21:34:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=08bbcf18b1207153983261652b4a43a9b36f386c'/>
<id>urn:sha1:08bbcf18b1207153983261652b4a43a9b36f386c</id>
<content type='text'>
Implement secure authentication using scs session manager with SQLite
backing store and bcrypt password hashing.

- Add users and sessions tables (migration 004)
- Create internal/auth package with Service, Middleware, and Handlers
- Protect all routes except /login, /logout, /static/*
- Add login page template and logout button to dashboard
- Default credentials: admin/changeme (configurable via env vars)

Co-Authored-By: Claude Opus 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Remove AI agent middleware and snapshot endpoint</title>
<updated>2026-01-12T23:43:07+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-12T23:43:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=1d47891d0097c10920ab5706b54c847024ec8f29'/>
<id>urn:sha1:1d47891d0097c10920ab5706b54c847024ec8f29</id>
<content type='text'>
Simplified the dashboard by removing the AI agent access layer:
- Deleted internal/middleware/ai_auth.go and tests
- Removed AIAgentAPIKey from config.Config
- Removed /api/claude/snapshot endpoint registration
- Updated SESSION_STATE.md and CLAUDE.md documentation
- All tests passing after cleanup

Dashboard is now human-facing only without the AI agent endpoint.

Co-Authored-By: Claude Sonnet 4.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Initial commit: Personal Consolidation Dashboard (Phase 1 Complete)</title>
<updated>2026-01-12T19:27:16+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-01-12T19:27:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=9fe0998436488537a8a2e8ffeefb0c4424b41c60'/>
<id>urn:sha1:9fe0998436488537a8a2e8ffeefb0c4424b41c60</id>
<content type='text'>
Implemented a unified web dashboard aggregating tasks, notes, and meal planning:

Core Features:
- Trello integration (PRIMARY feature - boards, cards, lists)
- Todoist integration (tasks and projects)
- Obsidian integration (20 most recent notes)
- PlanToEat integration (optional - 7-day meal planning)
- Mobile-responsive web UI with auto-refresh (5 min)
- SQLite caching with 5-minute TTL
- AI agent endpoint with Bearer token authentication

Technical Implementation:
- Go 1.21+ backend with chi router
- Interface-based API client design for testability
- Parallel data fetching with goroutines
- Graceful degradation (partial data on API failures)
- .env file loading with godotenv
- Comprehensive test coverage (9/9 tests passing)

Bug Fixes:
- Fixed .env file not being loaded at startup
- Fixed nil pointer dereference with optional API clients (typed nil interface gotcha)

Documentation:
- START_HERE.md - Quick 5-minute setup guide
- QUICKSTART.md - Fast track setup
- SETUP_GUIDE.md - Detailed step-by-step instructions
- PROJECT_SUMMARY.md - Complete project overview
- CLAUDE.md - Guide for Claude Code instances
- AI_AGENT_ACCESS.md - AI agent design document
- AI_AGENT_SETUP.md - Claude.ai integration guide
- TRELLO_AUTH_UPDATE.md - New Power-Up auth process

Statistics:
- Binary: 17MB
- Code: 2,667 lines
- Tests: 5 unit + 4 acceptance tests (all passing)
- Dependencies: chi, sqlite3, godotenv

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