- Use total pubkeys size instead of newly fetched profile events length
- This accounts for profiles that were already cached
- Update both initial fetch and missing events fetch
The issue was that when profiles were already cached, profileEvents.length
was 0, making it look like no profiles were fetched even though they were
available from cache.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Change default follow list limit from 1 to 0
- Add explicit check to skip fetching when limit is 0
- This prevents unnecessary profile fetching on initial load
- When users change limit to >0, then all follow list profiles are fetched
This provides the optimal default behavior:
- Initial load only fetches profiles from event authors
- Users can opt-in to social graph by increasing follow list limit
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Only fetch profiles from event authors when follow list limit is 0
- Color person nodes differently based on their source:
- Green (#10B981) for authors of displayed events
- Kind 3 color for people from follow lists
- Track isFromFollowList flag through person extraction and display
- Update Legend to show colored diamonds matching the graph visualization
This helps distinguish between actual content authors and social graph connections.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Fetch ALL configured event kinds regardless of enabled/disabled state
- Store complete dataset in memory (allEvents)
- Filter display based on enabled kinds only
- Toggle operations now just change visibility without re-fetching
- Update documentation to mark Phase 5 as complete
This completes the event types panel redesign, providing instant toggles
and preventing UI freezing on state changes.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add allEventCounts derived from allEvents (not filtered events)
- Pass allEventCounts through components to show true fetch status
- This ensures kind 0 shows as green when profiles are fetched
The issue was that event counts were derived from filtered events,
so if kind 0 was disabled, it would show as 0 even if profiles were fetched.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update batchFetchProfiles to return fetched profile events
- Add fetched profile events to allEvents array
- Update profile stats to show actual count of fetched profiles
- Profile events are now properly tracked in event counts
This ensures kind 0 events show as green (loaded) and can be visualized in the graph.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add profileStats reactive state to track total fetched profiles and display limit
- Pass profileStats through EventNetwork -> Settings -> EventTypeConfig
- Update EventTypeConfig UI to show 'X of Y fetched' format for kind 0 profiles
- Profile fetching now extracts all pubkeys from loaded events first
- Display limit for profiles controls visualization, not fetching
This completes Phase 4 of the event types panel redesign.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add hasInitializedPersons flag to track first-time initialization
- Only auto-disable person nodes on first show, not on every update
- Clear disabled persons when person visualizer is hidden
- Update EventTypeConfig to show profile stats in format: [limit] of [total] fetched
This fixes the issue where person nodes would immediately disable after being toggled on when navigating from a publication page.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
This commit represents a checkpoint in implementing a sophisticated event
configuration system with people tag anchors. The implementation has grown
complex and needs reimplementation in a smarter way.
## Major Changes:
### Event Configuration System Overhaul
- Replaced simple allowed/disabled kinds with EventKindConfig objects
- Each event kind now has individual limits and type-specific settings:
- Kind 0 (profiles): Controls max profiles to fetch
- Kind 3 (follow lists): Has depth setting and complex fetch logic
- Kind 30040: Has nestedLevels setting
- Created new EventTypeConfig component replacing EventKindFilter
### Follow List Fetching Logic
- Kind 3 limit=1: Fetches only user's follow list
- Kind 3 limit>1: Fetches user's + (limit-1) follow lists from follows
- Added depth traversal (0=direct, 1=2 degrees, 2=3 degrees)
- Attempted to implement "addFollowLists" toggle (later simplified)
### Profile Fetching Changes
- Modified to be more selective about which profiles to fetch
- Attempted to limit based on follow lists and event authors
- Added progress indicators for profile loading
### People Tag Anchors Implementation
- Complex logic to create "p" tag anchors from follow lists
- Synthetic event creation to connect people to visualization
- "Only show people with publications" checkbox
- Attempted to connect people to:
- Events they authored (pubkey match)
- Events where they're tagged with "p"
- Display limiting based on kind 0 limit
### UI/UX Changes
- Tag anchors legend now scrollable when >20 items
- Auto-disable functionality when >20 tag anchors
- Added various UI controls that proved confusing
- Multiple iterations on settings panel layout
## Problems with Current Implementation:
1. **Overly Complex Logic**: The synthetic event creation and connection
logic for people tag anchors became convoluted
2. **Confusing UI**: Too many interdependent settings that aren't intuitive:
- Limit inputs control different things for different event types
- The relationship between kind 3 and kind 0 limits is unclear
- "addFollowLists" checkbox functionality was confusing
3. **Performance Concerns**: Fetching all profiles then limiting display
may not be optimal
4. **Unclear Requirements**: The exact behavior for people tag anchors
connections needs clarification
## Next Steps:
Need to revert and reimplement with:
- Clearer separation of concerns
- Simpler UI that's more intuitive
- Better defined behavior for people tag anchors
- More efficient profile fetching strategy
## Files Changed:
- EventTypeConfig.svelte: New component for event configuration
- visualizationConfig.ts: Major overhaul for EventKindConfig
- profileCache.ts: Added selective fetching logic
- visualize/+page.svelte: Complex follow list and profile fetching
- EventNetwork components: People tag anchor implementation
- settings_panel.org: Documentation of intended behavior
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Created profileCache utility to fetch and cache kind 0 (Metadata) events
- Replace pubkeys with display names throughout the visualization:
- Node tooltips show author display names instead of pubkeys
- p tags in tooltips show display names
- Network nodes store display names in author field
- Fetch user profiles when loading events for better UX
- Fixed infinite loading loop by:
- Adding isFetching guard to prevent concurrent fetchEvents calls
- Temporarily disabling the re-enabled kinds watcher that was causing loops
- Extract pubkeys from event content (nostr:npub1... format) for profile fetching
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Add display limits store and utilities
- Fix reactivity issues with Svelte 5
- Add max 30040/30041 event controls
- Implement fetch if not found functionality
- Reorganize settings panel with sections
- Add debug logging for troubleshooting