13 KiB
Claude Code Templates - Modular Architecture
This document provides detailed technical documentation for the modular architecture implementation of the Claude Code Templates analytics dashboard.
Overview
The analytics dashboard has been refactored from a monolithic architecture to a modern, scalable modular design. This transformation occurred in 4 phases:
- Phase 1: Backend modularization (Core modules extraction)
- Phase 2: Frontend modularization (Component-based architecture)
- Phase 3: WebSocket integration (Real-time communication)
- Phase 4: Testing & Performance monitoring
Directory Structure
src/
├── analytics.js # Main orchestration class
├── analytics/
│ ├── core/ # Core business logic modules
│ │ ├── StateCalculator.js # Conversation state detection
│ │ ├── ProcessDetector.js # Running process detection
│ │ ├── ConversationAnalyzer.js # Message analysis & parsing
│ │ └── FileWatcher.js # File system monitoring
│ ├── data/
│ │ └── DataCache.js # Multi-level caching system
│ ├── notifications/
│ │ ├── WebSocketServer.js # WebSocket communication
│ │ └── NotificationManager.js # Event management
│ └── utils/
│ └── PerformanceMonitor.js # Performance tracking
├── analytics-web/ # Frontend modular components
│ ├── index.html # Main dashboard page
│ ├── assets/
│ │ ├── css/style.css # Styling
│ │ └── js/main.js # Application entry point
│ ├── components/
│ │ ├── Dashboard.js # Main dashboard component
│ │ ├── ConversationTable.js # Conversation display
│ │ └── Charts.js # Data visualization
│ └── services/
│ ├── DataService.js # API communication
│ ├── StateService.js # State management
│ └── WebSocketService.js # Real-time communication
└── tests/ # Comprehensive test suite
├── unit/ # Unit tests for modules
├── integration/ # Integration tests
└── e2e/ # End-to-end tests
Backend Architecture
Core Modules
StateCalculator.js
Responsible for determining conversation states based on message analysis and process detection.
Key Features:
- Real-time state detection:
active,waiting,idle,completed - Message pattern analysis for tool usage and errors
- Process-aware state calculation
- Ultra-fast refresh for live updates
API:
const stateCalculator = new StateCalculator();
const state = stateCalculator.determineConversationState(messages, lastModified, runningProcess);
const quickState = stateCalculator.quickStateCalculation(conversation, processes);
ProcessDetector.js
Manages detection and monitoring of running Claude Code processes.
Key Features:
- Cross-platform process detection (macOS, Linux, Windows)
- Process-conversation correlation
- Orphan process identification
- Efficient process monitoring
API:
const detector = new ProcessDetector();
const processes = await detector.getRunningClaudeProcesses();
const enriched = await detector.enrichWithRunningProcesses(conversations, claudeDir, stateCalculator);
ConversationAnalyzer.js
Handles conversation file parsing, analysis, and data extraction.
Key Features:
- JSONL file parsing with error handling
- Token counting and message analysis
- Project detection and categorization
- Integrated caching for performance
API:
const analyzer = new ConversationAnalyzer(claudeDir, dataCache);
const data = await analyzer.loadInitialData(stateCalculator, processDetector);
const conversations = await analyzer.analyzeConversations(files, stateCalculator);
FileWatcher.js
Provides real-time file system monitoring with efficient change detection.
Key Features:
- Chokidar-based file watching
- Intelligent refresh throttling
- Multiple watcher management
- Cache invalidation integration
API:
const watcher = new FileWatcher();
watcher.setupFileWatchers(claudeDir, dataRefreshCallback, processRefreshCallback, dataCache);
watcher.pause(); // Pause monitoring
watcher.resume(); // Resume monitoring
Data Layer
DataCache.js
Multi-level caching system with intelligent invalidation strategies.
Cache Levels:
- File Content Cache - Raw file content with timestamp validation
- Parsed Data Cache - Processed conversation data
- Computation Cache - Expensive calculation results
Key Features:
- TTL-based expiration
- Dependency tracking
- Smart invalidation
- Memory usage optimization
- Performance metrics
API:
const cache = new DataCache();
const content = await cache.getFileContent(filepath);
const parsed = await cache.getParsedData(key, parser);
const result = await cache.getComputationResult(key, computer);
cache.invalidateFile(filepath);
Notification System
WebSocketServer.js
Real-time WebSocket communication with comprehensive client management.
Key Features:
- Client connection management
- Subscription-based messaging
- Heartbeat mechanism
- Message queuing for offline clients
- Performance monitoring integration
API:
const wsServer = new WebSocketServer(httpServer, options, performanceMonitor);
await wsServer.initialize();
wsServer.broadcast(message, channel);
wsServer.notifyConversationStateChange(conversationId, newState, metadata);
NotificationManager.js
Event-driven notification system with subscription management.
Key Features:
- Event subscription management
- WebSocket integration
- Notification queuing
- Client filtering
- Error handling
API:
const manager = new NotificationManager(webSocketServer);
manager.notifyDataRefresh(data, source);
manager.notifyConversationStateChange(id, oldState, newState, metadata);
manager.subscribe(event, callback);
Performance Monitoring
PerformanceMonitor.js
Comprehensive performance tracking and system health monitoring.
Monitoring Capabilities:
- Memory usage tracking
- Request performance metrics
- Cache hit/miss ratios
- WebSocket connection metrics
- Error tracking and alerting
- System health status
Key Features:
- Express middleware integration
- Configurable thresholds
- Metric retention management
- Real-time statistics
- Export capabilities
API:
const monitor = new PerformanceMonitor(options);
monitor.startTimer('operation');
monitor.endTimer('operation', metadata);
monitor.recordRequest(endpoint, duration, statusCode);
const stats = monitor.getStats(timeframe);
const middleware = monitor.createExpressMiddleware();
Frontend Architecture
Component-Based Design
Dashboard.js
Main orchestration component that manages the entire dashboard interface.
Responsibilities:
- Component initialization and lifecycle management
- Service integration (DataService, StateService, WebSocketService)
- Real-time data refresh coordination
- Error handling and recovery
- Performance optimization
Key Features:
- Modular component loading
- Service dependency injection
- Automatic reconnection handling
- Progressive enhancement
ConversationTable.js
Interactive table component for displaying conversation data.
Key Features:
- Real-time status updates
- Interactive sorting and filtering
- Responsive design
- Performance optimization for large datasets
- Export functionality
Charts.js
Data visualization component using Chart.js.
Key Features:
- Multiple chart types support
- Real-time data updates
- Responsive design
- Performance optimization
- Interactive features
Service Layer
StateService.js
Reactive state management with observer pattern implementation.
Key Features:
- Centralized state management
- Subscriber notification system
- State history tracking
- Error state handling
- State persistence
API:
const stateService = new StateService();
stateService.subscribe(callback);
stateService.setState(newState, action);
stateService.updateConversations(conversations);
const conversations = stateService.getConversationsByStatus('active');
DataService.js
API communication layer with intelligent caching and real-time integration.
Key Features:
- HTTP request management
- Response caching with TTL
- WebSocket integration
- Automatic retry logic
- Error handling
- Performance tracking
API:
const dataService = new DataService(webSocketService);
const conversations = await dataService.getConversations();
const states = await dataService.getConversationStates();
const success = await dataService.requestRefresh();
WebSocketService.js
Real-time communication service with automatic reconnection.
Key Features:
- Connection management
- Subscription handling
- Automatic reconnection
- Message queuing
- Heartbeat monitoring
- Error recovery
API:
const wsService = new WebSocketService();
await wsService.connect();
wsService.subscribe('data_updates');
wsService.on('conversation_state_change', handler);
wsService.requestRefresh();
Real-time Communication
WebSocket Protocol
The system uses WebSocket for real-time bidirectional communication between server and clients.
Message Types
Client to Server:
subscribe- Subscribe to a channelunsubscribe- Unsubscribe from a channelrefresh_request- Request data refreshping- Heartbeat ping
Server to Client:
connection- Connection establisheddata_refresh- Data updatedconversation_state_change- State changedsubscription_confirmed- Subscription successfulpong- Heartbeat response
Channels
data_updates- General data updatesconversation_updates- Conversation state changessystem_updates- System health updates
Fallback Mechanisms
When WebSocket connection is unavailable:
- Automatic fallback to polling
- Cache-based updates
- Manual refresh options
- Offline mode handling
Performance Optimizations
Caching Strategy
Multi-Level Caching
- Browser Cache - Static assets and API responses
- Service Cache - DataService request caching
- Backend Cache - File content and parsed data
- Computation Cache - Expensive calculations
Cache Invalidation
- File-based invalidation using modification timestamps
- WebSocket-triggered cache clearing
- TTL-based expiration
- Manual cache control
Memory Management
Backend Optimizations
- Automatic metric cleanup
- Configurable memory thresholds
- Efficient data structures
- Process monitoring
Frontend Optimizations
- Component cleanup on unmount
- Event listener management
- Memory leak prevention
- Performance monitoring
Real-time Efficiency
WebSocket Optimizations
- Connection pooling
- Message compression
- Efficient serialization
- Heartbeat optimization
Update Strategies
- Differential updates
- Batch processing
- Throttling and debouncing
- Smart refresh logic
Testing Framework
Test Categories
Unit Tests
- Individual module testing
- Mock dependencies
- Edge case coverage
- Performance benchmarks
Integration Tests
- End-to-end workflows
- Real data scenarios
- Error condition testing
- Performance testing
Performance Tests
- Load testing
- Memory usage validation
- Response time benchmarks
- Concurrent operation testing
Test Coverage Requirements
- Global Coverage: 70% minimum
- Core Modules: 80% minimum
- Critical Paths: 90% minimum
Testing Tools
- Jest - Test framework
- WebSocket Testing - Real-time communication testing
- Performance Testing - Load and stress testing
- Integration Testing - Complete system validation
Deployment and Operations
Environment Configuration
Development
- Hot reloading
- Debug logging
- Performance profiling
- Test data generation
Production
- Optimized builds
- Error tracking
- Performance monitoring
- Health checks
Monitoring and Alerting
Health Checks
- System resource monitoring
- WebSocket connection health
- Cache performance metrics
- Error rate tracking
Performance Metrics
- Request response times
- Memory usage patterns
- Cache hit ratios
- WebSocket message throughput
Future Enhancements
Planned Features
- Enhanced caching strategies
- Advanced performance analytics
- Multi-user support
- API rate limiting
- Advanced error tracking
Scalability Improvements
- Horizontal scaling support
- Database integration
- Advanced caching layers
- Load balancing
This modular architecture provides a solid foundation for future enhancements while maintaining high performance and reliability.