- Changed from percentage-based to weight-based zap splits
- All three sliders (highlighter, author, Boris) are now independent
- Weights are normalized to calculate actual percentages
- UI shows both weight value and calculated percentage
- Added migration logic for users with old percentage-based settings
- Each slider can be adjusted without affecting the others
- Prevents interdependent slider behavior that was confusing
Breaking change: Settings now use zapSplitHighlighterWeight,
zapSplitAuthorWeight, and zapSplitBorisWeight instead of
zapSplitPercentage and borisSupportPercentage
- Added borisSupportPercentage setting (default 2.1%)
- Added separate slider in ZapSettings for Boris support
- Updated zap split calculation to include three-way split:
- Highlighter gets their configured percentage
- Boris gets their support percentage (0-10%)
- Author(s) get remaining percentage, split proportionally
- Display all three percentages in the UI
- Updated addZapTags to include Boris as zap recipient
- Boris support is optional and adjustable (0-10% range)
- Created new ZapSettings component as separate section
- Moved zap split slider from ReadingDisplaySettings
- Placed at end of settings page as requested
- Updated description to mention multiple authors support
- Updated addZapTags function to check for existing zap tags in source event
- When source has zap tags (author group), split proportionally:
- Highlighter gets their configured percentage
- Remaining percentage distributed among existing authors proportionally
- Example: 50/50 split with 2 source authors = 50% highlighter, 25% each author
- Falls back to simple two-way split if no existing zap tags
- Prevents duplicate entries if highlighter is already in author group
- Add zapSplitPercentage setting (default 50%) to UserSettings
- Implement NIP-57 Appendix G zap tags for highlight events
- Add zap tags when creating highlights of nostr-native content
- Split zaps between highlighter and article author based on setting
- Add UI slider in settings to configure split percentage
- Include relay URL in zap tags for metadata lookup
- Only add author zap tag if different from highlighter
- Update useMarkdownToHTML to return {renderedHtml, previewRef}
- Use returned previewRef in ContentPanel hidden markdown preview
- Resolves article markdown not rendering instantly
- Fix useBookmarksData hook to include all callback dependencies
- Fix useArticleLoader hook to include all setter function dependencies
- Fix useExternalUrlLoader hook to include all setter function dependencies
- Ensures articles load properly when navigating
- Remove unused imports in ReadingDisplaySettings and useBookmarksData
- Add eslint-disable comments for unavoidable any types from applesauce library
- All lint and type-check validations now pass
- Create textMatching module for text search utilities
- Create domUtils module for DOM manipulation helpers
- Create htmlMatching module for HTML highlight application
- Reduce highlightMatching.tsx from 217 lines to 59 lines
- All files now under 210 lines
URLs with special characters like // in https:// were being collapsed by browsers when passed directly in the path. Now using encodeURIComponent when navigating and decodeURIComponent when extracting the URL from the path.
- Add _headers for security headers and asset caching
- Add robots.txt for SEO with sitemap reference
- Add _redirects for SPA client-side routing support
- Add homepage field to package.json
- Add meta tags for SEO and social sharing (Open Graph, Twitter Card)
- Add canonical URL
- Add description meta tag
- Add alias for applesauce-core/dist/event-store/async-event-store.js
- Provide minimal shim module so bundler resolves cleanly
- Use node:path and import.meta.url to build absolute path
- Keep linter strict (added ts-expect-error for node path types)
- Import EventStore from applesauce-core/dist/event-store/event-store.js
- Add TS module declaration shim for deep import typing
- No functional changes, fixes Vercel bundling for async-event-store.js
- Import Helpers from 'applesauce-core' instead of 'applesauce-core/helpers'
- Import Blueprints from 'applesauce-factory' instead of 'applesauce-factory/blueprints'
- Use namespace exports as documented in applesauce tutorial
- Fixes Vercel build issue with internal module resolution
- Follows recommended import patterns from applesauce docs
- Add ssr.noExternal to force pre-bundling of applesauce packages
- Add mainFields to resolve module entry points
- Add rollupOptions to ensure ESM output format
- Workaround for restrictive exports map in applesauce-core@4.0.0
- Add resolve.extensions to help with .js module resolution
- Include applesauce packages in optimizeDeps for better bundling
- Attempt to fix Vercel build issue with async-event-store.js
- AppDataBlueprint is not available in npm package (only in local workspace)
- Revert to manual event construction using factory.create()
- This approach works on Vercel's build environment
- Added comment explaining why we can't use the blueprint
- Import blueprints as namespace: 'import * as Blueprints from applesauce-factory/blueprints'
- Use Blueprints.AppDataBlueprint with proper factory API
- Cleaner than manual event construction
- Should work with Vercel as namespace imports don't require direct named exports
- Remove AppDataBlueprint import that's not available in npm package
- Create application data events directly using factory.create()
- Manually construct event with kind 30078, d-tag identifier, and JSON content
- Fixes Vercel build by avoiding unavailable blueprint exports
- Re-sort all individual bookmarks after flattening from multiple lists
- Sort by added_at first, then fall back to created_at
- Prevents interleaving of sorted lists from breaking overall order
- Ensures newest bookmarks always appear at the top