24 Commits
Author SHA1 Message Date
joshua 0f4d1c360a Merge branch 'feat/change-update-request' v1.5.0 2026-10-28 12:16:59 +02:00
joshuaandClaude Opus 5.5 a3e9c5b4f6 Change an open update request to a newer version (1.5.0)
When a site asks again after a newer version came out, the open
update_requested alert moves on to the latest version ("changed from
...") and the alert address is emailed once; the response says
changed: true with previousVersion (protocol §3a). Needs Cross Events
1.47.4 for the button.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 12:16:59 +02:00
joshua 322635978a Merge branch 'chore/notes-from-main' v1.4.1 2026-10-28 09:25:10 +02:00
joshuaandClaude Opus 5.5 633813c50d Read release notes from the default branch; changelog (1.4.1)
Notes still only attach to tagged versions, so they can be written ahead of a
release or corrected afterwards without tagging a new version.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 09:25:10 +02:00
joshua 48d76d1b71 Merge branch 'chore/releases-notices' v1.4.0 2026-10-28 09:13:30 +02:00
joshuaandClaude Opus 5.5 0adb304024 Releases from git tags and WHATS-NEW.md; docs, changelog (1.4.0)
The Hub reads the Cross Events repo's v* tags (each a release, the newest the
latest version) and the client notes from WHATS-NEW.md as of the newest tag,
every 15 minutes and on Sync now. Urgent/security in a version heading marks it
urgent. Repo address, notes path and an optional encrypted token on the
Releases page; manual releases only when no repo is set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 09:13:30 +02:00
joshuaandClaude Opus 5.5 1449e5046e Releases with what's new, notices to churches, withdrawn update requests
- Releases page: each Cross Events version with notes and an urgent flag; the
  newest is the latest version (moved off Settings; the old setting becomes the
  first release). Installs get the notes for every newer version.
- Notices page: a banner for site admins and supervisors (with a time window),
  an email to the customer and admin contact, or both; for every install or
  chosen ones.
- POST /api/installs/update-request/cancel resolves the request and emails Joshua.
- Protocol doc: releases and notices in the heartbeat/register replies.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 08:54:35 +02:00
joshua 26e12a199a Merge branch 'feat/search-pagination-settings-tabs' v1.3.0 2026-10-28 07:51:32 +02:00
joshuaandClaude Opus 5.5 d235ae6c95 Search and paging on lists, Settings in tabs, pinned sidebar (1.3.0)
- Installs, Customers, Alerts and the audit log get a search box and
  25-per-page paging (Installs also a health filter); install History pages too.
- Settings is split into Releases and alerts / Email / Login and security /
  Audit log tabs, remembered in the URL hash.
- The side navigation is sticky at window height, so Sign out no longer
  scrolls off long pages.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 07:51:32 +02:00
joshua e22fa5369b Merge branch 'feat/smtp-settings' v1.2.0 2026-10-28 01:26:41 +02:00
joshuaandClaude Opus 5.5 613a4450cb SMTP settings on the Settings page, with a test (1.2.0)
SMTP server, port, user, password and from address are now Hub settings in
the database instead of SMTP_* in .env. The password is encrypted with
HUB_ENCRYPTION_KEY and never sent to the browser; a blank field keeps it.
POST /api/admin/settings/smtp-test logs in with the form's values (saved or
not) and sends a test email, returning the server's reason on failure; it is
rate limited and audited. On first start an existing SMTP_* setup is copied
into Settings once. The audit log no longer records the SMTP password.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Ls1vMaqhrehXcHJe32jLL9
2026-10-28 01:26:41 +02:00
joshua ad01328ce3 Merge branch 'chore/deploy-script' 2026-10-27 23:55:46 +02:00
joshuaandClaude Opus 5.5 5a90c713d8 Deploy script with rollback (1.1.2)
scripts/deploy.sh backs up the database (pg_dump), checks out the release,
runs npm ci, prisma migrate deploy and generate, builds the frontend,
restarts the PM2 apps and health-checks them. Any failure puts back the
previous code and build, and restores the dump if new migrations had run.
deployment.md §12 now uses it. tsconfig.tsbuildinfo leaves git so builds
don't leave the tree dirty.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 23:55:46 +02:00
joshua e4a19f90dc Merge branch 'fix/campuses-row' 2026-10-27 23:50:36 +02:00
joshuaandClaude Opus 5.5 affbde14d0 Show campuses on the install page (1.1.1)
The heartbeat's stats.campuses and stats.campusCount were stored but never
shown. The Usage card now has a Campuses row: Off, or On with the active count.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 23:50:36 +02:00
joshua ccdf18857b Merge branch 'docs/campus-count' 2026-10-27 16:55:55 +02:00
joshuaandClaude Opus 5.5 ed42b963fc Protocol doc: campusCount in the heartbeat (Cross Events 1.43.0)
Optional field, so no protocol version change; the Hub stores stats as-is.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 16:55:54 +02:00
joshua 544e1ec1d3 Merge branch 'feat/update-requests' v1.1.0 2026-10-27 13:55:20 +02:00
joshuaandClaude Opus 5.5 603b2046d4 Update requests from installs (1.1.0)
POST /api/installs/update-request, signed like the heartbeat: opens an
update_requested alert and emails the alert address once; the next heartbeat
on a newer version resolves it. Shares the signature check with the heartbeat
and syncs docs/hub-protocol.md with the install's copy.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 13:55:03 +02:00
joshuaandClaude Opus 5.5 0c0666eb40 Release 1.0.1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v1.0.1
2026-10-27 13:39:11 +02:00
joshuaandClaude Opus 5.5 a1e3f9214b Rename to Cross Events Hub; add logo and favicon
Hope Events is now Cross Events. Protocol identifiers (hel1. tokens, CEH- keys)
are unchanged so existing installs keep working.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 13:38:52 +02:00
joshuaandClaude Opus 5.5 dcaa0b1dcf Add deployment guide (frp + FASTPANEL nginx + PM2)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 12:15:26 +02:00
joshuaandClaude Opus 5.5 b24f6a75be Release 1.0.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012mt6TCv85T9VKRq3cV7rXq
v1.0.0
2026-10-26 13:04:09 +02:00
joshuaandClaude Opus 5.5 e72330893a Hub v1: install API, licences, health dashboard, alerts
- Protocol 1 (docs/hub-protocol.md): public key, register, signed heartbeats
- Ed25519 licence tokens (30-day validity, status, expiry, grace, limits)
- Dashboard: installs, install detail, customers and licences, alerts,
  settings and audit log; two-factor login required
- Alert checks every 5 minutes, emailed once; heartbeat roll-up after 30 days
- Unit tests for encryption, tokens, signatures, TOTP and alert rules

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012mt6TCv85T9VKRq3cV7rXq
2026-10-26 12:12:51 +02:00