- 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>
- Person anchors now maintain their fixed position after being dragged
- Exclude person anchors from gravity forces (like tag anchors)
- Update both regular and star force simulations to handle person anchors
- Ensure person anchors are draggable but stay anchored at their new position
This ensures person nodes behave as true anchors in the visualization,
maintaining their position in the graph even after user interaction.
🤖 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>
- 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
- A sidebar variant is meant for integration within a sidebar. This is used in the current Publication component.
- An accordion variant is intended for standalone use.