<feed xmlns='http://www.w3.org/2005/Atom'>
<title>doot.git/web/templates/index.html, 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-09-20T07:47:48+00:00</updated>
<entry>
<title>Drop Trello as a shopping source, importing the two groups worth keeping</title>
<updated>2026-09-20T07:47:48+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-09-20T07:47:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=c5ab2f9a7f6a0b1e456e13934268d1509504c55a'/>
<id>urn:sha1:c5ab2f9a7f6a0b1e456e13934268d1509504c55a</id>
<content type='text'>
The Trello "Shopping" board had become a dumping ground: of 24 cards, 13 had no
list at all (rendering as "Uncategorized"), and the rest were spread across
Costco, Hardware Store, "Perennial " (trailing space, so a separate store from
"Perennial") and online. Its items were read-only in doot — no rename, no move,
no delete, only hide — and its list names were doubling as an accidental store
registry, which is the only reason stores like Hardware Store existed at all.

Migration 032 imports the two groups asked for, Hardware Store and the unlisted
cards, into user_shopping_items. Costco, Perennial and online cards are left
behind. Nothing is destroyed: the cards remain in Trello, this only stops doot
displaying them. Imported rows become ordinary user items, so they also become
editable, which Trello-sourced items never were.

Trello remains the source for the other eight boards; this is only the Shopping
board feeding the shopping list.

Also updated the quick-action modal's Shopping tab, which posted source=trello
with a Trello list_id. Left alone it would have kept creating cards that no
longer appear anywhere. It now posts source=shopping with a store name, handled
by a new case in HandleUnifiedAdd, and its picker reads from a new
/partials/shopping-stores endpoint. The Trello-lists endpoint it used to call
is deleted along with its route.

Note for the edit feature still to come: stores have no existence independent
of items, so a store with nothing in it cannot be chosen. That was previously
masked by Trello's lists persisting. "Move between stores and sections" needs a
real stores/sections table.

Migration tested against a seeded snapshot of the real board, including the
trailing-space store name, other boards, replay safety and the empty-cache
no-op. Two existing tests asserting Trello check-state in shopping mode were
updated to plantoeat, the only remaining external source.

Co-Authored-By: Claude Opus 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_018AwnALZL6bD4VBtATDVv3B
</content>
</entry>
<entry>
<title>Wire the Tasks tab into nav; fold in buckets/projects/labels and recurrence</title>
<updated>2026-08-07T10:39:28+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-08-07T10:39:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=eadd17df2946a1219fdf02f2ee0a0ac19734e56d'/>
<id>urn:sha1:eadd17df2946a1219fdf02f2ee0a0ac19734e56d</id>
<content type='text'>
The Tasks tab (/tabs/tasks) existed server-side and was tested, but
nothing in the nav linked to it -- it was pure dead weight in the other
direction. Wiring it up as the natural home for everything that was
either misplaced in Settings or missing a web UI entirely:

- Maintenance Buckets, Projects, and Labels moved out of Settings and
  into the Tasks tab (restyled from Settings' opaque slate cards to the
  glass/backdrop-blur look already used by the tab's chain/atom cards --
  they're now embedded in index.html's page shell, not a standalone
  page, so the shared bg-card/bg-input classes from that shell apply).
  Settings keeps only what's actually settings: Passkeys, Trusted
  Agents, Data Sources.
