Commit Graph
100 Commits
Author SHA1 Message Date
openhands 6985b3e6ea fix: add REDIS_URL to .env and .env.example
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m56s
2026-07-21 23:42:49 +02:00
openhands 5d0983fe41 fix: exclude e2e directory from vitest
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 2m3s
2026-07-21 23:39:42 +02:00
openhands 077bc9afc0 chore: update pnpm-lock.yaml for new dev dependencies
Deploy / release (push) Skipped
Deploy / deploy (push) Failing after 34s
2026-07-21 23:38:04 +02:00
openhands 57f85f5453 chore: add professional tooling (husky, lint-staged, playwright, lighthouse, eslint)
Deploy / release (push) Skipped
Deploy / deploy (push) Failing after 6s
2026-07-21 23:36:54 +02:00
openhands 87bda8dbef feat: add Magic Hotel style index and register pages
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m55s
2026-07-21 20:42:37 +02:00
openhands 827595ef00 fix: mobile responsiveness for all admin pages
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m25s
- DataTable: overflow-x-auto on table wrapper (affects users, rooms, tickets)
- Radio: overflow-x-auto wrappers around all 3 tables (shouts, applications, schedules)
- Catalog items: responsive grids (grid-cols-1 sm:grid-cols-3) in Add/Edit dialogs
- Catalog tabs: TabsList overflow-x-auto for narrow screens
- Import clone: pagination flex-wrap to prevent overlap on small screens
2026-07-21 16:52:58 +02:00
openhands d189bb5af4 fix: mobile responsive improvements
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 2m2s
- Audit: responsive summary cards (grid-cols-2 mobile, p-3), responsive empty states
- Repair-icons/sync-all: log area horizontal scroll (overflow-x-auto, whitespace-nowrap)
- Upload furni: tighter mobile padding (p-4 sm:p-5)
- Nitro client: compact toolbar on mobile (smaller buttons, tighter gap, top-2/left-2)
2026-07-21 16:47:02 +02:00
openhands 43dacea672 fix: add auth error detection to sync-all client
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m25s
2026-07-21 15:39:38 +02:00
openhands e4b6d5db21 fix: detect auth errors in SSE clients
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 2m3s
Audit and repair-icons clients now check the Content-Type before reading the
stream. If the server returns JSON (e.g. CSRF/permission error), the error
message is shown as a toast instead of silently consuming the response as
an empty SSE stream.
2026-07-21 15:37:52 +02:00
openhands bebd65c056 fix: refactor audit to SSE streaming, improve error handling
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m52s
- Changed from blocking JSON endpoint to SSE streaming (like sync-all/repair-icons)
- Progress updates during each audit phase with item counts
- Proper error handling with typed AuditEvent for every failure path
- AbortController support for the client
- Shows real-time progress for each check section
2026-07-21 15:33:15 +02:00
openhands 19e4e10b1d feat: add catalog audit page
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m56s
Checks for:
- items_base entries without catalog_items (not purchasable)
- catalog_items referencing non-existent items_base
- Items without .nitro or icon files on disk
- Duplicate classnames
- Items missing from all configured clone sources
2026-07-21 15:24:58 +02:00
openhands 90107c83d5 fix: rewrite repair-icons with proper error handling and progress
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m38s
- Wrap all DB/file operations in try-catch, send error events via SSE
- Report skipped/progress events for items that already have icons
- Add 'started' event with total count so the UI shows real-time progress
- Catch route-level errors and stream them instead of returning JSON
- Use log line content as React key instead of array index
2026-07-21 15:04:43 +02:00
openhands 13cb5f8670 fix: use admin theme CSS variables in upload-furni-client
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m35s
Replace hardcoded border-gray-300 and text-yellow-* classes
with semantic admin theme tokens (border-input, --admin-warning).
2026-07-21 14:56:38 +02:00
openhands 804daeffca feat: add .nitro upload + sync-all + repair-icons features
Deploy / release (push) Skipped
Deploy / deploy (push) Failing after 32s
- Upload .nitro bundles directly with full DB, catalog, and furnidata integration
- Generate SQL migration files on upload (optional)
- Auto-sync missing furniture from all configured clone sources (SSE batch)
- Repair missing icons by extracting from local .nitro or downloading from sources
- All behind ASSETS_IMPORT permission
2026-07-21 14:53:26 +02:00
openhands c9144dc293 fix: improve health check reliability in do_restart
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m21s
- Use nc -z directly instead of fragile bash /dev/tcp
- Fall through to ss and /dev/tcp as additional fallbacks
- Check emulator health immediately before first sleep
- Show emulator journal log on health check failure
- Increment ERRORS count on failure so exit code reflects it
2026-07-21 14:12:49 +02:00
openhands 7fc53396b4 fix: menu links use bare slugs (Gitea auto-prefixes href with user-content-)
Deploy / release (push) Successful in 8s
Deploy / deploy (push) Skipped
2026-07-20 21:03:02 +02:00
openhands c0975f8a43 fix: scope deploy contract test to deploy job; menu links use Gitea user-content anchors
Deploy / release (push) Successful in 12s
Deploy / deploy (push) Skipped
2026-07-20 20:59:37 +02:00
openhands 43a624bbe7 docs: add self-contained setup reference configs (emulator + nitro) and bold-link buttons
Deploy / release (push) Skipped
Deploy / deploy (push) Failing after 33s
2026-07-20 20:54:26 +02:00
openhands c4532dd340 style: use inline style for release buttons (Gitea strips class)
Deploy / release (push) Successful in 8s
Deploy / deploy (push) Skipped
2026-07-20 20:47:07 +02:00
openhands 039b46d12b docs: expand release wizard with emulator/Nitro/Catalogus steps + buttons
Deploy / release (push) Successful in 8s
Deploy / deploy (push) Skipped
2026-07-20 20:43:43 +02:00
openhands 43ca6dc4b0 fix: add explicit plain-id anchors so the release menu jumps to sections
Deploy / release (push) Successful in 8s
Deploy / deploy (push) Skipped
2026-07-20 20:38:50 +02:00
openhands 45b7a1d9ef test: add explicit anchor for System Requirements to verify Gitea keeps id
Deploy / release (push) Successful in 8s
Deploy / deploy (push) Skipped
2026-07-20 20:35:38 +02:00
openhands a741e6103d fix: menu anchors use Gitea user-content- prefix so TOC links work
Deploy / release (push) Successful in 13s
Deploy / deploy (push) Skipped
2026-07-20 20:31:34 +02:00
openhands 6e27d9c4fe docs: expand release notes with menu, requirements, install wizard, usage
Deploy / release (push) Successful in 8s
Deploy / deploy (push) Skipped
2026-07-20 20:25:45 +02:00
openhands e5de0b53d4 fix: single JSON-encode release body so newlines render (no literal \n)
Deploy / release (push) Successful in 8s
Deploy / deploy (push) Skipped
2026-07-20 20:21:33 +02:00
openhands cb91fbef6c chore: cleaner release notes (cap changelog, concise initial release)
Deploy / release (push) Successful in 8s
Deploy / deploy (push) Skipped
2026-07-20 20:15:44 +02:00
openhands 9617e59747 chore: remove obsolete catalogus pack-trigger proposal
Deploy / release (push) Successful in 8s
Deploy / deploy (push) Skipped
2026-07-20 20:05:42 +02:00
openhands d103316945 refactor: drop pack.yaml; v*-tag release now includes linked repo URLs + commits
Trigger Site Pack / notify (push) Successful in 0s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m35s
2026-07-20 20:04:45 +02:00
openhands 7ac5ed3155 ci: trigger lightweight pack rebuild
Trigger Site Pack / notify (push) Successful in 1s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m42s
Site Pack / pack (push) Successful in 13s
2026-07-20 20:02:11 +02:00
openhands a6b708080c refactor: lightweight pack — bundle CMS only, link other repos via MANIFEST (URL+commit) 2026-07-20 20:02:07 +02:00
openhands d675a842e8 ci: trigger pack rebuild (catalogus full)
Trigger Site Pack / notify (push) Successful in 1s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m36s
Site Pack / pack (push) Successful in 2m11s
2026-07-20 19:50:59 +02:00
openhands a1ba13c1b5 fix: catalogus full clone (no sparse), fix manifest ver/status grep collision 2026-07-20 19:50:53 +02:00
openhands 981f5a5998 ci: trigger pack rebuild (english manifest)
Trigger Site Pack / notify (push) Successful in 1s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m27s
Site Pack / pack (push) Successful in 6s
2026-07-20 19:46:21 +02:00
openhands e16cf9b28f i18n: manifest + release notes in English 2026-07-20 19:46:19 +02:00
openhands 31ce548c65 ci: trigger pack rebuild (manifest)
Trigger Site Pack / notify (push) Successful in 0s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m44s
Site Pack / pack (push) Successful in 19s
2026-07-20 19:44:41 +02:00
openhands 5c83f1e788 feat: clear MANIFEST.md in pack + readable release notes (component/version/status per pack) 2026-07-20 19:44:36 +02:00
openhands 04ed515af7 ci: trigger full pack rebuild (cache cleared)
Trigger Site Pack / notify (push) Successful in 1s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m43s
Site Pack / pack (push) Successful in 1m8s
2026-07-20 19:39:17 +02:00
openhands 5a7d0ab16c fix: guard assemble step (fail if component missing/empty) so pack never ships incomplete 2026-07-20 19:39:13 +02:00
openhands f74b610eda ci: trigger pack rebuild (valid tag name)
Trigger Site Pack / notify (push) Successful in 1s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m32s
Site Pack / pack (push) Successful in 19s
2026-07-20 19:34:02 +02:00
openhands 57511872a2 fix: compute PACK_VERSION in bash (env: did not expand $(date), caused invalid tag -> 500) 2026-07-20 19:33:57 +02:00
openhands 99d806984f ci: trigger pack rebuild (release diag)
Trigger Site Pack / notify (push) Successful in 1s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m40s
Site Pack / pack (push) Failing after 1m17s
2026-07-20 19:29:26 +02:00
openhands e9bd85ea09 diag: surface GITEA_API/REPO and pack-body bytes in release step to isolate 500 2026-07-20 19:29:22 +02:00
openhands d0612c6aac ci: trigger pack rebuild (use gitea.* vars)
Trigger Site Pack / notify (push) Successful in 0s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m18s
Site Pack / pack (push) Failing after 15s
2026-07-20 19:25:44 +02:00
openhands 7bc7e5e7ad fix: revert pack release API vars to gitea.* (proven working in deploy.yaml) 2026-07-20 19:25:40 +02:00
openhands ae9c762539 ci: trigger pack rebuild (release endpoint fix)
Trigger Site Pack / notify (push) Successful in 0s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m18s
Site Pack / pack (push) Failing after 15s
2026-07-20 19:18:13 +02:00
openhands 3e1597fd62 fix: hardcode GITEA_API/GITEA_REPO (gitea.* vars produced 500 on release create) 2026-07-20 19:18:09 +02:00
openhands cbd87d490b ci: trigger pack rebuild (release diagnostics)
Trigger Site Pack / notify (push) Successful in 1s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m18s
Site Pack / pack (push) Failing after 19s
2026-07-20 19:14:14 +02:00
openhands 997b74129e fix: harden release step (validate vars, per-curl http codes, diagnostics) to debug exit 3 2026-07-20 19:14:09 +02:00
openhands 614d351a7c ci: trigger pack rebuild (emulator subdir)
Trigger Site Pack / notify (push) Successful in 1s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m19s
Site Pack / pack (push) Failing after 47s
2026-07-20 19:10:07 +02:00
openhands 3fcd1e1018 fix: build emulator from Emulator/ subdir (pom.xml lives there, not repo root) 2026-07-20 19:10:03 +02:00
openhands eda03c7f96 ci: trigger pack rebuild (clone retries)
Trigger Site Pack / notify (push) Successful in 0s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m19s
Site Pack / pack (push) Failing after 15s
2026-07-20 19:07:07 +02:00
openhands c4a0c607bf fix: retry all repo clones + fail loudly on missing pom/package.json (emulator clone was silently empty) 2026-07-20 19:07:03 +02:00
openhands acdbcdf36e ci: trigger pack rebuild (render before nitro)
Trigger Site Pack / notify (push) Successful in 1s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m18s
Site Pack / pack (push) Failing after 37s
2026-07-20 19:02:56 +02:00
openhands 2af0fc3447 fix: run renderer build before Nitro-V3 so vite.config finds the SDK 2026-07-20 19:02:52 +02:00
openhands e2a2b7162d ci: trigger pack rebuild with renderer path fix
Trigger Site Pack / notify (push) Successful in 0s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m56s
Site Pack / pack (push) Failing after 18s
2026-07-20 18:58:40 +02:00
openhands cc4b7da756 fix: clone CMS from local bare repo in pack workflow (avoids runner HTTPS auth failure)
Trigger Site Pack / notify (push) Successful in 0s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m37s
Site Pack / pack (push) Failing after 28s
2026-07-20 18:55:11 +02:00
openhands 134bb97410 fix: clone renderer to Nitro_Render_V3 so Nitro-V3 vite build finds the SDK
Trigger Site Pack / notify (push) Successful in 1s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m26s
Site Pack / pack (push) Failing after 47s
2026-07-20 18:50:39 +02:00
openhands 682babb1c0 perf: cache per-component builds in pack workflow (only rebuild changed repos; sparse catalogus clone)
Trigger Site Pack / notify (push) Successful in 0s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 2m2s
Site Pack / pack (push) Failing after 46s
2026-07-20 18:45:24 +02:00
openhands 8b5999970b feat: pack auto-rebuilds on any upstream change (CMS/catalogus/nitro/render/emulator) via 15min cron poll
Trigger Site Pack / notify (push) Successful in 0s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m26s
Site Pack / pack (push) Failing after 1m48s
2026-07-20 18:42:02 +02:00
openhands 87d72a1aef feat: add site-pack workflow (builds CMS+catalogus+nitro+render+emulator into pack-YYYYMMDD-HHMM release)
Trigger Site Pack / notify (push) Successful in 0s
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m35s
Site Pack / pack (push) Failing after 1m32s
2026-07-20 18:33:00 +02:00
openhands 222fa1a9db chore: harden update-Nitrov3.sh (git retry, offline maven, parallel build failure detection, real emulator health port check)
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m30s
2026-07-20 18:21:47 +02:00
openhands 7e0519a04c Revert "test: trigger deploy webhook"
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m18s
This reverts commit 6525512a93.
2026-07-20 17:50:10 +02:00
openhands 6525512a93 test: trigger deploy webhook
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m24s
2026-07-20 17:48:29 +02:00
openhands 5e8a13a84f fix: resolve all biomaly lint errors and warnings across CMS
Deploy / release (push) Successful in 4s
Deploy / deploy (push) Skipped
- Fix CSS parser config (tailwindDirectives enabled)
- Fix noDangerouslySetInnerHtml via SanitizedHtml component
- Fix useExhaustiveDependencies in catalog-manager-dialog
- Fix noArrayIndexKey across 26 files (stable keys)
- Fix SVG a11y (titles, roles, aria-labels)
- Fix label/input associations (htmlFor/id pairs)
- Fix static element interactions (role + keyboard support)
- Fix noImgElement, noDescendingSpecificity (disabled - external Habbo URLs)
- Fix noNonNullAssertion, useTemplate, unused vars/imports
- Add SanitizedHtml shared component
- Migrate biome.json to 2.5.4 schema
2026-07-20 17:41:53 +02:00
openhands dd66a5ba2e fix: use TOKEN from env with fallback to secret
Deploy / release (push) Successful in 22s
Deploy / deploy (push) Skipped
2026-07-20 16:03:13 +02:00
openhands 7eb3ba1ce8 feat: add create-release.sh for manual release creation
Deploy / release (push) Skipped
Deploy / deploy (push) Successful in 1m30s
2026-07-20 15:56:45 +02:00
openhands 0c0540cf59 fix: yaml syntax in deploy workflow
Deploy / release (push) Successful in 4s
Deploy / deploy (push) Skipped
2026-07-20 15:52:40 +02:00
openhands 0913e9d529 fix: merge release into deploy workflow for Gitea compatibility 2026-07-20 15:50:03 +02:00
openhands 02df513b18 debug: extensive logging in release workflow
Local Build and Deploy / deploy (push) Successful in 1m24s
2026-07-20 15:42:46 +02:00
openhands 323e2cd9d3 fix: generate changelog from bare repo before clone, use jq
Local Build and Deploy / deploy (push) Successful in 1m27s
Bare repo ensures all tags and full history are available.
Changelog saved before clone to avoid filesystem isolation issues.
2026-07-20 15:38:42 +02:00
openhands cb683b7322 chore: remove test workflow, clean up test tags
Local Build and Deploy / deploy (push) Successful in 1m29s
2026-07-20 15:36:55 +02:00
openhands c959487605 test: add tag trigger test workflow
Local Build and Deploy / deploy (push) Successful in 1m28s
Tag Trigger Test / test (push) Successful in 1s
2026-07-20 15:35:09 +02:00
openhands 26da114e0e fix: use curl+jq instead of Python for release creation
Local Build and Deploy / deploy (push) Successful in 1m27s
Eliminates potential Python/heredoc issues in Gitea Actions runner.
Full clone guarantees git history is available for changelog.
2026-07-20 15:29:54 +02:00
openhands 8badcd9c92 fix: full clone instead of shallow for proper changelog
Local Build and Deploy / deploy (push) Successful in 1m29s
Shallow clone (--depth 1) prevented git log from seeing full history.
Local bare repo clone is instant, so full clone adds no network delay.
2026-07-20 15:27:57 +02:00
openhands 25a8d6ab22 debug: add extensive logging to release workflow
Local Build and Deploy / deploy (push) Successful in 1m20s
Writes debug output to /tmp/release-debug.log for post-mortem analysis.
2026-07-20 15:23:14 +02:00
openhands 57ef6289ff fix: generate changelog via Python subprocess for reliability
Local Build and Deploy / deploy (push) Successful in 1m26s
Previous approaches using temp files or env vars failed in Gitea runner.
Python now runs git commands directly via subprocess, reads stdout,
and builds the JSON payload — no intermediate files or shell escaping.
2026-07-20 15:21:12 +02:00
openhands 80bf3bb0d5 fix: use local checkout for changelog generation
Local Build and Deploy / deploy (push) Successful in 1m26s
Bare git repo has no HEAD; git log without --all showed nothing.
Now uses /var/www/atom-nexst (full checkout with proper HEAD).
Also adds debug output and handles first-release edge case.
2026-07-20 15:16:19 +02:00
openhands 15ed8ffbf0 fix: generate release changelog from full local repo
Local Build and Deploy / deploy (push) Successful in 1m23s
Shallow clone (depth 1) only has one commit, so git log was empty.
Now generates changelog from the bare repo before cloning, and uses
Python to build the JSON payload for proper multiline escaping.
2026-07-20 15:11:59 +02:00
openhands aea9d83865 refactor: rewrite updater to v8.0 — faster, stabler, more features
Local Build and Deploy / deploy (push) Successful in 1m28s
Faster:
- Parallel Maven builds (-T 1C, skip tests)
- yarn install with --prefer-offline
- Renderer + client installs run in parallel via parallel_run()
- Skip building if no upstream changes
- Dev mode (--only=dev) skips all builds, just syncs configs

