Commit Graph
748 Commits
Author SHA1 Message Date
openhands a3e3356ea7 style: align both card systems to shared design tokens
Unify the public site by making SectionCard and the verify status card use
the same --radius-lg / --shadow-card tokens and primary-tint header as the
existing CSS .content-card used by all content pages. This makes the entire
(site) group visually consistent without rewriting every page, and keeps the
shadcn Card in components/ui/card.tsx (used by admin) intact.
2026-08-27 15:51:32 +02:00
openhands b3340dbfdf style: unify remaining site card headers with SectionCard
Convert the settings page neon gradient section headers (blue/purple/green)
to the shared SectionCard, and replace the verify page's harsh multi-stop
status gradients with subtle status-tinted headers while keeping the
green/amber/red/blue semantics. The me page already used a consistent
rounded-2xl card style, so it needed no change.
2026-08-27 15:42:30 +02:00
openhands 087dd7d873 style: apply consistent professional layout to login page
Reuse the SectionCard component to unify the neon section headers, center
the page in a max-w-6xl container, and give the welcome panel and login
card consistent rounded corners and subtle shadows, matching the home
and register pages.
2026-08-27 15:32:32 +02:00
openhands 9f0ee74ce8 style: apply consistent professional layout to register page
Reuse the SectionCard component to unify the green/purple/blue neon
section headers, center the page in a max-w-6xl container, and give the
welcome panel and form card consistent rounded corners and subtle
shadows, matching the home page.
2026-08-27 15:24:59 +02:00
openhands 005af25773 style: make home page layout more professional
Unify the per-section neon gradient headers (blue/green/purple) into a
single consistent SectionCard component with a calm surface header and
hairline divider, constrain the page to a centered max-w-6xl container,
and soften the hero/cards with rounded-3xl corners and subtle shadows.
2026-08-27 15:21:25 +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
Simo 2a36ba1956 Merge branch 'main' into codex/housekeeping-foundation 2026-08-26 19:50:26 +02:00
simoleo89 08f8d54888 fix: close housekeeping foundation review findings 2026-08-26 19:16:34 +02:00
simoleo89 ebc263da35 test: harden housekeeping foundation boundaries 2026-08-26 18:00:35 +02:00
simoleo89 a158c78a7c test: verify housekeeping foundation boundaries 2026-08-26 17:44:03 +02:00
openhands 9d0da5d65a Perf: cache Nitro client assets and parallelize client page
- Serve /swf and /nitro-assets (~2.8GB) with 7-day Cache-Control plus
  stale-while-revalidate so client opens stop re-fetching hundreds of
  files while asset updates still propagate in the background
- Issue the SSO ticket and the online count query in parallel on the
  client page to shave a round-trip off the critical render path
2026-08-26 15:06:16 +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 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 416c31643b perf: optimize dashboard database queries and remove unused imports 2026-08-25 21:52:18 +02:00
simoleo89 a47b4eb195 test: canonicalize housekeeping module boundaries 2026-08-25 21:35:10 +02:00
simoleo89 b6bf5e69ca test: parse housekeeping import boundaries 2026-08-25 21:23:58 +02:00
simoleo89 0b46a94d57 test: close housekeeping import-policy escapes 2026-08-25 21:11:37 +02:00
simoleo89 ff2b2af6d4 test: harden housekeeping preview boundaries 2026-08-25 21:00:22 +02:00
simoleo89 d19ba88005 feat: add gated housekeeping foundation preview 2026-08-25 20:45:40 +02:00
simoleo89 cc241f0b7e test: cover housekeeping palette utilities 2026-08-25 20:29:08 +02:00
simoleo89 8bf4663336 test: complete housekeeping shell boundary guard 2026-08-25 20:25:11 +02:00
simoleo89 52ec48ffe4 test: harden housekeeping shell contracts 2026-08-25 20:17:45 +02:00
simoleo89 addc9c7b1a feat: build housekeeping command deck shell 2026-08-25 20:05:56 +02:00
simoleo89 cfeb0f19b8 fix: refine housekeeping Italian copy 2026-08-25 19:54:58 +02:00
simoleo89 14cfad4029 test: harden housekeeping registry contracts 2026-08-25 19:49:31 +02:00
simoleo89 2d5f03048a feat: add housekeeping domain registry 2026-08-25 19:39:08 +02:00
simoleo89 7edca410fa test: harden housekeeping capability context 2026-08-25 19:25:27 +02:00
simoleo89 c63c9830b2 feat: add housekeeping capability context 2026-08-25 19:16:29 +02:00
simoleo89 7d62a04f0e feat: define housekeeping foundation contracts 2026-08-25 19:06:23 +02:00
simoleo89 3b3d7780c9 docs: complete housekeeping migration matrix 2026-08-25 18:49:58 +02:00
simoleo89 9b7d5de12f fix: classify Studio audit repairs as mutations 2026-08-25 18:34:15 +02:00
simoleo89 949e14c109 docs: audit housekeeping hotel workflows 2026-08-25 18:26:25 +02:00
simoleo89 4d9845b52f fix: complete housekeeping economy audit 2026-08-25 18:14:30 +02:00
simoleo89 3a03a3db15 docs: audit housekeeping economy workflows 2026-08-25 18:14:30 +02:00
simoleo89 09850c807c docs: audit housekeeping content workflows 2026-08-25 18:14:29 +02:00
simoleo89 eb9f01d6fe docs: audit housekeeping people workflows 2026-08-25 18:14:28 +02:00
simoleo89 a619f89106 fix: normalize housekeeping root routes 2026-08-25 18:14:28 +02:00
simoleo89 dee4031421 test: define housekeeping migration inventory 2026-08-25 18:14:27 +02:00
openhands 1a0d20fae5 i18n: add pages.admin.studio namespace to all 22 locale files (EN placeholders + Dutch) 2026-08-24 20:48:13 +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
simoleo89 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
openhands 7116f49e2b perf: eliminate lag spikes and redundant work in furnidata i18n
- patchLocalizedFurniDataEntries now only touches the wanted classnames
  instead of scanning the whole 100k file, reads the master once (was
  twice), and uses the batched translator instead of one HTTP call per
  text.
- Remove the now-unused serial translateWithLibre.
- buildLocalizedFurniDataFiles yields between the two section scans and
  before stringify so a single language no longer blocks the event loop
  for the whole pass at once.
2026-08-24 18:52:55 +02:00
openhands 5efd004533 perf: throttle localized furnidata build to avoid 100% CPU spikes
Lower LibreTranslate concurrency to 2 and yield the event loop between
languages so the 13x deep-clone + stringify loop no longer pins a core
continuously. The build is also already opt-in (off by default on import).
2026-08-24 18:43:07 +02:00
openhands 4a95b53b02 feat: add "Vertaal alles" button to translate the whole catalog on demand
Lets admins import fast with translation disabled, then build every
language for the full catalog later via the existing build-languages
action.
2026-08-24 18:39:21 +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