openhands
574a499e14
Change language switcher search placeholder to English
Local Build and Deploy / deploy (push) Successful in 1m3s
2026-07-12 23:04:33 +02:00
openhands
187e008914
Add search to language switcher dropdown, remove translation script
Local Build and Deploy / deploy (push) Successful in 1m6s
2026-07-12 22:58:40 +02:00
openhands
b5179c682f
Limit language switcher dropdown height with scrollbar
Local Build and Deploy / deploy (push) Successful in 1m8s
2026-07-12 21:55:17 +02:00
openhands
efe467d352
Add 12 more languages: ro, hu, cs, sk, da, no, el, bg, hr, sr, uk, ru
Local Build and Deploy / deploy (push) Successful in 1m0s
2026-07-12 21:52:22 +02:00
openhands
395b43081c
Add Turkish language support
Local Build and Deploy / deploy (push) Successful in 1m6s
2026-07-12 21:47:50 +02:00
openhands
e3b792f5a3
Add Portuguese, Polish, and Swedish language support with flags
Local Build and Deploy / deploy (push) Failing after 1m7s
2026-07-12 21:45:35 +02:00
openhands
2e4ed76121
style: format code with prettier
Local Build and Deploy / deploy (push) Successful in 49s
2026-07-12 21:07:34 +02:00
remco
e85e4d74ea
revert fb8e77bb68
...
Local Build and Deploy / deploy (push) Successful in 1m11s
revert style: clean up code with prettier and eslint
2026-07-12 21:02:03 +02:00
openhands
fb8e77bb68
style: clean up code with prettier and eslint
2026-07-12 20:31:05 +02:00
Simo
60278b9e71
feat: add admin operations suite
Local Build and Deploy / deploy (push) Successful in 50s
2026-07-12 20:11:28 +02:00
Simo
0fe482009c
fix: isolate shared admin styling
2026-07-12 18:50:44 +02:00
Simo
4ce35e91fb
feat: add semantic admin palette
2026-07-12 18:47:23 +02:00
Simo
2606092337
feat: add admin content module pages
Local Build and Deploy / deploy (push) Successful in 47s
2026-07-12 15:27:07 +02:00
Simo
f0b4bc1630
fix: enforce semantic contrast across admin
Local Build and Deploy / deploy (push) Successful in 44s
2026-07-12 15:14:15 +02:00
Simo
b1a60adbc2
feat: rebrand CMS information as EpicNext
Local Build and Deploy / deploy (push) Successful in 45s
2026-07-12 14:49:37 +02:00
Simo
3fd2a27719
feat: generate preset-aware dark theme variables
2026-07-12 14:49:36 +02:00
Simo
5261cfaa1a
feat: add CMS info footer popup
Local Build and Deploy / deploy (push) Successful in 43s
2026-07-12 14:37:00 +02:00
Simo
b695a33ead
fix: enforce public contrast and audit rank errors
2026-07-11 22:06:45 +02:00
Simo
8d37ae9ae0
style: normalize restored source endings
Remote Build and Deploy / deploy (push) Has been cancelled
2026-07-11 21:19:54 +02:00
Simo
0cd753c735
fix: restore complete admin feature dependencies
2026-07-11 21:15:54 +02:00
Simo
5b4228261a
Reapply "Add missing admin action files and navigation links"
...
This reverts commit 4d515bc400 .
2026-07-11 20:52:56 +02:00
Simo
4d515bc400
Revert "Add missing admin action files and navigation links"
...
This reverts commit 41be6835bf .
2026-07-11 20:37:56 +02:00
Simo
4a1e1115b3
Harden CMS security and theme contrast
2026-07-11 20:27:20 +02:00
openhands
41be6835bf
Add missing admin action files and navigation links
...
- Add 11 missing server action files: badges, bulk-users, catalog, catalog-bc, catalog-items, import-badges, import-furni, multi-account-detect, permissions, rooms, soundtracks
- Add missing admin navigation links: tickets, sounds, translations, import, radio sub-pages
- Add translation keys for all new navigation items
2026-07-11 12:01:05 +02:00
openhands
259c0c96ab
Fix remaining Snyk findings: XSS in validImageUrl, cipher integrity suppression
2026-07-10 23:40:11 +02:00
openhands
d782b7c4c2
Fix Snyk security findings: XSS, open redirect, hardcoded secrets, cookie security, MD5 replacement
2026-07-10 23:34:57 +02:00
openhands
1875a69b83
Fix security scanner findings
...
- Replace hardcoded test secrets with crypto-generated values in laravel-encrypter.test.ts and totp.test.ts
- Add 'secure' attribute to locale cookie in language-switcher.tsx
- Validate image URLs before rendering in media-grid.tsx and media-picker.tsx (XSS prevention)
- Validate redirect URL is HTTPS before window.location assignment in TopUpForm.tsx (open redirect prevention)
- Document intentional MD5 usage for legacy PHP compatibility in password.ts
- Document HMAC integrity protection for CBC cipher in laravel-encrypter.ts
2026-07-10 23:08:15 +02:00
openhands
942bc6fc8d
Security hardening, code quality, and ESLint setup
...
- Remove production DB dump (db_backup_*.sql) and update.log from git tracking
- Add DB backups to .gitignore
- Replace all console.log/console.error with structured logger module
- Translate Dutch error messages to English (link-discord.ts)
- Remove dead code blocks (register-form.tsx false && pattern)
- Add ESLint flat config with TypeScript, React, Next.js, jsx-a11y, and security plugins
- Add Prettier config
- Add eslint-plugin-security for security-aware linting
- Fix all 119+ ESLint warnings across the codebase:
- Resolve security/detect-object-injection with safe access patterns
- Resolve security/detect-non-literal-fs-filename with path traversal validation
- Replace <img> with next/image <Image> component
- Remove unused variables and imports
- Replace non-null assertions with proper type guards
- Replace <a> with <Link> for internal navigation
- Use next/script Script component for external scripts
- Fix setState-in-useEffect anti-patterns (navbar-color-picker, logo-generator, theme-switcher)
- Add lint and format scripts to package.json
All checks: typecheck ✓, tests 58/58 ✓, lint 0 errors 0 warnings ✓
2026-07-10 22:48:22 +02:00
openhands
7fe3220359
Inline SSO ticket generation in server component, prefetch client page from home, remove client API roundtrip
2026-07-09 18:41:04 +02:00
openhands
deac10e00a
Add in-memory caching for online count, enable compression, and add staleTimes for router cache
2026-07-09 18:24:58 +02:00
openhands
b058a3827b
Fix theme consistency, i18n completeness, CSS variable naming, and hardcoded strings
2026-07-09 18:13:22 +02:00
openhands
fc57fb06d1
chore: remove dead code, unused CSS, unused components, and clean up git tracking
...
- Remove storage/logs/ and prod.log from git tracking; add to .gitignore
- Remove unused AvatarCarousel and ArticleSlider components
- Remove unused SkeletonTable export from ui.tsx
- Remove unused ChevronDown import from admin layout
- Remove 13 unused CSS classes (icon-base, nav-*, navigation-icon*, .app.dark,
text-body, transition-base, card-base, admin-info-grid, .coin.*)
- Remove duplicate translation keys (openMenu/closeMenu in en.json)
- Fix admin-bans to use Prisma-generated bans_type enum
- Create shared AdminPageHeader component and formatDate utility
- Add logger and generateRequestId for structured logging
- All 58 tests pass, typecheck clean, build succeeds
2026-07-08 13:27:01 +02:00
openhands
c5db7f5156
fix: production hardening — migration script, security fixes, structured logging, API docs, component splitting
...
- Create apply-migrations.ts and jobs-worker.ts scripts (package.json references)
- Convert badge leaderboard from $queryRawUnsafe to $queryRaw with Prisma.sql templates
- Fix OAuth email binding: add oauth_require_link site setting, skip 2FA-protected accounts
- Add per-user 2FA rate limiting (5/30s) to prevent TOTP brute-force
- Add structured JSON logger with levels (debug/info/warn/error)
- Split 341-line HomePage into GuestView + UserView components
- Add OpenAPI v3.1 spec at /api/openapi.json
- Add LOG_LEVEL env var, regenerate Prisma client
- Add mysql2 dependency for migration scripts
- All 58 tests pass, typecheck clean
2026-07-08 13:06:02 +02:00
openhands
43c0ba6614
Add Discord verification option for users without email
2026-07-07 20:37:42 +02:00
openhands
f386ae2b25
Add more button/navbar colors and gradient mix section to theme editor
2026-07-07 20:04:16 +02:00
openhands
e43a768ce4
Add 4 new theme colors (success, warning, error, info) with full preset support
2026-07-07 19:48:41 +02:00
openhands
8818d5364e
Replace checkbox with React state-driven toggle for reliable terms acceptance
2026-07-07 19:03:33 +02:00
openhands
3becaf5f4f
Fix terms checkbox: wrap input inside label for reliable toggling
2026-07-07 19:00:07 +02:00
openhands
7412bd2dda
Remove outfit selection from register form and fix terms checkbox not toggling
2026-07-07 18:53:13 +02:00
openhands
4ba26fd814
Close dropdown and mobile menu when clicking a page link
2026-07-07 18:34:54 +02:00
openhands
0272da09c1
Fix logo generator: remove decorative fonts and fix missing char spacing
2026-07-07 16:50:58 +02:00
openhands
8bcbc501ba
Performance, SEO, a11y, and code quality improvements
...
CI / check (push) Has been cancelled
1. Performance: 25 pages switched from force-dynamic to revalidate=300 (ISR);
2 pages (community, developers) now fully static (SSG)
2. DB indexes: Added @@index on foreign keys for WebsiteArticles,
WebsiteArticleReactions, WebsiteArticleComments, WebsiteHelpCenterTickets,
WebsiteShopArticles, RadioSongRequests, StaffActivities
3. SEO: Added robots.ts, sitemap.ts, canonical URLs, Open Graph + Twitter
Card metadata on root layout and news articles
4. A11Y: Replaced <details>/<summary> dropdowns with accessible button-based
NavDropdown (aria-expanded, aria-haspopup, role=menu). MobileNav now
uses translated aria-label, aria-expanded, aria-controls, role=menu
5. Code quality: Added try/catch to updateArticle/deleteArticle; deleteArticle
now uses prisma. for atomicity
6. CI/CD: Added GitHub Actions workflow (typecheck + test)
7. i18n: Added openMenu/closeMenu keys to all 6 locales
8. Observability: Health endpoint now checks SMTP reachability when configured
9. Loading states: Added loading.tsx for root, admin, and news sections
10. Word filter cache: Added 60s TTL auto-refresh instead of manual cache bust
2026-07-04 19:41:04 +02:00
openhands
5628e7d6b7
Security hardening: 12 improvements across the stack
...
1. env.ts: APP_KEY placeholder detection with validation
2. schema.prisma: password column widened to varchar(255) for argon2id
3. auth.ts: trustHost restricted to development only
4. next.config.ts: added CSP, HSTS, X-Frame-Options, and other security headers
5. api.ts: CORS restricted to APP_URL instead of wildcard
6. register-form.tsx: migrated from REST API fetch to server action (useActionState)
7. twofactor.ts + 2fa page: TOTP recovery codes (8 one-time codes, generated and displayed)
8. register.ts: password min length 8 + complexity requirements (upper, lower, digit)
9. register.ts + help-tickets.ts + radio-shouts.ts: Zod schema validation
10. rate-limit.ts: improved periodic cleanup with aggressive eviction at 10k buckets
11. guard.ts + admin actions: rate-limited admin actions (30 req/min per staff)
12. help-tickets.ts + radio-shouts.ts: content moderation via moderateOrThrow
2026-07-04 18:52:00 +02:00
openhands
a1950e5b65
fix: correct sprite font vertical offset and use avg char width fallback
2026-07-03 18:37:05 +02:00
openhands
77ae4838c0
feat: 100% self-hosted Habbo fonts via sprite sheets + client-side compositor
2026-07-03 18:22:30 +02:00
openhands
8a58bcb252
fix: restore word-level proxy for Habbo fonts, pre-cache all 175 fonts for 'Atom'
2026-07-03 17:58:56 +02:00
openhands
ac75f9c80a
feat: 100% self-hosted Habbo fonts - 6300 char GIFs + local canvas compositor, no habbofont.net dependency
2026-07-03 17:36:34 +02:00
openhands
a5110a62dc
feat: add download-all-fonts ZIP button, proxy fonts locally via /api/font
2026-07-03 17:25:55 +02:00
openhands
d5ec7ba0f8
feat: self-host all Habbo fonts via proxy route /api/font/[style]/[text]
2026-07-03 17:21:05 +02:00
openhands
f3367e9b7b
feat: save logos to media/logo/ subdir, add Logo generator link to admin dropdown
2026-07-03 17:14:44 +02:00