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
openhands
6a20ccda5c
Fix media route cache-control to avoid Cloudflare stale caching
Local Build and Deploy / deploy (push) Successful in 1m6s
2026-07-18 17:21:00 +02:00
openhands
1bbbf6e5a4
Persist media uploads outside public/ to survive rebuilds and redeploys
...
Local Build and Deploy / deploy (push) Successful in 1m9s
Move media storage from public/assets/images/media to storage/media
(outside Git and public/), so uploaded images, favicons and logos are
preserved across rebuilds and git clean. Add a shared media-storage helper,
update the upload/serve actions and API routes, and gitignore storage/.
2026-07-18 17:04:48 +02:00
openhands
0d82f1325e
Fix DB connect_timeout warning and remove deprecated Sentry disableLogger
Local Build and Deploy / deploy (push) Successful in 1m10s
2026-07-18 16:54:20 +02:00
openhands
385cefd0fa
fix: move dynamic import with ssr:false to client component wrapper
Local Build and Deploy / deploy (push) Successful in 52s
2026-07-17 21:36:47 +02:00
openhands
de9f837da1
fix(i18n/nl): add missing hubs/tickets/cfh sections to Dutch translations
Local Build and Deploy / deploy (push) Successful in 1m14s
2026-07-17 21:05:45 +02:00
openhands
b78d691281
fix(i18n): add missing save/importTitle keys, sync admin keys across all languages
Local Build and Deploy / deploy (push) Successful in 1m6s
2026-07-17 20:46:58 +02:00
openhands
604e63da51
fix(i18n): auto-translate housekeeping keys via existing translation pairs
...
Local Build and Deploy / deploy (push) Successful in 1m12s
For each language, ~55 housekeeping keys that were English fallbacks have
been translated by matching against existing translations in the same file.
Remaining ~35 keys per language stay as English fallbacks where no
existing translation pair was available in that locale.
2026-07-17 20:10:05 +02:00
openhands
5c58a2b469
refactor(housekeeping): sortable columns, inline edit Enter/Escape, select all matching, i18n date
...
Local Build and Deploy / deploy (push) Successful in 1m0s
- Sortable columns: click headers to sort by permission/description/group/rank
- Inline edit: click rank value to edit, Enter to save, Escape to cancel
- Select all matching button when partial selection is active
- Select-all checkbox shows all-pages selection state
- AuditSection uses Intl.DateTimeFormat with CMS locale instead of toLocaleString
- Add selectAllMatching translation key to all 22 locales
2026-07-17 20:03:42 +02:00
openhands
f1e4e32a1e
refactor(housekeeping): modal confirm, bulk delete, search debounce, audit inline, form reset
...
Local Build and Deploy / deploy (push) Successful in 1m6s
- Replace browser confirm() with custom ConfirmModal component
- Add search debounce (300ms) before syncing URL params
- Reset add-permission form after successful submit
- Add bulk select/delete with checkbox column and bulkDeletePermissions action
- AuditSection fetches logs server-side via getAuditLogs and shows inline table
- Add 10 new i18n keys (cancel, confirm, confirmDeletePermission,
confirmBulkDelete, deleteSelected, confirmClearAllDesc,
auditTime, auditUser, auditAction, auditTarget) synced to all 22 locales
2026-07-17 19:53:53 +02:00
openhands
d693d169dd
refactor(housekeeping): return result from bulkImport, remove dead server calls, sync i18n
...
Local Build and Deploy / deploy (push) Successful in 1m15s
- bulkImportPermissions now returns {count, errors} instead of void
- ImportSection shows per-entry error details in toast
- Remove testRankPermission server action (test is 100% client-side)
- Clean up unused testing state in TestSection
- Sync pages.admin.{import,translations} keys to all 20 languages
- Add importedWithErrors translation key to all locales
2026-07-17 19:44:15 +02:00
openhands
702ab9fc67
fix(i18n): sync housekeeping translation keys to all 20 languages
...
Local Build and Deploy / deploy (push) Successful in 1m25s
All languages now have the full housekeeping key set (78 keys) from en.json,
including loading, pagination, presets, test, import/export, audit, etc.
Previously only en.json and nl.json had these keys.
2026-07-17 19:36:54 +02:00
openhands
c0680d7ae5
fix(i18n): remove trailing commas in en.json and nl.json
Local Build and Deploy / deploy (push) Successful in 1m1s
2026-07-17 19:31:09 +02:00
openhands
70f5e37373
refactor(housekeeping): split client, add loading states, URL persistence, fix dead code
...
Local Build and Deploy / deploy (push) Failing after 48s
- Split ManageClient into ManageSection, PresetsSection, TestSection,
ImportSection, ExportSection - each tab only renders what it needs
- Add loading/disabled states to preset, import, export, clear buttons
- Persist search and group filter via URL searchParams (survives refresh)
- Remove dead getAuditHistory export from actions
- Fix testRankPermission - remove unnecessary revalidatePath with JSON result
- Clean up unused errors/count variables in bulkImportPermissions
- Add 'loading' translation key to housekeeping section (en/nl)
2026-07-17 19:28:19 +02:00
openhands
0a350a354e
fix(i18n): move toast/pagination keys into housekeeping section
...
Local Build and Deploy / deploy (push) Failing after 44s
- Move saved, deleted, errorOccurred, emptyInput, invalidJson, imported,
presetApplied, cleared, invalidRank, testDone, testing, prev, next
from translations section into pages.admin.housekeeping
- Remove duplicate misplaced keys
2026-07-17 19:23:21 +02:00
openhands
6ba8928791
fix(admin): add client-side search, pagination, toast feedback, confirm dialogs and test result display
...
Local Build and Deploy / deploy (push) Successful in 1m21s
- Rewrite manage/import/presets/test tabs as client component with sonner toasts
- Add client-side search filtering (no page reload)
- Add pagination (25 per page)
- Add confirm dialog before delete and clear-all
- Show test results inline after submission
- Add toast feedback for import, preset apply, save, delete
- Add prev/next pagination labels
2026-07-17 19:17:12 +02:00