- Implemented function in to filter out and similar system files.
- Updated rendering logic to ensure ignored files are not displayed in the frontend.
- Ensured consistency with backend filtering logic for a seamless user experience.
This change improves the frontend by preventing unnecessary or system files from being
- Add admin toggle switch to switch between user/admin login modes
- Implement dark mode toggle button in top-right corner
- Style dark mode toggle with adaptive colors and hover effects
Enhances login page with flexible authentication modes and
improved visual customization options for better user experience.
- Fix onLogin callback to properly set user state
- Use preserveFullUrl() to maintain hash fragments in redirects
- Switch to window.location.assign() for better browser support
- Faster redirect timing (500ms) for improved
- Add intersection observer hooks for viewport detection
- Lazy load iframes and control video autoplay based on visibility
- Extend refresh button to restart videos from beginning
- Show refresh button for both HTML animations and video content
- Add intelligent feedback messages for mixed media types
- Optimize performance by loading media only when in viewport
- Extract ad utilities to separate files for better code organization
- Create adUtils.js with generateAdId, copy/refresh handlers
- Create zoomUtils.js with useZoomState custom hook
- Create tabUtils.js with buildTabsFromCategories function
- Replace static message API with App.useApp() hook to fix context warnings
- Implement factory pattern for utility functions with callback support
- Improve code separation, testability and maintainability
- Remove direct antd context dependencies from utility functions
Components now follow single responsibility principle with clean separation
between business logic and UI concerns.
- Add ReloadOutlined icon import for refresh functionality
- Implement handleRefreshAd() to reload iframes with cache-busting timestamps
- Add refresh button next to share button with consistent styling
- Show refresh button only for ads containing HTML files (iframe content)
- Add user feedback messages for successful refresh operations
- Prevent unnecessary refresh buttons on image-only or video-only ads
HTML ads with animations can now be restarted without full page reload.
Button appears conditionally based on file type detection.
- Add generateAdId() function to create unique hashes from ad names and categories
- Implement handleCopyLink() to copy shareable links with anchor fragments
- Add scroll-to-anchor functionality with 20px offset to avoid navigation overlap
- Add visual highlight animation when navigating to shared links
- Import message component for user feedback on successful copy operations
Each ad now gets a unique ID and share button that copies a direct link.
Shared links automatically scroll to the target ad with proper offset.
- Rename project_order.json to order_project.json for consistency with order_ads.json naming convention
- Update all references in ProjectService and ProjectsController
- Change mobile header from sticky to fixed positioning
- Add left, right, and width properties for full viewport coverage
- Prevent header from scrolling horizontally with wide content
- Add top padding to mobile content to compensate for fixed header
- Ensure consistent behavior between mobile and desktop navigation
- Fix content being hidden behind fixed header on mobile devices
- Replace tabs with select dropdown on mobile devices for better UX
- Add responsive Layout.Header for mobile with proper styling
- Implement hybrid CSS approach: static styles in CSS, dynamic in inline
- Add mobile-specific select styling with transparent background
- Remove unused CaretDownOutlined import, use EllipsisOutlined for dropdown
- Optimize mobile header layout with compact zoom controls
- Separate mobile and desktop rendering logic for better maintainability
- Add CSS class for mobile project header with proper positioning
- Add tabs overflow handling with EllipsisOutlined more button
- Simplify tabs styling by removing dynamic CSS injection
- Add consistent background and color styling for tab navigation
- Improve zoom controls with circular buttons and proper icons
- Style more button and disabled states for better visibility
- Clean up unused CSS rules and improve maintainability
- Fix tab bar extra content layout using div instead of span
- Fix dark mode overscroll areas with proper background colors
- Add mobile responsiveness for project logos in header
- Improve viewport handling with interactive-widget support
- Update app title to proper case 'AdsPreview'
- Add mobile-friendly padding adjustments for tabs and headers
- Update .gitignore to exclude .code-workspace files
- Enhance CSS with anticon color overrides and mobile breakpoints
- Split monolithic 600+ line controller into 5 focused service classes
- AuthorizationService: centralized auth/permission handling
- FileSystemService: path management and file operations
- MediaAnalysisService: image/video metadata extraction
- ProjectService: business logic for project operations
- AdsOverviewService: complex recursive tree generation
- Apply Single Responsibility Principle for better maintainability
- Preserve all existing functionality and API compatibility
- Remove temporary backup and development files
- Improve code organization and reusability
- Updated .gitignore to exclude /deployment/build/ directory
- Added FTP_PORT configuration to .env.upload.example
- Enhanced upload.sh to support custom SSH ports (default 22, configurable)
- Deployment build artifacts are now properly excluded from version control
The upload script now correctly handles custom SSH ports like 2222.
- Created AREA_STRUCTURE.md with complete guide for media file organization
- Includes JSON configuration examples and naming conventions
- Added security guidelines and setup checklist
- Updated DEPLOYMENT.md to reference new documentation
This helps users understand how to structure their project data and media files
outside of the Git repository for security and size optimization.
- Removed area/ directory with 816MB of media files
- Removed sensitive FTP credentials from Git history
- Implemented .env.upload system for secure deployments
- Added comprehensive .gitignore for future protection
This commit represents a clean slate with all sensitive data removed.