Add polished MatrixCell component for feature matrix editing
New reusable MatrixCell component with modern, animated micro-interactions: Read mode: - Circular icon badges (green check / gray X) for booleans - Colored pil...
Add Edit Matrix button to toggle between read and edit modes
The matrix now starts in read-only view mode. Clicking "Edit Matrix" switches to inline edit mode with checkboxes, switches, and text inputs. Cancel reverts cha...
Redesign Features tab with tabbed layout and production-grade matrix
- Fix planFeatures API response key mismatch (subscriptionPlanFeatures -> planFeatures) - Split Features into two views via internal tabs: 1. Categories & Fea...
Parse JSONB string fields before array operations in grid renderers
compatiblePlanIds, includedInPlanIds, and applicablePlanIds come from the backend as JSON strings, not arrays. Added safe JSON.parse fallback in cell renderers ...
Align API response keys with backend and fix AG Grid rendering
- Fix 7 response key mismatches in posApi.ts (featureCategories, features, addOns, bundles, volumeDiscounts, promotions, agreementTemplates) - Switch all AG G...
Use docker/login-action + buildx for reliable registry auth
Replace bare docker login/build/push with the docker/login-action@v3, docker/setup-buildx-action@v3, and docker/build-push-action@v5 pattern that handles creden...
Enterprise subscription POS system - complete frontend rebuild
- Extended posApi.ts with 70+ subscription API methods and 28 new TypeScript interfaces - Added useSubscriptionPermissions hook for granular permission-based re...
Add POS (Commerce) to settings navigation menus
POS app was missing from settings sidebar and FeaturesManager route map, so enabling it from Apps & Features had no effect on navigation.
Integrate public chat key management into existing API Access tab
Rewrites APIManager.tsx with real backend calls to /api/public-chat-keys (backed by MediaService). Removes the separate PublicChatKeyManager tab and all nav ref...
Route public chat key API calls to MediaService instead of SecurityService
Changes proxy path from /api/security/public-chat-keys to /api/media/public-chat-keys to match the actual backend controller location in MediaService.
Add public chat API key management to security settings
Adds PublicChatKeyManager tab under Settings > Security for creating and managing public chat API keys. Keys are shown once at creation, stored hashed, and supp...
Remove stepper, overlay loading bar, persistent controls panel, font replacement toggle
Layout: - Removed step indicator (Select Area / Remove Background / Review) for more room - Loading bar now overlays on top of the preview image, hidden when co...
Side-by-side review layout with compact controls and auto-reprocess
Review step: - Preview on left, scrollable controls panel on right (240px) - Controls scroll independently while preview stays visible - No need to scroll below...
Pre-select entire image on crop, default to color vectorization
- Crop tool now starts with the full image pre-selected with 8 handles - Users can adjust from there or continue immediately — no "Use full image" needed - Defa...
User-friendly vector conversion flow with auto-convert for vector formats
UX improvements: - Replaced all "SVG" terminology with "vector" for non-technical users - Added educational guidance explaining why conversion is needed - Steps...
Add 8 draggable resize handles on crop selection edges and corners
- 4 corner handles (tl, tr, bl, br) with diagonal resize coders - 4 edge midpoint handles (tc, bc, ml, mr) with horizontal/vertical coders - Handles are draggab...
Replace react-easy-crop with freeform drag-to-select rectangle tool
react-easy-crop forced square/fixed-aspect selections. New canvas-based tool lets users click and drag any rectangle at any aspect ratio. Shows dimmed overlay o...
Show logo image on background picker step using img element
Canvas element wasn't rendering because it started with 0x0 dimensions. Use a visible <img> for display and an offscreen canvas for pixel sampling.
Combine docker login, build, and push in single step to preserve auth
Separate steps lose docker credentials between Forgejo runner step boundaries. Running login+build+push in a single shell ensures the auth config persists.
Add background color picker step and improve SVG conversion UX
- Added "Pick Background" step between Crop and Process - Users click on the image to select the background color to remove - Shows selected color swatch with R...
Use docker build/push directly instead of build-push-action
The docker/build-push-action with driver:docker loses auth credentials during the push phase. Using plain docker build + docker push ensures the login credentia...
Use path-based WebSocket routing via /vector-ws/ instead of separate subdomain
Connect WebSocket directly to vector.{domain} subdomain
Next.js rewrites don't proxy WebSocket upgrade requests. Connect directly to the VectorService via its own subdomain, same pattern as media WebSocket.
Add image-to-SVG conversion pipeline with reusable modal component
- New ImageToSVGConverter modal component with 3-step flow: Crop → Process → Review - WebSocket hook (useImagePipeline) for streaming pipeline communication - C...
Add date/time scheduler to Start Meeting dialog
Adds a Now/Schedule pill toggle to the meeting creation dialog. When Schedule is selected, an MUI DateTimePicker slides in with 15-minute intervals and a format...
Handle meetReturn redirect to send users back to meeting after login
- Detect meetReturn query param on home page (from KamoMeet auth redirect) - Generate OTK and redirect authenticated users back to meet with token - Use session...
Bypass forwardToApi for background upload, use direct fetch with step-by-step logging
Reorder NavTop icon buttons to Email, Text, Phone, Calculators, AI, Support
Remove client-side OTK from multipart upload, add upload debug logging
The client was generating a wasted OTK before upload (the Next.js route generates its own server-side OTK for the backend). Removed the client OTK to simplify t...
Simplify NavTop display name lookup and correct MediaService URL scheme
- Remove usernameAlias lookup from getDisplayName, use member record directly - Fix MediaService K8s URL from https:8443 to http:80
Use forwardToApi for meet background uploads instead of manual fetch
The manual fetch with FormData forwarding was breaking multipart boundaries. Now reconstructs FormData and uses forwardToApi which handles headers correctly.
Add org theme backgrounds to meets settings and remove deprecated fields
- Add GET route for org theme backgrounds **************** - Update meetApi.ts: remove whoCanCreate and emailInvitesEnabled from MeetConfig, add OrgThemeBackgro...
Fetch signature template directly from EmailService with OTK auth, add debug logging
forwardToApi for /api/email/signature-templates went through APIService gateway instead of the Next.js email proxy. Now fetches directly from EmailService with ...
Read session from Redis directly (same as /api/user-info), use forwardToApi for all service calls
Root cause: the sender profile showed 'Your colleague' because the session fetch called a non-existent SecurityService endpoint. Signature was malformed because...
Replicate exact email composer data flow for meeting invite emails
The previous implementation only filled 8 of 20+ SignatureContent fields, causing malformed signatures with no images, name, or contact info. Now replicates th...
Clean up meeting invite email — remove logo, fix subject/host, embed custom message properly
Template changes: - Removed logo image (signature template header handles branding) - Removed 'Hi, Your colleague has invited you' — replaced with custom mess...
Use correct SignatureContent field names (headerImageUrl, signatureImageUrl)
Wrap meeting invite emails with org signature template (header/footer/signature) and include custom message
Now replicates the exact same email wrapping as the email composer: 1. Fetches signature template from EmailService (USER scope, COMPANY fallback) 2. Fetches se...
Send meeting invite emails DIRECTLY to EmailService, not through APIService gateway
Root cause: forwardToApi routes through APIService's Java gateway which doesn't preserve multipart FormData boundaries correctly. The email composer works becau...
Use subtle background tints on calendar page header and sidebar
Match the leads/allotments page styling with light color-mix backgrounds instead of heavily saturated primary colors.
Clear stale hexheads on page refresh instead of restoring orphaned state
Minimized tool windows don't survive refresh, so restoring hexhead positions created orphaned heads with missing icons and non-functional click handlers. Now cl...
เหมือนที่คุณเห็นการขนส่ง?
ทุก คน ที่ ได้ รับ การ ปรับ ปรุง เหล่า นี้ จะ ลง ไป ใน ที่ ทํา งาน ของ คุณ โดย อัตโนมัติ. เริ่มให้อิสระและดูมันเติบโตสัปดาห์แล้วสัปดาห์เล่า.