- Blog hamburger: removed (inlined in shared layout.html)
- Cart mini: use macros/cart_icon.html for add-to-cart OOB
- Post header: use blog_url() instead of url_for('blog.post.post_detail')
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Browse, market, product templates + filters macro moved from shared
to market/templates/. Cross-domain copies: post header, cart mini.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Market app serves marketplace links as a fragment at
/internal/fragments/container-nav for consumption by blog and events.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The handler already has g.cart with the updated items — no need to
make an HTTP round-trip to the cart app's fragment endpoint. Renders
the _mini.html macro directly with the count from g.cart.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When the cart-mini fragment fetch returns empty, the HTMX outerHTML
swap was replacing #cart-mini with nothing. Now falls back to the
local _mini.html macro with count from g.cart.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The shared _added.html imported _types/cart/_cart.html which only
exists in the cart app. Market now has its own _added.html that:
- Fetches cart-mini fragment for the OOB mini cart update
- Uses market's own _types/product/_cart.html macros
- Drops cart summary/show_cart (not visible on product pages)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The app-level url_value_preprocessor pops "slug" and "page_slug"
into g.post_slug, with page_slug overwriting the product slug.
Renaming the blueprint param to product_slug eliminates the
collision entirely. Views now use g.product_slug (set by blueprint
preprocessor) and have clean signatures with no **_kw hacks.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- New all_markets blueprint at / with paginated grid and HTMX infinite scroll
- New page_markets blueprint at /<slug>/ for page-scoped market listing
- list_marketplaces service method (via shared submodule update)
- Updated slug preprocessor to handle both /<slug>/ and /<page_slug>/<market_slug>/
- Removed inline markets_listing() route (replaced by all_markets blueprint)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
market_url() generates URLs without the /<page_slug>/<market_slug>
prefix, causing 405 on POST /cart. url_for() auto-injects the slugs
via url_defaults.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add post header row to market/index.html template chain
- Fix OOB templates to include post header on HTMX navigation
- Show market name instead of static coop_title in header
- Restore trailing slash on POST /cart/ route; fix templates to
include trailing slash in cart URLs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Market app now follows the events app pattern — URLs include
the post slug prefix (e.g. /market/suma-market/). Hydrate
loads both post and market, verifying market belongs to post.
Scraper default URLs updated accordingly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Split from coop monolith. Includes:
- Market/browse/product blueprints
- Product sync API
- Suma scraping pipeline
- Templates for market, browse, and product views
- Dockerfile and CI workflow for independent deployment