Triage tasks, filter views, read agent status, and handle blocked work.
The dashboard is organized around views, not folders. A task lives once and is shown in every view that matches its status or due date.
Click any task to open the detail pane. There you can change status, area, project, due date, tags, and notes. Your edits are saved in the browser and survive refresh.
Think of it like… an email client where every message has one inbox, but you can also see flagged, sent, scheduled, and archived views. The message does not move; the lens changes.
Views are computed filters over the same state.tasks array. Today and Upcoming also consider due_date so a task with a future due date appears in the right bucket even if its explicit status is still inbox. Edits are merged with imported data and persisted to localStorage under the key organizerEdits.
The detail pane is now a native <dialog>. It traps focus, closes on Escape, and restores focus to the table row when it closes.
const detailPane = document.getElementById("detail-pane"); detailPane.showModal(); detailPane.addEventListener("click", e => { const rect = detailPane.getBoundingClientRect(); if (e.clientX < rect.left || e.clientX > rect.right) closeDetail(); });
open ~/Documents/Projects/appfy/organizer-loop-engineering/dashboard/index.html
With the server running, open the dashboard and try three things: