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 ...
Test favicon, fix remove/add overlap bug, fix badge overlapping component bug
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...
Resolve collisions after non-snap drop and swarm
Non-snap drops now run resolveCollisions before saving positions, preventing stacking at the bottom-right corner. Swarm drops also run resolveCollisions and now...
Group-aware slot widths in flyToHomeRow
Groups now reserve horizontal slots proportional to their follower ring extent (using correct flat-top axial formula), preventing group followers from invading ...
Add resolveCollisions useCallback
Detects head-to-head and head-to-toolWindow spatial violations and moves offending heads to the nearest clean position via spiralSearch. Must be called via doub...
Add MIN_GAP constant and spiralSearch helper
Adds the 5px minimum gap invariant constant and a spiral-search function that finds the nearest collision-free pixel position for a hexhead, checking head-to-he...
Add hexhead collision fixes implementation plan
5-task plan covering: spiralSearch helper, resolveCollisions useCallback, group-aware flyToHomeRow, onUp non-snap/swarm wiring, and makeRoom/ wrapAroundDock eve...
Remove z-index DOM sort to prevent click events being dropped on focus
Sorting windows by zIndex in ToolDock caused DOM node reordering on every focus event (mousedown). Browsers drop the click event when its target element moves b...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.