- market/sx/layouts.sx: Update ~market-header-auto macro to build nav from data fields via ~market-desktop-nav-from-data instead of expecting pre-built "desktop-nav" SxExpr (removed in Phase 9) - shared/sx/primitives_io.py: Import _market_header_data instead of deleted _desktop_category_nav_sx, return individual data fields - sx/sx/layouts.sx: Fix ~sx-section-layout-oob to use ~oob-header-sx for inserting sub-row into always-existing container div Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Market App
Product browsing and marketplace service for the Rose Ash cooperative. Displays products scraped from Suma Wholesale.
Structure
app.py # Application factory (create_base_app + blueprints)
path_setup.py # Adds project root + app dir to sys.path
entrypoint.sh # Container entrypoint (Redis flush, start)
bp/
market/ # Market root, navigation, category listing
browse/ # Product browsing with filters and infinite scroll
product/ # Product detail pages
cart/ # Page-scoped cart views
api/ # Product sync API (used by scraper)
fragments/ # container-nav fragment (market links)
scrape/ # Suma Wholesale scraper
models/ # Re-export stubs pointing to shared/models/
services/ # register_domain_services() — wires market + cart
templates/ # Market-specific templates (override shared/)
Cross-domain communication
services.cart.*— cart summary via CartService protocolservices.federation.*— AP publishing via FederationService protocol
Fragments served
- container-nav — market navigation links for blog sidebar
Scraping
bash scrape.sh # Full Suma Wholesale catalogue
bash scrape-test.sh # Limited test scrape