Skip to content

fix(frontend): first-run empty state says no rows match filters with no next step #756

Open

Description

@cristim

Summary

On first run (no accounts, no recommendations) Opportunities says "No rows match these filters." with no next step, and Home has no onboarding call to action anywhere.

Where

Reviewed commit b50ca38: frontend/src/recommendations.ts:4761-4798 (empty-result rendering; emptyResult is true whenever the rendered list is empty) and :3969-3970 (action bar "(No recommendations loaded)"). An .empty-state style already exists at frontend/src/styles/base.css:174.

Failure scenario

Verified live with accounts [] and recommendations []. Opportunities shows the full 15-column header, "Showing 0 of 0 recommendations ... No rows match these filters. (No recommendations loaded)", a $0 in green, and an apparently enabled blue Purchase button. Home shows -- tiles, "Savings history is not available yet." and "No upcoming scheduled purchases", with no pointer to connect an account.

User impact

Every new customer: they are told to adjust filters when nothing has been loaded, and nothing points to Admin > Accounts or to collection status.

Suggested fix

Branch on loaded count vs filtered count. Zero loaded: an .empty-state card ("No opportunities yet", last/next collection time, "Connect an AWS, Azure or GCP account" linking to Admin > Accounts, or "Refresh recommendations"). Filtered to zero: keep the hint and add "Clear filters". Add a matching onboarding CTA on Home.

Screenshots

In the review fleet archive (/Users/cristi/.claude/agent-comms/review-fleet-20261008/screens/), NOT uploaded: usab-firstrun-opps.png, usab-firstrun-home.png, opportunities-empty-1280.png.

Severity

Medium: misleading first-run experience for all new users, no data impact.

Related: #182 (empty states for Admin Users/Groups/Permission Overview only; different surfaces).

Reviewer ID: UX-10 (usab M3 + vis M1)
Found by the 2026-10-08 review fleet.

Activity

  1. IAmJSD commented on Oct 24, 2026

    @IAmJSD
    Collaborator

    Claiming: working on this

  2. self-assigned this
    on Oct 24, 2026
  3. IAmJSD commented on Oct 28, 2026

    @IAmJSD
    Collaborator

    Status update (2026-10-28): #1567 merged: GET /api/recommendations/freshness now returns next_collection_at, computed from a RECOMMENDATION_SCHEDULE that every compute module passes to the app (cron and rate() parsed; null when unknown).

    Left: showing it on the empty-state card (UI owner). Note: on default AWS deployments the field is null because the default schedule is rate(1 day), which has no fixed time; switching the AWS default to a fixed cron is an owner decision (D32 in the acting-owner report).

  4. IAmJSD commented on Oct 28, 2026

    @IAmJSD
    Collaborator

    Acting-owner decision (D32, IAmJSD, 2026-10-28): the AWS recommendation collection default moves from rate(1 day) to a fixed 02:00 UTC, like GCP and Azure, so the next-collection time can show on AWS. A PR is in progress.

  5. IAmJSD commented on Oct 28, 2026

    @IAmJSD
    Collaborator

    Status (IAmJSD, acting owner, 2026-10-28): #1580 merged. AWS recommendation collection now defaults to 02:00 UTC (D32), so the freshness endpoint returns next_collection_at on AWS too. A test ties every AWS default and tfvars value to the API. The first-run empty-state UI is still open; that part is the UI owner's.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions