1. 01 Dec, 2025 1 commit
  2. 30 Nov, 2025 12 commits
    • Johnny's avatar
      refactor(rss): comprehensive RSS service improvements · 545323d1
      Johnny authored
      Major performance and standards compliance improvements to RSS feed generation:
      
      Performance optimizations:
      - Fix N+1 query problem by batch loading attachments (101 queries → 2-3)
      - Add in-memory caching with 1-hour TTL and LRU eviction
      - Implement ETag-based conditional requests (304 Not Modified)
      - Add database-level pagination with LIMIT clause
      - Clean up expired cache entries to prevent memory leaks
      
      RSS 2.0 compliance:
      - Add item titles extracted from memo content
      - Include both description and content:encoded fields
      - Add author information (name and email)
      - Set proper Last-Modified headers
      - Use specific application/rss+xml content type
      
      Code quality:
      - Fix potential index out of bounds panic in title generation
      - Improve markdown heading stripping with regex (handles # to ######)
      - Add proper HTTP caching headers (Cache-Control, ETag, Last-Modified)
      - Thread-safe cache implementation with RWMutex
      - Better error handling and edge case coverage
      
      The RSS backend now follows industry best practices with optimal
      performance, full standards compliance, and production-ready reliability.
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      545323d1
    • Johnny's avatar
      feat(auth): add PKCE support and enhance OAuth security · 1a9bd32c
      Johnny authored
      Implements critical OAuth 2.0 security improvements to protect against authorization code interception attacks and improve provider compatibility:
      
      - Add PKCE (RFC 7636) support with SHA-256 code challenge/verifier
      - Fix access token extraction to use standard field instead of Extra()
      - Add OAuth error parameter handling (access_denied, invalid_scope, etc.)
      - Maintain backward compatibility for non-PKCE flows
      
      This brings the OAuth implementation up to modern security standards as recommended by Auth0, Okta, and the OAuth 2.0 Security Best Current Practice (RFC 8252).
      
      Backend changes:
      - Add code_verifier parameter to ExchangeToken with PKCE support
      - Use token.AccessToken for better provider compatibility
      - Update proto definition with optional code_verifier field
      
      Frontend changes:
      - Generate cryptographically secure PKCE parameters
      - Include code_challenge in authorization requests
      - Handle and display OAuth provider errors gracefully
      - Pass code_verifier during token exchange
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      1a9bd32c
    • Johnny's avatar
      chore: tweak comments · a6a8997f
      Johnny authored
      a6a8997f
    • Johnny's avatar
      chore: reorganize reaction components · 07072b75
      Johnny authored
      07072b75
    • Johnny's avatar
      chore: enhance MemoView component structure · 6dcf7cc7
      Johnny authored
      6dcf7cc7
    • Johnny's avatar
      7aa8262e
    • Huang Youchuan's avatar
    • Johnny's avatar
      chore: remove goreleaser · ee9d9603
      Johnny authored
      ee9d9603
    • Johnny's avatar
      refactor: clean up MemoView and MemoEditor component architecture · 2516cdf2
      Johnny authored
      This commit refactors MemoView and MemoEditor components for better
      maintainability, introducing React Context, custom hooks, and improved
      folder structure.
      
      MemoView improvements:
      - Introduce MemoViewContext to eliminate prop drilling
      - Reduce MemoHeader props from 18 to 8
      - Reduce MemoBody props from 9 to 4
      - Extract custom hooks: useMemoViewDerivedState, useMemoEditor,
        useMemoHandlers for better separation of concerns
      - Fix React hooks ordering bug in edit mode
      
      MemoEditor improvements:
      - Extract state management into useMemoEditorState hook
      - Extract keyboard handling into useMemoEditorKeyboard hook
      - Extract event handlers into useMemoEditorHandlers hook
      - Extract initialization logic into useMemoEditorInit hook
      - Reduce main component from 461 to 317 lines (31% reduction)
      
      Folder structure cleanup:
      - Move SortableItem to memo-metadata (correct location)
      - Move ErrorBoundary to components folder
      - Flatten Toolbar/InsertMenu structure (remove unnecessary nesting)
      - Consolidate hooks in main hooks folder
      - Consolidate types in main types folder
      
      Benefits:
      - Better separation of concerns
      - Improved testability
      - Easier maintenance
      - Cleaner code organization
      - No functionality changes
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      2516cdf2
    • Johnny's avatar
      refactor: remove enable link preview setting · bb7e0cdb
      Johnny authored
      - Remove enable_link_preview field from proto definitions
      - Remove setting UI from MemoRelatedSettings component
      - Remove translations from all 33 locale files
      - Regenerate proto files
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      bb7e0cdb
    • Johnny's avatar
      refactor: remove legacy disable markdown shortcuts setting · 5fb6f8ec
      Johnny authored
      - Remove disable_markdown_shortcuts field from proto definitions
      - Remove setting UI from MemoRelatedSettings component
      - Enable markdown shortcuts permanently in MemoEditor
      - Remove translations from all 32 locale files
      - Fix TypeScript error in useMemoSave hook by using typed translation function
      
      🤖 Generated with [Claude Code](https://claude.com/claude-code)
      Co-Authored-By: 's avatarClaude <noreply@anthropic.com>
      5fb6f8ec
    • Johnny's avatar
      chore: fix linter · 2b7b70eb
      Johnny authored
      2b7b70eb
  3. 29 Nov, 2025 1 commit
    • Johnny's avatar
      refactor: implement MemoView component with subcomponents and hooks · 1ef11f74
      Johnny authored
      - Added MemoView component to display a single memo card with full functionality including creator info, memo content, attachments, reactions, and comments.
      - Created MemoBody and MemoHeader subcomponents to separate concerns and improve maintainability.
      - Introduced custom hooks for managing memo actions, keyboard shortcuts, NSFW content visibility, and image preview.
      - Implemented reaction handling with new ReactionSelector and ReactionView components.
      - Added TypeScript types for better type safety and clarity.
      - Established constants for memo card styling and keyboard shortcuts.
      - Removed legacy ReactionSelector and ReactionView components from the previous structure.
      1ef11f74
  4. 28 Nov, 2025 1 commit
    • Johnny's avatar
      feat: add LocationDialog and related hooks for location management in MemoEditor · 50199fe9
      Johnny authored
      - Implemented LocationDialog component for selecting and entering location coordinates.
      - Created useLocation hook to manage location state and updates.
      - Added LocationState type for managing location data.
      - Introduced useLinkMemo hook for linking memos with search functionality.
      - Added VisibilitySelector component for selecting memo visibility.
      - Refactored MemoEditor to integrate new hooks and components for improved functionality.
      - Removed obsolete handlers and streamlined memo save logic with useMemoSave hook.
      - Enhanced focus mode functionality with dedicated components for overlay and exit button.
      50199fe9
  5. 27 Nov, 2025 1 commit
  6. 26 Nov, 2025 7 commits
  7. 25 Nov, 2025 7 commits
  8. 24 Nov, 2025 6 commits
  9. 23 Nov, 2025 2 commits
    • Johnny's avatar
      60d977c0
    • Johnny's avatar
      refactor(markdown): use Unicode categories for tag validation · b78d4c25
      Johnny authored
      Replace custom character whitelist with Unicode standards-based validation:
      
      - Use unicode.IsLetter/IsNumber/IsSymbol instead of hardcoded lists
      - Remove manual UTF-8 byte checking for CJK punctuation
      - Add proper rune-based length limiting (MAX_TAG_LENGTH = 100)
      - Improve international character support (CJK, Arabic, Cyrillic, etc.)
      - Add emoji support via unicode.IsSymbol
      
      Benefits:
      - Cleaner, more maintainable code (~50 lines removed)
      - Standards-based approach following Unicode categories
      - Better UTF-8 safety with utf8.DecodeRune
      - Consistent validation between Go backend and TypeScript frontend
      
      All existing tests pass with improved Unicode handling.
      b78d4c25
  10. 21 Nov, 2025 2 commits