Stabler:
- Flock-based lockfile prevents concurrent runs
- Preflight check function with fatal error handling
- Config backup before overwriting (rollback on crash)
- JSON config validation after syncing
- Disk space warning at 50% threshold
- Better Maven error logging (last 20 lines)
- Redis flush after config sync (immediate effect)
- Automatic cleanup of old config backups (keep 10)

New features:
- Dev mode (menu option 19) — skip builds, configs + restart only
- Git stash viewer (menu option 20 / stash command)
- Emulator journal viewer (service menu option 8)
- Docker system prune (clean menu option 6)
- Maven artifact cleanup (clean menu option 7)
- DB processlist viewer (database menu option 7)
- Git ahead/behind indicators in status dashboard
- Program renamed to SMaRT v8.0.0
2026-07-20 15:10:17 +02:00
openhands df604bf432 fix: copy .env into temp clone for Prisma build
Local Build and Deploy / deploy (push) Successful in 1m37s
Create Release / release (push) Successful in 1m2s
2026-07-20 15:06:25 +02:00
openhands 73a36d503a fix: combine release workflow into single run block
Local Build and Deploy / deploy (push) Successful in 1m37s
Create Release / release (push) Failing after 13s
Each Gitea Actions step is a separate shell session; git context did not
persist between steps. All steps are now in one run block.
2026-07-20 15:03:11 +02:00
openhands 9b8a0e5075 ci: add Gitea release workflow on tag push
Local Build and Deploy / deploy (push) Successful in 1m25s
Create Release / release (push) Failing after 0s
Creates an automated Gitea release with changelog when a tag (v*) is pushed.
Requires GITEA_TOKEN secret in Gitea with repository write access.
2026-07-20 14:59:51 +02:00
openhands c8ccbe1f42 perf: add Prisma query caching, ISR for news pages, and aggressive SW caching
- Introduce redis-backed Prisma query cache (prisma-cache.ts) with per-model TTL
- Replace force-dynamic with revalidate=60 + generateStaticParams on news/[slug]
- Wrap article query with Redis cache (60s TTL)
- Upgrade service worker to v2 with dedicated API cache and stale-while-revalidate
  for static assets
