Commit Graph
193 Commits
Author SHA1 Message Date
simoleo89 9ec9ab31ad feat: export Catalog Studio assets and SQL to catalog repository 2026-09-05 11:49:00 +02:00
openhands 399c047515 fix: harden admin actions, search, sanitization and repo hygiene
- Split approve/dismiss application workflows with distinct audit logs,
  rate-limited guards and real error logging
- Validate article status/date/id input and stop resetting publishedAt
  on every update
- Validate guild updates (state, forum enums, non-empty name) behind
  rate-limited guard
- Fix scheduled-article publishing (ignore NULL dates, set updatedAt,
  type-safe predicates)
- Harden admin search API (LIKE escaping, query cap, per-user
  rate limit, round-robin result cap) and fix search dialog
  abort/res.ok/loading races
- Lock down HTML sanitizer to an allowlist profile and add XSS tests
- Improve mobile nav accessibility (unique id, dialog role, focus
  management, scroll lock, outside close)
- Log swallowed server errors instead of silent catch blocks
- Remove dead eslint config, drop unused dompurify deps, restore knip
  CI step, add Playwright config with smoke spec
2026-09-04 13:04:08 +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
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
openhands adf0658916 feat: extend theme builder with block visibility, layout, effects, media, and custom CSS tabs
- Add theme-blocks.ts registry with 24 themeable blocks across 4 categories
- Extend resolver to resolve blocks, layout, effects, media, and custom CSS per scope
- Add data-theme-block attributes to all site layout blocks
- Extend ScopedThemeVars to generate CSS for block visibility, layout vars, effect vars, media vars, and custom CSS
- Rewrite admin UI with 6 tabs: Colors, Blocks, Layout, Effects, Media, Custom
- Extend server actions to save/load all new setting types
- No database migration needed - uses existing theme_scope_values table with prefixed keys
2026-08-31 17:44:29 +02:00
openhands a98b194386 feat: add scoped theme builder system with per-route, per-module, and multi-site support
- Add theme_scopes and theme_scope_values database tables for scoped themes
- Implement theme resolver engine with inheritance: global > site > module > route
- Add module detection for 20+ routes (shop, guilds, radio, news, etc.)
- Create admin UI at /admin/theme-builder with scope tree and color editor
- Add ScopedThemeVars component for injecting scoped CSS via data-attributes
- Add ThemeScopeDetector client component for runtime module/route detection
- Add site-resolver for multi-site domain detection
- Add /api/themes/export endpoint (JSON, CSS, variables formats)
- Add /api/themes/export/embed.js for external integration widget
- Add server actions for full CRUD on scopes and theme values
- Add admin nav link and EN/NL translations
2026-08-31 17:15:42 +02:00
simoleo89 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
simoleo89 222535e116 fix(housekeeping): close final authorization gaps 2026-08-30 21:01:32 +02:00
simoleo89 2b8f73a91d feat(housekeeping): cut over administration to ase 2026-08-30 20:35:22 +02:00
simoleo89 b9c47aa89a style: satisfy cumulative biome checks 2026-08-30 19:38:36 +02:00
simoleo89 8a31556d51 test(housekeeping): prove 137 route parity 2026-08-30 19:11:14 +02:00
simoleo89 5574e601bb feat(housekeeping): personalize command deck 2026-08-30 16:55:10 +02:00
simoleo89 300ac0ef95 feat(housekeeping): compose operational inbox 2026-08-30 16:26:20 +02:00
simoleo89 bcb0ca977f feat(housekeeping): add global command deck search 2026-08-30 15:59:48 +02:00
simoleo89 abc707cfb2 feat(housekeeping): deliver hotel operations 2026-08-30 14:34:26 +02:00
simoleo89 bfc5bd78a1 fix(housekeeping): preserve banner server actions 2026-08-30 14:33:50 +02:00
simoleo89 9c4b973faf feat(housekeeping): deliver economy vertical 2026-08-30 13:47:06 +02:00
simoleo89 b70bd401d1 fix(housekeeping): retain admin banner shim 2026-08-30 12:11:14 +02:00
simoleo89 08358b8aa4 style: satisfy housekeeping biome gate 2026-08-30 11:59:24 +02:00
simoleo89 d1160eb65a fix(housekeeping): address task 14 review round 3 2026-08-30 11:48:52 +02:00
simoleo89 c524b305d7 fix(housekeeping): address task 14 review round 2 2026-08-30 11:30:17 +02:00
simoleo89 d09eaa33d6 fix(housekeeping): address task 14 review round 1 2026-08-30 10:53:50 +02:00
simoleo89 fd68819d9b feat(housekeeping): deliver content vertical 2026-08-30 01:54:43 +02:00
simoleo89 3fa1119f5a fix(housekeeping): address people moderation review 2026-08-29 23:53:38 +02:00
simoleo89 29fe22297b feat(housekeeping): complete people moderation parity 2026-08-29 22:38:50 +02:00
simoleo89 3d385d1869 Merge branch 'main' of https://gitlab.epicnabbo.nl/remco/EpicNext-Cms into codex/housekeeping-complete 2026-08-29 21:16:46 +02:00
simoleo89 a6a288d9ff fix(housekeeping): restore people partial compatibility 2026-08-29 21:03:43 +02:00
openhands 7f39ba4257 fix: harden SSO ticket flow and revoke tickets on logout
Reuse the outstanding auth_ticket instead of minting a fresh one on every
/client load, so reloading the page or opening a second tab no longer
invalidates a game session that is still connecting. New tickets are minted
with a guard against the previously-read value so concurrent launches
converge on the same ticket.

