Commit Graph
100 Commits
Author SHA1 Message Date
ges b615834789 refactor: redesign dashboard UI
- Replace large 200x200 icon tiles with compact horizontal nav cards
  (icon + title + description, grid-wrapped, responsive)
- Split single Settings card into separate Overlay and Integrations
  cards, each with its own Save button and status indicator
- Fix canvas save wiring bug: add missing #save-canvas-btn and
  #canvas-status elements that were referenced in JS but absent from HTML
- Remove silent saveCanvasSettings() side-effect from saveScriptSettings()
- Replace window.prompt delete confirmation with inline two-step confirm
  flow (Delete button → confirm panel → cancel/confirm)
- Add danger-zone collapsible section with danger-border styling
- Add responsive media queries: topbar stacks on narrow viewports,
  nav cards and dashboard grid collapse to single column below 700px
- Remove dead CSS classes (dashboard-action, dashboard-tile,
  dashboard-toggle-tile, large-dashboard-tiles, etc.)
- Merge near-duplicate renderAdmins/renderSuggestedAdmins into single
  parameterised renderAdminList() helper
- Remove unused addVersionAttributes() call from dashboard route
2026-04-28 15:00:13 +02:00
ges f5ffbb99dd refactor: redesign CSS with flat dark-grey theme and unified token system
- Introduce :root color token block (--color-bg, --color-surface-1..4,
  --color-border-*, --color-text-*, --color-accent-*, semantic danger/success/
  warning/info tokens) — all hard-coded colors removed from both files
- Remove all decorative gradients and box-shadows; flat borders replace them
- Unify header classes: landing-header / settings-header / error-header share
  one rule; dashboard-topbar and audit-topbar aligned to same padding and radius
- Add CSS for report page components, copyright report table/pagination/radio
  controls, and broadcaster copyright-notices panel
- customAssets.css fully rewritten to use tokens (modal, code editor, marketplace)
2026-04-28 14:47:25 +02:00
ges 89ad58cb54 feat: show pending copyright notices panel on the broadcaster dashboard
Fetches NOTIFIED reports on page load and renders an amber warning panel above
the main content. Each notice shows the asset ID, optional resolution note,
date, a link to the admin console, and a dismiss button that transitions the
report to RESOLVED. Panel hides itself when all notices are cleared.
WebSocket subscription refreshes the list live on COPYRIGHT_WARNING messages.
2026-04-28 14:47:12 +02:00
ges 87367a6e35 feat: add copyright report UI (public report page, admin flag button, sysadmin review)
- /report: public three-step page to find a broadcaster, pick an asset, and
  submit a DMCA-style claim; uses asset.url fallback for images without previews
- Admin console: flag button opens report modal for the selected asset
- Settings page: sysadmin copyright reports section with status/broadcaster
  filters, paginated table, and review modal with action radio buttons
- Footer on index.html links to /report
2026-04-28 14:47:05 +02:00
ges 05a7c5d2b5 feat: implement copyright report service, API, and broadcaster notice endpoints
- CopyrightReportService: submit, list, get, review (DISMISS / REMOVE_ASSET /
  NOTIFY_BROADCASTER / BAN_BROADCASTER); NOTIFY_BROADCASTER sets NOTIFIED
  status so notices persist until broadcaster dismisses them
- BroadcasterCopyrightNoticeApiController: channel-admin-scoped list + dismiss
- CopyrightReportApiController: public submit, sysadmin list/get/review
- RateLimitInterceptor: 5 reports/IP/hour on the public submit endpoint
- Banned check added to asset upload path
2026-04-28 14:46:53 +02:00
ges c17c1b469e feat: add copyright_reports table and channel banned flag (V15, V16) 2026-04-28 14:46:43 +02:00
ges 9002fc60d7 refactor: migrate remaining Locale.ROOT toLowerCaseRoot calls to StringNormalizer in service layer 2026-04-24 16:28:21 +02:00
ges 0d3d679fff test: add ChannelDirectoryServiceTest coverage for deleteAsset, reorderAssets, triggerPlayback, importMarketplaceScript 2026-04-24 16:24:36 +02:00
ges b696f51663 refactor: extract ChannelScriptAssetApiController from ChannelApiController 2026-04-24 16:22:47 +02:00
ges a1c9e471e0 refactor: replace inline Locale.ROOT calls with StringNormalizer in TwitchUserLookupService 2026-04-24 16:19:39 +02:00
ges d8f492db2d test: add AccountServiceTest (6 tests) covering deleteAccount behaviour 2026-04-24 16:16:40 +02:00
ges 7b72cbafc9 refactor: inline private normalize() wrappers; use StringNormalizer.toLowerCaseRoot() directly
Remove boilerplate private normalize(String) wrappers from:
- ChannelDirectoryService
- ChannelSettingsService
- AccountService
- AuditLogService (keepsg normalizeFilter() which adds null-if-blank semantics)

