Commit Graph
302 Commits
Author SHA1 Message Date
openhands d1003bb89b Update Dockerfile and Compose configuration 2026-09-06 19:19:25 +02:00
simoleo 9b0ea2fb16 fix(news): restore publication flow and deduplicate dashboard friends 2026-09-06 18:32:43 +02:00
openhands 35f66d879f fix(cache): stop serving stale site-settings defaults after deploy
The site-settings loader kept an in-process map forever after a Redis miss
and promoted DEFAULTS (no logo/theme) to Redis on any DB error, so a build
that started before the DB was reachable stuck the site on the preset logo
and default theme until a manual reload or full restart.

- Redis miss now reloads from the database instead of the stale in-process map
- a DB failure returns defaults only as an in-process last resort and never
  writes them to Redis, so the shared cache can't be poisoned by a transient
  error at startup
- regression tests: DB re-read on Redis miss after cache expiry, defaults never
  promoted to Redis, recovery from transient DB failure
2026-09-06 12:56:29 +02:00
simoleo 85a6df162b feat(me): organize personal dashboard and localize user actions 2026-09-06 11:30:24 +02:00
openhands 9ae03056e2 chore: remove 4 unused files (theme-editor-fields, use-user-bulk-actions, user-columns, use-media-library) 2026-09-05 23:27:02 +02:00
openhands 9bc0834bbb refactor(admin): extract useBatchImport hook, fix test env, consolidate date formatting 2026-09-05 22:06:35 +02:00
simoleo 98b0009206 fix(git): isolate catalog commands from parent hook environment 2026-09-05 19:57:19 +02:00
simoleo 816e3875c2 feat(admin): add production error center and refresh CMS dependencies 2026-09-05 19:53:09 +02:00
simoleo e17346ab9f refactor(cms): separate dashboard data and editor components with focused UX fixes 2026-09-05 18:46:03 +02:00
simoleo 570f3dde44 feat(catalog): repair missing furniture components with verified status 2026-09-05 18:12:34 +02:00
simoleo 2619bec165 feat(catalog): queue furniture imports with history and matching file attachments 2026-09-05 17:02:26 +02:00
simoleo 2d14e02a68 fix(catalog): remove suggestions that substitute different furniture 2026-09-05 15:26:46 +02:00
simoleo 33b6d1520e fix(catalog): stream single imports and preserve response errors 2026-09-05 15:16:42 +02:00
simoleo 159b1f7d1b fix(catalog): check source assets and offer reachable import alternatives 2026-09-05 14:56:04 +02:00
simoleo 8c1efae296 Expose actionable asset download and filesystem failure details 2026-09-05 14:38:10 +02:00
simoleo 8a919f85b2 Preserve furniture revisions when downloading source assets 2026-09-05 14:29:48 +02:00
simoleo 7880d5d5df Recover failed conversion workers and validate Nitro downloads correctly 2026-09-05 14:18:28 +02:00
simoleo a78d8256e0 Recognize imported furniture by normalized classname and local IDs 2026-09-05 14:04:52 +02:00
simoleo 9dc6b8a261 Remap occupied furniture IDs during Catalog Studio imports 2026-09-05 13:51:29 +02:00
simoleo 9f791ba284 Support Gitea configuration and safe Catalog Studio furniture completion 2026-09-05 13:33:40 +02:00
simoleo b6d866b087 test: allow Git integration checks enough time on CI 2026-09-05 11:55:36 +02:00
simoleo 9ec9ab31ad feat: export Catalog Studio assets and SQL to catalog repository 2026-09-05 11:49:00 +02:00
openhands 30c95b1a5c feat: comprehensive CMS improvements
- Fix DOMPurify SSR crash (use isomorphic-dompurify)
- Fix SanitizedHtml to sanitize by default
- Add auth guards to studio/catalog maintenance pages
- Add update/edit to vouchers CRUD
- Add update/edit to rare-values CRUD
- Add approve workflow to applications page
- Add edit form to guilds detail page
- Add SEO metadata to all public pages (21 pages)
- Fix mobile nav accessibility (focus trap, aria attributes)
- Fix missing labels and table accessibility
- Add dynamic imports for heavy client components (6 components)
- Fix silent error swallowing (40+ locations)
- Add content scheduling for articles (publishAt, status)
- Wire up 12 missing webhook notification triggers
- Add global search to admin panel
- Add bulk actions to admin users table
- Fix JSON formatting and a11y issues
2026-09-03 16:00:32 +02:00
simoleo 37ad27c5f3 fix: support legacy rank permission schema 2026-08-31 21:01:13 +02:00
simoleo 384ede19c4 style: format rank permission regression test 2026-08-31 20:51:47 +02:00
simoleo edfe878b2a fix: repair missing rank permission columns 2026-08-31 20:49:51 +02:00
openhands 7556b1f3fa perf: prevent import hanging with timeouts and batching
- verifyAndFixInteractionModesCount: paginated DB queries (500/batch)
  instead of loading all items into memory at once