Revoke the auth_ticket when signing out (toolbar, header and sign-out
everywhere) so a leaked ticket can no longer be replayed against the
emulator, and prevent SSO leakage via referral by setting no-referrer on the
client iframe. Strip all whitespace from the ticket prefix and build the
launch URL through a tested helper that handles query strings, existing sso
params and URL fragments correctly.
2026-08-29 20:54:06 +02:00
simoleo89 91c9efcbb4 fix(housekeeping): complete people workflow fidelity 2026-08-29 14:39:38 +02:00
simoleo89 25b76437ff fix(housekeeping): harden people account workflows 2026-08-29 13:13:04 +02:00
simoleo89 e1b31ff773 feat(housekeeping): deliver people account workflows 2026-08-29 11:45:50 +02:00
simoleo89 c325c53774 fix(housekeeping): harden system workflow boundaries 2026-08-29 00:25:47 +02:00
simoleo89 3788ecd9f1 feat(housekeeping): deliver system vertical 2026-08-28 23:31:47 +02:00
simoleo89 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
simoleo89 00618fb2a3 fix(housekeeping): harden command dispatch boundaries 2026-08-27 19:32:19 +02:00
simoleo89 796d009c07 fix(housekeeping): harden audited command dispatch 2026-08-27 18:58:14 +02:00
simoleo89 6aed71a8b2 feat(housekeeping): dispatch audited commands 2026-08-27 18:30:44 +02:00
simoleo89 60968409aa fix(housekeeping): count preference payload bytes 2026-08-27 17:53:16 +02:00
simoleo89 4e0bf598ed fix(housekeeping): harden preference persistence 2026-08-27 17:44:53 +02:00
simoleo89 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 89c1751e79 refactor: extract shared login credential verification into auth/login-core
The username normalization, dummy-hash constant, password check and
email-verification gate were duplicated between precheckLogin and the
NextAuth credentials authorize handler. Move them into a single
login-core module so both paths share one source of truth and stay
consistent.
2026-08-27 15:17:54 +02:00
openhands ac5cd6bc3f fix: normalize username and password with NFC in login flow
precheckLogin already normalized the username with NFC, but the
NextAuth credentials authorize handler only trimmed it. This caused a
mismatch for accounts with accented/non-ASCII usernames: the precheck
passed while the actual sign-in lookup found no user and returned
'invalid username or password'.

Also normalize the password to NFC in both the precheck and the
authorize handler to match how register.ts hashes it.
2026-08-27 15:09:43 +02:00
simoleo89 2eb0456999 feat(housekeeping): persist operator preferences 2026-08-26 22:17:52 +02:00
openhands f25a26a93e Register: auto sign-in to /me and speed/cleanup improvements
- Send the verification email after the response via after() so it
  never blocks sign-up
- Invalidate the cached login lookup right after account creation so
  the automatic sign-in always finds the fresh row
- Auto sign in with the submitted credentials and go straight to /me,
  with a fallback to /login?registered=1 if sign-in is refused (e.g.
  email verification required)
- Cache the register page's online/latest user queries to cut DB load
  under traffic
- Fix terms checkbox label double-toggle cancelling the selection
- Add pages.register.redirecting translation to all locales
2026-08-26 14:57:51 +02:00
openhands 2d09a4a92c Add missing migrations 2026-08-26 14:28:28 +02:00
openhands 3a292a44f1 feat: make catalog-pages dedup a choosable step in Fix alles
The maintenance "Fix alles" now has a checkbox to include or skip the
duplicate catalog_pages merge, so admins can choose whether to run it.
removeDuplicates takes an includePages flag and fixEverything threads it
through to the action.
2026-08-24 18:35:00 +02:00
openhands 6dced0fb54 feat: per-import translation toggle and language picker in studio
Furni imports can now choose whether to translate (per import) and which
languages to build, instead of always rebuilding all 13 FurnitureData_<lang>
files. The studio header also has a global switch that persists the
furnidata_translate_enabled setting, seeding the per-import default.
2026-08-24 18:16:42 +02:00
openhands 34475e9bc2 Fix dedup to also remove duplicate catalog_items/catalog_items_bc rows (comma-list-aware item_ids remap) 2026-08-23 15:30:52 +02:00
openhands 536b61c7e7 Add catalog maintenance page with sprite-id, dedup and FurnitureData id-alignment repairs 2026-08-23 15:05:49 +02:00