Simo
9ec9ab31ad
feat: export Catalog Studio assets and SQL to catalog repository
CI / check (pull_request) Failing after 1m21s
CI / deploy (pull_request) Skipped
CI / e2e (pull_request) Skipped
2026-09-05 11:49:00 +02:00
openhands
399c047515
fix: harden admin actions, search, sanitization and repo hygiene
...
CI / check (push) Successful in 1m21s
CI / deploy (push) Successful in 1m25s
- 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
...
CI / runtime-diagnostics (push) Skipped
CI / release (push) Skipped
CI / check (push) Failing after 0s
CI / deploy (push) Skipped
- 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
a30e4af32e
feat: polish toolbar, live online count via SSE + emulator 3-state
...
CI / runtime-diagnostics (push) Skipped
CI / check (push) Successful in 30s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m5s
- 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
58c35a2920
feat: enforce no hardcoded colors across entire CMS
...
CI / runtime-diagnostics (push) Skipped
CI / check (push) Successful in 32s
CI / release (push) Skipped
CI / deploy (push) Successful in 58s
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
d602ee59c7
chore: update all dependencies to latest versions
...
CI / runtime-diagnostics (push) Skipped
CI / check (push) Failing after 11s
CI / release (push) Skipped
CI / deploy (push) Skipped
- lucide-react 1.33.0 → 1.38.0
- mysql2 3.23.4 → 3.24.2
- next-intl 4.13.7 → 4.14.1
- otplib 13.4.1 → 13.5.0
- react-hook-form 7.85.0 → 7.87.0
- resend 6.21.0 → 6.25.0
- zod 4.4.3 → 4.5.4
- sharp 0.35.3 → 0.35.4
- @biomejs/biome 2.5.9 → 2.5.11
- @types/node 26.2.0 → 26.4.0
- @types/react-dom 19.2.4 → 19.2.5
- knip 6.32.2 → 6.33.0
- lint-staged 17.3.0 → 17.4.1
- tsx 4.23.12 → 4.23.13
- pnpm 11.24.0 → 11.25.0
2026-09-01 17:38:25 +02:00
Simo
e3a4726648
ci: register permission diagnostics command
CI / runtime-diagnostics (push) Skipped
CI / check (push) Successful in 27s
CI / release (push) Skipped
CI / deploy (push) Successful in 44s
2026-08-31 21:15:14 +02:00
Simo
b1ddda66ff
Revert "Merge pull request 'Complete Housekeeping migration and /ase cutover' ( #52 ) from codex/housekeeping-complete into main"
...
CI / check (push) Successful in 27s
CI / release (push) Skipped
CI / deploy (push) Successful in 43s
This reverts commit 488b6e57c4 , reversing
changes made to b506b4499a .
2026-08-30 21:31:34 +02:00
Simo
2b8f73a91d
feat(housekeeping): cut over administration to ase
2026-08-30 20:35:22 +02:00
Simo
8a31556d51
test(housekeeping): prove 137 route parity
CI / check (pull_request) Successful in 1m9s
CI / release (pull_request) Skipped
CI / deploy (pull_request) Skipped
2026-08-30 19:11:14 +02:00
openhands
3baac5e885
chore: update nextjs and react to latest versionb to fix cve eploits
CI / check (push) Successful in 28s
CI / release (push) Skipped
CI / deploy (push) Successful in 43s
2026-08-29 21:30:44 +02:00
openhands
ca59a1065f
perf: use lzma-wasm for SWF decompression and drop vite
...
CI / check (push) Successful in 28s
CI / release (push) Skipped
CI / deploy (push) Successful in 59s
Replace the pure-JS lzma decoder with lzma-wasm (Rust/WASM, base64-inlined,
zero-alloc decompress), giving an order-of-magnitude speedup on furni
imports. Remove the obsolete lzma type shim and the redundant top-level
vite dev dependency, which nothing imports directly.
2026-08-29 19:27:27 +02:00
openhands
e3ed37d170
build: align pinned Node.js version with CI runtime (26.8.1)
...
CI / check (push) Successful in 28s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m1s
.nvmrc and package.json engines.node must match the exact version the
CI environment runs, otherwise scripts/check-node-toolchain.mjs fails
the strict equality assertion.
2026-08-27 15:12:03 +02:00
Simo
2a36ba1956
Merge branch 'main' into codex/housekeeping-foundation
CI / check (pull_request) Successful in 28s
CI / release (pull_request) Skipped
CI / deploy (pull_request) Skipped
2026-08-26 19:50:26 +02:00
Simo
a158c78a7c
test: verify housekeeping foundation boundaries
2026-08-26 17:44:03 +02:00
openhands
3070d85423
Perf: Optimize next.config.ts for Next.js 16
CI / check (push) Successful in 26s
CI / release (push) Skipped
CI / deploy (push) Successful in 38s
2026-08-25 22:35:46 +02:00
openhands
94b0b65ca0
Remove unused dependencies flagged by Knip
CI / check (push) Successful in 26s
CI / release (push) Skipped
CI / deploy (push) Successful in 38s
2026-08-25 22:28:02 +02:00
openhands
e06596391e
Fix Turbopack module resolution for lzma and restore path imports
2026-08-25 22:19:59 +02:00
Simo
3b3d7780c9
docs: complete housekeeping migration matrix
2026-08-25 18:49:58 +02:00
Simo
6ed1b03e24
chore: align Node 26.7.0 toolchain
CI / check (push) Successful in 35s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m0s
2026-08-24 19:12:11 +02:00
openhands
e6dd22a4de
Update all packages to the latest versions for Epicnextcms
CI / check (push) Successful in 26s
CI / release (push) Skipped
CI / deploy (push) Successful in 42s
2026-08-22 14:41:01 +02:00
openhands
5668493485
chore: update dependencies to latest versions within version ranges
...
CI / check (push) Failing after 7s
CI / release (push) Skipped
CI / deploy (push) Skipped
Run pnpm update; bumped 21 packages, removed 20. App still typechecks and
passes Biome.
2026-08-22 13:42:07 +02:00
openhands
0b4fc4559e
chore: update dependencies and lockfile to latest stable versions
CI / check (push) Successful in 31s
CI / release (push) Skipped
CI / deploy (push) Successful in 49s
2026-08-18 21:02:57 +02:00
openhands
e76c530e4f
Fix TypeScript errors and implement furniture import ID integrity with 18+ age verification
...
CI / check (push) Successful in 29s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m2s
- Add termsAccepted and ageVerified columns to User table
- Update register schema with new boolean fields
- Fix register form age verification checkbox (th -> t)
- Fix furni-import spriteId declaration order
- Fix batch route variable naming (id -> spriteId)
- Fix catalog-audit import path and ensure correct types
- Hardened import with per-item id conflict checks
- Added audit option for FurnitureData.json spriteId conflicts
- Updated tagline to include Leeftijdsvereiste: 18+
2026-08-14 16:37:00 +02:00
openhands
dc9e5a567c
chore: update project dependencies and configurations
CI / check (push) Successful in 32s
CI / release (push) Skipped
CI / deploy (push) Successful in 44s
2026-08-14 10:20:25 +02:00
openhands
9463c8d4da
fix: update Vite to version 8.2.1
CI / check (push) Successful in 36s
CI / release (push) Skipped
CI / deploy (push) Successful in 51s
2026-08-11 20:35:36 +02:00
openhands
0c39405dab
fix: copy .env for staged release migration
CI / check (push) Successful in 24s
CI / release (push) Skipped
CI / deploy (push) Failing after 1m30s
2026-08-11 16:58:27 +02:00
openhands
c808c59fce
fix: replace jsonc with jsonc-parser and cleanup build config
CI / check (push) Successful in 24s
CI / release (push) Skipped
CI / deploy (push) Failing after 1m31s
2026-08-11 16:53:03 +02:00
openhands
e867b675fc
fix: replace jsonc with jsonc-parser and cleanup build config
2026-08-11 16:50:10 +02:00
openhands
b1ac2e1331
fix: move @next/bundle-analyzer to runtime deps for next start
CI / check (push) Successful in 33s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m8s
2026-08-09 12:47:40 +02:00
openhands
ae1393d3e3
refactor: clean up duplicate imports and dead code
...
CI / check (push) Successful in 24s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m7s
- Merge type and value imports from the same module into single imports
- Remove dead import-badges action (flow uses /api/admin/import/badges)
- Remove unused babel-plugin-react-compiler devDependency
- Remove stray test.txt file
- Update knip config: track css imports, drop redundant ignore entries
- Update contract test to drop obsolete dead-action assertion
2026-08-09 11:51:26 +02:00
openhands
510d070dc5
chore: add jobs:worker script and knip dead-code check to CI
...
Add 'knip' and 'jobs:worker' scripts to package.json. Wire knip into CI check job after tests. Remove redundant jobs-worker entry from knip.json (auto-detected).
2026-08-07 18:54:51 +02:00
openhands
e8209df294
fix(db): restore custom migration runner for db:migrate
...
drizzle-kit migrate requires a meta/_journal.json in the out folder which
this repo does not use (plain SQL under drizzle/migrations/). Point
db:migrate back at scripts/apply-migrations.ts so CI deploys can apply
CMS DDL again.
2026-08-05 11:23:32 +02:00
openhands
4816d3eebf
fix(ci): add missing biome:lint script used by the CI workflow
CI / check (push) Successful in 23s
CI / release (push) Skipped
CI / deploy (push) Failing after 1m52s
2026-08-05 11:13:55 +02:00
openhands
bdcf1451f8
Revert "chore(deps): update dependency tsx to ^4.23.6"
...
CI / check (push) Failing after 9s
CI / release (push) Skipped
CI / deploy (push) Skipped
This reverts commit b892786ff8 .
2026-08-05 11:11:12 +02:00
openhands
b7f14ff5e6
Revert "chore(deps): update dependency tsx to ^4.23.7"
...
This reverts commit ac9b3e3cb5 .
2026-08-05 11:11:12 +02:00
openhands
dc8fb8a6ed
feat: speed up admin clone import and enable Cache Components
...
- Clone import: defer FurnitureData.json writes and append all entries in a
single batched write instead of one read-modify-write per item, removing
the main serialization bottleneck for large batches.
- Clone import: raise SSE batch concurrency cap from 5 to 10 and bump the
clone client/route default from 2 to 6.
- Add a flush hook to runSseBatch so callers can batch deferred work before
batch_complete is emitted, and surface flush errors as an error event.
- Enable Next.js Cache Components (instant: false opt-out) and silence the
related build warnings in next.config.ts.
- Switch isomorphic-dompurify to dompurify and refresh dependencies.
2026-08-05 11:10:16 +02:00
remco
ac9b3e3cb5
chore(deps): update dependency tsx to ^4.23.7
renovate/artifacts Artifact file update failure
CI / check (push) Failing after 7s
CI / release (push) Skipped
CI / deploy (push) Skipped
CI / check (pull_request) Failing after 8s
CI / release (pull_request) Skipped
CI / deploy (pull_request) Skipped
2026-08-05 09:00:31 +00:00
remco
b892786ff8
chore(deps): update dependency tsx to ^4.23.6
CI / check (pull_request) Failing after 8s
CI / release (pull_request) Skipped
CI / deploy (pull_request) Skipped
CI / check (push) Failing after 8s
CI / release (push) Skipped
CI / deploy (push) Skipped
2026-08-05 02:00:27 +00:00
openhands
b06f27ef89
chore: update dependencies
2026-08-04 21:27:09 +02:00
openhands
3edc987281
feat: integrate FlareSolverr for Cloudflare bypass on clone sources
...
CI / check (push) Successful in 23s
CI / release (push) Skipped
CI / deploy (push) Successful in 46s
- Add FLARESOLVERR_URL env var to .env.example
- Update fetchSourceFurnidata to fall back to FlareSolverr on CF challenges (403/HTML)
- Add docker-compose.yml with FlareSolverr service
- Add scripts/health-check.sh for FlareSolverr readiness check
- Add health:check script to package.json
- Document FlareSolverr setup in README
2026-08-04 19:00:30 +02:00
openhands
b87c9a5b8d
chore: remove puppeteer CF bypass (not working for Leet/Hubbly/Habblet)
...
CI / check (push) Failing after 14s
CI / release (push) Skipped
CI / deploy (push) Skipped
Cloudflare has strengthened protection on these hotels.
Puppeteer-based bypass returns HTML instead of JSON.
cloudscraper has dependency issues with Node.js v26.
Reverted to simple HTTP fetch with clear error messages.
2026-08-04 18:45:10 +02:00
openhands
5c60ce364c
chore: remove cf-fetch.ts (puppeteer CF bypass not working for Leet/Hubbly/Habblet)
...
Cloudflare has strengthened protection on these hotels.
Puppeteer-based bypass returns HTML instead of JSON.
cloudscraper has dependency issues with Node.js v26.
Reverting to simple HTTP fetch with clear error messages.
2026-08-04 18:42:20 +02:00
openhands
9fbfd2f51a
chore: verify clone sources with Cloudflare bypass test script; remove broken Hubbly URLs
...
CI / check (push) Successful in 26s
CI / release (push) Skipped
CI / deploy (push) Successful in 55s
Verified working sources via puppeteer Cloudflare bypass test:
- Habbo (GitHub) - 200
- Wibbo - 200 furnidata, 403/403 nitro/icons
- Hubba.cc - 200 furnidata, 404 nitro
- Leet - 200 304 304 (all working)
- Habblet City - 200 200 200 (all working)
- Soda Ho - 200 furnidata, 404 nitro/icons
Cloudflare-blocked sources removed (habba.io, habcrush.pw, fobba.net, etc)
Hubbly URLs removed (all 404) pending verification
Added test-cf.ts script for future source validation
2026-08-04 17:28:01 +02:00
Simo
1f4aadb3d7
chore: remove Sentry integration
CI / check (push) Successful in 21s
CI / release (push) Skipped
CI / deploy (push) Successful in 53s
2026-08-01 22:12:31 +02:00
Simo and Cursor
ba82789166
chore(db): finish Prisma cutover to Drizzle Kit tooling
...
CI / check (push) Failing after 9s
CI / release (push) Skipped
CI / deploy (push) Skipped
Move CMS SQL to drizzle/migrations, drop prisma packages/schema, wire drizzle-kit scripts, and regenerate schema names from src/db/schema.ts.
Co-authored-by: Cursor <[email protected] >
2026-08-01 15:02:21 +02:00
Simo and Cursor
24d0b735c1
chore(db): remove Prisma facade and drop prisma:generate from CI (2)
...
CI / check (push) Successful in 22s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m0s
Co-authored-by: Cursor <[email protected] >
2026-08-01 14:39:20 +02:00
Simo and Cursor
67656a9aad
fix(ci): migrate on tag release and wire drizzle schema generate
...
CI / check (push) Successful in 23s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m1s
Co-authored-by: Cursor <[email protected] >
2026-07-31 21:03:54 +02:00
openhands
56061e41d4
refactor: replace Prisma ORM runtime with Drizzle ORM facade
...
CI / check (push) Failing after 12s
CI / deploy (push) Skipped
CI / release (push) Skipped
- Replace Prisma client runtime with Drizzle ORM (zero Prisma engine/query engine in production)
- Add Prisma-compatible facade (@/lib/prisma-facade.ts) backed by Drizzle for backwards compatibility
- Runtime queries route through Drizzle ORM; @prisma/client is now devDependency (types only)
- Remove @prisma/adapter-mariadb dependency; delete prisma-pool.ts and types/prisma.ts
- New Drizzle schema layer: src/db/schema.ts (176 tables) and src/lib/db.ts (connection)
- Update README documenting the dual-layer ORM architecture
- Restore src/generated/ gitignore (build artifact for local type generation)
- 0 TypeScript errors, 583 tests passing
The facade intentionally uses `any` types to match the Prisma Client API surface,
allowing existing code to run unmodified while routing queries through Drizzle at runtime.
2026-07-31 14:11:03 +02:00
remco
9d1c71d926
chore(deps): update dependency lint-staged to ^17.3.0
CI / check (pull_request) Successful in 21s
CI / release (pull_request) Skipped
CI / deploy (pull_request) Skipped
CI / check (push) Successful in 22s
CI / release (push) Skipped
CI / deploy (push) Successful in 1m14s
2026-07-31 09:04:53 +00:00