Skip to content

UX: dashboard IA — lead with Today / Overdue / Follow-ups due / At-risk, demote intake counters #105

Description

@alexeygrigorev

Dashboard IA: lead with Today / Overdue / Follow-ups due / At-risk; demote intake counters

Status: pending
Tags: enhancement, frontend, design, P1
Depends on: #103
Blocks: None

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").
  • Each section keeps the existing per-row behavior from UX: dashboard Daily Queue should surface next-action button, not embed the completion editor #103 (status + one
    next-action button); this issue changes ordering/section structure, not row
    internals.
  • 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").

Out of Scope

Dependencies

Verification

  • From backend/: npm run typecheck.
  • 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1ImportantdesignDesign and UXenhancementNew or improved functionalityfrontendFrontend UI

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions