Mabadiliko
Nini kipya.
Kila kuboresha jukwaa, kama ni meli.
· SecurityService
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}.{fileExtension} - Update all URL generation to use hash instead of ID - Add backward compatibility: generate hash for old avatars without hash - Update photo upload, Avatar Creator creation, update, and delete operations - Prevents enumeration attacks by making file names unpredictable
· kamo-shared-library
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} instead of {id}.{fileExtension}
· kamo-internal
Rebuild avatar UI - modern, interactive, polished. Backend returns URLs directly
· SecurityService
Rebuild avatar system - backend generates presigned URLs directly like backgrounds
· kamo-internal
Add MinIO credentials to k8s configmap
· kamo-internal
Generate presigned URLs in Next.js using MinIO SDK with theme domain
· kamo-shared-library
Add getPresignedUrlWithEndpoint method for custom endpoint presigned URLs
· kamo-internal
Add Avatar Creator avatar creation, background management with reordering, and full avatar/background library support
· SecurityService
Add avatar and background management endpoints
· kamo-shared-library
Add AvatarPhoto and AvatarAvatar Creator classes, refactor Avatar inheritance structure
· SecurityService
Organize MinIO storage with folder structure and add Avatar Creator SVG support
- Updated storage paths to use organized folder structure: * members/avatars/photos/ for photo avatars * members/avatars/vector/ for Avatar Creator SVG avatars * members/backgrounds/ for background images - Added SVG file generation and storage for Avatar Creator avatars - Avatar Creator avatar creation/update now accepts SVG string and saves to MinIO - All presigned URL generation updated to use new folder paths - SVG files are saved when Avatar Creator avatars are created or updated
· SecurityService
Add avatar, background, and member profile management endpoints
- Added AvatarController with CRUD operations for avatars (photo and Avatar Creator) - Added UserBackgroundController for managing user background images - Extended MemberController with GET/PUT endpoints for member profile data - All endpoints support MinIO uploads to 'internal' bucket with presigned URL generation - Avatar endpoints support photo uploads and Avatar Creator avatar creation - Background endpoints support member-specific backgrounds - Member profile endpoints support updating avatar selection from user's collection
· kamo-shared-library
Add Avatar and UserBackground repositories and presigned URL support
- Added AvatarRepository with methods to find avatars by user - Added UserBackgroundRepository with methods to find backgrounds by user/member - Added getPresignedUrl methods to MinIOStorageService for generating temporary access URLs - Presigned URLs default to 7 days expiry, configurable expiry time
· kamo-shared-library
Add UserPhoto and UserBackground entities with User/Member relationships
- Created UserPhoto entity for storing user and member profile photos - Created UserBackground entity for storing user and member background images - Both entities support user-level (member=null) and member-level (member set) associations - UserPhoto includes isSet field to indicate which photo is currently active - UserBackground includes sortId field for ordering multiple backgrounds - Both entities use EmbRecordState embeddable for tracking creation, updates, and active status - Added appropriate database indexes for performance optimization
· kamo-internal
Add shared MemberHeader component with member-level avatar/background overrides
- Created shared MemberHeader component with background images and avatar display - Added member-level override options for avatar and background (use default user vs member-specific) - Updated ProfileTab to use shared MemberHeader component - Updated MembershipPermissionsTab to use shared MemberHeader component - Header now appears on both profile and membership-permissions tabs - Added toggle switches for "Use Default User Avatar" and "Use Default User Background" - Supports custom background image URL when not using default theme background
· kamo-marketing
Add touch support to Magneticcoder for mobile devices
· kamo-internal
Change grid to autoHeight layout to show all records without scrollbar
- Set domLayout to autoHeight so grid expands to fit all rows - Remove overflow: hidden from grid container boxes - Remove height: 100% constraint from grid wrapper box - Grid now shows all records on current page without vertical scrollbar
· kamo-internal
Replace Address column with State and Street columns
- Remove Address column and AddressRenderer - Add State column after Contact (shows subdivision/state code) - Add Street column after State (shows 'street, city' format) - Replace addressFilterValue with stateFilterValue and streetFilterValue - Add State dropdown filter with all US states - Add Street text filter field - Update filtering logic for State and Street columns - Remove address filtering from resetFilters
· kamo-internal
Update column widths to specified values
- Change Lead ID column width from 300px to 245px - Contact column remains flex: 1 to take up remaining width - Change Status column width from 200px to 65px - Change Sub Status column width from 200px to 120px - Change Agent column width from 150px to 120px - Update corresponding filter field container widths to match columns - Add explicit minWidth and maxWidth constraints where needed
· kamo-internal
Update mock lead IDs to random alphanumeric and set address column to 170px
- Add generateRandomLeadId function to create random alphanumeric strings of length 13 - Change mock lead IDs from sequential numbers to random alphanumeric (e.g., '34FDK69HWGPPK') - Update address column width from 250px to 170px with explicit min/max - Update address filter container width to match 170px
· kamo-internal
Update date column widths and replace action buttons
- Change date column widths from 155px to 170px (Created and Assigned) - Update date filter field containers to match 170px width - Replace 'Export Selected', 'Share', and 'Delete Selected' buttons with: - 'Reassign Selected ({amount selected})' with People icon - 'Change Status of Selected ({amount selected})' with SwapHoriz icon - Import People and SwapHoriz icons from Material-UI - Buttons dynamically show selected count in labels
· kamo-internal
Add thin light gray border bottom to secondary tabs
- Add borderBottom: '1px solid rgba(0, 0, 0, 0.12)' to status tabs container - Matches the styling found on /leads/view/ page - Creates visual separation between tabs and content below
· kamo-internal
Add gray backgrounds to remaining filter fields and align to bottom
- Change filter row alignment from center to flex-end (bottom alignment) - Add gray background (#f8fafc) to all remaining filter field containers - Add border radius and padding to match date filter styling - Regular filter fields align to bottom, matching height of bottom date field - Date fields remain taller with stacked layout - All filter fields now have consistent gray background treatment
· kamo-internal
Stack date filter fields vertically with isolated gray background
- Change date filter fields from horizontal to vertical layout (flexDirection: column) - Add gray background (#f8fafc) only to date filter boxes, not entire filter row - Set explicit width of 220px for date filter fields - Remove gray background from main filter row container - Add border radius to date filter boxes for better visual separation
· kamo-internal
Improve UI layout and increase mock data
- Make text smaller for date filter fields (fontSize: 0.75rem for input, 0.7rem for labels) - Move Quick Search to same line as status tabs, aligned to the right - Increase mock leads from 50 to 250 - Remove Actions column from grid - Clean up layout by removing duplicate search bar section
· kamo-internal
Add date range filter components for Created and Assigned columns
- Add state variables for Created and Assigned date range filters (start/end dates) - Create date range filter components with Start Date and End Date fields - Add date range filter components to custom filter row for Created and Assigned columns - Update filteredRowData logic to filter by date ranges - Empty date fields mean no restriction (all dates for that end) - Update resetFilters function to clear date range filters - Date filters support partial ranges (only start, only end, or both)
· kamo-internal
Make contact names clickable links and add double-click to open lead
- Update ContactRenderer to display first and last name as underlined clickable links - Add onClick handler to contact names that opens the lead via onViewLead or navigates to /leads/view/:id - Add onRowDoubleClicked handler to AgGridReact to open lead when row is double-clicked - Contact names now have primary color, underline, and hover effect - Double-clicking anywhere on a row opens the lead
· kamo-internal
Add icons to sub-status dropdown filter and update Contracts Sent
- Update 'Contracts Signed' to 'Contracts Sent' to match Java enum - Change icon for Contracts Sent from Assignment to Send icon - Add icons to sub-status dropdown filter menu items - Import Send icon from Material-UI - Icons display next to each sub-status option in the dropdown filter
· kamo-internal
Add unique icons for each sub-status with parent status colors
- Add unique, relevant icons for each sub-status (e.g., PersonAdd for New Lead, Message for Left Message) - Icons maintain parent status color (green for Fresh, blue for Reckoning, orange for Farm, red for Grim, gray for Void) - Import additional Material-UI icons for sub-statuses - Update getSubStatusIcon to map each sub-status to its unique icon - Fresh: PersonAdd, Message, Event, Schedule, PlayArrow, Description, ShoppingCart, Payment - Reckoning: Sync, Assignment, AssignmentTurnedIn, Build, LocalShipping - Farm: LocalFlorist, ThumbDown, PhoneDisabled, Business, AttachMoney, AccessibilityNew, Block - Grim: Print, SignalWifiOff, PersonOff, Warning, DoNotDisturb, RestoreFromTrash - Void: Science, ContentCopy
· kamo-internal
Add icons to sub-status column matching parent status colors
- Add getSubStatusIcon helper function to determine icon based on parent status - Sub-status icons use same icons and colors as their parent status - Fresh sub-statuses: green NewReleases icon - Reckoning sub-statuses: blue Gavel icon - Farm sub-statuses: orange Agriculture icon - Grim sub-statuses: red raven icon - Void sub-statuses: gray Cancel icon

Ulimwengu wako unasubiri.
Kuanza bure katika dakika. Ongeza bidhaa wakati wowote wewe ni tayari - hakuna uhamiaji, hakuna logins mpya.
Bure milele - hakuna kadi ya mkopo inahitajika