- 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>
- Implemented debounced graph updates with 100ms delay
- Created derived graphDependencies to track all update triggers in one place
- Added setTimeout to defer state changes in auto-disable logic
- Broke synchronous update cycles that were causing stuttering
- Used updateTimer to prevent multiple simultaneous updates
The graph now updates smoothly without stuttering or infinite loops.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Limited person nodes to 20 by default to prevent graph overload
- Added "Displaying X of Y people found" message in Legend
- Implemented signed-by vs referenced connection tracking
- Added checkboxes to filter by connection type (signed by / referenced)
- Different link colors: green for signed-by, blue for referenced
- Removed "People (from follow lists)" from tag types (now handled by person visualizer)
- Consolidated all person connections into single node per pubkey
- Display count shows (Xs/Yr) for signed-by/referenced counts
- Disabled person toggle clicks when Show Person Nodes is off
- Cleaned up unused requirePublications code
This makes the person visualizer more manageable and informative while preventing performance issues from too many nodes.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Added PersonAnchor type to NetworkNode types
- Created personNetworkBuilder utility for extracting and creating person nodes
- Added person visualizer section to Legend component with collapsible UI
- Implemented diamond shape rendering for person nodes in D3 visualization
- Added state management for show/hide person nodes and individual toggles
- Auto-disable all person nodes by default to prevent graph overload
- Integrated person node filtering into the graph update logic
- Added green color (#10B981) for person anchor nodes
- Fixed duplicate handleTagToggle function declaration
Person nodes now display as diamond shapes and can be individually toggled for visibility.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Moved tag type selection, expansion depth, and requirePublications to Legend component
- Used native HTML button instead of flowbite Toggle to avoid rendering issues
- Removed tag anchor controls from Settings panel
- Added proper prop bindings between components
- Fixed TypeScript type error in networkBuilder.ts
This provides better UI organization with tag-related controls now grouped together in the Legend.
🤖 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>
- Fixed node colors not updating when event kinds change by using inline styles instead of attributes
- Implemented auto-disable feature for tag anchors when count exceeds 20 to prevent graph overload
- Changed tag anchor behavior to completely hide disabled tags instead of just making them transparent
- Enhanced NodeTooltip to handle arbitrary events differently:
- Publication events (30040, 30041, 30818, 30023) route to /publication
- Other events route to /events with raw content display
- Added visual notification in Legend when tags are auto-disabled
- Improved performance by fixing infinite update loops caused by state mutations
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
Visual indicators: Event kind badges now have colored borders:
- Green border = Events loaded (with count shown)
- Red border = Not loaded yet
2. Hint text: Added explanations below the badges explaining what the colors mean
3. Event counts: Shows the number of loaded events for each kind in parentheses
- 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