1. 08 Nov, 2025 5 commits
  2. 07 Nov, 2025 3 commits
    • boojack's avatar
      7d4d1e85
    • Steven's avatar
      fix(server): prevent memory exhaustion in thumbnail generation · 8f29db2f
      Steven authored
      Address high memory usage when opening resource tab (fixes #5183) by implementing:
      
      1. Concurrency control: Limit thumbnail generation to 3 concurrent operations using semaphore to prevent memory exhaustion when many images are requested simultaneously
      
      2. S3 optimization: Skip server-side thumbnail generation for S3-stored images by default. S3 images now use presigned URLs directly, avoiding:
         - Downloading large images from S3 into server memory
         - Decoding and resizing images on the server
         - High memory consumption during batch requests
      
      3. Memory management improvements:
         - Explicitly clear blob and decoded image from memory after use
         - Restructure thumbnail cache check to avoid unnecessary semaphore acquisition
         - Double-check pattern to prevent duplicate generation while waiting
      
      This restores the original S3 behavior before commit e4f63453 while maintaining thumbnail support for local/database storage.
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      8f29db2f
    • Steven's avatar
      refactor(web): use Radix Checkbox and remove memoTypeStats · b7215f46
      Steven authored
      - Replace native input with Radix UI Checkbox in TaskListItem for better accessibility and consistent styling
      - Remove memoTypeStats tracking and display (link count, todo count, code count)
      - Remove StatCard component and related type definitions
      - Simplify statistics to only track activity calendar data and tags
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      b7215f46
  3. 06 Nov, 2025 8 commits
  4. 05 Nov, 2025 6 commits
    • Steven's avatar
      chore: fix linter · 71d0dbaf
      Steven authored
      71d0dbaf
    • Steven's avatar
      fix(web): add required headers for Nominatim reverse geocoding API · 89b0b81b
      Steven authored
      Nominatim's usage policy requires a User-Agent header to identify the application. Added User-Agent and Accept headers to the reverse geocoding fetch request, and improved error handling to check HTTP response status.
      
      Fixes #5222
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      89b0b81b
    • Steven's avatar
      refactor: rename workspace to instance throughout codebase · 4c1d1c70
      Steven authored
      Remove work-related terminology by renaming "workspace" to "instance"
      across the entire application. This change better reflects that Memos
      is a self-hosted tool suitable for personal and non-work use cases.
      
      Breaking Changes:
      - API endpoints: /api/v1/workspace/* → /api/v1/instance/*
      - gRPC service: WorkspaceService → InstanceService
      - Proto types: WorkspaceSetting → InstanceSetting
      - Frontend translation keys: workspace-section → instance-section
      
      Backend Changes:
      - Renamed proto definitions and regenerated code
      - Updated all store layer methods and database drivers
      - Renamed service implementations and API handlers
      - Updated cache from workspaceSettingCache to instanceSettingCache
      
      Frontend Changes:
      - Renamed service client: workspaceServiceClient → instanceServiceClient
      - Updated all React components and state management
      - Refactored stores: workspace.ts → instance.ts
      - Updated all 32 locale translation files
      
      All tests pass and both backend and frontend build successfully.
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      4c1d1c70
    • boojack's avatar
      d98ee361
    • Florian Dewald's avatar
      5f57f486
    • Steven's avatar
      refactor(web): unify memo stats/filters with context-aware MainLayout · 1d7efb15
      Steven authored
      Create unified architecture for memo statistics, filters, and sorting
      across all pages (Home, Explore, Archived, Profile) with proper
      visibility filtering and consistent data flow.
      
      Key changes:
      - Rename HomeLayout → MainLayout to reflect broader usage
      - Create useFilteredMemoStats hook for unified stats computation
      - Create useMemoFilters/useMemoSorting hooks to eliminate duplication
      - Refactor all pages to use unified hooks (~147 lines removed)
      - Move Explore route under MainLayout (was sibling before)
      - Fix masonry column calculation threshold (1024px → 688px+)
      
      Architecture improvements:
      - MainLayout computes filter/stats per route context
      - Stats/tags based on same filter as memo list (consistency)
      - Proper visibility filtering (PUBLIC/PROTECTED) on Explore
      - MemoExplorer/StatisticsView accept stats as required props
      - Eliminated optional fallbacks and redundant data fetching
      
      Benefits:
      - Single source of truth for stats computation
      - Stats remain static (don't change with user filters)
      - Reduced code duplication across 4 pages
      - Better maintainability and type safety
      - Proper security (no private memo leakage on Explore)
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      1d7efb15
  5. 04 Nov, 2025 1 commit
    • Steven's avatar
      fix(web): correct task checkbox toggling in multi-section memos · d30ff289
      Steven authored
      Fixed a bug where clicking checkboxes in task lists would toggle the wrong
      checkbox when a memo contained multiple sections with separate task lists.
      
      The issue was that TaskListItem was counting tasks only within the immediate
      parent list (ul/ol), but the toggleTaskAtIndex function counts all tasks
      globally across the entire memo. This caused index misalignment.
      
      Changes:
      - Add containerRef to MemoContentContext for proper task scoping
      - Pass memoContentContainerRef through context in MemoContent component
      - Update TaskListItem to count all tasks within the container scope
      
      This ensures task indices are calculated consistently with the markdown
      manipulation logic, fixing checkbox toggling in complex multi-section memos.
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      d30ff289
  6. 02 Nov, 2025 4 commits
  7. 31 Oct, 2025 3 commits
    • Steven's avatar
      refactor: redesign memo editor action bar UI · 93964827
      Steven authored
      - Replace multiple action buttons with unified InsertMenu dropdown
      - Consolidate upload, link memo, and location into single + button
      - Redesign VisibilitySelector with text-based dropdown UI
      - Unify badge styling for location, attachments, and links
        - Consistent height (h-7), padding, gaps, and border styles
        - Secondary foreground text color with hover states
        - Max width with truncation for long content
      - Add image thumbnails in attachment badges
      - Simplify button hierarchy with ghost variant for save/cancel
      - Remove obsolete components (TagSelector, MarkdownMenu, etc.)
      - Extract LocationView to separate component for better organization
      
      Fixes #5196
      93964827
    • Steven's avatar
      chore: fix linter · 1ced0bcd
      Steven authored
      1ced0bcd
    • Steven's avatar
      refactor(api): migrate inbox functionality to user notifications · bc1550e9
      Steven authored
      - Remove standalone InboxService and move functionality to UserService
      - Rename inbox to user notifications for better API consistency
      - Add ListUserNotifications, UpdateUserNotification, DeleteUserNotification methods
      - Update frontend components to use new notification endpoints
      - Update store layer to support new notification model
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      bc1550e9
  8. 30 Oct, 2025 2 commits
    • Steven's avatar
      refactor(web): refactor MemoFilters component and add comprehensive filter support · e915e3a4
      Steven authored
      - Refactored MemoFilters.tsx for better maintainability:
        * Centralized filter configuration with FILTER_CONFIGS object
        * Added TypeScript interfaces for type safety
        * Removed separate FactorIcon component
        * Extracted handleRemoveFilter function
        * Improved imports organization
      
      - Polished MemoFilters UI styles:
        * Changed to modern pill/badge design with rounded-full
        * Enhanced spacing and color schemes
        * Added smooth transitions and hover effects
        * Improved interactive remove button with destructive color hints
        * Better text readability with font-medium
      
      - Added comprehensive filter support to all pages:
        * Explore page: Added full filter support (was missing)
        * Archived page: Enhanced from basic to full filter support
        * UserProfile page: Enhanced from basic to full filter support
        * All pages now support: content search, tag search, pinned, hasLink, hasTaskList, hasCode, and displayTime filters
      
      - Consistency improvements:
        * All pages using PagedMemoList now have identical filter logic
        * Respects workspace settings for display time (created/updated)
        * Unified filter behavior across Home, Explore, Archived, and UserProfile pages
      e915e3a4
    • Steven's avatar
  9. 29 Oct, 2025 4 commits
    • Steven's avatar
      feat(store): add hierarchical tag filtering support · 5e47f25b
      Steven authored
      Tag filters now support hierarchical matching where searching for a tag (e.g., "book") will match both the exact tag and any tags with that prefix (e.g., "book/fiction", "book/non-fiction"). This applies across all database backends (SQLite, MySQL, PostgreSQL) with corresponding test updates.
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      5e47f25b
    • boojack's avatar
      chore: update readme · a2bfba69
      boojack authored
      Added LambdaTest to sponsorship section
      Signed-off-by: 's avatarboojack <stevenlgtm@gmail.com>
      a2bfba69
    • Steven's avatar
      chore: fix linter issues in backend and frontend · f65633e8
      Steven authored
      - Remove extra blank line in memo_service.go (goimports)
      - Remove invalid fields from CreateMemoRequest call (validateOnly, requestId)
      - Clean up unnecessary comments
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      f65633e8
    • Steven's avatar
      refactor(api): remove DeleteMemoTag and RenameMemoTag endpoints · 243ecf14
      Steven authored
      BREAKING CHANGE: Removed DeleteMemoTag and RenameMemoTag API endpoints
      for better API consistency. Tags should now be managed by updating memo
      content directly via UpdateMemo endpoint.
      
      Backend changes:
      - Remove RenameMemoTag and DeleteMemoTag RPC methods from proto
      - Remove backend implementations in memo_service.go
      - Regenerate protocol buffers (Go, TypeScript, OpenAPI)
      
      Frontend changes:
      - Remove RenameTagDialog component
      - Simplify TagsSection to remove rename/delete functionality
      - Improve tag styling with active state highlighting
      - Add smooth transitions and better hover interactions
      - Polish TagTree component for consistency
      - Tags now only support click-to-filter (no inline editing)
      
      Style improvements:
      - Active tags highlighted with primary color and font-medium
      - Consistent hover states across flat and tree views
      - Better spacing and visual hierarchy
      - Improved empty state styling
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      243ecf14
  10. 28 Oct, 2025 4 commits