Skip to content

[Due for payment 2026-05-29] Update Your Expensify Cards to Your spend to streamline common points of customer confusion #87743

Closed

Description

@JmillsExpensify

Background
We currently have a Your Expensify Cards slot, which summarizes a user's remaining spending power and gives them a quick reminder of recent spending.

We started with this specific use case because this data is available via OpenApp. However, this slot is now evolving from a card-only summary into a broader spend-status area. In this issue, we'll prioritize supporting better visibility into reports awaiting approval and reimbursement, as this resolves recurring customer confusion about where to find that information.

Image

Product and design details

Applicability and data model

  • This slot is titled Your spend.
  • This issue keeps the existing card summary row, tweaks it, and adds two new status rows:
    • Awaiting approval
    • Repaid in the last 30 days
    • Recent transactions * [cardLastFour]
  • This slot applies to users with one or more of the following:
    • an applicable approval flow (e.g. approvals enabled in at least one workspace)
    • an applicable payment/reimbursement flow (e.g. "make or track payments" enabled in at least one worksapce)
    • any assigned Expensify Card (could be multiple)
  • For the Expensify Card case, we switch the focus to remaining limit, and instead, to recent transactions. This brings the summary in line with modern banking/card apps, which focus on the recent total (not the inverse, which remaining limit).
  • For the payment case, this applies whether or not the workspace is reimbursing directly in the app.
  • We aggregate approval/payment totals across all relevant workspaces. We do not break them down per workspace. One workspace is the most common case, and even for multi-workspace setups, submitting in exactly one workspace is still the most common pattern.

For clarity:

  • if a user has no applicable approval flow, they would just see Repaid in the last 30 days
  • if a user has no applicable payment flow, they would just see Awaiting approval
  • if a user has both, they would see both rows
  • if the user also has an assigned Expensify Card, that row remains in the last slot
  • If a user has multiple assigned Expensify Cards, they see one row per assigned Ecard

Row definitions
The underlying search queries for each row are:

  • Awaiting approval
    type:expense from:me status:outstanding reimbursable:yes
    We'll display the summed monetary total of matching expenses (in bold), not the count.

  • Repaid in the last 30 days
    type:expense from:me status:paid reimbursable:yes then the date: filter should be the last 30 days.
    Same here, we'll display the summed monetary total of matching expenses (in bold), not the count.

  • Recent transactions * [cardLastFour]
    type:expense from:me card:"[cardName]" then the date: filter should be the last 30 days as well
    Same here, we'll display the summed monetary total of matching expenses (in bold), not the count.
    The logic for the doughnut is: green progress bar that equals the total spend vs the remaining card limit. If the total spend is currently 100% of the limit, then the doughnut is completely filled and our red "danger" color, not green.

Row order
Rows appear in this order:

  1. Awaiting approval
  2. Repaid in the last 30 days
  3. Recent transactions * [cardLastFour] (for each assigned Ecard)

Data loading

  • On log-in or app refresh, we'll show loaders when we do not yet have up-to-date approval or reimbursement data.
  • We'll only show loaders for row types that apply to the user's use case.
  • If a user only has either Awaiting approval or Repaid in the last 30 days, we only show one loading row rather than two.
  • This avoids the slot height expanding when real data is returned.
  • We don't show a skeleton loader for the Expensify Card since most customers still use cards from another provider. If data for it exists, it just appears
Image

Product behavior and associated logic

  • Clicking View on each status row routes to the corresponding search query on the Spend > Expenses page, not the Reports page.
  • We intentionally use the Expenses page to avoid potentially confusing nuances where reports can contain both reimbursable and non-reimbursable expenses.
  • After data loads, any approval/payment row with no matching data is hidden.
  • If both approval/payment rows have no data, but the card row is still applicable, the slot remains visible with just the card row.
  • If no rows are applicable at all, the full Spend overview slot is hidden.

Examples

  • If a user has $1,500 awaiting approval and $1,240 recently paid, show both rows.
  • If a user has no approval-enabled workspaces, only evaluate and potentially show Repaid in the last 30 days.
  • If a user has no applicable payment flow, only evaluate and potentially show Awaiting approval.
  • If both searches return zero, but the user has an Expensify Card, show only that card row.
  • If all row types return no applicable data, hide the slot entirely.

This is part of an internal initiative; it'll be worked on by the Home project team.

Issue OwnerCurrent Issue Owner: @ZhenjaHorbach

Activity

  1. added
    InternalRequires API changes or must be handled by Expensify staff
    NewFeatureSomething to build that is a new item.
    on Apr 13, 2026
  2. melvin-bot commented on Apr 13, 2026

    @melvin-bot

    Triggered auto assignment to Design team member for new feature review - @shawnborton (NewFeature)

  3. grgia commented on Apr 21, 2026

    @grgia
    Contributor

    @JmillsExpensify what is the difference between these and the approve/pay rows in For you? When does an admin approve/pay expenses over reports? Is the total amount the same as the total amount for the 4 reports in For you added up?

  4. 23 remaining items

  5. mitarachim commented on May 21, 2026

    @mitarachim

    Deploy Blocker ##91371 was identified to be related to the PR ##89899 that attempted to fix this issue.

  6. melvin-bot commented on May 21, 2026

    @melvin-bot

    ⚠️ Looks like this issue was linked to a Deploy Blocker here

    If you are the assigned CME please investigate whether the linked PR caused a regression and leave a comment with the results.

    If a regression has occurred and you are the assigned CM follow the instructions here.

    If this regression could have been avoided please consider also proposing a recommendation to the PR checklist so that we can avoid it in the future.

  7. changed the title [-]Update `Your Expensify Cards` to `Your spend` to streamline common points of customer confusion[/-] [+][Due for payment 2026-05-29] Update `Your Expensify Cards` to `Your spend` to streamline common points of customer confusion[/+] on May 22, 2026
  8. melvin-bot commented on May 22, 2026

    @melvin-bot

    Reviewing label has been removed, please complete the "BugZero Checklist".

  9. melvin-bot commented on May 22, 2026

    @melvin-bot

    The solution for this issue has been 🚀 deployed to production 🚀 in version 9.3.79-4 and is now subject to a 7-day regression period 📆. Here is the list of pull requests that resolve this issue:

    If no regressions arise, payment will be issued on 2026-05-29. 🎊

    For reference, here are some details about the assignees on this issue:

  10. melvin-bot commented on May 22, 2026

    @melvin-bot

    BugZero Checklist: The PR adding this new feature has been merged! The following checklist (instructions) will need to be completed before the issue can be closed:

    • [@ZhenjaHorbach] Please propose regression test steps to ensure the new feature will work correctly on production in further releases.
    • [] Link the GH issue for creating/updating the regression test once above steps have been agreed upon.
  11. JmillsExpensify commented on May 25, 2026

    @JmillsExpensify
    ContributorAuthor

    I've created the regression test. This issue is paid centrally so closing.

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

Metadata

Metadata

Labels

DailyKSv2InternalRequires API changes or must be handled by Expensify staffNewFeatureSomething to build that is a new item.

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions