You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Groomed from the same live UX audit. #4: the dashboard opens on intake counters,
not the four core questions. The first thing on the dashboard is three intake
tiles ("Untriaged intake / Blocked intake / Assistant-ready", all showing 0).
The JTBD four core questions are only partially served by the "Daily Queue":
there are Overdue and At-risk group headers, but no labelled "Today" bucket
(today's non-risk task was filed under "At risk") and no "Follow-ups due"
section as a top-level structure. Evidence: .tmp/screenshots/ux-audit/03-home-1280.png, 15-dashboard-populated.png.
Scope
Restructure the dashboard information architecture so the operator's four core
questions lead the page, per JTBD 1 and the "Dashboard" screen spec ("Shows
today, overdue, follow-up due, and active workflow risk sections"). Work lives in backend/src/public/app.js:
renderDashboard (~lines 1406-1533): demote the intake-risk counters
(dashboard-intake-risk / loadDashboardIntakeRisk, ~lines 1409-1413) from the
top of the page to a small secondary strip and/or the Inbox tab. The four core
buckets (Today / Overdue / Follow-ups due / At-risk workflows) should be the
primary top-level structure.
Queue grouping (taskPrimaryQueueGroup / dashboardQueueLabels,
~lines 677-705) and the group headers emitted by renderDashboardTaskTable
(~lines 2221-2267): ensure Today, Overdue, Follow-ups due, and At-risk are all
present as explicit, labelled sections. Today's genuinely-due-today work must
appear under "Today", not be swallowed into "At risk" solely because of missing
evidence at creation time.
Named sections must match the spec vocabulary: Today, Overdue, Follow-ups due,
At-risk workflows.
Presentation/IA change only — no task/bundle API or DynamoDB change. The
assigned-to-me toggle, user picker, and all-team switch must keep working.
Acceptance Criteria
The dashboard leads with the four core sections — Today, Overdue,
Follow-ups due, and At-risk (active workflows at risk) — as explicit,
labelled top-level structure, above intake counters.
The intake counters (Untriaged intake / Blocked intake / Assistant-ready)
are demoted to a small secondary strip and/or moved to the Inbox tab; they
no longer occupy the top of the dashboard.
A task that is genuinely due today and not at risk appears under "Today",
not under "At risk".
"Follow-ups due" is a labelled section that appears (and shows an empty
state such as "No follow-ups due" when empty), per JTBD 1 acceptance
("Empty states tell the operator what is clear").
Assigned-to-me default, the operator picker, and the all-team switch still
work and re-group correctly.
Empty core sections render clear empty states rather than disappearing
confusingly.
Test Scenarios
Scenario: Four core questions lead the page
Given: Grace opens the dashboard with seeded data
When: the page renders
Then: Today / Overdue / Follow-ups due / At-risk are the first, labelled
sections, and the intake counters are a small strip (or in Inbox), not the top.
Scenario: Today work is under Today
Given: a task due today that is not overdue and not missing required proof
When: the dashboard groups tasks
Then: it appears under "Today", not "At risk".
Scenario: Empty follow-ups is explicit
Given: no follow-ups are due
When: the dashboard renders
Then: the "Follow-ups due" section shows a clear empty state ("No follow-ups
due").
From backend/: npm run test:e2e — at minimum home-dashboard.spec.js; add
a spec asserting the four core sections render in order and Today is not
swallowed by At risk.
Playwright screenshot of the dashboard at 1280px (seed data, login grace@datatalks.club / 111) saved under .tmp/screenshots/ux-audit/ and read
to confirm section order, demoted intake strip, and clear empty states.
Dashboard IA: lead with Today / Overdue / Follow-ups due / At-risk; demote intake counters
Status: pending
Tags:
enhancement,frontend,design,P1Depends on: #103
Blocks: None
Scope
Restructure the dashboard information architecture so the operator's four core
questions lead the page, per JTBD 1 and the "Dashboard" screen spec ("Shows
today, overdue, follow-up due, and active workflow risk sections"). Work lives in
backend/src/public/app.js:renderDashboard(~lines 1406-1533): demote the intake-risk counters(
dashboard-intake-risk/loadDashboardIntakeRisk, ~lines 1409-1413) from thetop of the page to a small secondary strip and/or the Inbox tab. The four core
buckets (Today / Overdue / Follow-ups due / At-risk workflows) should be the
primary top-level structure.
taskPrimaryQueueGroup/dashboardQueueLabels,~lines 677-705) and the group headers emitted by
renderDashboardTaskTable(~lines 2221-2267): ensure Today, Overdue, Follow-ups due, and At-risk are all
present as explicit, labelled sections. Today's genuinely-due-today work must
appear under "Today", not be swallowed into "At risk" solely because of missing
evidence at creation time.
Named sections must match the spec vocabulary: Today, Overdue, Follow-ups due,
At-risk workflows.
Presentation/IA change only — no task/bundle API or DynamoDB change. The
assigned-to-me toggle, user picker, and all-team switch must keep working.
Acceptance Criteria
Follow-ups due, and At-risk (active workflows at risk) — as explicit,
labelled top-level structure, above intake counters.
are demoted to a small secondary strip and/or moved to the Inbox tab; they
no longer occupy the top of the dashboard.
not under "At risk".
state such as "No follow-ups due" when empty), per JTBD 1 acceptance
("Empty states tell the operator what is clear").
next-action button); this issue changes ordering/section structure, not row
internals.
work and re-group correctly.
confusingly.
Test Scenarios
Scenario: Four core questions lead the page
Given: Grace opens the dashboard with seeded data
When: the page renders
Then: Today / Overdue / Follow-ups due / At-risk are the first, labelled
sections, and the intake counters are a small strip (or in Inbox), not the top.
Scenario: Today work is under Today
Given: a task due today that is not overdue and not missing required proof
When: the dashboard groups tasks
Then: it appears under "Today", not "At risk".
Scenario: Empty follow-ups is explicit
Given: no follow-ups are due
When: the dashboard renders
Then: the "Follow-ups due" section shows a clear empty state ("No follow-ups
due").
Out of Scope
(do that first).
template tasks — covered by UX: freshly-started workflows show all-red at t=0 — add scheduled/not-started state + richer bundle cards #106; this issue only ensures the sections exist and
Today is not swallowed by pre-existing at-risk logic.
../dtc-operations,../datatasks,../podcast-assistant.Dependencies
renderDashboard/renderDashboardTaskTable.Sequencing UX: dashboard Daily Queue should surface next-action button, not embed the completion editor #103 first avoids conflicting rework in the same
app.jsregion.Do not run UX: dashboard Daily Queue should surface next-action button, not embed the completion editor #103 and UX: dashboard IA — lead with Today / Overdue / Follow-ups due / At-risk, demote intake counters #105 in parallel in the same worktree.
Verification
backend/:npm run typecheck.backend/:npm run test:e2e— at minimumhome-dashboard.spec.js; adda spec asserting the four core sections render in order and Today is not
swallowed by At risk.
grace@datatalks.club / 111) saved under
.tmp/screenshots/ux-audit/and readto confirm section order, demoted intake strip, and clear empty states.