- withFurniDataLock: add 60s chain timeout to prevent deadlocks
  when a lock holder stalls or crashes
- withGamedataLock: same timeout protection for gamedata locks
- conversion-pool: add 60s per-job timeout, fall back to main thread
- furni/batch: abort signal + post_import progress events + skip
  post-import steps when client disconnects
- furni/batch-regen: abort signal + early exit when disconnected
- clone/sync-all: pre-fetch furnidata once per source instead of
  per item (eliminates 2000+ redundant fetches)
- sse-client: add 60s idle timeout to prevent infinite hangs
2026-08-31 18:25:32 +02:00
openhands a7ccc98f84 fix: resolve pre-existing lint warnings
- Remove unused siteSettings import in auth-precheck.test.ts
- Replace non-null assertions with proper null checks in furni-data-i18n.ts
- Replace non-null assertions with proper null checks in conversion-pool.ts
2026-08-31 17:48:36 +02:00
simoleo b1ddda66ff Revert "Merge pull request 'Complete Housekeeping migration and /ase cutover' (#52) from codex/housekeeping-complete into main"
This reverts commit 488b6e57c4, reversing
changes made to b506b4499a.
2026-08-30 21:31:34 +02:00
simoleo 2b8f73a91d feat(housekeeping): cut over administration to ase 2026-08-30 20:35:22 +02:00
simoleo 2e95a106e0 feat(housekeeping): integrate studio operations 2026-08-30 15:29:58 +02:00
simoleo 3fa1119f5a fix(housekeeping): address people moderation review 2026-08-29 23:53:38 +02:00
simoleo 29fe22297b feat(housekeeping): complete people moderation parity 2026-08-29 22:38:50 +02:00
simoleo 3d385d1869 Merge branch 'main' of https://gitlab.epicnabbo.nl/remco/EpicNext-Cms into codex/housekeeping-complete 2026-08-29 21:16:46 +02:00
openhands ca59a1065f perf: use lzma-wasm for SWF decompression and drop vite
Replace the pure-JS lzma decoder with lzma-wasm (Rust/WASM, base64-inlined,
zero-alloc decompress), giving an order-of-magnitude speedup on furni
imports. Remove the obsolete lzma type shim and the redundant top-level
vite dev dependency, which nothing imports directly.
2026-08-29 19:27:27 +02:00
simoleo 91c9efcbb4 fix(housekeeping): complete people workflow fidelity 2026-08-29 14:39:38 +02:00
simoleo 139e8cfc3a Merge branch 'main' of https://gitlab.epicnabbo.nl/remco/EpicNext-Cms into codex/housekeeping-complete 2026-08-28 20:21:13 +02:00
openhands 944e8ff1d8 fix: harden update pipeline and restore a clean production build
- update-Nitrov3.sh: build CMS into .next-staging and swap atomically so a
  failed build never takes the live site down; auto-merge new variables
  from .env.example; validate env for duplicates/broken lines; restart the
  emulator/CMS only when rebuilt or unhealthy; fix step renumbering
- next.config.ts: support NEXT_DIST_DIR for staged production builds
- fix all TS errors (unused imports, missing tryDownloadCandidates helper)
  so tsc and the production build pass clean
