No description
Find a file
Jan-Henrik Bruhn 4b60c4b7b2 docs: add comprehensive JSDoc for all state sync points
Implements Phase 6.1 of the state management refactoring plan.

Added detailed documentation for all 5 critical sync points in the
state management architecture, making data flow explicit and traceable.

Sync Points Documented:

1. Document → graphStore (useActiveDocument.ts:67-80)
   - When: Active document switches
   - What: Loads timeline state into editor
   - Direction: ConstellationDocument → graphStore

2. graphStore → timeline current state (useActiveDocument.ts:197-214)
   - When: Graph changes detected
   - What: Updates timeline's current state
   - Direction: graphStore → timeline.states[currentStateId]

3. timeline → document (workspaceStore.ts:789-818)
   - When: Document save
   - What: Serializes timeline to storage
   - Direction: timelineStore → document.timeline → localStorage

4. document types → graphStore (workspaceStore.ts:1018-1034)
   - When: Type management operations
   - What: Syncs types to editor if active
   - Direction: document → graphStore (if active)

5. timeline → graphStore (timelineStore.ts:286-311)
   - When: Timeline state switch
   - What: Loads state's graph into editor
   - Direction: timeline.states[targetId] → graphStore

Each sync point includes:
-  Visual separator for easy identification
-  Trigger condition (when it occurs)
-  Data being synchronized (what changes)
-  Source of truth clarification
-  Data flow direction
-  Context and rationale

Benefits:
- Clear understanding of data flow through the system
- Easier onboarding for new developers
- Prevents accidental breaking of sync relationships
- Makes debugging state issues much faster

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-20 15:17:36 +02:00
.claude/agents Initial commit 2025-10-10 11:15:51 +02:00
.github/workflows feat: add github action to deploy to github pages 2025-10-10 11:27:51 +02:00
docs refactor: centralize snapshot creation logic (Phase 2.1) 2025-10-20 12:19:58 +02:00
public Initial commit 2025-10-10 11:15:51 +02:00
src docs: add comprehensive JSDoc for all state sync points 2025-10-20 15:17:36 +02:00
.dockerignore Initial commit 2025-10-10 11:15:51 +02:00
.eslintrc.cjs Initial commit 2025-10-10 11:15:51 +02:00
.gitignore Initial commit 2025-10-10 11:15:51 +02:00
CLAUDE.md Initial commit 2025-10-10 11:15:51 +02:00
Dockerfile Initial commit 2025-10-10 11:15:51 +02:00
index.html fix: change folder location base path for imports to deploy 2025-10-10 12:02:09 +02:00
LICENSE.md Add license 2025-10-10 11:24:47 +02:00
package-lock.json feat: add group minimize/maximize with floating edges and React Flow v12 2025-10-20 11:52:44 +02:00
package.json feat: add group minimize/maximize with floating edges and React Flow v12 2025-10-20 11:52:44 +02:00
postcss.config.js Initial commit 2025-10-10 11:15:51 +02:00
QUICK_REFERENCE.md feat: add timeline system for multi-state constellation analysis 2025-10-11 22:00:34 +02:00
QUICKSTART.md Initial commit 2025-10-10 11:15:51 +02:00
README.md Add vibe warning 2025-10-10 11:23:36 +02:00
tailwind.config.js feat: add toast notification system for visual feedback 2025-10-10 23:13:28 +02:00
TECHNICAL_SPEC_BIBLIOGRAPHY.md feat: add comprehensive bibliography and citation system 2025-10-17 14:43:55 +02:00
tsconfig.json Initial commit 2025-10-10 11:15:51 +02:00
tsconfig.node.json Initial commit 2025-10-10 11:15:51 +02:00
UX_BIBLIOGRAPHY_DESIGN.md feat: add comprehensive bibliography and citation system 2025-10-17 14:43:55 +02:00
UX_CONCEPT_ACTOR_GROUPING.md feat: add resizable actor grouping with full undo/redo support 2025-10-18 20:06:59 +02:00
vite.config.ts fix: change folder location base path for imports to deploy 2025-10-10 12:02:09 +02:00

