- Parse bookmark lists correctly according to NIP-51 specification
- Handle 'e' tags for event references (the actual bookmarks)
- Handle 'a' tags for article references
- Handle 'r' tags for URL references
- Display bookmark count and organize references by type
- Show event IDs in a readable format with truncation
- Add proper CSS styling for bookmark list display
- Update Bookmark interface to include metadata fields
This fixes the issue where kind:10003 bookmark lists weren't being
displayed properly. Now follows the NIP-51 specification exactly
as shown in the example event structure.
- Import useEventModel hook and Models from applesauce-core
- Use ProfileModel to automatically fetch and manage user profile data
- Display user name, display_name, or nip05 instead of just public key
- Follow applesauce-react best practices for event model usage
- Improve user experience with proper profile information display
- Maintain fallback to formatted public key if profile data unavailable
This follows the applesauce-react documentation pattern for using
event models instead of manual event parsing.
- Set up comprehensive ESLint configuration with TypeScript support
- Fix React import issues by adding explicit React imports
- Replace 'any' types with proper TypeScript types (unknown, specific interfaces)
- Add proper type definitions for addressLoader function signature
- Make relays parameter optional in addressLoader interface
- Fix TypeScript strict null checks and function call signatures
- Ensure all code passes ESLint with zero warnings
- Verify TypeScript compilation with no errors
- Maintain strict linting rules without reducing code quality
All linting and type checking now passes successfully.
- Organize relay URLs in a centralized array for better maintainability
- Use RelayPool with extraRelays configuration for automatic relay management
- Remove manual relay specification in address loader calls
- Let the pool handle relay selection and deduplication automatically
- Add comments explaining relay group benefits and deduplication
- Follow applesauce-relay documentation patterns for efficient relay usage
This improves relay efficiency by letting the pool handle relay selection,
deduplication, and connection management automatically.
- Replace manual event fetching with applesauce Address Loader
- Use Loaders.createAddressLoader() for proper replaceable event loading
- Configure loader with eventStore, bufferTime, and relay hints
- Remove manual RxJS subscription handling in favor of applesauce patterns
- Add applesauce-loaders dependency for specialized loading methods
- Clean up unused imports and variables
- Follow applesauce best practices for event loading
This implements the proper applesauce pattern for fetching kind:10003
bookmark events as recommended in the applesauce-loaders documentation.
- Add RelayPool to connect to nostr relays (damus.io, nos.lol, snort.social)
- Fix bookmark fetching to actually query relays instead of empty local store
- Use eventStore.filters() with Observable subscription to fetch kind 10003 events
- Add proper RxJS imports for takeUntil and timer
- Implement 5-second timeout for relay queries
- Add applesauce-relay dependency for relay connectivity
- Fix critical bug where bookmarks were never fetched from network
This ensures we're actually displaying kind:10003 bookmark events from the
logged-in user as specified in NIP-51, not just querying an empty local store.
- Replace manual WebSocket connections with applesauce-accounts
- Use ExtensionAccount.fromExtension() for nostr browser extension integration
- Add AccountsProvider to component tree for account management
- Use useActiveAccount hook to get current user account
- Simplify user display to show formatted public key (profile fetching TODO)
- Remove manual profile fetching WebSocket code
- Improve architecture with proper applesauce account system
- Add applesauce-accounts dependency to package.json
This provides a more robust and standardized approach to nostr account
management using the applesauce ecosystem.
- Fetch user profile from nostr relay on login
- Display NIP-05, display name, or username instead of public key
- Priority: NIP-05 > name > username > public key
- Add WebSocket connection to fetch profile events (kind 0)
- Update Login component to fetch and pass profile data
- Update Bookmarks component to show user-friendly display name
- Fallback to formatted public key if no profile available
- Improve user experience with recognizable identity
- Add userPublicKey state to App component
- Pass public key from Login to App to Bookmarks
- Display formatted public key in bookmarks header
- Show 'Logged in as: abc12345...xyz67890' format
- Update header layout to accommodate user info
- Add styling for user info display
- Improve login success feedback for users
- Add project structure with TypeScript, React, and Vite
- Implement nostr authentication using browser extension (NIP-07)
- Add NIP-51 compliant bookmark fetching and display
- Create minimal UI with login and bookmark components
- Integrate applesauce-core and applesauce-react libraries
- Add responsive styling with dark/light mode support
- Include comprehensive README with setup instructions
This is a minimal MVP for a nostr bookmark client that allows users to
view their bookmarks according to NIP-51 specification.