No description
Find a file
Jan-Henrik Bruhn 3426ed174c
Some checks failed
CI / test (push) Has been cancelled
chore: remove quickstart
2026-03-31 11:50:58 +02:00
.claude/agents Initial commit 2025-10-10 11:15:51 +02:00
.github/workflows only run the deployment if the CI workflow has succeeded (vibe-kanban 433cfca7) 2025-11-10 11:57:11 +01:00
public Initial commit 2025-10-10 11:15:51 +02:00
src Fix stale timelineStore.activeDocumentId when switching between loaded documents 2026-03-31 11:39:50 +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 create some first integration tests, determining where it actually makes sense. (vibe-kanban d736b771) 2025-11-10 12:22:30 +01: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 Add TUIO protocol integration for tangible hardware detection 2026-01-16 23:32:54 +01:00
package.json Add TUIO protocol integration for tangible hardware detection 2026-01-16 23:32:54 +01:00
postcss.config.js Initial commit 2025-10-10 11:15:51 +02:00
README.md Fix README: localStorage not IndexedDB, port 3000 not 5173 2026-03-31 11:47:26 +02:00
tailwind.config.js feat: add toast notification system for visual feedback 2025-10-10 23:13:28 +02:00
tsconfig.json fix: resolve build and type errors 2025-11-11 09:46:44 +01:00
tsconfig.node.json Initial commit 2025-10-10 11:15:51 +02:00
vite.config.ts there is a __tests__ folder and a test folder. That seems confusing, is that a SotA TypeScript/REact/Vite testing pattern? (vibe-kanban c7c8b21b) 2025-11-10 12:26:34 +01:00

Constellation Analyzer

A React-based visual editor for Constellation Analysis — mapping actors (nodes) and their relationships (edges) in an interactive graph.

Vibe-Warning: This is a testing ground for agent-based LLM coding. The codebase contains no hand-written code. Take it with a grain of salt.

Features

  • Multi-document workspace — open multiple analyses in tabs, persist to localStorage
  • Graph editor — drag-and-drop actors and relations with custom types, shapes, colors, and directionality
  • Groups — cluster actors into named, collapsible groups
  • Timeline / States — branching constellation states within a document (parallel scenarios or time evolution)
  • Presentation mode — fullscreen view with timeline overlay for presenting analyses
  • Undo / Redo — per-document history with operation descriptions
  • Bibliography — citation management via Citation.js (BibTeX, RIS, DOI, CSL)
  • TUIO integration — tangible token support over WebSocket/OSC for physical interaction
  • Export — PNG, SVG, JSON (document), ZIP (workspace)
  • Search & filters — filter graph by actor type, relation type, or label

Tech Stack

Framework React 18.2, TypeScript 5.2, Vite 5.1
Graph @xyflow/react 12.3
State Zustand 4.5
UI MUI 5.15, Tailwind CSS 3.4
Bibliography Citation.js 0.7
TUIO tuio-client 0.1, osc-js 2.4
Testing Vitest 3.2, Testing Library 16.3

Getting Started

npm install
npm run dev        # http://localhost:3000
npm run build
npm run lint
npm test

Project Structure

src/
├── components/
│   ├── Config/        # Node/edge/tangible/bibliography config dialogs
│   ├── Editor/        # Main graph editor (GraphEditor.tsx)
│   ├── Edges/         # Custom edge renderers
│   ├── Menu/          # Menu bar (File, Edit, View, Help)
│   ├── Nodes/         # CustomNode, GroupNode, shape renderers
│   ├── Panels/        # Left/right side panels, property editors
│   ├── Presentation/  # Fullscreen presentation overlay
│   ├── Timeline/      # Timeline/states UI
│   └── Workspace/     # Document tabs and document manager
├── hooks/             # useGraphWithHistory, useDocumentHistory, useTuioIntegration, …
├── stores/            # Zustand stores (graph, timeline, workspace, history, bibliography, tuio, …)
├── types/             # TypeScript definitions
└── utils/             # Export, graph analysis, bibliography parsing, migrations

Development Guidelines

Graph Mutations — Always Use useGraphWithHistory

// ✅ Correct — history tracked, undo/redo works
import { useGraphWithHistory } from '../../hooks/useGraphWithHistory';
const { addNode, updateNode, deleteNode, addEdge, ... } = useGraphWithHistory();

// ❌ Wrong — bypasses history
import { useGraphStore } from '../../stores/graphStore';

Read-only access in display components (CustomNode, CustomEdge) can use useGraphStore directly.

Tests

npm run test:unit        # Store unit tests (src/stores/*.test.ts)
npm run test:integration # Integration tests (src/__tests__/integration/)
npm test                 # All tests

Always update tests when modifying store logic. See CLAUDE.md for testing patterns.

License

MIT