Loading workspace insights... Statistics interval
7 days30 daysLatest CI Pipeline Executions
0b62ec79 Replace Portal's mailto Contact support with an in-Portal form
The account footer's "Contact support" was a bare mailto: link, which
launches a local mail client many readers don't have configured. It now
opens a new Portal page (contactSupport) with a subject + message form.
- New POST /members/api/support (member-session-gated; 401 without a
session): validates + HTML-escapes the message and relays it via
GhostMailer to the site's support address
(settingsHelpers.getMembersSupportAddress(), per-tenant via the Phase 4a
settings cache), subject "[<Site title>] Support: ...", replyTo = the
member, member name/email included in the body.
- New Portal page contact-support-page.js (registered as contactSupport in
pages.js), api.member.sendSupportRequest() in utils/api.js, and the
account footer button switches pages instead of opening mailto.
- Portal is self-hosted (/ghost/assets/portal/portal.min.js), so the change
ships with the image.
- Unit tests: support-controller.test.js (5 cases: 401, empty message,
over-long message, relay + escaping + reply-to, fallback subject).
- The mailto links in popup-notification.js and the email FAQ pages are
unchanged - only the account entry point Dave flagged was replaced.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> 4a0235a2 Update apex: refresh county + town article counts (July 1 snapshot)
Pull current per-town article counts from E:\townbrief\<slug>\articles\
and the per-county rollups. Middlesex 1,376 -> 5,389, Barnstable 92 -> 129,
Hampden 13 -> 64; some others (Norfolk, Worcester, Essex, Plymouth,
Berkshire, Hampshire, Franklin) went down because they were previously
over-counted from a legacy state. Bump the AI-chat blurb from
"5,000+ indexed government meeting documents" to "6,000+" to match the
6,066 total articles across the pipeline.
10 county aggregator cards refreshed, 92 town cards updated in place.
23 towns without cards on the apex + 4 counties without counts are left
alone (would be a separate templated regeneration).
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> 43760561 Multitenant platform: sitemap, sessions, members, deploy hardening + PG patches
Commits the accumulated multitenant working-tree changes:
- Postgres run patches (patches/bookshelf*.patch) referenced by
pnpm-workspace.yaml + lockfile — required for install/build on Postgres.
- Per-site sitemap generation (frontend/services/sitemap/*), boot.js wiring,
multitenancy model plugin, redirect model, session-store, email-analytics,
link-tracking, members event-repo + stats, cross-site SSO controller.
- New 6.45 migration: add-site-id-stamp-triggers (RLS site_id stamping).
- Deploy hardening: compose.production.yaml, Dockerfile.caddy, deploy/site
apex page, smoke-test.py, content-link-check.py, EDGE-CACHING.md, README,
.env.example; dev-gateway Caddyfile/preview; superadmin app/pages;
docker/purge-bridge.
Excludes ghost/core/probe-4c4d.js (debug cruft).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>