Constellation Analyzer

A React-based visual editor for creating and analyzing Constellation Analyses. Build interactive graphs to examine actors (nodes) and their relationships (edges) with a powerful drag-and-drop interface.

Vibe-Warning

This is a testing ground for Agent Based LLM Coding. It presently does not contain hand-written code. Hence, please take the whole code-base with a grain of salt.

Features

  • Interactive Graph Visualization: Built on React Flow for smooth, performant graph editing
  • Customizable Node Types: Define and configure multiple actor types with distinct visual properties
  • Flexible Edge Types: Create various relationship categories with different styles and colors
  • Drag-and-Drop Interface: Intuitive node manipulation and edge creation
  • Real-time Updates: Instant visual feedback as you build your constellation
  • Type-Safe: Full TypeScript support for robust development
  • State Management: Zustand for lightweight, efficient state handling
  • Responsive Design: Tailwind CSS for modern, adaptive UI

Technology Stack

  • React 18.2 - UI framework
  • TypeScript 5.2 - Type safety
  • Vite 5.1 - Build tool and dev server
  • React Flow 11.11 - Graph visualization library
  • Zustand 4.5 - State management
  • Tailwind CSS 3.4 - Styling framework

Getting Started

Prerequisites

  • Node.js 20.x or higher
  • npm 9.x or higher

Installation

# Install dependencies
npm install

Development

# Start development server (opens at http://localhost:3000)
npm run dev

Build

# Build for production
npm run build

# Preview production build
npm run preview

Lint

# Run ESLint
npm run lint

Project Structure

constellation-analyzer/
├── src/
│   ├── components/          # React components
│   │   ├── Editor/         # Main graph editor
│   │   │   └── GraphEditor.tsx
│   │   ├── Nodes/          # Custom node components
│   │   │   └── CustomNode.tsx
│   │   ├── Edges/          # Custom edge components
│   │   │   └── CustomEdge.tsx
│   │   └── Toolbar/        # Editor controls
│   │       └── Toolbar.tsx
│   ├── stores/             # Zustand state stores
│   │   ├── graphStore.ts   # Graph state (nodes, edges, types)
│   │   └── editorStore.ts  # Editor settings
│   ├── types/              # TypeScript definitions
│   │   └── index.ts
│   ├── utils/              # Utility functions
│   │   ├── nodeUtils.ts
│   │   └── edgeUtils.ts
│   ├── styles/             # Global styles
│   │   └── index.css
│   ├── App.tsx             # Root component
│   ├── main.tsx            # Entry point
│   └── vite-env.d.ts       # Vite types
├── public/                 # Static assets
├── index.html             # HTML template
├── package.json           # Dependencies
├── tsconfig.json          # TypeScript config
├── vite.config.ts         # Vite config
├── tailwind.config.js     # Tailwind config
└── README.md              # This file

Usage

Adding Actors (Nodes)

  1. Click any of the actor type buttons in the toolbar (Person, Organization, System, Concept)
  2. A new node will appear on the canvas
  3. Drag the node to position it

Creating Relations (Edges)

  1. Click and drag from any colored handle (circle) on a node
  2. Release over a handle on another node to create a connection
  3. The edge will automatically appear with default styling

Deleting Elements

  • Delete Node: Select a node and press Delete or Backspace
  • Delete Edge: Select an edge and press Delete or Backspace

Navigation

  • Pan: Click and drag on empty canvas space
  • Zoom: Use mouse wheel or pinch gesture
  • Fit View: Use the controls in bottom-left corner
  • MiniMap: View overview and navigate in bottom-right corner

Core Concepts

Actors (Nodes)

Actors represent entities in your analysis. Each actor has:

  • Type: Category (person, organization, system, concept)
  • Label: Display name
  • Description: Optional details
  • Position: X/Y coordinates on canvas
  • Metadata: Custom properties

Relations (Edges)