- add Dockerfile/.dockerignore and switch docker-compose to a CMS container
- include prevailing UI/refactor changes (SurfaceCard, ticketing, tsconfig)
2026-08-28 12:48:04 +02:00
simoleo 64bb230de5 Merge branch 'main' of https://gitlab.epicnabbo.nl/remco/EpicNext-Cms into codex/housekeeping-complete 2026-08-27 17:25:31 +02:00
openhands 750fcb2e5c refactor: resolve hotel name directly from HOTEL_NAME env
resolveHotelName() now returns env.HOTEL_NAME directly — the single source
of truth. The CMS hotel_name site setting and its DEFAULTS entry are removed
as dead code since they no longer influence the displayed name.

Call sites are unchanged (still await resolveHotelName()); only the lookup
behind it is gone, so the public site always shows the configured env name
with no DB round-trip and no preset.
2026-08-27 16:42:12 +02:00
openhands 164a4f4ef6 refactor: remove hotel-name fallback, fail fast when unconfigured
Drop the hardcoded FALLBACK_HOTEL_NAME ("Atom") preset and the brand.ts
module. HOTEL_NAME is now a required env var: if it (and the CMS hotel_name
setting) is missing the site fails validation at startup/build with a clear
message instead of silently rendering a placeholder hotel name.

resolveHotelName() resolves CMS hotel_name -> required HOTEL_NAME only.
Callers that used the preset (api/home route catch branch, CMS settings form
default, mobile-nav/logo-generator prop defaults) now use the configured name
or an empty default; the real name is already passed in by server parents.
2026-08-27 16:35:00 +02:00
simoleo 483d5b8c67 fix(housekeeping): restore audit search interpolation 2026-08-26 22:04:16 +02:00
simoleo 21cd88ccfd fix(housekeeping): preserve audit failure evidence 2026-08-26 22:03:02 +02:00
simoleo 89dec9da05 feat(housekeeping): correlate command audit evidence 2026-08-26 21:56:51 +02:00
openhands 4eded4ec61 Apply Biome lint fixes 2026-08-25 22:26:05 +02:00
openhands e06596391e Fix Turbopack module resolution for lzma and restore path imports 2026-08-25 22:19:59 +02:00
openhands 6ae7c09682 perf: offload per-import localized patch to worker + cache FurnitureData parse
Per single furni import, patchLocalizedFurniDataEntries ran for every
language and did a full 100k-entry JSON.parse + scan + JSON.stringify on the
main thread. That CPU spike is now offloaded to the translation worker
(init/prepare/finalize reuses the same pure core helpers), so importing
never blocks the event loop. The main thread only does async file I/O and the
network LibreTranslate calls. Falls back to the same helpers on the main
thread if no worker is available.

Also cache readFurniData() by file mtime+size so the 100k-entry JSON is
parsed once per change instead of on every import/fix/reconcile read
(invalidated on write).
2026-08-24 19:29:21 +02:00
simoleo 6ed1b03e24 chore: align Node 26.7.0 toolchain 2026-08-24 19:12:11 +02:00
openhands f94246e067 perf: offload FurnitureData translation build to a worker thread
The translation build's CPU-heavy work (deep clone of the 100k+ entry
master, the two full scans and JSON.stringify per language) now runs in a
worker thread, so "Alles vertalen" no longer blocks the main event loop.
Network/DB parts (official Habbo fetch, LibreTranslate, file writes) stay
on the main thread. The pure helpers were extracted to furni-data-i18n-core
(no server-only deps) so the worker can import them. Falls back to the same
helpers on the main thread when no worker is available or in tests.
2026-08-24 19:10:33 +02:00
openhands 8d1b09f151 perf: offload SWF→Nitro conversion to a worker-thread pool
The synchronous convertSwfToNitro / extractIconFromSwf calls (pure CPU,
no DB/network) now run in a small worker pool so the main Node event
loop stays free during imports — the dominant import-time CPU spike is
moved off the request thread. The pool degrades gracefully to a
synchronous fallback if workers can't be created, and is skipped in the
test environment.
2026-08-24 19:02:19 +02:00