From 8970e960fbb0cf6aaf8d96fc77ffcc4769db612f Mon Sep 17 00:00:00 2001 From: "russell@unturf.com" Date: Fri, 15 May 2026 16:30:23 -0400 Subject: [PATCH] =?UTF-8?q?feat:=20MPS-24=20Phase=202.6b=20=E2=80=94=20fac?= =?UTF-8?q?et=20nav=20on=20shop=20home=20+=20mobile=20SERP=20lanes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Operator review on tablet showed two gaps in the 2.6 ship: - Shop home (layout 2 lanes) had no facet sidebar — only tag detail did - Mobile lanes were horizontal Netflix-style tile rows with no description visible at all This batch extends the facet experience across every page where the operator opted into categorization (home_layout >= 1): - New templates/_facet_nav.j2 with three macros (facet_form, sidebar, details). One source of truth for the controls, three variants of the wrapper. shop_tag.j2 refactored to import the macro. - home.j2 + shop.j2 now wrap content in .tag-detail-layout when home_layout >= 1, rendering both the desktop sidebar and the mobile
accordion. CSS toggles visibility per viewport. - Each lane in layout 2 now emits BOTH horizontal tiles AND vertical .serp-list-row markup with 6-sentence excerpts. CSS shows tiles >=800px, SERP rows <800px. Tablet / phone shoppers see image + title + price + description excerpt under each tag heading. - views/shop.py: facet_tags is populated for any home_layout >= 1 (was only on ?tag= filter); sort + price now also filter the non-tag-filtered home grid when the shopper applies them. Native HTML. No JS dependency. Same controls everywhere. Test: test_shop_home_lanes_renders_facet_sidebar_and_mobile_rows. Docs: CLAUDE.md MPS-24 section, architecture matrix, ticket Phase 2.6b. --- CLAUDE.md | 42 ++++++++--- docs/architecture.md | 2 + docs/tickets/mps-24.md | 22 ++++++ make_post_sell/static/css/common.css | 59 +++++++++++++++ make_post_sell/templates/_facet_nav.j2 | 98 +++++++++++++++++++++++++ make_post_sell/templates/home.j2 | 56 +++++++++++++- make_post_sell/templates/shop.j2 | 54 +++++++++++++- make_post_sell/templates/shop_tag.j2 | 87 ++-------------------- make_post_sell/tests/test_functional.py | 48 +++++++++++- make_post_sell/views/shop.py | 17 ++++- 10 files changed, 387 insertions(+), 98 deletions(-) create mode 100644 make_post_sell/templates/_facet_nav.j2 diff --git a/CLAUDE.md b/CLAUDE.md index 3120665..52db8d2 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -492,20 +492,38 @@ filters on no-JS. With JS, `static/js/tag_filter.js` intercepts clicks and filters the grid in place via `data-tag-slugs` attribute on `.serp-item`, zero network cost, fewer clicks to purchase. -**Tag-detail facet sidebar.** `shop_tag.j2` renders a left -`.facet-nav` (220px column ≥800px viewport, hidden below) wrapping a -single `
` with three sections: Sort dropdown, Price -range (`?price_min=` / `?price_max=`, parsed by -`_price_range_from_request()` → cents, filtered by +**Facet nav (Phase 2.6).** All facet controls live in one Jinja macro +file: `templates/_facet_nav.j2` exports `sidebar()` (desktop `