1. 14 Nov, 2025 2 commits
    • Steven's avatar
      chore(web): migrate from ESLint+Prettier to Biome · 156908c7
      Steven authored
      - Install @biomejs/biome@2.3.5 as unified linter and formatter
      - Remove ESLint, Prettier and all related plugins (221 packages removed)
      - Migrate linting rules from ESLint to Biome configuration
      - Migrate formatting rules from Prettier to Biome configuration
      - Exclude auto-generated proto files from linting (src/types/proto/**)
      - Exclude CSS files from Biome (Tailwind syntax not yet supported)
      - Update package.json scripts:
        - lint: tsc + biome check
        - lint:fix: biome check --write
        - format: biome format --write
      - Auto-fix import organization across 60+ files
      - Fix duplicate key in Russian locale (ru.json)
      - Update CLAUDE.md documentation to reflect Biome usage
      
      Benefits:
      - 10-100x faster linting performance
      - Simplified toolchain with single configuration file
      - 221 fewer npm dependencies
      - Unified linting, formatting, and import organization
      156908c7
    • Johnny's avatar
  2. 11 Nov, 2025 1 commit
  3. 10 Nov, 2025 4 commits
  4. 09 Nov, 2025 4 commits
  5. 08 Nov, 2025 9 commits
  6. 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
  7. 06 Nov, 2025 8 commits
  8. 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
  9. 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
  10. 02 Nov, 2025 2 commits