Commit Graph

68 Commits

Author SHA1 Message Date
ad87a71edf fix: use brand logo as favicon
Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-11 19:48:25 +08:00
5b9d74acb7 feat: add user profile management and admin user deletion 2026-09-11 18:22:48 +08:00
57c854a3f2 fix: preserve cms base url after login 2026-09-11 17:39:32 +08:00
080af1151b fix: use full navigation for cms entry 2026-09-11 17:29:55 +08:00
70f64b69e6 fix: redirect cms root to admin 2026-09-11 17:23:00 +08:00
be7e1f4e00 fix: expose cms management entry 2026-09-11 16:52:29 +08:00
c439ccb2d1 feat: add captcha and unique username login 2026-09-11 16:25:32 +08:00
de6fdb02c3 feat: add email or sms registration verification 2026-09-11 16:22:57 +08:00
8a7dd626f8 fix: clarify email verification is enabled 2026-09-11 15:19:59 +08:00
ef2cae59ad feat: require email verification for registration 2026-09-11 15:17:02 +08:00
b805887882 fix: clarify production registration messaging 2026-09-11 15:03:06 +08:00
32a397afe0 Revert "feat: add temporary coming soon homepage"
This reverts commit 97abca8f0f.
2026-09-11 14:51:33 +08:00
97abca8f0f feat: add temporary coming soon homepage 2026-09-10 19:59:25 +08:00
f613fc5680 docs: record production deployment and smtp alert template 2026-09-10 19:48:25 +08:00
df6a0e46a6 docs: rework offsite backup into a real, restorable archive
Move backup to /volume2/NetBackup (DSM shared folder, kts_bak read/write) and
change the design from a --delete mirror to an additive, date-stamped archive:
per-run pg_dump snapshots for the DBs and per-run full tar.gz snapshots for
audio, each kept for 7 generations, transferred over encrypted SSH with
post-transfer SHA256 verification (success only when byte-identical). This
removes the --delete risk (source-side deletion no longer wipes the backup),
enables restore-to-a-date, and is verified by an actual restore from the NAS
into isolated DBs (0 errors, quota/ledger and audio associations consistent).
2026-09-10 17:48:51 +08:00
62dba45799 docs: correct offsite backup to /volume1/NetBackup via tar-over-SSH
Moved the backup out of the NAS home dir to /volume1/NetBackup/kaotings per
request. Synology restricts rsync-over-SSH to registered shared folders and
scp/sftp yields root-owned files that the backup account cannot rotate, so the
backup now uses tar over SSH (kts_bak-owned, rotatable, encrypted, key auth).
Document the transport rationale and the DSM shared-folder upgrade path for
incremental rsync.
2026-09-10 16:25:45 +08:00
99976ef77f docs: record configured offsite NAS backup (rsync over SSH)
Offsite backup to the Synology NAS (103.40.14.100:52200) is now configured:
pg_dump of business+CMS DBs (keep 7 per series) plus rsync of the audio dir,
encrypted over SSH with key auth, on a daily 03:00 systemd timer. Document the
destination, transport, script, timer, and restore-from-NAS procedure; mark the
backup-location item resolved (retention/threshold/owner still pending).
2026-09-10 15:24:04 +08:00
34c2b436f0 docs: Phase 5 acceptance, deployment, operations and phase report
Record the task/quota exception matrix (isolated fault injection) results,
the admin quota concurrency fix, the isolated restore drill (business/CMS/audio,
with the pre-existing missing-audio finding), upstream security launch blocker,
and remaining minor items. Each item marked pass / fail / awaiting-external with
test version and evidence. Do not mark reliability/launch-blocking items complete.
2026-09-10 05:01:27 +08:00
8657f447a1 fix(api): make quota adjustment consistent with concurrent freeze/settlement
Admin quota adjustment now takes the per-user advisory lock and a FOR UPDATE
row lock on the quota account before projecting the balance, so the check
covers both used and reserved amounts and stays transactionally consistent
with task freeze and settlement. Settlement and lease-recovery paths also
lock the quota row explicitly.

