Round 2 — three flavors of the in-page filter (native HeadFrame styling, an editorial polish, and a sidebar layout), a B mock that filters by rep + shows the rep's own home view, and a fleshed-out save-view flow that ends as a metric tile on Home.
All three: tiers come from unique account.industry values alphabetized, account cards now have a 1-line italic summary, recency is compressed.
Same Tailwind classes and component patterns as today's Accounts page. Industry tiers in a horizontal-scroll row. Visit recency as a single dropdown chip — opens a popover with all 7 buckets.
Refined typography (Fraunces + Geist), recency as a single-row "ladder" with all 7 buckets visible at once and color bars showing freshness. Italic 1-line summary on each account card. Days-since-visit as a serif numeral.
Classic CRM layout. 280px left rail with all filter controls (radios, checkboxes, segmented), list takes the full main column. Persistent applied-chips strip. Most compact, best if more filter types are coming.
B reframes visit-recency as a manager dashboard with rep filtering, plus a rep's own home variant. C shows the full save-as-view flow, ending as a metric tile.
Manager view with rep filter as a primary axis — clicking a rep's avatar slices the pulse, KPIs, and hot list to just their accounts. A "My view" toggle at the top flips Donavan to his own rep home (book pulse, today's plan, his hot list).
Click "Save view…" while filters are active → modal asks for a name, description, icon, visibility (just me / whole team), and toggles "pin as Home tile". Live preview updates as you type. Saved view appears as a featured metric tile with live count, "▲ 8 wk" trend, and a one-tap deeplink back into the filtered list.
Style: A1 if you want zero UI drift; A2 if you're ready to evolve the look (the Fraunces + days-since-visit-as-serif treatment is the part that elevates the whole product); A3 if you genuinely have 4+ filters coming and want to invest in the shell.
Slice 1 (week 1): the data work — add Account.last_visit_at denormalized field, populate via a signal on completed visit-type Activities + a one-time backfill, surface unique Account.industry values for the team. Ship A in your chosen style.
Slice 2 (week 2): ship B-Manager Pulse on the existing Home, with the rep filter rail. Cells deep-link to A. Add a "My view" toggle so reps see their own book pulse instead of the team-wide one.
Slice 3 (week 3+): ship C — saved views, naming/sharing modal, and home tiles. By this point A and B are giving you usage data to know which combos to seed as default views.
Three things show up in every variation. None of them are user-visible. All three should land in slice 1.
Account.last_visit_at: DateTimeField(null=True). Update via post_save signal on Activity when type='visit' and status transitions to 'completed'. One-time backfill: UPDATE account SET last_visit_at = (SELECT MAX(start_time) FROM activity WHERE account_id = account.id AND type='visit' AND status='completed').account.industry. The filter endpoint should return distinct industry values for the team, alphabetical, with counts. The "?" caveat lives in the recency logic, not in tier data.(account_type='customer' AND last_visit_at IS NULL) joins into the "90+ days" bucket by default, with a checkbox/toggle to exclude.