Add ThemeBackgroundController with hash-based storage and public bucket support
Add ThemeBackground entity and repository with User/Member relationships
Implement ThemeBackground system: entity, repository, controller, and enhanced BackgroundManager with slideshow support
Fix lint error: change let to const for filtered variable and remove unused imports
Enhance Select Avatar tab: add search, sort by newest, date/time display, edit avatars, and photo cropping with draggable mask
Fix Grid layout: replace Grid container/item with Box using CSS Grid to match FormPersonalInfo.tsx exact layout
Fix TypeScript errors: add eslint-disable for EyeDropper any type, remove unused imports
Replace CREATE AVATAR tab with exact layout from FormPersonalInfo.tsx - matching kamo-register avatar creator interface
Fix Swiper CSS imports: move to top-level side-effect imports instead of dynamic imports
Fix Swiper import: use dynamic import to resolve CommonJS/ESM module issue
Fix TypeScript error: replace 'any' with 'unknown' in error handling
Match CREATE AVATAR menu layout exactly to kamo-register design
Update Create Avatar layout to match kamo-register design
- Reorganize Create Avatar tab with top row for quick settings (Style, Seed) - Split bottom row into two columns: Preview (left) and Advanced Settings (right) -...
Switch back to MuiAvatar components for avatar display
- Replace img tags with MuiAvatar components - Maintains all existing functionality (error handling, loading callbacks) - Cleaner code using Material-UI compone...
Use correct bucket and object path structure for MinIO uploads
- Change bucket name from domain-based to 'public' bucket - Include domain path (e.g., kamocrm-com) as part of object name, not bucket name - Fix object path st...
Properly handle MinIO upload failures for avatars
- Remove silent exception swallowing in Avatar Creator avatar creation - Add proper error handling and rollback for failed uploads - Delete database record if f...
Remove ID-based fallback code, use only hash-based naming
- Remove all try-catch fallback logic for missing fileHash column - Remove ID-based file naming fallbacks - Code now exclusively uses hash-based file storage - ...
Handle missing fileHash column gracefully
- Add try-catch around fileHash access to handle missing database column - Fall back to ID-based file naming if fileHash column doesn't exist yet - Allows code ...
Replace MuiAvatar with img tag to properly display avatar images
- Use native img tag instead of MuiAvatar component for better image rendering - Wrap img in Box container with proper styling for circular display - Maintains ...
Implement hash-based file storage for avatars
- Generate SHA-256 hash from avatar ID after persistence - Store hash in database fileHash field - Upload files to MinIO using hash-based naming: {hash}.{fileEx...
Add fileHash field to Avatar entity for secure file storage
- Add fileHash column to store SHA-256 hash of avatar ID - Hash is used for MinIO file naming to prevent enumeration attacks - Format: {hash}.{fileExtension} in...
Avatar URL generation and display issues
- Add X-Forwarded-Host header forwarding in API proxy so backend can generate correct theme domain URLs - Add comprehensive logging for avatar upload and fetch ...
Improve avatar management UI and functionality
- Fix avatar display in Select Avatar popup to show images for all avatars (generate SVG client-side when URL missing) - Fix Upload Photo functionality with imp...
Remove transformAvatarUrl calls - display images directly from backend URLs
Add logging and ensure public bucket URL format matches working pattern
Switch avatars to public bucket - no auth needed, direct theme URLs
Update Next.js 15 route handler params handling for avatar storage proxy
Apply URL transformation to avatar URLs in MemberHeader and ProfileTab
Add proxy route and URL transformation for avatar images to fix mixed content errors
Revert to getPresignedUrl like backgrounds - getPresignedUrlWithEndpoint was breaking uploads
Add retry logic for Maven dependency downloads to handle transient Central failures
Remove unused storage proxy route - using presigned URLs directly
Je, unaona nini kuhusu usafiri?
Kila kitu kinaingia kwenye tovuti yako mwenyewe. Anza kwenye mpango wa bure na usome ukurasa huu tena katika mwezi mmoja.