Relations connect actors to show relationships. Each relation has:

  • Type: Category (collaborates, reports-to, depends-on, influences)
  • Label: Optional description
  • Style: Visual representation (solid, dashed, dotted)
  • Source/Target: Connected actors

Node Types

Pre-configured actor categories:

  • Person: Individual (Blue)
  • Organization: Company/group (Green)
  • System: Technical system (Orange)
  • Concept: Abstract idea (Purple)

Edge Types

Pre-configured relationship categories:

  • Collaborates: Working together (Blue, solid)
  • Reports To: Hierarchical (Green, solid)
  • Depends On: Dependency (Orange, dashed)
  • Influences: Impact (Purple, dotted)

Customization

Adding New Node Types

Edit /src/stores/graphStore.ts:

const defaultNodeTypes: NodeTypeConfig[] = [
  // Add your custom type
  {
    id: 'custom-type',
    label: 'Custom Type',
    color: '#ff6b6b',
    description: 'My custom actor type'
  },
];

Adding New Edge Types

Edit /src/stores/graphStore.ts:

const defaultEdgeTypes: EdgeTypeConfig[] = [
  // Add your custom type
  {
    id: 'custom-relation',
    label: 'Custom Relation',
    color: '#ff6b6b',
    style: 'solid'
  },
];

Architecture Decisions

Why React Flow?

  • React-native components for seamless integration
  • Excellent performance with large graphs
  • Rich API for customization
  • Active community and maintenance

Why Zustand?

  • Lightweight (< 1KB)
  • Simple, hook-based API
  • No boilerplate compared to Redux
  • Perfect for graph state management

Why Vite?

  • Lightning-fast HMR (Hot Module Replacement)
  • Modern build tool with ES modules
  • Optimized production builds
  • Better DX than Create React App

Why Tailwind CSS?

  • Rapid UI development
  • Consistent design system
  • Small production bundle (unused classes purged)
  • Easy responsive design

Development Guidelines

⚠️ Important: Always Use History-Tracked Operations

When modifying graph state in components, always use useGraphWithHistory() instead of useGraphStore() directly:

// ✅ CORRECT: Uses history tracking (enables undo/redo)
import { useGraphWithHistory } from '../../hooks/useGraphWithHistory';

function MyComponent() {
  const { addNode, updateNode, deleteNode } = useGraphWithHistory();

  const handleAddNode = () => {
    addNode(newNode);  // Automatically tracked in history
  };
}
// ❌ WRONG: Bypasses history (undo/redo won't work)
import { useGraphStore } from '../../stores/graphStore';

function MyComponent() {
  const graphStore = useGraphStore();

  const handleAddNode = () => {
    graphStore.addNode(newNode);  // History not tracked!
  };
}

Exception: Read-only access in presentation components (CustomNode, CustomEdge) is acceptable since it doesn't modify state.

History-Tracked Operations

All these operations automatically create undo/redo history entries:

  • Node operations: addNode, updateNode, deleteNode
  • Edge operations: addEdge, updateEdge, deleteEdge
  • Type operations: addNodeType, updateNodeType, deleteNodeType, addEdgeType, updateEdgeType, deleteEdgeType
  • Utility: clearGraph

See src/hooks/useGraphWithHistory.ts for complete documentation.

Next Steps

Suggested Enhancements

  1. Data Persistence

    • Save/load graphs to/from JSON
    • Local storage integration
    • Export to PNG/SVG
  2. Advanced Editing

    • Multi-select nodes
    • Copy/paste functionality
    • Undo/redo history (implemented - per-document with 50 action limit)
  3. Node/Edge Properties Panel

    • Edit labels and descriptions
    • Change types dynamically
    • Add custom metadata
  4. Layout Algorithms

    • Auto-arrange nodes
    • Hierarchical layout
    • Force-directed layout
  5. Analysis Tools

    • Calculate graph metrics
    • Find shortest paths
    • Identify clusters
  6. Collaboration

    • Real-time multi-user editing
    • Version control
    • Comments and annotations

Contributing

This is a new project. Contributions are welcome!

License

MIT

Support

For issues and questions, please open an issue on the repository.