Phases 1-3 split models by domain ownership, but cross-app imports
still exist (e.g. cart imports market.models.CartItem). In Docker
each app only has its own code. The CI step now copies sibling app
model packages into the build context before docker build.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update shared submodule (adds alembic.ini for migrations).
Use subshell for alembic so CWD is never affected by cd shared,
preventing cascading config path errors if migration fails.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Hypercorn spawns worker processes via multiprocessing spawn, which
starts a fresh Python interpreter without the parent's sys.path
modifications from path_setup.py. Setting PYTHONPATH=/app ensures
the worker can import app.py and all project packages.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Swap shared_lib submodule → shared (tracking decoupling branch)
- Dockerfile: shared_lib/ → shared/, remove bp symlink hack
- entrypoint.sh: cd shared for alembic upgrade head
- CI: trigger on decoupling branch, use dynamic ref_name
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 1-3 of decoupling:
- path_setup.py adds project root to sys.path
- Blog-owned models in blog/models/ (ghost_content, snippet, tag_group)
- Re-export shims for shared models (user, kv, magic_link, menu_item)
- All imports updated: shared.infrastructure, shared.db, shared.browser, etc.
- No more cross-app post_id FKs in calendar/market/page_config
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add cross-app nav buttons for markets and payments (events app)
- Remove page features panel and markets panel from blog admin
(calendars, markets, and payments are now managed in the events app)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
When toggling market/calendar features or saving SumUp settings,
create a PageConfig row if one doesn't exist yet instead of returning
a 404 error.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The editor.js/editor.css were gitignored and never built during docker
build, causing 404s on the edit page. Add a Node multi-stage build step
to compile them. Also replace "nowt" placeholder in admin templates with
the actual main panel include.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fetches page-scoped cart count from /internal/cart/summary?page_slug=
for page posts and displays a cart icon with count in the post header
that links to the page cart.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace SumUp placeholder with real form for merchant code, API key, prefix
- Add PUT /admin/sumup/ route to save per-page SumUp credentials
- Pass sumup_configured/merchant_code/checkout_prefix to template context
- SumUp form only shown when calendar or market feature is enabled
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
OOB nav template also updated — Market link now uses HTMX
navigation to coop.rose-ash.com/market/ instead of linking
to the market app directly.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Post context processor loads MarketPlace rows for the page
- Nav bar displays market links (shopping-bag icon) alongside calendars
- Admin panel includes markets CRUD when market feature is enabled
- Updated shared_lib submodule with nav_entries template change
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The shared sidebar/filter templates expect selected_groups, tags, authors
etc. Provide empty defaults when rendering the pages view.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add PageConfig model with feature flags (calendar, market)
- Auto-create PageConfig on Ghost page sync
- Add create_page() for Ghost /pages/ API endpoint
- Add /new-page/ route for creating pages
- Add ?type=pages blog filter with Posts|Pages tab toggle
- Add list_pages() to DBClient with PageConfig eager loading
- Add PUT /<slug>/admin/features/ route for feature toggles
- Add feature badges (calendar, market) on page cards
- Add features panel to page admin dashboard
- Update shared_lib submodule with PageConfig model
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Calendar routes moved to events service. Blog overrides now use
events_url() for cross-service links, deleted _nav_entries.html
to fall through to shared version.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extract blog-specific code from the coop monolith into a standalone
repository. Includes auth, blog, post, admin, menu_items, snippets
blueprints, associated templates, Dockerfile (APP_MODULE=app:app),
entrypoint, and Gitea CI workflow.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>