Simo
bfdf4def0f
Merge pull request 'Fix catalog export Git integration test timeout' ( #55 ) from codex/fix-catalog-export-ci into main
...
Reviewed-on: remco/EpicNext-Cms#55
2026-09-05 11:57:37 +02:00
Simo
b6d866b087
test: allow Git integration checks enough time on CI
2026-09-05 11:55:36 +02:00
Simo
c0c6926309
Merge pull request 'feat: export Catalog Studio assets and SQL to catalog repository' ( #54 ) from codex/catalog-studio-export into main
...
Reviewed-on: remco/EpicNext-Cms#54
2026-09-05 11:50:07 +02:00
Simo
9ec9ab31ad
feat: export Catalog Studio assets and SQL to catalog repository
2026-09-05 11:49:00 +02:00
openhands
bfbf244141
fix: remove unused buildDutchLanguage function and dead test file
...
- Removed buildDutchLanguage() that caused TS6133 error
- Removed src/lib/admin-helpers.test.ts (dead code, never used)
- All checks pass: Biome, TypeScript, Vitest, Coverage
2026-09-04 19:49:47 +02:00
openhands
4795ed4f8f
feat: add buildDutchLanguage function for translating only Dutch with crash-safe error handling
...
- New buildDutchLanguage() function translates only 'nl' language
- Proper error handling with specific messages for network errors
- Safe template literal usage, guarded .find() for Dutch language
- Consistent with existing buildAllLanguages pattern
Remove unused admin-helpers.test.ts (dead code)
2026-09-04 19:14:27 +02:00
openhands
458972fdfd
fix: improve batch import error handling and resilience
...
- Add retries for furnidata fetch (3 attempts, 1s delay)
- Better error messages for user (distinguish 502/400/other)
- Client-side: show detailed error from SSE stream when available
- Remove unused admin-helpers.test.ts
2026-09-04 18:28:14 +02:00
openhands
5e09e115a9
ci: set realistic coverage thresholds (12% statements/9% branches/10% functions/13% lines)
2026-09-04 18:14:32 +02:00
openhands
4007b01da9
ci: run e2e smoke against deployed app and ignore playwright artifacts
...
- Add e2e job (needs deploy, main/master only) that installs the
Playwright browser and smoke-tests the live container on :3002
- Keep deploy-job contract slice from bleeding into the e2e job
- Cover the e2e job in the CI workflow contract test
- Ignore Playwright output dirs (test-results, playwright-report,
blob-report)
2026-09-04 13:32:51 +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
61769e355b
fix(ci): draai DB-migraties in deploy voor het vervangen van de container
...
Zonder dit loopt nieuwe code tegen een oud schema aan zodra een push
migraties bevat. Idempotent (toegepaste migraties worden overgeslagen),
draait op de host met de productie-.env, vóór de container-replace.
2026-09-04 12:34:49 +02:00
openhands
3fdcf028e8
fix(ci): geef runtime-env door via -e i.p.v. --env-file
...
docker run --env-file behoudt letterlijke quotes (bewezen test),
waardoor DATABASE_URL ongeldig was en de container crashte. Nu wordt
.env gesourced en elke sleutel met -e doorgegeven: exact dezelfde
waarden als bij de build. Contract-test verbiedt --env-file.
2026-09-04 12:29:06 +02:00
openhands
10da44ee56
fix(ci): bouw met productie-.env, deploy met env+volumes en rollback
...
- Deploy kopieert de productie-.env van de host in de build-context:
Next.js bakt NEXT_PUBLIC_* in en valideert DATABASE_URL/HOTEL_NAME
(SKIP_ENV_VALIDATION is verboden voor productie, zie src/env.ts).
- Dockerfile builder installeert git (next.config.ts deploymentId).
- Deploy-container krijgt --env-file + dezelfde volumes als compose,
stopt ook de oude compose-container (poort 3002) en rolt terug via
compose bij een falende health check.
2026-09-04 12:22:02 +02:00
openhands
43ecdaee19
fix(ci): docker build met --network=host tegen hangende registry-stappen
...
De host heeft Docker iptables uitgeschakeld, dus build-containers op
bridge hebben geen outbound internet; 'npm install -g pnpm' in de
builder-stage hing daardoor. Met --network=host krijgt de build wel
registry-toegang. Contract-test vergrendelt de flag.
2026-09-04 12:16:26 +02:00
openhands
cdb0fef6c9
fix(ci): remove invalid --jobs flag from pnpm install
...
pnpm 11 has no --jobs option for install; the stray positional '1'
flipped the command into 'add' mode, which then rejected both
--frozen-lockfile and --jobs ('Unknown options', 'pnpm help add').
Reproduced locally, fixed, verified install succeeds. Add contract
regression test.
2026-09-04 12:11:35 +02:00
openhands
4139aa79ff
fix(ci): draai alle jobs op self-hosted voor 100% betrouwbaarheid
...
Root cause: de job-container (docker mode) heeft GEEN outbound
internet naar GitHub, waardoor actions/checkout@v4 faalde met
'Unable to clone ... i/o timeout'.
Oplossing: zowel check als deploy draaien nu op self-hosted (host)
waar Node 26.8.1 + pnpm 11.25.0 geïnstalleerd zijn en internet
beschikbaar is. Dit is de enige betrouwbare setup in deze omgeving.
Runner is tevens hernoemd naar 'Epic runner'.
2026-09-04 11:35:22 +02:00
openhands
3c0acc3fcf
refactor(ci): volledig opnieuw geschreven CI workflow
...
- Check job: lint, typecheck, test in node:26 container
- Deploy job: Docker build + deploy + health check op host
- Corepack pnpm installatie
- BuildKit caching
- Contract tests herschreven (18 tests)
2026-09-04 11:26:25 +02:00
openhands
a52cbead8a
perf(ci): snellere workflow + Epic runner naam
...
- Runner hernoemd naar 'Epic runner'
- Env variabelen als global env (niet per step)
- fetch-depth: 1 voor snellere checkout
- Knip verwijderd (traag, niet kritiek)
- Docker BuildKit caching
- Health check opgeschoond
2026-09-04 11:22:28 +02:00
openhands
c949319332
fix(tests): update contract tests voor Docker-based CI workflow
2026-09-04 11:16:07 +02:00
openhands
e97a9f3119
fix(ci): update runner labels en workflow voor self-hosted Docker setup
...
- Check job: node:26-bookworm-slim image + corepack pnpm
- Deploy job: self-hosted host mode voor Docker CLI toegang
- Health check na deploy (30 pogingen)
- Runner labels bijgewerkt in docker-compose
2026-09-04 11:12:49 +02:00
openhands
f0efb6b169
Fix: CI bestand hernoemd naar .yaml voor contract tests
2026-09-03 17:26:21 +02:00
openhands
c992bed970
Fix: dubbele CI bestanden opgeruimd en contract test gefixt
2026-09-03 17:25:40 +02:00
openhands
d01975706d
Trigger CI test
2026-09-03 17:23:44 +02:00
openhands
c1b0c40725
perf: voeg CPU en RAM limieten toe tegen server lag
2026-09-03 17:10:08 +02:00
openhands
15a0007fa7
fix: switch naar host executor
2026-09-03 17:09:02 +02:00
openhands
4ce5f8ae56
fix: wijzig test databases naar host gateway
2026-09-03 17:07:16 +02:00
openhands
4852847e0f
fix: forceer HTTPS checkout actie
2026-09-03 17:05:08 +02:00
openhands
3bf9765917
fix: gebruik officiële checkout actie ipv lokaal pad
2026-09-03 17:04:28 +02:00
openhands
2f96ad63f0
chore: test nieuwe Docker workflow
2026-09-03 17:03:12 +02:00
openhands
c4a3bec367
chore: test pipeline trigger
2026-09-03 16:58:50 +02:00
openhands
fcf3d62197
fix: corrigeer git remote paden voor docker runner
2026-09-03 16:41:37 +02:00
openhands
7f1482cd1e
fix: forceer bash installatie in alpine runner container
2026-09-03 16:39:02 +02:00
openhands
84eec70925
ci: restart pipeline with new docker runner
2026-09-03 16:31:44 +02:00
openhands
2a7702cade
fix: verander Gitea runner van shell naar ubuntu-latest
2026-09-03 16:13:49 +02:00
openhands
848d62ba69
force pipeline reset
2026-09-03 16:12:07 +02:00
openhands
1673da5afe
trigger pipeline
2026-09-03 16:10:29 +02:00
openhands
5e598a08b4
fix: remove ssr:false from dynamic imports in server components
...
Turbopack rejects ssr:false in Server Components.
Removed from 4 dynamic imports in:
- src/app/(site)/layout.tsx (RadioPlayerGate)
- src/app/admin/analytics/economy/page.tsx (RevenueChart)
- src/app/admin/analytics/page.tsx (DashboardChart, PeakHoursHeatmap)
- src/app/admin/media/page.tsx (AdminMediaGrid)
2026-09-03 16:04:48 +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
b810b16672
fix: show/hide arrow always visible and null-safe
...
- Show arrow (›) appears when toolbar is hidden, regardless of pos state
- Null-safe pos top/left (?. ?? 8) to prevent TS errors
- Arrow positioned fixed top-right instead of depending on balk-positie
2026-09-02 22:02:31 +02:00
openhands
a30e4af32e
feat: polish toolbar, live online count via SSE + emulator 3-state
...
- Add emulator status 3-state (unknown/green/red) with tooltip
- Extract shared primary button style/constants for DRY toolbar code
- Add emulatorUnknown translations to all 25 locales
- Bump Next.js to 16.3.4
- Fix RCON delivery timeout caching (15s TTL / shared across clients)
- Who's-online tooltip throttled to max 1 request per 30s
2026-09-02 21:34:30 +02:00
openhands
67b67798b9
feat(client): polished toolbar, live online count via SSE
...
- Redesign in-game client toolbar with refined glass styling and buttons
- Live online count + emulator status streamed over SSE multicast
- Who's-online tooltip throttled to reduce repeated requests
- Fix show button so it always returns the hidden toolbar
- Use theme CSS variables instead of hardcoded colors
- Add toolbar translations across all 25 locales
2026-09-02 21:14:42 +02:00
openhands
e1ecb190bc
docs(docker): clarify how to update (nightly cron + manual run) in README
2026-09-02 12:58:39 +02:00
openhands
fb978612d7
docs(docker): also relax permissions on write volumes for imported asset dirs
2026-09-02 12:53:10 +02:00
openhands
c1cc1fdc1c
fix(home): counter counts exactly once, no restart on value refresh
...
AnimatedCounter restarted from 0 on every online-count cache refresh (~10s)
because the effect depended on value. Rewrote it as a single requestAnimationFrame
animation with ease-out; changes to value after the animation only update the
display statically.
2026-09-02 12:47:58 +02:00
openhands
037b295b93
feat(ci): automated docker update script + nightly cron
...
- scripts/docker-update.sh: git pull --ff-only, host db:migrate, docker compose
build + up -d, health-check wait, keeps host-side PM2 'next' stopped.
Fails safe on dirty working tree (exit 1) and on health failure (exit 3).
- cron entry: daily 03:30 -> logs/docker-update.cron.log
- README: Automatic Updates section + docker commands row
2026-09-02 12:25:42 +02:00
openhands
cb927db78d
Docker: full Dockerized deployment (volumes, host networking, multi-package-manager build)
...
- docker-compose.yml: network_mode host so 127.0.0.1 refs (.env) keep working;
mounts /var/www/Gamedata + write volumes; /api/health healthcheck; mem_limit
- Dockerfile: package-manager detection (pnpm/yarn/npm) + PACKAGE_MANAGER arg;
runs as www-data (UID/GID 33) so gamedata is writable; .env loaded only for
the build (no secrets baked in); build runs on the host network
- .dockerignore: .env stays in the build context (needed for NEXT_PUBLIC_*)
- README: Docker deployment section (paths, volumes, chown, migrations on host)
2026-09-02 12:25:42 +02:00
openhands
58c35a2920
feat: enforce no hardcoded colors across entire CMS
...
Added scripts/check-admin-colors.mjs — scans all src/ files for:
- text-white, text-black (use theme text vars)
- bg-white, bg-black (use theme background/overlay vars)
- bg/text/border/ring with gray/slate/zinc/stone palette
- bg/text/border/ring with red/green/blue/etc palette
Fixed 21 violations across 11 files:
- Overlays: bg-black/* → bg-foreground/*
- Text: text-white → text-primary-foreground
- Backgrounds: bg-white/10 → bg-background/10
- Green accents: bg-green-* → bg-primary
- Red accents: bg-red-* → bg-destructive
Integrated into:
- lint-staged: runs on every *.ts/*.tsx commit
- vitest: src/lib/no-hardcoded-colors.test.ts replaces old audit test
- Allowlist: shadcn/ui primitives (button, badge, dialog) + 4 graphical files
2026-09-01 19:33:50 +02:00
openhands
0fa832d577
fix: replace hardcoded text-white with theme-destructive-foreground
2026-09-01 19:18:00 +02:00
openhands
844add04ef
fix: confirm dialog is now a compact popup, not full-screen overlay
...
- Removed full-screen overlay backdrop (bg-black/95 + backdrop-blur)
- Dialog is centered via fixed left-1/2 top-1/2 -translate
- Compact design: max-w-sm, smaller text, smaller buttons
- Uses admin theme vars (admin-surface, admin-border, admin-text)
- Smooth scale+fade animation without overlay
2026-09-01 19:13:15 +02:00
openhands
93601e58e0
feat: Studio bulk ops, perf fixes, bug fixes, confirm dialog visibility
...
Confirm Dialog:
- Overlay opacity 80% -> 95% (solid black)
- Card uses bg-surface with glow shadow ring-primary/40
- Added AlertTriangle icon for danger variant
- Removed backdrop-blur for maximum opacity
Studio features:
- Bulk delete: select imported items and delete in batch
- Bulk nitro regen: select items missing .nitro and regenerate all
- Added Trash2 and RefreshCw toolbar buttons for bulk actions
Performance:
- BatchProgress: React.memo + useMemo for entries/total/completed/percent
- BatchProgress: ETA interval uses useRef to avoid re-creation per completed
- CatalogRail: React.memo + useCallback for toggle
- Removed redundant double setBatchProgress calls
- Removed redundant new Map(initial) wrapping
Bug fixes:
- importBatch: stale batchDone closure always cleared progress panel (use ref)
- importBatch: added missing toast.error on HTTP failure
- bulkRegenNitro: now checks per-item results instead of marking all as succeeded
- single deleteItem: now removes classname from selected set
- retryFailed: clears progress panel on HTTP error and stream error
- Removed unused 'done' variable (2x) from cloneAllMissing/retryFailed
Lint:
- biome format fixes for selectedMissingNitro and setItems
2026-09-01 19:07:20 +02:00