Add the isolated Phase 5 exception-matrix harness (fault injection against a
dedicated DB + fake upstream) covering last-quota contention, concurrent
admin reduce, freeze/reduce stress, bad/oversized/timeout upstream, storage
failure, cross-period settlement and queued/running restart recovery.
Add test-only deps, provisioning helper (secrets via env) and test README.
2026-09-10 04:38:47 +08:00
956862215d docs: record P4-04..P4-07 admin acceptance and leftover items 2026-09-10 02:59:36 +08:00
2aa1af97a4 feat(admin): build real admin UI for users, VIP/quota, TTS and audit 2026-09-10 02:34:27 +08:00
8aae84b404 feat(admin): P4-04..P4-06 admin API for users, VIP/quota, TTS and audit 2026-09-10 02:30:29 +08:00
be297f2fb2 chore: decommission CMS one-shot seed route and document slug query 2026-09-10 02:03:02 +08:00
3af0a03da2 docs: record Phase 4 CMS acceptance results 2026-09-10 01:30:47 +08:00
e5492ceccb fix: seed-admin route must not destroy shared payload pool 2026-09-10 01:21:55 +08:00
14d26c765a feat: add controlled one-shot CMS admin seed route 2026-09-10 01:18:20 +08:00
bd192d9a3c fix: add CMS initial migration for reproducible schema 2026-09-10 01:00:25 +08:00
187de3165b fix: restore Next basePath with Caddy passthrough 2026-09-10 00:31:22 +08:00
37164dd8ef fix: normalize optional segments in Payload admin route 2026-09-10 00:18:02 +08:00
1df151dd0a fix: delegate CMS prefix handling to Caddy 2026-09-09 23:05:48 +08:00
2b9baf2f5e fix: type generated Payload import map 2026-09-09 22:42:48 +08:00
f5cc7b45c7 fix: wire Payload CMS server functions and import map 2026-09-09 22:37:10 +08:00
88c081fe23 chore: add CMS backup script and status 2026-09-09 20:05:03 +08:00
76f826c2a9 docs: clean Phase 4 report formatting 2026-09-09 19:30:54 +08:00
24766c8346 docs: record Phase 4 CMS boundary and blocker 2026-09-09 19:30:24 +08:00
060feff597 fix: use Payload default internal route paths 2026-09-09 19:24:28 +08:00
54b516ffee fix: mount CMS under cms base path 2026-09-09 19:18:30 +08:00
8ff983e858 fix: preserve CMS admin prefix through proxy 2026-09-09 19:13:53 +08:00
864ae270fc fix: preserve CMS external route prefix 2026-09-09 19:08:41 +08:00
1031335c5d fix: isolate CMS PostCSS dependency 2026-09-09 17:58:04 +08:00
5e7c40ab05 fix: make Payload migrations runnable on Node 24 2026-09-09 17:53:07 +08:00
1f593fcab4 feat: add Payload CMS foundation 2026-09-09 17:02:46 +08:00
5775214e05 docs: record final Phase 3 recovery deployment 2026-09-09 15:15:40 +08:00
d9a491ef43 fix: finalize Phase 3 V1 minimum and worker recovery 2026-09-09 15:00:59 +08:00
9bf98522af fix: harden Phase 3 task leases and metering 2026-09-09 14:35:29 +08:00
2e99155264 docs: record successful TTS upstream integration 2026-09-09 14:16:54 +08:00
171d323b47 docs: define server-side TTS configuration boundary 2026-09-09 14:09:09 +08:00
fe3ad3ea78 docs: clean Phase 3 report formatting 2026-09-09 00:48:49 +08:00
f814f35f41 docs: record Phase 3 TTS boundary and tests 2026-09-09 00:48:28 +08:00
d82693b4fa feat: connect Phase 3 TTS workspace 2026-09-09 00:43:56 +08:00