Save these filters as my default — decided
Concept C was chosen. The earlier filter concepts — A (tidied popover), B (accordion popover) and D (toolbar chips) — were retired. The filter UI is now the two-pane modal only: a category rail on the left (Options → Tags → Bank accounts → Entities), values on the right, and choices held as a draft until Apply.
The one open question was the "save these filters as my default" control. We tried four placements — a footer checkbox, a header pin, an after-apply chip in the applied-filters row, and a dedicated "Default view" rail page. The footer checkbox, immediately left of Cancel, was chosen. The other three were retired.
All four drove the same state machine (an empty set cannot be saved, saving confirms with a toast, and the saved set is always visible and removable from the page); only the placement and presentation differed. This board now shows the chosen control on the live page, and keeps the shared parts that ship with it: how a returning user is told why the page is pre-filtered, the free-vs-Pro Entities filter, and the "no tag" wording research.
The chosen control is a "Set as my default" checkbox in the modal footer, immediately left of Cancel (with Clear all on the footer's bottom-left). It saves on Apply, so a cancelled draft is never stored. It is disabled until at least one filter is on. Once the visible filters already are the default, the checkbox is replaced by a quiet "Your default" readout with a Remove link. To try it: tick a filter inside the frame, tick "Set as my default", then press Apply filters.
Why this one, and why the others were retired. The checkbox sits with the other commit buttons, so "save these filters" reads as part of pressing Apply. The header pin was too subtle — a two-state pin icon was ambiguous between idle and armed. The after-apply chip in the chips row kept the modal clean but hurt discoverability, since a first-time user may never notice it. The rail "Default view" page was the clearest but the heaviest to build and the furthest to reach for a small feature.
Entities filter — free vs Pro
Concept C brings the entity filter in from its separate toolbar popover and makes it the fourth rail category. It is gated on Pro + EntityManagementFeature. The two frames below open the modal straight to the Entities pane, so you can compare what a free user sees against the working Pro filter side by side.
Free — locked upsell panel
Open full size ↗A free user sees a locked panel with the upgrade pitch — the same treatment the financial-year presets already use in the date picker. The row stays visible so the feature is discoverable, but the entity list is not usable until they upgrade.
Pro — working filter
Open full size ↗A Pro user sees the real entity list, now using the same visibility rule as Tags: every entity plus a pinned "Personal" row (transactions not linked to any entity) starts ticked and visible, and you untick one to hide those transactions. Because a transaction links to at most one entity, matching is a simple lookup, not hide-wins. Unticking "Personal" hides un-linked spending; ticking only one entity narrows the list to just that entity.
The Spend Overview page carries the same Concept C filter system — the funnel trigger, the two-pane modal, the visibility model and the save control — but it is not a clone of Transactions. It has no export button and no "+ Add transaction" link, so the applied chips sit in a slim reserved-height row that does not push the page. The date range persists across visits, but the saved default deliberately excludes it. Filtering really applies: unticking a tag, an account or an entity changes the category table totals, the bar-chart widths and the selected-category list together. The Budget Vs Actual toggle locks the entity dimension to Personal (SOR-9871). The funnel trigger and the modal rail items now show a binary coral dot when a filter is active — not a number, because a count of hidden rows reads backwards.
Cross-navigation is wired both ways: the sidebar "Transactions" item here links to the Transactions page, and on Transactions the "Spend Overview" item links back. See the pre-filtered return visit at spend-overview.html?screen=default-applied ↗.
Arriving with a saved default
The return visit is the second half of the feature. A user who lands on a pre-filtered page must be told why, in the place they already read filters. So the "Filtered by" row leads with a coral pin pill, and changing any filter swaps it for "Back to my default":
Note: the pill uses the new pushpin icon (a pin says "keep these in place" better than a bookmark). Remove a chip and the pill becomes "Back to my default". Changing a filter must never destroy the saved set — otherwise people stop trusting the feature.
See the pre-filtered return visit in the real page: Open ↗
The "no tag" control, up close
txn-filter-concepts-page/PROTOTYPE.md.
This was the new feature itself, separate from the panel layout. Four ways to word and place it — any of them can go inside any concept above. The checkbox is the real SortMe one.
U1 · Pinned at the top of the tag list (used in A, B and C above)
Sits where people already look for tags, above a divider so it reads as a special option rather than another tag.
Note: tick it and the tags below grey out. "No tag" and "has this tag" cannot both be true, so one clears the other instead of returning an empty list.
U2 · Three-way switch
Any / Specific / Not tagged. The most explicit version — the states cannot contradict each other, and the tag list only appears when it is needed.
Showing the 19 transactions with no tag.
No tag filter applied.
Cost: an extra row of controls in a panel we are trying to shrink.
U3 · A chip in the toolbar (used in D above)
One click from the page, no menu. Frames it as a job to do rather than a data state.
Cost: a permanent toolbar slot. Only worth it if the count is usually above zero — we could hide the chip when everything is tagged.
U4 · A prompt on the list
Not a filter — a way to discover one. The button sets the filter, so it pairs with U1 or U3.
19 transactions have no tag.
Tagging them makes your reports accurate.
Cost: another banner on a page that already has one. Show it only while the count is high, and let people dismiss it.
The wording — same behaviour, three ways to say it
The prototype uses S1.
S1 · "Save as my default" (used in the prototype)
Short enough for a chip. "My" makes it personal, so nobody fears they are changing it for the whole household.
- Second press: Update my default
- Already saved: Your default
- Undo: Remove my default
Risk: "default" is a slightly technical word.
S2 · "Always start with these filters"
Says exactly what will happen, with no jargon. Best for a user who has never met the idea before.
- Already saved: You always start with these
- Undo: Stop starting with these
Risk: too long for the save checkbox and the header pin.
S3 · "Remember these filters"
Warmest of the three and reads well as a switch label with room for more words.
- Already saved: Remembered
- Undo: Forget these
Risk: does not say for how long. "Remember" can read as "just for today".
Rules the save control follows
- Saving always confirms with a toast — never a silent change.
- A saved default is always visible on the page, and always removable from it. Nobody should be stuck with a filtered list they cannot explain.
- An empty filter set cannot be saved — the control stays disabled until one filter is on.
- The saved set is only stored on Apply, so a cancelled draft can never be saved.
- The date range is not saved — "last 7 days" means something different on every visit.
- The entity filter is Pro and flag gated, so a free user's default must not depend on it.
Concept C and the footer-checkbox save control are fixed. The pill inside each frame (bottom-right, "Persona Free/Pro") is a review tool and would be deleted before build.
Concepts only — not production code. Data is hard-coded.