- Added a Recurrence section to the task-detail modal (freq/interval/
  weekday form, posting to a new POST /tasks/recurrence -- the HTMX
  counterpart to the widget API's HandleWidgetTaskRecurrence). Native
  task recurrence previously had zero web UI at all, only reachable via
  the Android widget's RecurrenceEditDialog.

Also fixed a real bug found while touching this code: HandleGetTaskDetail's
source switch only had a case for "trello" -- opening any native ("doot")
task's detail modal, which is most tasks in this tab, showed a blank
title and description. Factored both call sites (initial GET and the
re-render after a recurrence edit) through one loadTaskDetailData helper
and added the missing "doot" case. Also fixed task-detail.html's styling,
which was still using pre-dark-theme classes (text-gray-900 etc.) --
functionally invisible text on the modal's dark background.

Verified with a throwaway local server (real templates + real DB, not
the MockRenderer the unit tests use) seeded with a recurring task,
a bucket, a project, and a label -- confirmed all five touched routes
render 200 with the expected content, including the populated
Buckets/Projects/Labels sections and a real weekly-recurrence form
with the correct weekdays pre-checked. Caught and fixed a copy bug
this way too ("every 2 weeklys" -&gt; "every 2 weeks"). Not committed;
deleted after use.

go build ./..., go vet ./..., and go test ./... all clean.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01EZ7ikw2ukGJFTHE3bJS7zL
</content>
</entry>
<entry>
<title>Rework Tasks tab: Chains section, checklist modal, project visibility</title>
<updated>2026-07-18T00:14:45+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-07-18T00:14:45+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=f08f06bef47aac2c9effb4cec650d99c2deb2dd7'/>
<id>urn:sha1:f08f06bef47aac2c9effb4cec650d99c2deb2dd7</id>
<content type='text'>
The flat Tasks-tab atom list was silently dumping every chain step
(locked and unlocked) and dormant bucket-pool items in as ordinary
undated cards, with no chain/project context and no protection against
completing a locked step out of order.

- CompleteNativeTask now rejects completing a locked chain task
  (ErrChainTaskLocked), mapped to 400 in both the widget and web
  complete-atom handlers.
- Chain tasks and dormant bucket items are excluded from the flat atom
  list; a new "Chains" section shows one card per active/paused chain
  with the current step and N/M progress.
- New chain checklist modal (GET /chains/{id}) lists every position in
  order with pause/resume/abandon -- the web view originally deferred
  as Android-only.
- Fixed a real bug this surfaced: resuming a paused chain only flipped
  the status flag, never unlocking the deferred successor, so a chain
  paused right after a completion stayed stuck forever. SetChainStatus
  now catches up the deferred advancement on resume, idempotently.
- Atom cards gained a project-name chip for general visibility.

Co-Authored-By: Claude Sonnet 5 &lt;noreply@anthropic.com&gt;
Claude-Session: https://claude.ai/code/session_01EZ7ikw2ukGJFTHE3bJS7zL
</content>
</entry>
<entry>
<title>feat: remove Todoist integration entirely</title>
<updated>2026-07-06T00:00:59+00:00</updated>
<author>
<name>Doot Agent</name>
<email>agent@doot.local</email>
</author>
<published>2026-07-06T00:00:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=945c34590677e161a711ccaff0e1077197b1b178'/>
<id>urn:sha1:945c34590677e161a711ccaff0e1077197b1b178</id>
<content type='text'>
Native tasks (native_tasks table) fully replace Todoist. All Todoist
API code, store functions, handlers, routes, templates, and tests have
been removed. Migration 021 drops the now-unused tasks cache table.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>fix: calendar/meals sync, tomorrow flat layout, /health endpoint</title>
<updated>2026-06-29T10:29:12+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-06-29T10:29:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=8c55b9b10fecd45ac5acf3f13fc23d342a4aa53b'/>
<id>urn:sha1:8c55b9b10fecd45ac5acf3f13fc23d342a4aa53b</id>
<content type='text'>
- Calendar: fall back to GOOGLE_CALENDAR_ID config when no source_configs
  synced yet (fixes blank calendar after fresh deploy)
- Meals: call fetchMeals in HandleTimeline so PlanToEat cache refreshes
  on every timeline load, not just during manual refresh
- Tomorrow section: replace calendar-grid with flat chronological list
  matching widget layout (time label | source bar | title)
- Add /health endpoint (no auth required) for deploy health checks

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: add Scout nav button to gateway tab bar</title>
<updated>2026-06-20T03:21:04+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-06-20T03:21:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=9e1b838a67c868cba3b1e148bf4211c23b3dbc00'/>
<id>urn:sha1:9e1b838a67c868cba3b1e148bf4211c23b3dbc00</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: synchronize background image rotation across sessions</title>
<updated>2026-06-03T00:17:02+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-06-03T00:17:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=7133088e8a15007b514d105870ea8b3b9dc69e20'/>
<id>urn:sha1:7133088e8a15007b514d105870ea8b3b9dc69e20</id>
<content type='text'>
Server seeds bg URL from a 5-minute time bucket so all open sessions
show the same image simultaneously. Client-side JS rotates in sync and
prefetches the next image on the same interval.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: complete Agent Context API Phase 2 &amp; 3 (Write/Create/Management)</title>
<updated>2026-03-23T06:50:43+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-23T06:50:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=b0688c8819da1b7fcb4a97b6ec1fa58050e4841e'/>
<id>urn:sha1:b0688c8819da1b7fcb4a97b6ec1fa58050e4841e</id>
<content type='text'>
- Implement write operations (complete, uncomplete, update due date, update task)
- Implement create operations (create task, add shopping item)
- Add Trusted Agents management UI in Settings with revocation support
- Fix SQLite timestamp scanning bug for completed tasks
- Add comprehensive unit tests for all new agent endpoints
- Update worklog and feature documentation
</content>
</entry>
<entry>
<title>fix: restore background image using CSS custom property on body</title>
<updated>2026-03-23T02:42:44+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-23T02:42:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=ef7a45361996b7a49226a0b088e2599f2801d017'/>
<id>urn:sha1:ef7a45361996b7a49226a0b088e2599f2801d017</id>
<content type='text'>
Replace z-index:-1 overlay div (hidden behind body background) with a
CSS custom property --bg-url set inline on body, consumed by .bg-body
as a layered background-image with a dark gradient overlay.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>style: modernize UI with dark glass theme and 40% bg opacity</title>
<updated>2026-03-22T10:05:16+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-22T10:05:16+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/doot.git/commit/?id=11b905fd437d651b2e39745aa82a5dd36f70331e'/>
<id>urn:sha1:11b905fd437d651b2e39745aa82a5dd36f70331e</id>
<content type='text'>
</content>
</entry>
</feed>