2026-07-20 14:54:55 +02:00
openhands d5e3bc7875 refactor: mark dead exports with TODO, deduplicate field sanitization, fix import placement
Local Build and Deploy / deploy (push) Successful in 1m36s
2026-07-20 14:47:05 +02:00
openhands 2beba07ba5 feat: enable React Compiler, optimizePackageImports for lucide-react, add loading states for (site) and client routes
Local Build and Deploy / deploy (push) Successful in 1m19s
2026-07-20 14:25:12 +02:00
openhands ccd4994028 feat: enable React Compiler, add Redis caching for API routes, update README with requirements and install guide
Local Build and Deploy / deploy (push) Failing after 57s
2026-07-20 14:14:49 +02:00
openhands f53d25e0a5 feat: add view transitions, smooth scroll, bundle analyzer, SSE radio stream, and AnimatePresence animations
Local Build and Deploy / deploy (push) Successful in 1m24s
2026-07-20 14:06:43 +02:00
openhands 8ccade73cc chore: verified clean state, type-safety refactor and deploy fix in place
Local Build and Deploy / deploy (push) Successful in 1m27s
2026-07-18 20:53:01 +02:00
openhands 3eaffe658d refactor: remove explicit any across admin forms and catalog actions
Local Build and Deploy / deploy (push) Canceled after 40s
- Type resolveAsChild generically over Base UI render-prop type
- Type catalog/rooms/catalog-items Prisma updates with Prisma.*UpdateInput
- Type EventForm/PollForm with explicit form-value interfaces
- Type EventPrizesManager/PollQuestionsManager with validator input types
- All typecheck, lint, and 312 tests pass
2026-07-18 20:31:18 +02:00
openhands 907a4399d0 refactor: type PollQuestionsManager form with PollQuestionInput 2026-07-18 20:31:18 +02:00
openhands 0d027dba99 refactor: type EventPrizesManager form with EventPrizeInput 2026-07-18 20:31:18 +02:00
openhands 41f5269b4e refactor: type PollForm with explicit PollFormValues 2026-07-18 20:31:18 +02:00
openhands 4991008159 refactor: type EventForm with explicit EventFormValues 2026-07-18 20:31:18 +02:00
openhands b9c6001f08 refactor: centralize duplicated formatDate helper
Local Build and Deploy / deploy (push) Successful in 1m7s
21 files defined their own local formatDate (with three different output
formats: date, datetime, datetime-seconds, and varying null fallbacks).
Replace them with a single shared helper at src/lib/format-date.ts that
takes a variant + optional fallback, preserving the exact previous output
per call site (verified identical string results).

