# Changelog All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] ## [0.6.2] - 2025-01-27 ### Added - Pull-to-refresh gesture on mobile for all scrollable views - HighlightsPanel (right sidebar) - refresh highlights for current article - Explore page - refresh blog posts from friends - Me pages (all tabs) - refresh user data - BookmarkList (left sidebar) - refresh bookmarks - Touch-only activation using coarse pointer detection - Visual indicator with rotating arrow and contextual messages - Three-dot menu for external URLs in reader (`/r/` path) - Open in browser, Copy URL, Share URL actions - Consistent with article menu functionality ### Changed - Bookmark refresh button moved to footer alongside view mode controls - Last update time now shown in button tooltip - Cleaner UI with all controls consolidated in footer - Unified button styles across left and right sidebars - All sidebar buttons now use IconButton component for consistency - Removed 73 lines of redundant CSS for old button classes - Highlights panel buttons match bookmark sidebar styling ### Fixed - Reader content alignment on desktop - Title, summary, metadata, and body text now properly aligned - All reader elements now have consistent 2rem horizontal padding - Mobile layout retains compact padding - Highlight text matching with multiple improvements - Precise normalized-to-original character position mapping - Remove existing highlight marks before applying new ones - Robust validation and error handling for multi-node highlights - Prevent character spacing issues in highlighted text - Add text validation before applying highlights - Eliminate intra-word spaces in highlighted text ## [0.6.1] - 2025-10-13 ### Added - Writings tab on `/me` page to display user's published articles - Comprehensive headline styling (h1-h6) with Tailwind typography - List styling for ordered and unordered lists in articles - Blockquote styling with indentation and italics - Vertical padding to blockquotes for better readability - Horizontal padding for reader text content on desktop - Drop-shadows to sidebars for visual depth - MutationObserver for tracking highlight DOM changes ### Changed - Article titles now larger and more prominent - Article summaries now display properly in reader header - Zap splits settings UI with preset buttons and full-width sliders - Sidebars now extend to 100vh height - Blockquote styling simplified to minimal indent and italic - Improved zap splits settings visual design ### Fixed - Horizontal overflow from code blocks and wide content on mobile - Settings view now mobile-friendly with proper width constraints - Long relay URLs no longer cause horizontal overflow on mobile - Sidebar/highlights toggle buttons hidden on settings/explore/me pages - Video titles now show filename instead of 'Error Loading Content' - AddBookmarkModal z-index issue fixed using React Portal - Highlight matching for text spanning multiple DOM nodes/inline elements - Highlights now appear as single continuous element across DOM nodes - Highlights display immediately after creation with synchronous render - Scroll-to-highlight functionality restored after DOM updates - Padding gaps around sidebars removed - TypeScript errors in video-meta.ts resolved ### Refactored - Migrated entire color system to Tailwind v4 color palette - Migrated all CSS files (sidebar, highlights, cards, forms, reader, etc.) to Tailwind colors - Updated default highlight colors to yellow-400 for markers and yellow-300 for other contexts - Added comprehensive color system documentation (COLOR_SYSTEM.md) - Cleaned up legacy.css removing unused debugging styles ## [0.6.0] - 2025-10-13 ### Added - Tailwind CSS v4 integration with preflight enabled - Reading position tracking with visual progress indicator - Document-level scrolling with sticky sidebars on desktop - Dedicated legacy styles file for better organization ### Changed - Refactored layout system to use document scroll instead of pane scroll - Migrated reading progress indicator to Tailwind utilities - Migrated mobile buttons to Tailwind utilities - Simplified global CSS to work with Tailwind preflight - Updated PostCSS configuration for Tailwind v4 - Reconciled base styles with Tailwind preflight - Reorganized and cleaned up duplicate styles in index.css - Made reading progress indicator smaller and more subtle ### Fixed - Reading position indicator now always visible at bottom of screen - Progress tracking now accurately reflects reading position - Scroll behavior consistent across desktop and mobile - Removed padding on mobile main pane for edge-to-edge content - Removed mobile content pane gap for better layout - Document scroll with important overrides for consistent behavior ## [0.5.7] - 2025-01-14 ### Added - Vimeo video metadata extraction support - YouTube video metadata extraction with title, description, and captions - Responsive video player with aspect ratio support - Thumbnail images in compact view - URL routing for /me page tabs - Bookmark navigation in reading list - Video duration display for video URLs - Three-dot menu for videos with open/native/copy/share actions - External video embedding in reader using react-player - Video detection for Vimeo, Dailymotion, and other platforms ### Changed - Enhanced borders for reading list cards - Reading list tab colored blue to match bookmarks icon - Left-aligned text in reading list elements - Increased spacing between mobile buttons and profile element - Main pane now full width when displaying videos - Video container breaks out of reader padding for full width - Simplified video container layout ### Fixed - Video player edge-to-edge display with negative margins - Prevent profile element from bleeding off screen on mobile - Resolved TypeScript errors in youtube-meta.ts - Improved type safety in youtube-meta handler - More lenient YouTube description extraction - Corrected setTimeout ref type in Settings - Proper react-player responsive pattern implementation - Removed unused getIconForUrlType in CompactView ### Style - Hide tab counts on mobile for /me page - Remove max-width on main pane, constrain reader instead - Full width layout for videos - Reader-video specific styles ## [0.5.6] - 2025-10-13 ### Added - Three-dot menu for articles and enhanced highlight menus - Prism.js syntax highlighting for code blocks - Inline image rendering in nostr-native blog posts - Image placeholders on blog post cards in `/explore` - Caching on `/me` page for faster loading ### Changed - Reading List on `/me` now uses the same components as the bookmarks sidebar - Improve bookmarks sidebar visual design - Make article menu button more subtle by removing border ### Fixed - Use round checkmark icon (faCheckCircle) for Mark as Read button - Remove extra horizontal divider above article menu - Ensure code blocks consistently use monospace fonts - Preserve reading font settings in markdown images ### Style - Remove horizontal divider above Mark as Read button - Remove horizontal divider below article menu button ## [0.5.5] - 2025-01-27 ### Added - `/me` page with tabbed layout featuring Highlights, Reading List, and Library tabs - Two-pane layout for `/me` page with article sources and highlights - Custom FontAwesome Pro books icon for Archive tab - CompactButton component for highlight cards - Instant mark-as-read functionality with checkmark animation and read status checking ### Changed - Rename Library tab to Archive - Move highlight timestamp to top-right corner of cards - Replace username with AuthorCard component on `/me` page - Use user's custom highlight color for Highlights tab - Render library articles using BlogPostCard component for consistency - Use faBooks icon for Mark as Read button - Make quote icon a CompactButton in top-left corner ### Fixed - Include currentArticle in useEffect deps to satisfy lint - Deduplicate article events in library to prevent showing duplicates - Remove incorrect useSettings hook usage in Me component - Correct fetchBookmarks usage with callback pattern in Me component - Add padding to prevent quote text from overlapping timestamp - Improve spacing and alignment of highlight card elements - Align corner elements symmetrically with proper margins - Group relay icon and author in footer-left for consistent alignment - Position relay indicator in bottom-left corner to prevent overlap with author ### Style - Match `/me` profile card width to highlight cards - Improve Me page mobile tabs and avoid overlap with sidebar buttons - Reduce margins/paddings to make highlight cards more compact - Tighten vertical spacing on highlight cards - Left-align text inside author card - Constrain `/me` page content width to match author card (600px) - Improve tab border styling for dark theme - Make relay indicator match CompactButton (same look as menu) - Align relay indicator within footer with symmetric spacing - Make header and footer full-width with borders and corners ## [0.5.4] - 2025-10-13 ### Changed - Refactor CSS into modular structure - Split 3600+ line monolithic `index.css` into organized modules - Created `src/styles/` directory with base, layout, components, and utils subdirectories - Each file kept under 210 lines for maintainability - Preserved cascade order and selector specificity via ordered `@import` statements - No functional changes to styling ### Fixed - Mobile button positioning now uses safe area insets for symmetrical layout on notched devices ## [0.5.3] - 2025-10-13 ### Changed - Relay status indicator is now more compact - Smaller padding and font sizes on desktop - Auto-collapsed on mobile (icon-only by default, tap to expand) - Matches size of sidebar toggle buttons (44px touch target) - Hides when scrolling down, shows when scrolling up (consistent with other mobile controls) ### Fixed - Invalid bookmarks without IDs no longer appear in bookmark list - Previously showed as "Now" timestamp with no content - Bookmarks without valid IDs are now filtered out entirely - Use bookmark's original timestamp instead of always generating new ones - Profile icon size when logged out now matches other icon buttons in sidebar header ## [0.5.2] - 2025-10-12 ### Added - Three-dot menu to highlight cards for more compact UI - Combines "Open on Nostr" and "Delete" actions into dropdown menu - Uses horizontal ellipsis icon (⋯) - Click-outside functionality to close menu ### Changed - Switch Nostr gateway from njump.me/search.dergigi.com to ants.sh - Centralized gateway URLs in config file - All profile and event links now use ants.sh - Automatic detection of identifier type (profile vs event) for proper routing - Remove loading text from Explore and Me pages (spinner only) - "Open on Nostr" now links to the highlight event itself instead of the article ### Fixed - Gateway URL routing for ants.sh requirements (/p/ for profiles, /e/ for events) - Linting errors in HighlightItem component ## [0.5.1] - 2025-10-12 ### Added - Highlight color customization to UI elements - Apply user's "my highlights" color to highlight creation buttons - Apply highlight group colors to highlight count indicators - Apply "my highlights" color to collapsed highlights panel button ### Fixed - Highlight count indicator styling to match reading-time element - Brightness and border styling for highlight count indicator - User highlight color now applies to both marker and arrow icons - Highlight group color properly applied to count indicator background ### Removed - MOBILE_IMPLEMENTATION.md documentation file ## [0.5.0] - 2025-10-12 ### Added - Upgrade to full PWA with `vite-plugin-pwa` - Replace placeholder icons with branded favicons - Author info card for nostr-native articles ### Changed - Explore: shrink refresh spinner footprint; inline-sized loading row - Explore: preserve posts across navigations; seed from cache; merge streamed and final results - Explore: keep posts visible during refresh; inline spinner; no list wipe - Bookmarks: keep list visible during refresh; show spinner only; no wipe - Bookmarks: avoid clearing list when no new events; decouple refetch from route changes - Highlights: split service into smaller modules to keep files under 210 lines - Lint/TypeScript: satisfy react-hooks dependencies; fix worker typings; clear ESLint/TS issues ### Fixed - Highlights: merge remote results after local for article/url - Explore: always query remote relays after local; stream merge into UI - Improve mobile touch targets for highlight icons - Color `/me` highlights with "my highlights" color setting ### Performance - Local-first then remote follow-up across services (titles, bookmarks, highlights) - Run local and remote fetches concurrently; stream and dedupe results - Stream contacts and early posts from local; merge remote later - Relay queries use local-first with short timeouts; fallback to remote when needed - Stream results to UI; display cached/local immediately (articles, highlights, explore) ### Documentation - PWA implementation summary and launch checklist updates - Update docs to reflect branded icons and final steps - Remove temporary PWA launch checklist and implementation summary ## [0.4.3] - 2025-10-11 ### Added - Mark as read functionality for articles (NIP-25) - Button at the end of each article to mark as read with 📚 emoji - Creates kind:7 reactions for nostr-native articles (`/a/` paths) - Creates kind:17 reactions for external websites (`/r/` paths) - Button shows loading state while publishing reaction - Only visible when user is logged in - Highlight deletion with confirmation dialog (NIP-09) - Small delete button (trash icon) on highlight items - Only visible for user's own highlights - Confirmation dialog prevents accidental deletions - Styled to match relay indicator (subtle, same size) - Removes highlights from UI immediately after deletion request - `/me` page showing user's recent highlights - Accessible by clicking profile picture in bookmark sidebar - Displays all highlights created by the logged-in user - Uses same rendering as Settings and Explore pages - Includes highlight count in header - Confirmation dialog component - Reusable modal with danger/warning/info variants - Backdrop blur effect - Mobile-responsive design - Prevents accidental destructive actions ### Changed - Relay status indicator on mobile now displays in compact mode - Shows only airplane icon by default (44x44px touch target) - Tap to expand for full connection details - Reduces screen clutter on mobile while keeping info accessible - Smooth transition between compact and expanded states - Desktop view remains unchanged (always shows full details) ## [0.4.2] - 2025-10-11 ### Added - NIP-19 identifier resolution in article content (NIP-19, NIP-27) - Support for `nostr:npub1...`, `nostr:note1...`, `nostr:nprofile1...`, `nostr:nevent1...`, `nostr:naddr1...` - Converts nostr: URIs to clickable links with human-readable labels - Automatically fetches and displays article titles for `naddr` references - Falls back to identifier when title fetch fails - Auto-hide mobile UI buttons on scroll down - Floating bookmark/highlights buttons hide when scrolling down - Buttons reappear when scrolling up for distraction-free reading - Smooth opacity transitions for better UX - Scroll direction detection hook (`useScrollDirection`) - Supports both window and element-based scroll detection - Configurable threshold and enable/disable options ### Changed - Article references (`naddr`) now link internally to `/a/{naddr}` instead of external njump.me - Sidebar auto-closes on mobile when navigating to content via routes - Handles clicking on blog posts in Explore view - Complements existing sidebar auto-close for bookmarks - Markdown processing now async to support article title resolution - Article title resolution fetches titles in parallel for better performance ### Fixed - Mobile button scroll detection now correctly monitors main pane element - Previously monitored window scroll which didn't work on mobile - Content scrolls within `.pane.main` div on mobile devices - All ESLint warnings and TypeScript type errors resolved - Added react-hooks plugin to ESLint configuration - Fixed exhaustive-deps warnings in components - Added block scoping to switch case statements - Corrected type references for nostr-tools decode result ## [0.4.1] - 2025-10-10 ### Fixed - Long article summaries overlapping with hero image content on mobile devices - Article summary now moves below hero image on mobile when longer than 150 characters - Article summary line clamp reduced from 3 to 2 lines on mobile for better space utilization ### Changed - Hero image rendering on mobile now uses zoom-to-fit approach with viewport-based sizing - Hero image height on mobile set to 50vh (constrained between 280px-400px) - Improved image cropping with center positioning for better visual presentation - Optimized reader header overlay padding and title sizing on mobile ## [0.4.0] - 2025-10-10 ### Added - Mobile-responsive design with overlay sidebar drawer - Media query hooks for responsive behavior (`useIsMobile`, `useIsTablet`, `useIsCoarsePointer`) - Auto-collapse sidebar setting for mobile devices - Touch-optimized UI with 44x44px minimum touch targets - Safe area inset support for notched devices - Mobile hamburger menu and backdrop - Focus trap in mobile sidebar with ESC key support - Body scroll locking when mobile sidebar is open - Mobile-optimized modals (full-screen sheet style) - Mobile-optimized toast notifications (bottom position) - Dynamic viewport height support (100dvh) - Mobile highlights panel as overlay with toggle button ### Changed - Sidebar now displays as overlay drawer on mobile (≤768px) - Highlights panel hidden on mobile for better content focus - Sidebar auto-closes when selecting content on mobile - Hover effects disabled on touch devices - Replace hamburger icon with bookmark icon on mobile ### Fixed - Ensure bookmarks container fills mobile sidepane properly - Restore desktop grid layout for highlights panel - Improve empty state and loading visibility in mobile sidepanes - Add flex properties to mobile bookmark containers for proper filling - Force bookmarks pane expanded on mobile and ensure highlights pane sits above content on desktop - Reduce mobile backdrop opacity and ensure sidepanes appear above it - Replace any type with proper bookmark interface for linter compliance ## [0.3.8] - 2025-10-10 ### Fixed - Add vercel.json configuration to properly handle SPA routing on Vercel deployments (fixes 404 errors on page refresh) ## [0.3.7] - 2025-10-10 ### Fixed - Logout button functionality - now properly clears active account using clearActive() method ## [0.3.6] - 2025-10-10 ### Added - Compact date format for highlights (now, 5m, 3h, 2d, 1mo, 1y) - Ultra-compact date format for bookmarks sidebar - Encode event links as nevent/naddr per NIP-19 for better client compatibility - Render /explore within ThreePaneLayout to keep side panels visible ### Fixed - Remove incorrect padding-right from highlights container - Reduce font size of highlight metadata for cleaner look - Position highlight FAB button relative to article pane instead of viewport - Adjust relay indicator position for better visual alignment - Ensure highlight metadata elements align on single visual line with consistent line-height - Prevent bookmark icons from being cut off in compact view - Clean up nested borders in bookmark items and sidebar view mode controls - Align highlight metadata elements on single line in sidebar - Change explore header icon from compass to newspaper ### Changed - Make connecting notification more subtle with muted blue background - Update Boris pubkey for zap splits to npub19802see0gnk3vjlus0dnmfdagusqrtmsxpl5yfmkwn9uvnfnqylqduhr0x - Update domain references to read.withboris.com (URLs, SEO metadata, and documentation) ## [0.3.5] - 2025-10-09 ### Fixed - Ensure connecting state shows for minimum 15 seconds to prevent premature offline display - Add Cloudflare Pages routing config for SPA paths ### Changed - Extend connecting state duration and remove subtitle text for cleaner UI ## [0.3.4] - 2025-10-09 ### Fixed - Add p tag (author tag) to highlights of nostr-native content for proper attribution ## [0.3.3] - 2025-10-09 ### Added - Service Worker for robust offline image caching - /explore route to discover blog posts from friends on Nostr - Explore button (newspaper icon) in bookmarks header - "Connecting" status indicator on page load (instead of immediately showing "Offline") - Last fetch time display with relative timestamps in bookmarks list ### Changed - Simplify image caching to use Service Worker transparently - Move refresh button from top bar to end of bookmarks list - Make explore page article cards proper links (supports CMD+click to open in new tab) - Reorganize bookmarks UI for better UX ### Fixed - Improve image cache resilience for offline viewing and hard reloads - Correct TypeScript types for cache stats state - Resolve linter errors for unused parameters - Import useEventModel from applesauce-react/hooks for proper type safety - Import Models from applesauce-core instead of applesauce-react - Use correct useEventModel hook for profile loading in BlogPostCard ## [0.3.0] - 2025-10-09 ### Added - Flight Mode with offline highlight creation and local relay support - Automatic offline sync - rebroadcast local events when back online - Relay indicator icon on highlight items showing sync status - Click-to-rebroadcast functionality for highlights - Flight mode indicator (plane icon) on offline-created highlights - Relay rebroadcast settings for caching and propagation - Local relay status indicator for local-only/offline mode - Second local relay support (localhost:4869) - Relay connection status tracking and display - 6th font size option for better UI scaling ### Fixed - Highlight creation resilient to offline/flight mode - TypeScript type errors in offline sync - Relay indicator tooltip accuracy and reliability - Always show relay indicator icon on highlights - Show remote relay list for fetched highlights - Publish highlights to all connected relays instead of just one - Keep all relay connections alive, not just local ones - Check actual relay connection status instead of pool membership - Skip rebroadcasting when in flight mode - Update relay info after automatic sync completes - Only show successfully reachable relays in flight mode - Include local relays in relay indicator tooltip ### Changed - Rename 'Offline Mode' to 'Flight Mode' throughout UI - Move publication date to top-right corner with subtle border styling - Consolidate relay/status indicators into single unified icon - Simplify relay indicator tooltip to show relay list - Move rebroadcast settings to dedicated Flight Mode section - Place Reading Font and Font Size settings side-by-side - Improve font size scale and default value - Use wifi icon for disconnected remote relays - Use airplane icons for local relay indicators - Make Relays heading same level as Flight Mode in settings - Simplify rebroadcast settings UI with consistent checkbox style ### Performance - Make highlight creation instant with non-blocking relay publish - Reduce relay status polling interval to 20 seconds - Show sync progress and hide indicator after successful sync ## [0.2.10] - 2025-10-09 ### Added - URL-based settings navigation with /settings route - Active zap split preset highlighting - Educational links about relays in reader view - Article publication date display in reader - Local relay recommendations in settings - Relays section showing active and recently connected relays ### Fixed - Remove trailing slash from relay URLs - Constrain Reading Font dropdown width ### Changed - Rename 'Default View Mode' to 'Default Bookmark View' in settings - Reorganize settings layout for better UX - Use sidebar-style colored buttons for highlight visibility - Simplify Relays section presentation ## [0.2.9] - 2025-10-09 ### Fixed - Deduplicate highlights in streaming callbacks ## [0.2.8] - 2025-10-09 ### Added - Display article summary in header - Overlay title and metadata on hero images - Apply reading font to article titles ### Fixed - Pass article summary through to ReadableContent - Correct Jina AI Reader proxy URL format ### Changed - Update homepage URL to read.withboris.com - Reorder toolbar buttons for better UX ## [0.2.7] - 2025-10-08 ### Added - Web bookmark creation (NIP-B0, kind:39701) - Tags support for web bookmarks per NIP-B0 - Auto-fetch title and description when URL is pasted - Prioritize OpenGraph tags for metadata extraction - Auto-extract tags from metadata with boris as default tag - Zap split preset buttons - Boris support percentage to zap splits - Respect existing zap tags in source content when creating highlights ### Fixed - Revert to fetchReadableContent to avoid CORS issues - Improve modal spacing with proper box-sizing - Prevent sliders from jumping when resetting settings - Pass relayPool as prop instead of using non-existent hook - Correct type signature for addZapTags function ### Changed - Reorder toolbar buttons for better UX - DRY up tag extraction with normalizeTags helper - Use url-metadata package for robust metadata extraction - Make zap split sliders independent using weights - Move zap splits to dedicated settings section - Publish bookmarks to relays in background for better performance ## [0.2.6] - 2025-10-08 ### Added - Home button to bookmark bar - Configurable zap split for highlights on nostr-native content ## [0.2.5] - 2025-10-07 ### Fixed - Wire preview ref to markdown conversion hook - Add missing useEffect dependencies for article loading ### Changed - DRY up highlight classification and URL normalization - Split highlighting utilities into modules - Extract highlights panel components - Extract content rendering hooks - Split Settings into section components - Extract event processing utilities - Split Bookmarks.tsx into smaller hooks and components ## [0.2.4] - 2025-10-07 ### Added - Domain configuration for - Public assets and deployment configuration - Hide bookmarks without content or URL ### Fixed - Encode/decode URLs in /r/ route to preserve special characters ### Changed - Cleanup after build fixes (remove shims, update locks) - Stop tracking node_modules/dist - Update dependencies and dedupe - Add .gitignore for node_modules and dist ## [0.2.3] - 2025-10-07 ### Added - Parse and display summary tag for nostr articles - Merge and flatten bookmarks from multiple lists - Update URL path when opening bookmarks from sidebar ### Fixed - Ensure bookmarks are sorted newest first after merging lists - Hide empty bookmarks without content - Remove encrypted cyphertext display from bookmark list ### Changed - Remove created date from bookmark list display ## [0.2.2] - 2025-10-06 ### Added - Support for web bookmarks (NIP-B0, kind:39701) - Default highlight visibility settings - Proxy.nostr-relay.app relay to configuration - Comprehensive logging to settings service ### Fixed - Handle web bookmarks with URLs in d tag and prevent crash - Load settings from local cache first to eliminate FOUT - Ensure fonts are fully loaded before applying styles - Improve highlight rendering pipeline with comprehensive debugging ### Changed - Use icon toggle buttons for highlight visibility settings - Change nostrverse icon from fa-globe to fa-network-wired ## [0.2.1] - 2025-10-05 ### Added - Local relay support and centralize relay configuration - Optimistic updates for highlight creation - Enable highlight creation from external URLs - Add routing support for external URLs - Add context to highlights (previous and next sentences) - Boris branding to highlight alt tag ### Fixed - Properly await account loading from localStorage on refresh - Add protected routes to prevent logout on page refresh - Use undo icon for reset to defaults button - Update local relay port to 10547 ### Changed - Remove dedicated login page, handle login through main UI - Simplify to single RELAYS constant (DRY) ## [0.2.0] - 2025-10-05 ### Added - Simple highlight creation feature (FAB style) - Reset to defaults button in settings - Load and apply settings upon login ### Fixed - Replace any types with proper NostrEvent types - Move FAB to Bookmarks component for proper floating - Highlight button positioning with scroll ### Changed - Update color palette to include default friends/nostrverse colors - Show author name in highlight cards - Sync highlight level toggles between sidebar and main article text - Rename 'underlines' to 'highlights' throughout codebase ## [0.1.11] - 2025-10-05 ### Added - Stream highlights progressively as they arrive from relays ### Fixed - Display article immediately without waiting for highlights to load - Show highlights immediately when opening panel if already loaded - Prevent bookmark text from being cut off in compact view - Correct default highlight color for 'mine' to yellow (#ffff00) ### Changed - Reduce padding between bookmark items and panel edge - Update default highlight colors to orange for friends and purple for nostrverse ## [0.1.10] - 2025-10-05 ### Added - Three-level highlight system (mine/friends/nostrverse) ### Fixed - Ensure highlights always render on markdown content - Classify highlights before passing to ContentPanel - Position toggle buttons directly adjacent to main panel - Remove redundant setReaderLoading call in error handler ### Changed - Always show friends and user highlight buttons - Remove Highlights title and count from panel ## [0.1.9] - 2025-10-05 ### Fixed - Show markdown content immediately when finalHtml is empty - Prevent highlight bleeding into sidebar ## [0.1.8] - 2025-10-05 ### Fixed - Prevent 'No readable content' flash for markdown articles - Enable highlights display and scroll-to for markdown content ### Added - Persist accounts to localStorage ### Changed - Simplify login by handling it directly in sidebar ## [0.1.7] - 2025-10-05 ### Added - Show highlights in article content and add mode toggle ### Fixed - Show highlights for nostr articles by skipping URL filter - Refresh button now works without login for article highlights - Query highlights using both a-tag and e-tag ### Changed - Keep Bookmarks.tsx under 210 lines by extracting logic ## [0.1.6] - 2025-10-03 ### Added - Native support for rendering Nostr long-form articles (NIP-23) - Display article titles for kind:30023 bookmarks - Enable clicking on kind:30023 articles to open in reader - Display article hero images in bookmark views and reader - Configurable highlight colors - Highlight style setting (marker & underline) ### Fixed - Use bookmark pubkey for article author instead of tag lookup - Ensure highlight color CSS variable inherits from parent ### Changed - Integrate long-form article rendering into existing reader view - Extract components to keep files under 210 lines - Make font size and color buttons match icon button size (33px) ## [0.1.5] - 2025-10-03 ### Added - Settings panel with NIP-78 storage - Auto-save for settings with toast notifications - Reading time estimate to articles - Font size setting - Configurable reading font using Bunny Fonts - Live preview of reading font in settings - Settings subscription to watch for Nostr updates ### Fixed - Prevent settings from saving unnecessarily - Prevent save settings button from being cut off - Replace custom reading time with reading-time-estimator package - Update originalHtmlRef when content changes ### Changed - Reduce file sizes to meet 210 line limit - Extract settings logic into custom hook - Consolidate settings initialization on login - Remove debounce from settings auto-save ## [0.1.4] - 2025-10-03 ### Added - Inline highlight annotations in content panel - NIP-84 highlights panel with three-pane layout - Toggle button to show/hide highlight underlines - Click-to-scroll for highlights - Pulsing animation when scrolling to highlight ### Fixed - Apply highlights to markdown content as well as HTML - Use requestAnimationFrame for highlight DOM manipulation - Improve HTML highlight matching with DOM manipulation - Filter highlights panel to show only current article ### Changed - Use applesauce helpers for highlight parsing - DRY up highlightMatching to stay under 210 lines - Change highlights to fluorescent marker style - Deduplicate highlight events by ID ## [0.1.3] - 2025-10-03 ### Added - View mode switching for bookmarks with compact list view - Large preview view mode - Image preview for large view cards - Hero images using free CORS proxy ### Changed - Make entire compact list row clickable to open reader - Make card view timestamp clickable to open event - Enhance card view design with modern styling ## [0.1.2] - 2025-10-03 ### Added - Open bookmark URLs in reader instead of new window - localStorage caching for fetched articles - Collapsible bookmarks sidebar ### Fixed - Make sidebar and reader scroll independently - Replace relative-time with date-fns for timestamp formatting ### Changed - Display timestamps as relative time - Replace user text with profile image in sidebar header - Move user info and logout to sidebar header bar - Reduce IconButton size by 25% ## [0.1.1] - 2025-10-03 ### Added - Classify URLs by type and adjust action buttons - Collapse/expand functionality for bookmarks sidebar - IconButton component with square styling - Resolve nprofile/npub mentions to names in content ### Fixed - Enforce 210-char truncation for both plain and parsed content - Use Rules of Hooks correctly ### Changed - Use IconButton for all icon-only actions to enforce square sizing - Sort bookmarks by added_at (recently added first) - Make kind icon square to match IconButton sizing - Remove colored borders and gradients; keep neutral cards ## [0.1.0] - 2025-10-03 ### Added - Two-pane layout and content fetching pipeline - ContentPanel component to render readable HTML - Lightweight readability fetcher via r.jina.ai proxy - Markdown rendering support with react-markdown and remark-gfm - READ NOW button to bookmark cards - Spinner to content loading state - FontAwesome icons for event kinds ### Fixed - Show bookmarked event author instead of list signer - Enable reactive profile fetch via address loader - Left-align content and constrain images in content panel ### Changed - Resolve author names using applesauce ProfileModel - Propagate URL selection through BookmarkList to parent - Display URLs clearly in individual bookmarks ## [0.0.3] - 2025-10-02 ### Added - Manual decryption for unrecognized event kinds - Try NIP-44 then NIP-04 for manual decryption - Detailed debugging for decryption process - Support for hidden bookmarks decryption ### Fixed - Surface manually decrypted hidden tags in UI - Dedupe individual bookmarks by id ### Changed - Sort individual bookmarks by timestamp (newest first) - Increase bookmark loading timeout by 2x - Extract helpers and event processing ## [0.0.2] - 2025-10-02 ### Added - Fetch all NIP-51 events - Unlock private bookmarks via applesauce helpers - Copy-to-clipboard icons for event id and author pubkey - FontAwesome globe/lock icons - Display content identically for private/public bookmarks ### Fixed - Properly configure browser extension signer - Aggregate list(10003) + set(30001) - Handle applesauce bookmark structure correctly - Resolve loading state stuck issue ### Changed - Change bookmarks display from grid to social feed list layout - Simplify bookmark service using applesauce helpers - Extract components and utilities to keep files under 210 lines ## [0.0.1] - 2025-10-02 ### Added - Initial release - Browser extension login support - NIP-51 bookmark fetching from nostr relays - User profile display - Relay pool configuration - Basic UI with profile resolution ### Changed - Migrate to applesauce-accounts for proper account management - Use proper applesauce-loaders for NIP-51 bookmark fetching - Optimize relay usage following applesauce-relay best practices - Use applesauce-react event models for better profile handling [Unreleased]: https://github.com/dergigi/boris/compare/v0.6.2...HEAD [0.6.2]: https://github.com/dergigi/boris/compare/v0.6.1...v0.6.2 [0.6.1]: https://github.com/dergigi/boris/compare/v0.6.0...v0.6.1 [0.6.0]: https://github.com/dergigi/boris/compare/v0.5.7...v0.6.0 [0.5.7]: https://github.com/dergigi/boris/compare/v0.5.6...v0.5.7 [0.5.6]: https://github.com/dergigi/boris/compare/v0.5.5...v0.5.6 [0.5.5]: https://github.com/dergigi/boris/compare/v0.5.4...v0.5.5 [0.5.2]: https://github.com/dergigi/boris/compare/v0.5.1...v0.5.2 [0.5.1]: https://github.com/dergigi/boris/compare/v0.5.0...v0.5.1 [0.5.0]: https://github.com/dergigi/boris/compare/v0.4.3...v0.5.0 [0.4.0]: https://github.com/dergigi/boris/compare/v0.3.8...v0.4.0 [0.3.8]: https://github.com/dergigi/boris/compare/v0.3.7...v0.3.8 [0.3.7]: https://github.com/dergigi/boris/compare/v0.3.6...v0.3.7 [0.3.6]: https://github.com/dergigi/boris/compare/v0.3.5...v0.3.6 [0.3.5]: https://github.com/dergigi/boris/compare/v0.3.4...v0.3.5 [0.3.4]: https://github.com/dergigi/boris/compare/v0.3.3...v0.3.4 [0.3.3]: https://github.com/dergigi/boris/compare/v0.3.2...v0.3.3 [0.3.0]: https://github.com/dergigi/boris/compare/v0.2.10...v0.3.0 [0.2.10]: https://github.com/dergigi/boris/compare/v0.2.9...v0.2.10 [0.2.9]: https://github.com/dergigi/boris/compare/v0.2.8...v0.2.9 [0.2.8]: https://github.com/dergigi/boris/compare/v0.2.7...v0.2.8 [0.2.7]: https://github.com/dergigi/boris/compare/v0.2.6...v0.2.7 [0.2.6]: https://github.com/dergigi/boris/compare/v0.2.5...v0.2.6 [0.2.5]: https://github.com/dergigi/boris/compare/v0.2.4...v0.2.5 [0.2.4]: https://github.com/dergigi/boris/compare/v0.2.3...v0.2.4 [0.2.3]: https://github.com/dergigi/boris/compare/v0.2.2...v0.2.3 [0.2.2]: https://github.com/dergigi/boris/compare/v0.2.1...v0.2.2 [0.2.1]: https://github.com/dergigi/boris/compare/v0.2.0...v0.2.1 [0.2.0]: https://github.com/dergigi/boris/compare/v0.1.11...v0.2.0 [0.1.11]: https://github.com/dergigi/boris/compare/v0.1.10...v0.1.11 [0.1.10]: https://github.com/dergigi/boris/compare/v0.1.9...v0.1.10 [0.1.9]: https://github.com/dergigi/boris/compare/v0.1.8...v0.1.9 [0.1.8]: https://github.com/dergigi/boris/compare/v0.1.7...v0.1.8 [0.1.7]: https://github.com/dergigi/boris/compare/v0.1.6...v0.1.7 [0.1.6]: https://github.com/dergigi/boris/compare/v0.1.5...v0.1.6 [0.1.5]: https://github.com/dergigi/boris/compare/v0.1.4...v0.1.5 [0.1.4]: https://github.com/dergigi/boris/compare/v0.1.3...v0.1.4 [0.1.3]: https://github.com/dergigi/boris/compare/v0.1.2...v0.1.3 [0.1.2]: https://github.com/dergigi/boris/compare/v0.1.1...v0.1.2 [0.1.1]: https://github.com/dergigi/boris/compare/v0.1.0...v0.1.1 [0.1.0]: https://github.com/dergigi/boris/compare/v0.0.3...v0.1.0 [0.0.3]: https://github.com/dergigi/boris/compare/v0.0.2...v0.0.3 [0.0.2]: https://github.com/dergigi/boris/compare/v0.0.1...v0.0.2 [0.0.1]: https://github.com/dergigi/boris/releases/tag/v0.0.1