This repository has been archived on 2026-02-24. You can view files and clone it. You cannot open issues or pull requests or push a commit.
giles 9515e411fa
All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 1m3s
Update shared: debug logging for event processor
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-22 20:49:47 +00:00

Blog App (Coop)

Blog, authentication, and content management service for the Rose Ash cooperative platform. Handles Ghost CMS integration, user auth, and admin settings.

Architecture

One of five Quart microservices sharing a single PostgreSQL database:

App Port Domain
blog (coop) 8000 Auth, blog, admin, menus, snippets
market 8001 Product browsing, Suma scraping
cart 8002 Shopping cart, checkout, orders
events 8003 Calendars, bookings, tickets
federation 8004 ActivityPub, fediverse social

Structure

app.py                  # Application factory (create_base_app + blueprints)
path_setup.py           # Adds project root + app dir to sys.path
config/app-config.yaml  # App URLs, feature flags, SumUp config
models/                 # Blog-domain models (+ re-export stubs for shared models)
bp/                     # Blueprints
  auth/                 #   Magic link login, account, newsletters
  blog/                 #   Post listing, Ghost CMS sync
  post/                 #   Single post view and admin
  admin/                #   Settings admin interface
  menu_items/           #   Navigation menu management
  snippets/             #   Reusable content snippets
templates/              # Jinja2 templates
services/               # register_domain_services() — wires blog + calendar + market + cart
shared/                 # Submodule -> git.rose-ash.com/coop/shared.git

Cross-Domain Communication

All inter-app communication uses typed service contracts (no HTTP APIs):

  • services.calendar.* — calendar/entry queries via CalendarService protocol
  • services.market.* — marketplace queries via MarketService protocol
  • services.cart.* — cart summary via CartService protocol
  • services.federation.* — AP publishing via FederationService protocol
  • shared.services.navigation — site navigation tree

Domain Events

  • auth/routes.py emits user.logged_in via shared.events.emit_event
  • Ghost sync emits post.published / post.updated for federation

Running

export DATABASE_URL_ASYNC=postgresql+asyncpg://user:pass@localhost/coop
export REDIS_URL=redis://localhost:6379/0
export SECRET_KEY=your-secret-key

alembic -c shared/alembic.ini upgrade head
hypercorn app:app --bind 0.0.0.0:8000
Description
No description provided
Readme 815 KiB
Languages
Python 62.2%
HTML 37.1%
Dockerfile 0.4%
Shell 0.3%