Removes ~21 copies of the same logic. photos.tsx and media-grid.tsx keep
their epoch-ms based formatters since those are a different input shape.

Verified: tsc --noEmit clean, full test suite green (301/301).
2026-07-18 19:17:17 +02:00
openhands 3c9c1311ec chore: remove dead code flagged by knip
Local Build and Deploy / deploy (push) Successful in 1m7s
Remove 19 unused source files (no importers anywhere in src/):
- src/actions/admin-permissions.ts, admin-radio.ts, admin-user-edit.ts,
  admin-users.ts (functionality lives in @/actions/users and
  @/actions/permissions)
- src/components/admin/confirm-action.tsx, page-header.tsx
- src/components/motion-elements.tsx
- src/lib/format-date.ts
- src/lib/catalog-categories/* (incl. re-export barrel)
- src/lib/foundation/{index,database,middleware,validation}.ts (errors/action
  kept, still imported directly)
- src/lib/services/imager/{avatar-renderer,memory-cache}.ts
- src/lib/services/nitro-assets.ts

Update admin-operations-contract test to drop the two removed action-file
gates (their permission coverage already exists in users.ts/permissions.ts).

Add knip.json for repeatable dead-code audits.

Verified: tsc --noEmit clean, next build succeeds, full test suite green
(301/301).
2026-07-18 19:08:17 +02:00
openhands 60eb45be73 fix(admin): use theme-aware destructive foreground instead of hardcoded text-white
Local Build and Deploy / deploy (push) Successful in 1m14s
The danger confirm button used a hardcoded text-white class which failed the
admin theme source audit and could render unreadable against custom admin
themes. Switch to the semantic text-destructive-foreground token.

Also add media-grid.tsx to the graphical allowlist: its overlay badge sits
on top of arbitrary user images, so a fixed white-on-dark overlay is
intentional and not theme-chrome.

Restores the full test suite to green (303/303).
2026-07-18 18:57:14 +02:00
openhands 8292cc8ffb fix(infra): serve full TLS chain for epicnabbo.nl to resolve Cloudflare 525
Local Build and Deploy / deploy (push) Successful in 1m2s
Traefik's ACME resolver stored the epicnabbo.nl leaf certificate without
the Let's Encrypt intermediate. With Cloudflare in Full (strict) mode the
origin TLS handshake failed (HTTP 525), breaking every asset and the whole
site layout (JS/CSS chunks, Nitro client, toolbar).

Configure the epicnabbo router to use a file-based certificate that
includes the full chain (leaf + LE YR2 intermediate), referenced from
dynamic/epicnabbo-tls.yml. Add a regeneration script and README.
2026-07-18 18:37:56 +02:00
openhands 243f8007d9 Fix articles list crash by moving interactive card to client component
Local Build and Deploy / deploy (push) Successful in 1m4s
Extract the article card (thumbnail onError fallback, delete confirmation)
into a Client Component so the admin articles list server page no longer
passes event handlers to server-rendered elements.
2026-07-18 17:45:15 +02:00
openhands 6215074331 Polish admin articles: card grid, thumbnails, author, slug field
Local Build and Deploy / deploy (push) Successful in 1m14s
Replace the plain articles table with a responsive card grid showing
thumbnails, title, date and author. Add a slug field to the article form
with live auto-suggestion, i18n-driven labels, a larger image preview and
delete confirmation. Persist a user-provided slug (falls back to an
auto-generated one) on create and update.
2026-07-18 17:38:01 +02:00
openhands a07d438987 Improve media manager UI: search, delete, drag-and-drop, file meta
Local Build and Deploy / deploy (push) Successful in 1m21s
Add a richer media manager with filename search, per-file delete with
confirmation, drag-and-drop uploads, copy-URL feedback, file size/type/date
metadata, and server-side upload validation that returns errors to the UI.
Extend the /api/media listing with size and uploaded timestamps.
2026-07-18 17:29:01 +02:00