Add abstract title fields to BranchTitleResolution
Add memberAbstract and teamMemberAbstract fields with defaults for the label customization system.
Add abstract title labels and dynamic parent branch titles
Add memberTitleAbstract and teamMemberTitleAbstract label fields with sync support. Replace hardcoded "Company" references with dynamic parentBranchTitleNonPlur...
Split ageReqType and add member/team registration routes
- Replace ageReqType with ageReqTypeMember and ageReqTypeTeamMember - Extract RegisterFlow component from page.tsx - Add /member and /team routes for separate r...
Split ageReqType into member and team member fields
Update Organization type, PublicProvider, route schema, and BranchSetupManager with separate member/team member age requirement sections.
Return ageReqTypeMember and ageReqTypeTeamMember in org API response
Update DataLoader for split ageReqType fields
Set both ageReqTypeMember and ageReqTypeTeamMember to same value in mock data.
Split ageReqType into ageReqTypeMember and ageReqTypeTeamMember
Separate age requirement tracking for members vs team members in Organization entity.
Rename Employee to TeamMember and wire up dynamic label overrides
Rename all Employee/Employment references to TeamMember/TeamMembership. Extend useThemeConfig() with label fields and getter methods fetched from the organizati...
Rename Employee to TeamMember and wire up dynamic label overrides
Rename all Employee/Employment references to TeamMember/TeamMembership. Replace hardcoded Member/Team Member display text with dynamic label getters from useUse...
Rename Employee to TeamMember and Employment to TeamMembership
Update all Employee/Employment references to TeamMember/TeamMembership in controllers, services, and security profile. Rename API endpoint from /employees-contr...
Rename Employee to TeamMember and Employment to TeamMembership
Rename all Employee/Employment references to TeamMember/TeamMembership across classes, variables, methods, DB annotations, enum values, and display text. Also u...
Add Child Organization Security Models mock UI to Branch Setup tab
Adds a datagrid with inline edit/add panel for managing child org security models, including org visibility toggles, age range selection, identity provider and ...
Resolve session timeout maintenance system not running
Root cause: sessionMonitor.start() called stop() after setting this.config, which nullified the config before the 3-second startup timer fired. As a result, the...
Hide re*** badge when text attribution mode is active
Fixed overly-specific CSS selector that targeted the badge inside #re***-container. Google injects the badge directly into <body>, so the rule never matched. Ch...
Add BranchTitleResolution, resolveEffectiveBranchTitles, updateBranchTitles
Add branch setup implementation plan
12-task sequential plan covering kamo-shared-library, SecurityService, and kamo-internal changes end-to-end.
Add branch setup design spec
Covers the full feature from kamo-shared-library schema changes through SecurityService session/endpoint changes to kamo-internal UI and API proxy.
Skip DB member lookup for messages auth check
Extract getMemberIdFromRequest() that reads memberID from the Redis session without hitting the DB. Use it in getMessages() instead of getCurrentMember() — the ...
Eliminate OTK Redis overhead and proxy log noise for message fetches
- Bypass OTK generation in the MediaService proxy route: forward the *** cookie directly instead of generating a one-time key, removing 4 Redis round-trips ...
Eliminate per-request logging overhead and async TTL refresh
- k8s configmap (the actual production config): lower security/hikari logging from INFO/DEBUG to WARN, add HikariCP pool config (max 20) - KSessionService: st...
Reduce log noise and tune connection pool
- Lower Spring Security from TRACE to WARN and HikariCP from DEBUG to WARN — eliminates dozens of synchronous log writes per request - Add explicit HikariCP p...
Fetch parent message in same query to eliminate reply N+1
Alias m.msg and LEFT JOIN FETCH msg.parent so that threaded reply messages have their parent loaded in the initial query rather than triggering a separate SELEC...
Improve chat message loading performance
- Cache getCurrentMemberId() result in a ref to avoid repeated /api/user-info calls on every WebSocket message and typing indicator - Parallelize message hist...
Remove per-message logging from chat message endpoint
Remove System.out.println calls inside the message stream map that were firing once per message (100 I/O operations per request), and the final log that streame...
Fix N+1 query and add composite index for chat message loading
- Add LEFT JOIN FETCH m.msg to both repository queries to eagerly load MediaObjMsg in the same query, eliminating up to 100 extra SQL queries per chat windo...
Force light mode to override external dark mode CSS
- Set Tailwind darkMode to 'class' to prevent OS preference from triggering dark utilities - Add !important overrides in globals.css to lock light mode variable...
Resolve horizontal overlap, follower blind spot, and timing bugs
- flyToHomeRow: compute per-follower actual dx extents to derive rightBuffer/leftBuffer independently, placing anchor correctly to prevent ring followers from...
Force light mode regardless of OS color scheme preference
Removed prefers-color-scheme dark media query so the site always renders in light mode.
Bake Size slider zoom into saved SVG via viewBox crop
Avatar Creator's internal scale transform zooms the avatar body within the SVG canvas, but the effect is imperceptible at small display sizes (e.g. a 140x140 Av...
Remove redundant CSS scale transform from avatar preview
Avatar Creator's scale option already applies scale(N/100) as an SVG group transform on the avatar body. The preview container was also applying CSS transform: ...
Implement makeRoom and post-dock collision resolution
Replaces the no-op hexheads:makeRoom listener with a real handler that runs resolveCollisions after the new tool window's DOM rect is stable. Fixes the listener...
Like what you see shipping?
All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.
