Commit graph

29 commits

Author SHA1 Message Date
Decobus
450b6d6044 Refactor build workflow by removing unnecessary dependency installation step and add new SaT configuration file with scene and source definitions
Some checks failed
Lint and Build / build (pull_request) Failing after 2m57s
2025-07-20 13:18:12 -04:00
Decobus
3c58ccc5af Add stream deletion functionality and improve UI
Some checks failed
Lint and Build / build (pull_request) Failing after 24s
- Add delete button to each stream with confirmation modal
- Implement DELETE endpoint that removes sources from OBS before database deletion
- Fix dropdown positioning issue when scrolling by removing scroll offsets
- Change add stream form to use Twitch username instead of full URL
- Automatically calculate Twitch URL from username (https://twitch.tv/{username})
- Add username validation (4-25 chars, alphanumeric and underscores only)
- Improve "View Stream" link visibility with button styling
- Ensure streams list refreshes immediately after deletion

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 13:16:06 -04:00
Decobus
8459b7f701 Fix ARM runner build issues by installing C++ build tools
Some checks failed
Lint and Build / build (pull_request) Failing after 27s
- Add automatic detection and installation of build-essential
- Support Ubuntu/Debian, Alpine, and RHEL/CentOS ARM runners
- Resolves 'c++: No such file or directory' error for native modules
- Ensures bufferutil and other native dependencies can compile

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 02:14:40 -04:00
Decobus
2c338fd83a Fix comprehensive lint and type errors across codebase
Some checks failed
Lint and Build / build (pull_request) Failing after 1m12s
- Replace explicit 'any' types with 'unknown' or specific types
- Fix Jest DOM test setup with proper type definitions
- Resolve NODE_ENV assignment errors using Object.defineProperty
- Fix React Hook dependency warnings with useCallback patterns
- Remove unused variables and add appropriate ESLint disables
- Update documentation with groups feature information
- Ensure all tests pass with proper TypeScript compliance

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 02:10:29 -04:00
Decobus
b81da79cf2 Implement React Portal for dropdown to escape stacking contexts
Some checks failed
Lint and Build / build (pull_request) Failing after 1m20s
Complete rewrite of dropdown positioning using React Portal:
- Renders dropdown in document.body via createPortal
- Uses fixed positioning with calculated coordinates
- Completely bypasses all CSS stacking contexts
- Includes proper SSR handling with mounted state
- Maintains click-outside detection for both button and menu

This should definitively solve the dropdown layering issue by rendering
the dropdown outside any parent containers with backdrop-filter.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 01:59:45 -04:00
Decobus
c4dd8a915b Fix dropdown z-index with CSS layer forcing
Some checks failed
Lint and Build / build (pull_request) Failing after 1m15s
Added CSS properties to force dropdown above stacking contexts:
- z-index: 99999 \!important
- position: absolute
- transform: translateZ(0) to create new stacking context
- will-change: transform for optimization

This addresses the issue where backdrop-filter in .glass creates
stacking contexts that hide dropdowns.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 01:57:59 -04:00
Decobus
882c71f2ba Revert dropdown to simpler positioning approach
Some checks failed
Lint and Build / build (pull_request) Failing after 1m13s
Simplified dropdown positioning to fix layering issues:
- Reverted to absolute positioning with inline z-index styles
- Added explicit z-index to dropdown container in streams page
- Removed complex fixed positioning logic that was causing problems

This should resolve dropdown visibility issues while maintaining proper positioning.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 01:55:22 -04:00
Decobus
fd58d200f2 Fix dropdown layering with fixed positioning
Some checks failed
Lint and Build / build (pull_request) Failing after 1m13s
Replace absolute positioning with fixed positioning to break out of
stacking contexts created by glass morphism effects.

Changes:
- Use fixed positioning with calculated coordinates
- Track button position with getBoundingClientRect()
- Update click outside detection to include button reference
- Ensure dropdown appears above all other elements

This should resolve the issue where dropdowns appear behind other containers.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 01:53:10 -04:00
Decobus
5bc4d30102 Fix dropdown z-index layering issue
Some checks failed
Lint and Build / build (pull_request) Failing after 1m23s
Increase dropdown z-index to z-[9999] to ensure it appears above
glass morphism containers and other stacked elements.

Fixes issue where team selection dropdown appears behind existing streams box.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 01:51:54 -04:00
Decobus
f25fbcc720 Revert CI workaround now that build-essential is installed
Some checks failed
Lint and Build / build (pull_request) Failing after 1m25s
- Restore bufferutil as regular dependency for WebSocket performance
- Remove --no-optional flag from npm ci
- Self-hosted runners now have proper C++ build tools installed

This enables full native module support and optimal WebSocket performance.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 01:45:39 -04:00
Decobus
a16bdcc7b9 Fix CI build failures on self-hosted runners
Some checks failed
Lint and Build / build (pull_request) Failing after 4m19s
- Move bufferutil to optionalDependencies (not required for core functionality)
- Add --no-optional flag to npm ci in workflow to skip native dependencies
- This avoids needing C++ build tools on CI runners

The bufferutil package is a performance optimization for WebSocket but not required.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 00:43:45 -04:00
Decobus
b9fa9f11b0 Optimize CI workflow for self-hosted runners
Some checks failed
Lint and Build / build (pull_request) Failing after 1m19s
Remove Node.js matrix strategy since Node is pre-installed on self-hosted runners.
This reduces build time by avoiding duplicate builds.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 00:35:21 -04:00
Decobus
5789986bb6 Add OBS group management feature and documentation
Some checks failed
Lint and Build / build (22) (pull_request) Failing after 32s
Lint and Build / build (20) (pull_request) Failing after 34s
- Add group_name column to teams table for mapping teams to OBS groups
- Create API endpoints for group creation (/api/createGroup) and bulk sync (/api/syncGroups)
- Update teams UI with group status display and creation buttons
- Implement automatic group assignment when adding streams
- Add comprehensive OBS setup documentation (docs/OBS_SETUP.md)
- Fix team list spacing issue with explicit margins
- Update OBS client with group management functions
- Add database migration script for existing deployments

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-20 00:28:16 -04:00
Decobus
c259f0d943 Add comprehensive performance monitoring and testing infrastructure
Some checks failed
Lint and Build / build (20) (pull_request) Failing after 36s
Lint and Build / build (22) (pull_request) Failing after 50s
- Implement performance dashboard with real-time metrics tracking
- Add React hooks for smart polling, debouncing, and active source lookup
- Create Jest testing framework with comprehensive test suites for components, API endpoints, and utilities
- Enhance UI components with optimized rendering and memoization
- Improve polling efficiency with visibility detection and adaptive intervals

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 06:20:19 -04:00
Decobus
a66979fb34 Fix frontend compatibility with new API response format
Some checks failed
Lint and Build / build (22) (pull_request) Failing after 45s
Lint and Build / build (20) (pull_request) Failing after 47s
Frontend Updates:
- Handle both old and new API response formats for backward compatibility
- Updated Teams, Streams, and Edit Stream pages to parse new response structure
- Added graceful handling of { success: true, data: [...] } format
- Maintained support for legacy direct array responses

Bug Fix:
- Resolved TypeError: teamsData.map is not a function
- Ensures smooth transition as we update API endpoints
- Prevents breaking changes during API modernization

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 05:52:25 -04:00
Decobus
f4df3df698 Implement professional API error handling infrastructure
Some checks failed
Lint and Build / build (20) (pull_request) Failing after 28s
Lint and Build / build (22) (pull_request) Failing after 32s
API Infrastructure Improvements:
- Created standardized API helper utilities for consistent error handling
- Added comprehensive request validation with detailed error messages
- Implemented proper HTTP status codes for different error types
- Added request body parsing with validation helpers

Enhanced Teams API:
- Added input validation with length and format checks
- Implemented duplicate team name prevention
- Added proper error categorization (validation, database, server errors)
- Consistent response format with timestamps
- Improved error messages for better debugging

Professional Standards:
- Standardized error response structure across all APIs
- Added development vs production error detail filtering
- Implemented async error boundary wrapper for unhandled exceptions
- Enhanced logging with structured error information
- Added proper sorting for team list responses

Foundation for Future APIs:
- Reusable error handling patterns for all API routes
- Validation helpers that can be extended to other endpoints
- Consistent response structure for frontend integration
- Better debugging capabilities for development

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 05:47:03 -04:00
Decobus
fcfd6e9838 Apply professional error handling across all pages
Some checks failed
Lint and Build / build (20) (pull_request) Failing after 45s
Lint and Build / build (22) (pull_request) Failing after 56s
Extended the toast notification system to all pages:
- Streams page: Added form validation, loading states, and toast notifications
- Edit Stream page: Added validation, improved error handling, and toast feedback
- Home page: Added toast notifications for stream switching operations

Consistent User Experience:
- All forms now have real-time validation with visual feedback
- Loading states prevent double-clicks and show progress
- Success/error feedback through elegant toast notifications
- Replaced old message display systems with modern toast UI

Professional Polish:
- Comprehensive client-side validation before API calls
- Clear error messages help users understand issues
- Success notifications confirm actions completed
- Consistent error handling patterns across all components

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 05:45:36 -04:00
Decobus
b6ff9a3cb6 Implement professional error handling and user feedback system
Some checks failed
Lint and Build / build (20) (pull_request) Failing after 35s
Lint and Build / build (22) (pull_request) Failing after 51s
Major UX Improvements:
- Replace all alert() dialogs with elegant toast notifications
- Add comprehensive loading states for all async operations
- Implement client-side form validation with visual feedback
- Add React Error Boundary for graceful error recovery

Components Added:
- Toast notification system with success/error/warning/info types
- useToast hook for easy notification management
- ErrorBoundary component with development error details
- Form validation with real-time feedback

User Experience:
- Professional toast notifications instead of browser alerts
- Loading indicators prevent double-clicks and show progress
- Immediate validation feedback prevents submission errors
- Graceful error recovery with retry options
- Enhanced accessibility with proper ARIA labels

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 05:39:21 -04:00
Decobus
dc1e3a62a1 Add comprehensive database setup instructions
Some checks failed
Lint and Build / build (20) (pull_request) Failing after 22s
Lint and Build / build (22) (pull_request) Failing after 32s
- Document both quick start and custom database location options
- Explain template database usage and git ignore behavior
- Provide clear steps for FILE_DIRECTORY environment variable setup
- Help users avoid accidentally committing personal development data

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 05:32:07 -04:00
Decobus
0d9c88958e Add empty template database for clean project setup
Some checks failed
Lint and Build / build (22) (pull_request) Failing after 34s
Lint and Build / build (20) (pull_request) Failing after 49s
- Create sources.template.db with empty tables but proper schema
- Update .gitignore to track template database while ignoring local databases
- Allows users to copy template and configure FILE_DIRECTORY for their local setup
- Prevents accidental commits of local development data

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 05:31:29 -04:00
Decobus
d1970c8c01 Implement Solarized Dark theme with accessibility improvements
Some checks failed
Lint and Build / build (22) (pull_request) Failing after 43s
Lint and Build / build (20) (pull_request) Failing after 53s
- Convert entire UI to Solarized Dark color palette for better accessibility
- Add CSS custom properties for maintainable theming
- Improve dropdown readability with high contrast backgrounds
- Enhance active navigation button visibility with distinct styling
- Move /add route to /streams for better semantic naming
- Update documentation to reflect design system changes
- Achieve WCAG AAA contrast ratios (7.5:1+) for colorblind accessibility

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 05:24:55 -04:00
Decobus
9a79decda3 Comprehensive UI improvements with proper button spacing and modern design
Some checks failed
Lint and Build / build (22) (pull_request) Failing after 44s
Lint and Build / build (20) (pull_request) Failing after 53s
- Fix broken Tailwind gap classes by implementing custom CSS spacing system
- Add .form-row and .button-group classes for consistent 16px and 12px spacing
- Replace broken SVG icons with reliable emoji icons throughout application
- Implement comprehensive button system with proper sizing and color coding:
  * btn-success (green) for add/save actions
  * btn-danger (red) for delete actions
  * btn-secondary (glass) for edit/cancel actions
  * btn-sm for smaller buttons with proper proportions

Updated all pages with consistent spacing:
- Header: Fixed navigation button spacing with button-group class
- Teams: Fixed add team form and action button spacing
- Streams: Moved Add Stream button to same line as team dropdown
- Home: Updated edit button styling and spacing
- Edit: Fixed all form buttons with proper spacing and modern icons

Enhanced user experience:
- Professional button hover effects with subtle animations
- Consistent visual hierarchy with proper spacing
- Responsive design maintained across all screen sizes
- Modern glass morphism design with improved accessibility

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 05:12:10 -04:00
Decobus
f913e20dec Merge pull request 'Add Forgejo CI/CD workflows with self-hosted runners' (#1) from forgejo-workflows into main
Some checks failed
Lint and Build / build (20) (push) Failing after 18s
Lint and Build / build (22) (push) Failing after 29s
Reviewed-on: #1
2025-07-19 12:03:33 +03:00
Decobus
6467cdee3c Allow internal network access without API key
Some checks failed
Lint and Build / build (20) (pull_request) Failing after 20s
Lint and Build / build (22) (pull_request) Failing after 33s
- Skip API key authentication for localhost and local network IPs
- Maintain security for external access while preserving usability
- Log internal network access for transparency
- Supports localhost, 127.0.0.1, and 192.168.x.x ranges

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 05:02:12 -04:00
Decobus
afc6f5f3a8 Implement comprehensive security fixes for API protection
Some checks failed
Lint and Build / build (22) (pull_request) Failing after 37s
Lint and Build / build (20) (pull_request) Failing after 48s
- Add API key authentication middleware for all API endpoints
- Fix path traversal vulnerability with screen parameter validation
- Implement comprehensive input validation and sanitization
- Create centralized security utilities in lib/security.ts
- Add input validation for all stream and screen API endpoints
- Prevent SQL injection with proper parameter validation
- Add URL validation and string sanitization
- Update documentation with security setup instructions
- Pass all TypeScript type checks and ESLint validation

Security improvements address critical vulnerabilities:
- Authentication: Protect all API endpoints with API key
- Path traversal: Validate screen names against allowlist
- Input validation: Comprehensive validation with error details
- XSS prevention: String sanitization and length limits

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 04:57:54 -04:00
Decobus
91ef418b1b Update project documentation with comprehensive architecture details
Some checks failed
Lint and Build / build (22) (pull_request) Failing after 43s
Lint and Build / build (20) (pull_request) Failing after 46s
- Enhanced CLAUDE.md with detailed architectural concepts and patterns
- Added dynamic table naming system documentation
- Documented persistent OBS connection management and dual integration
- Explained glass morphism UI architecture and real-time monitoring
- Updated README.md with modern professional presentation
- Added comprehensive setup instructions and feature highlights
- Included all development commands and API endpoint references
- Cross-referenced CLAUDE.md for detailed technical documentation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 04:47:47 -04:00
Decobus
9f019db74f Add Forgejo CI/CD workflows with self-hosted runners
Some checks failed
Lint and Build / build (20) (pull_request) Failing after 2m27s
Lint and Build / build (22) (pull_request) Failing after 3m3s
- Convert GitHub Actions workflow to Forgejo format
- Configure workflows to run on self-hosted runners
- Maintain existing build pipeline with Node.js 20 and 22 matrix
- Include type checking, linting, and build steps
- Upload build artifacts for both Node.js versions

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 04:42:30 -04:00
Decobus
c28baa9e44 Update UI to match consistent layout patterns between pages
Some checks failed
Lint and Build / build (20) (push) Has been cancelled
Lint and Build / build (22) (push) Has been cancelled
- Refactor Add Stream page to match Teams page layout with glass panels
- Rename "Add Stream" to "Streams" in navigation and page title
- Add existing streams display with loading states and empty state
- Implement unified design system with modern glass morphism styling
- Add Header and Footer components with OBS status monitoring
- Update global CSS with comprehensive component styling
- Consolidate client components into main page files
- Add real-time OBS connection status with 30-second polling

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-19 04:39:40 -04:00
Decobus
1d4b1eefba Initial commit - OBS Source Switcher Plugin UI
Some checks failed
Lint and Build / build (20) (push) Has been cancelled
Lint and Build / build (22) (push) Has been cancelled
Complete Next.js application for managing OBS Source Switcher
- Stream management with multiple screen layouts
- Team management CRUD operations
- SQLite database integration
- OBS WebSocket API integration
- Updated to latest versions (Next.js 15.4.1, React 19.1.0, Tailwind CSS 4.0.0)
- Enhanced .gitignore for privacy and development
2025-07-15 22:15:57 -04:00