1. 05 Nov, 2025 3 commits
    • 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
  2. 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
  3. 02 Nov, 2025 4 commits
  4. 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
  5. 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
  6. 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
  7. 28 Oct, 2025 4 commits
  8. 27 Oct, 2025 7 commits
    • Steven's avatar
      fix(web): make layout and direction settings reactive in UI · 5f7c758f
      Steven authored
      Fixed issue #5194 where changing the layout (List/Masonry) or sort direction
      didn't update the UI until page refresh. The root cause was that ViewState
      fields weren't marked as MobX observables, so the UI didn't react to changes
      even though values were being persisted to localStorage.
      
      Solution: Added constructor to ViewState that marks orderByTimeAsc and layout
      fields as observable, following the same pattern used in other stores like
      MemoFilterState.
      
      Fixes #5194
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      5f7c758f
    • Steven's avatar
      fix(server): reduce static asset cache to prevent stale files after redeploy · 91a7e927
      Steven authored
      Changed Cache-Control max-age from 7 days to 1 hour with immutable directive.
      This prevents users from experiencing blank pages or JS errors when accessing
      frequently redeployed instances (e.g., demo environments) where old cached
      assets may reference files that no longer exist after redeployment.
      
      Since Vite generates content-hashed filenames, the immutable directive prevents
      unnecessary revalidation while the shorter cache duration ensures fresh assets
      are served within an hour of redeployment.
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      91a7e927
    • Steven's avatar
      chore: update README for clarity and consistency · 2197178d
      Steven authored
      2197178d
    • boojack's avatar
      chore: tweak readme · d516f9aa
      boojack authored
      Signed-off-by: 's avatarboojack <stevenlgtm@gmail.com>
      d516f9aa
    • Steven's avatar
      chore: fix reactions seed data · f635d85b
      Steven authored
      - Add comprehensive inline documentation for auth services
      - Document session-based and token-based authentication flows
      - Clarify authentication priority and validation logic
      - Add detailed comments for JWT token structure and claims
      - Fix reactions seed data to use memo UIDs instead of numeric IDs
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      f635d85b
    • Claude's avatar
      chore: update demo data · f241b590
      Claude authored
      f241b590
    • Claude's avatar
      chore: remove unused syntax · 596b894c
      Claude authored
      - Removed the wikilink extension from markdown services in test and API service.
      - Deleted the DefaultLink and WikiLink components, simplifying link handling.
      - Updated ConditionalComponent to remove wikilink checks.
      - Adjusted MemoContent to exclude wikilink handling in markdown rendering.
      - Refined markdown styles for compact rendering, enhancing readability.
      - Added a Markdown Styling Guide to document the new compact styling approach.
      596b894c
  9. 26 Oct, 2025 3 commits
    • Claude's avatar
      7eec4242
    • Claude's avatar
      chore: add missing punctuation in comments · 6cb96ef6
      Claude authored
      6cb96ef6
    • Claude's avatar
      refactor: update markdown parser · 739fd2cd
      Claude authored
      - Removed the `nodes` field from the `Memo` interface in `memo_service.ts`.
      - Updated the `createBaseMemo` function and the `Memo` message functions to reflect the removal of `nodes`.
      - Cleaned up the serialization and deserialization logic accordingly.
      
      chore: remove code-inspector-plugin from Vite configuration
      
      - Deleted the `codeInspectorPlugin` from the Vite configuration in `vite.config.mts`.
      - Simplified the plugins array to include only `react` and `tailwindcss`.
      739fd2cd
  10. 24 Oct, 2025 4 commits
    • Steven's avatar
      fix(web): make memoFilterStore reactive by marking fields as observable · bfad0708
      Steven authored
      Fixes the root cause of non-reactive filtering. The MemoFilterState class
      was not marking its fields as observable in MobX, so changes to the filters
      array were not being tracked.
      
      Added makeObservable configuration to mark:
      - filters and shortcut as observable
      - addFilter, removeFilter, removeFiltersByFactor, clearAllFilters, setShortcut as actions
      
      This ensures that when tags are clicked and filters are added/removed,
      MobX observer components will re-render and fetch new data.
      
      Related to #5189
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      bfad0708
    • Steven's avatar
      fix(web): resolve MobX observable reactivity issue in filter computation · e0b11532
      Steven authored
      Fixes filtering functionality that was broken due to improper use of
      useMemo with MobX observables. The issue occurred because useMemo's
      dependency array uses reference equality, but MobX observable arrays
      are mutated in place (reference doesn't change when items are added/removed).
      
      Changes:
      - Remove useMemo from filter computation in Home, UserProfile, and Archived pages
      - Calculate filters directly in render since components are already MobX observers
      - Fix typo: memoFitler -> memoFilter in Archived.tsx
      
      This ensures filters are recalculated whenever memoFilterStore.filters changes,
      making tag clicks and other filter interactions work correctly.
      
      Fixes #5189
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      e0b11532
    • Steven's avatar
      fix(store): correct PostgreSQL placeholder generation in IN clauses · 46ce0bc6
      Steven authored
      Fixes a regression introduced in v0.25.2 where PostgreSQL IN clause
      placeholders were not properly incremented, causing all parameters to
      use the same placeholder index (e.g., $1, $1, $1 instead of $1, $2, $3).
      
      This bug affected:
      - ListReactions (ContentIDList) - caused "failed to list reactions" errors
      - ListAttachments (MemoIDList)
      - ListMemos (IDList and UIDList)
      
      The fix combines placeholder generation and argument appending into a
      single loop to ensure proper incrementing.
      
      Fixes #5188
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      46ce0bc6
    • Steven's avatar
      chore: bump version · 0c0d2a62
      Steven authored
      0c0d2a62
  11. 23 Oct, 2025 5 commits