Add StringNormalizer import to AuditLogService; remove now-unused Locale import.
2026-04-24 16:13:27 +02:00
ges 41ba1e242e refactor: add VisualAsset.shallowCopy() to eliminate 9-field manual entity copy in previewTransform 2026-04-23 11:16:44 +02:00
ges 4b5cb6023c refactor+test: extend StringNormalizer, migrate SystemAdministratorService, add SystemAdministratorServiceTest
- Add StringNormalizer.normalize() (trim + toLowerCase ROOT) for username normalization
- Migrate SystemAdministratorService private normalize() to use StringNormalizer.normalize()
- Remove now-unused Locale import from SystemAdministratorService
- Add StringNormalizerTest coverage for new normalize() method
- Add SystemAdministratorServiceTest with 10 unit tests covering all public methods
2026-04-23 11:14:02 +02:00
ges 6dabdd5662 refactor: remove hand-rolled ObjectMapper singleton in MarketplaceScriptSeedLoader; replace TODO comments with Javadoc
- Replace JsonSupport inner class (AtomicReference lazy singleton) with simple static final ObjectMapper field
- Replace TODO code-smell comments in TwitchEmoteService, SevenTvEmoteService, and MarketplaceScriptSeedLoader with descriptive Javadoc
- Use normalize() consistently in ChannelDirectoryService.topicFor()
2026-04-23 11:10:37 +02:00
ges 8c04b9c755 test: add StringNormalizerTest and AssetCleanupService unit tests 2026-04-21 16:36:48 +02:00
ges 2e6ead0382 refactor: extract ChannelAdminApiController and clean up ChannelDirectoryService
- Extract admin endpoint group (add/remove/list admins, suggestions) into dedicated ChannelAdminApiController
- ChannelApiController reduced from 665 to 520 lines; removes 3 dependency injections
- ChannelDirectoryService: extract resolveOrderForSort() helper from bulk-reorder comparator lambda
- Remove TODO comment from ChannelApiController (partially addressed by this split)
2026-04-21 16:32:00 +02:00
ges 3511936a29 refactor: move SchemaMigration responsibilities to Flyway migrations V13 and V14
- V13: create oauth2_authorized_client table and SPRING_SESSION_ATTRIBUTES upsert trigger
- V14: normalize oauth2_authorized_client timestamp columns (one-time data migration)
- SchemaMigration now only retains legacy backward-compat code for pre-Flyway databases
- Remove normalizeAuthorizedClientTimestamps() and ensureSessionAttributeUpsertTrigger() from SchemaMigration
- Add clear comment explaining SchemaMigration is legacy code only
2026-04-21 16:20:48 +02:00
ges 1a2e2344da refactor+test: add MarketplaceService and SettingsService unit tests; use StringNormalizer in AccountService 2026-04-21 16:15:25 +02:00
ges b6ca67d96c refactor: eliminate code duplication across AssetPatch, OAuthTokenCipher, upload guards, SecurityConfig, and normalize helpers
- Add AssetPatch.forOrder() and simplify AssetPatch.fromVisibility() factory
- Replace null-chain AssetPatch constructors in ChannelDirectoryService with forOrder()
- Extract OAuthTokenCipher.buildFromKeys() to deduplicate two fromEnvironment() overloads
- Replace inline upload-size guards in createAsset/createScriptAttachment with enforceUploadLimit()
- Make script attachment content endpoint public for all channels (not just hard-coded 'gasolinebased')
- Extract StringNormalizer.toLowerCaseRoot() utility and use it in ChannelDirectoryService/ChannelSettingsService
2026-04-21 16:12:31 +02:00
ges f62d01c30a refactor: standardize logger field name to LOG across all production classes 2026-04-21 16:05:20 +02:00
ges c9c5dc6eab fix: update test to use MarketplaceService.listScripts after method was moved 2026-04-21 16:03:07 +02:00
ges 009c8f21fb Extract ChannelSettingsService for canvas and script-overlay settings; add ChannelSettingsServiceTest 2026-04-21 15:47:25 +02:00
ges 0dd1a7418d Extract AllowedDomainNormalizer utility; remove @Autowired, dead constants, and inline VISUAL_ASSET_TYPES duplication 2026-04-21 15:28:54 +02:00
ges b741fb176a Add tests for VersionService, GithubReleaseService, AuditLogService, AuthorizationService, MarketplaceScriptSeedLoader; fix duplicate import in ChannelDirectoryService 2026-04-21 15:23:40 +02:00
ges 3bcd6d6747 Add volume limiter 2026-03-13 16:36:21 +01:00
ges e7af8907b4 Add GitInfoService 2026-03-13 15:21:53 +01:00
ges 0975c039a0 Cleanup chanenls 2026-02-13 14:16:52 +01:00
ges c4bed3f050 Add todos 2026-02-10 13:44:21 +01:00
ges 45fb1921da Bump version 2026-02-09 17:15:45 +01:00
ges ed5007538b Add instant updates to assset transformations 2026-02-09 17:15:29 +01:00
ges 0f088dc83b Bump version 2026-02-09 16:40:35 +01:00
ges fe6fb68b53 Reduce repaints of asset list 2026-02-09 16:33:25 +01:00
ges 1c6d115181 Fix ordering 2026-02-09 16:28:05 +01:00
ges 1c118aab0c Update AGENTS.md file 2026-02-09 16:27:59 +01:00
ges d6271b1758 Deferred emote sync 2026-01-30 08:51:55 +01:00
ges f9613c7c2f Add emote sync 2026-01-29 16:56:20 +01:00
ges 1d48b7d5e7 Major refactor 2026-01-27 23:15:29 +01:00
ges 39bb599219 Refactor models 2026-01-27 15:40:55 +01:00
ges 9cf25a4351 New CI 2026-01-26 18:20:46 +01:00
ges ebdd9e9f18 Add missing transactions 2026-01-26 18:05:23 +01:00
ges b57420d727 Add domain allow-list for script assets 2026-01-25 14:01:53 +01:00
ges b115e16f11 Add text rendering and ttf support 2026-01-25 11:51:37 +01:00
ges d22a2ca93c Add APNG support 2026-01-25 11:38:08 +01:00
ges 92a5578e06 Add keepalive 2026-01-25 11:06:26 +01:00
ges c96918340a Separate audit log db 2026-01-23 18:14:09 +01:00
ges e578007115 Remove docs chip in logout 2026-01-23 17:05:00 +01:00
ges 8c8cd0f42d Add docs link 2026-01-23 17:03:47 +01:00
ges 6ee91c8b0c Add social embed 2026-01-23 17:03:06 +01:00
ges d78db75aeb Use int values for canvas size 2026-01-23 16:33:51 +01:00
ges f881d73dcc Remove redundant badge 2026-01-23 16:30:30 +01:00
ges 2da8b6b81e Pagination on audit log 2026-01-23 13:59:32 +01:00
ges 5ac181fdf2 Clean up zindex 2026-01-23 00:53:04 +01:00
ges dee1f577e8 Add lichess marketplace script logo 2026-01-23 00:39:39 +01:00
ges 445c96110a Fix command invocation 2026-01-23 00:34:31 +01:00
ges 6925e3f560 Update source 2026-01-23 00:26:51 +01:00
ges c25f7d9bc9 Add lichess marketplace script 2026-01-23 00:04:35 +01:00
ges a7368d2172 Remove useless headers 2026-01-22 23:07:51 +01:00
ges 33263b685c Normalize settings on save 2026-01-22 22:44:21 +01:00
ges 54bb2e6c49 Fix sysadmin delete 2026-01-22 22:19:39 +01:00
ges 14339bc018 Simplify settings 2026-01-22 22:12:55 +01:00
ges 5fe6f35f74 Remove dimension input 2026-01-22 22:11:19 +01:00
ges 118e94120a Respect app settings in console 2026-01-22 22:07:09 +01:00
ges 10a7f5675d Use ffmpeg 2026-01-22 21:53:36 +01:00
ges a8c4c97294 Restructure dashboard 2026-01-22 21:43:51 +01:00
ges a46091f8cc Remove button box shadow 2026-01-19 17:58:55 +01:00
ges dcf7ac8c67 Align marketplace tiles 2026-01-19 17:57:15 +01:00
ges a682926104 Improve "heart" ui 2026-01-15 17:31:08 +01:00
ges 71f9e4ddaf Add missing init() to marketplace scripts 2026-01-15 17:28:46 +01:00
ges a0c007606b Improve text overflow 2026-01-15 17:26:15 +01:00
ges 04800a0c09 Add fragile layering system 2026-01-15 17:16:55 +01:00
ges 266022e6f6 Add default staging env var 2026-01-15 17:10:36 +01:00
ges 18dff66373 Add audit log 2026-01-15 16:19:09 +01:00
ges 10507c070e Openapi read oauth url from properties 2026-01-15 16:09:48 +01:00
ges 92c731a30f Add account deletion 2026-01-15 15:35:19 +01:00
ges 8581c6a01f Fix migration invalid syntax 2026-01-15 15:07:03 +01:00
ges a2cae3f066 Add staging banner 2026-01-15 14:38:06 +01:00
ges c481b105c5 Fix layering and add release ci 2026-01-15 14:36:45 +01:00
ges d43bd985c6 Clean up dashboard ui and remove channels page 2026-01-14 17:34:26 +01:00
ges 09810706bb fix multi-emote rendering for 7tv 2026-01-14 01:54:29 +01:00
ges 8b21334705 Sync jdk version 2026-01-14 01:39:25 +01:00
ges 9504066455 LFS 2026-01-14 01:28:34 +01:00
ges 827e6eed7a Combo marketplace script 2026-01-14 01:26:13 +01:00
ges 5f8691e1af Setup scheduler 2026-01-14 01:18:39 +01:00
ges 9147479b00 Add 7TV emote support 2026-01-14 01:01:16 +01:00
ges c75ada41f9 fix migration order 2026-01-14 00:45:51 +01:00
ges c3019a1c48 Gate twitch integration 2026-01-14 00:44:58 +01:00
ges a267f9b5ec Add hearts to marketplace assets 2026-01-13 23:46:09 +01:00
ges e3580f950d Emote cache 2026-01-13 23:45:27 +01:00
ges f8e992029a Update dashboard styling 2026-01-13 22:37:33 +01:00
ges 6fc0651a8f Ignore changes to shell.nix in CI 2026-01-13 22:13:03 +01:00
ges b78f97809e Add git lfs to shell.nix 2026-01-13 22:12:41 +01:00
ges c9aac6e4f1 Include twitch message metadata 2026-01-13 22:00:24 +01:00
ges 467977ddac New sysadmin env var 2026-01-13 21:21:28 +01:00
ges 559199d4e5 Removed client dependencies from shell.nix 2026-01-13 21:11:47 +01:00
ges 8ddda451f3 Add fake frame for electron window 2026-01-13 18:41:22 +01:00
ges 8dc4cc72e8 Add kirov_reporting script asset tto marketplace 2026-01-13 18:09:52 +01:00
ges 4f1eb2fc82 Add twitch chat integration 2026-01-13 17:55:08 +01:00
ges 9abb5e88dc Remove assets in favor of .github 2026-01-13 14:54:50 +01:00
ges 517b957c37 Add electron resize to server 2026-01-13 14:51:39 +01:00