Remove unreachable minimized state check to resolve TypeScript narrowing error
Wrap PublicChatWidget in client component to resolve ssr:false in Server Component error
Next.js 16 disallows dynamic() with ssr:false in Server Components. Adds PublicChatLoader as a client component wrapper.
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.
Use @MapsId pattern for PublicChatVisitor to resolve IdClass error
Switches from @OneToOne-as-@Id to @MapsId with explicit String sessionGuid field. Fixes Hibernate "does not define an IdClass" error at startup. Repository ID t...
Add missing Member import and fix createMember call in DataLoader
Adds missing import for Member class and replaces non-existent memberService.createMember() with memberRepository.save() for the website-contact system member c...
Correct 7 legally contestable marketing claims across the site
1. 99.9% uptime — was claimed universally, now qualified: "Up to 99.9%" or "99.9% (Enterprise)". Fixed in Hero, Testimonials, CTAStrip, TrustBar, Features...
Adjust Free plan claim from "the full platform" to "core features"
"The full platform" is legally contestable since the Free plan has significant limits vs paid plans (1 user, 3GB, 100 contacts, view-only docs, no video/AI/HR/S...
Make pricing comparison table horizontally scrollable on mobile
Wrap the feature comparison table in an overflow-x-auto container with a 700px minimum width so columns maintain readable sizes on narrow screens. Users can swi...
Remove global scroll-behavior:smooth that prevented pages from starting at top
The html element had scroll-behavior:smooth globally, which caused Next.js client-side navigation to slowly smooth-scroll from the previous scroll position inst...
Remove inline display:flex that was overriding mobile breakpoint
The desktop nav container had display:'flex' in inline styles which overrode the Tailwind 'hidden lg:flex' class (inline styles always win over classes). This m...
Replace scroll-spy nav with main site links on homepage desktop and mobile
The homepage Navigation component was showing ScrollSpyNav jump-to-section links (Home, Features, Demo, Show Me, Cases, ROI, etc.) on desktop instead of the mai...
Replace homepage mobile menu scroll-spy links with site navigation links
The homepage Navigation.tsx mobile menu was showing section jump links (Home, Features, Demo, Show Me, Cases, ROI, Testimonials, Pricing, FAQ) instead of actual...
Convert all internal <a> and <motion.a> links to Next.js <Link> for proper client-side routing
- Footer.tsx: logo motion.a→Link, all footer nav links a→Link (removed window.location.href anti-pattern), sitemap a→Link - Navigation.tsx: logo motion.a→Link...
Move offer to /pricing/offer, add Pricing dropdown, fix mobile nav
- Move offer page from /offer to /pricing/offer as a sub-page of pricing so breadcrumbs (Pricing > Prelaunch Offer) are correct - Add Pricing dropdown in head...
Align Terms of Service and Privacy Policy with current pricing page
Terms of Service: - Fix "business phone" to "third-party phone integration (via RingCentral)" - Add custom domain requirement and branding inclusion on all plan...
Update pricing model — remove phone system, add shared storage pool, adjust tiers and rates
- Remove phone system/VOIP from all plans (not yet available), replace with RingCentral integration on Business+ - Custom domain & branding now included on all ...
Move Demo from Company dropdown to CTA button between Login and Start Free
Desktop: Demo button with green border accent sits between Login and Start Free. Mobile: Demo button added to the bottom CTA row as a third button.
Remove all third-party audit, certification, and HIPAA claims
Kamo follows compliance standards but has not been audited or certified. Changes across 7 files: - "SOC 2 Compliant" → "SOC 2 Aligned" (TrustBar, CTAStrip, Dem...
Remove hexagon-divider class from TrustBar that clipped content
The hexagon-divider CSS sets height:60px and overflow:hidden, cutting off the trust indicator text. Removed the class to let content display fully.
Force full page reload from homepage footer, pure inline styles on PageHero
Root cause: Next.js 16 intercepts <a> tag clicks for client-side navigation. When navigating from homepage to sub-pages, the homepage's CSS context (Tailwind cl...
Align sub-nav links left, CTA buttons right
Split the nav into two groups: nav links (left-aligned next to logo) and CTA buttons (right-aligned). Uses flex with justify-content: space-between on the outer...
Align Home link in sub-nav, replace "Get Mine" with "Start Free" on homepage
- SubNavigation: Home link now wrapped in same div structure as category items with matching flex display and padding for consistent alignment - Homepage Navi...
Remove Framer Motion from breadcrumbs and footer links
Framer Motion's hydration was causing layout inconsistencies between homepage and sub-pages. Replaced: - Breadcrumbs: plain divs with explicit flexbox inline st...
Breadcrumbs use inline styles to guarantee single-line, footer uses dynamic import
- Breadcrumbs: replaced Tailwind classes with explicit inline styles to prevent any CSS cascade from breaking the single-line layout - Footer: loaded via dyna...
Nav links navigate to homepage sections when on sub-pages
- Desktop: ScrollSpyNav now accepts baseHref prop; on sub-pages it navigates to /{hash} instead of trying to scroll to non-existent elements - Mobile: menu li...
Breadcrumbs render inline on single line, footer moved inside main
- Breadcrumbs now use inline-flex with whitespace-nowrap to prevent wrapping - Footer moved inside <main> to match homepage DOM structure for consistent renderi...
Sub-page nav visibility, breadcrumb wrapping, and background consistency
- Set shouldAnimate=true on Navigation so it's visible without preloader - Add flex-wrap and whitespace-nowrap to breadcrumbs for clean line handling - Set expl...
Use LucideIcon type in roadmap page — verified with local build
All 24 routes compile and generate successfully.
Use React.JSX namespace for React 19 compatibility
JSX.Element is not a global namespace in React 19; must use React.JSX.Element.
Achievement badge z-index so it renders above the navbar
Nav uses zIndex 10001; badge was at z-100 and getting clipped underneath.
Trust bar z-index, remove Docs/Microsoft branding, deduplicate trademark notice, fix Most Popular badge clipping
- Increase TrustBar z-index so hexagon graphics don't overlap text - Replace Word/Excel/PowerPoint with generic terms (documents, spreadsheets, presentations) -...
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...
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.
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.
Lower embedding batch size to 8 to match model backend limit
The TEI backend forces max_batch_requests=8 regardless of client config. Batches of 32 were still failing with connection errors.
Batch embedding requests to respect model's max batch size of 32
The embedding model rejects requests with more than 32 inputs, but articles with large content produce 46-198 chunks. All embedding attempts were failing with 4...
Lower RAG min-score threshold from 0.5 to 0.25 to stop filtering relevant KB results
The 0.5 threshold was silently discarding valid results from the embedding model, especially for domain-specific content with smaller 384-dim vectors.
Defer NATS event publishing until after transaction commits to prevent RAG race condition
Events were firing inside @Transactional methods, causing RAGService to read stale data from CockroachDB before the commit. Also auto-defaults aiVisibleToMember...
Like what you see shipping?
Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.