Revamps the dashboard page with a new pro layout, including updated metric tiles, a new chart panel, and a spec panel for hardware info and quick actions. The MetricsGraph component now uses CPU, Memory, and Network (replacing Disk) with updated colors and filter legend. Sidebar user profile is restyled, and related LESS styles are updated for the new design.
Updated STATE.md to mark the Log Viewer UI phase as 'Planning Complete' and added a detailed execution plan in phases/23-log-viewer-ui/PLAN.md. The plan outlines architecture, tasks, component structure, and success criteria for implementing a real-time container log viewer with ANSI color support and streaming controls.
- Add compose_up() call to start containers after creating docker files
- Update app status to 'running' on successful container start
- Pass database password (DB_PASSWORD) to app environment variables
- Store credentials in created_resources for proper propagation
- Return warning if containers fail to start (app still created)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add subscribe_container_logs event for real-time log streaming
- Add unsubscribe_container_logs event to stop streaming
- Stream logs via docker logs --follow subprocess
- Parse log lines with timestamp and level detection
- Emit container_log events to room logs_{app_id}
- Handle container_log_ended when container stops
- Clean up processes on disconnect or unsubscribe
- Support service selection for compose apps
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add GET /apps/{id}/container-logs with tail, since, timestamps, format params
- Add GET /apps/{id}/containers to list containers for compose apps
- Support 'raw' and 'json' output formats
- Include container state and available services in response
- Cap log lines at 10000 for performance
- Handle service selection for multi-container compose apps
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add stream_container_logs() for real-time log streaming via subprocess
- Add get_app_container_id() to resolve container ID from app model
- Add get_all_app_containers() for compose apps with multiple containers
- Add parse_log_line() to extract timestamp and detect log level
- Add parse_logs_to_lines() for batch parsing
- Add get_container_state() to check if container is running
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Introduces backend API endpoints and service methods for retrieving and setting server time and timezone (admin only). Updates the dashboard to display current server time and timezone, and adds a timezone selector to the settings page for admins. Includes supporting API methods and frontend styles for the new UI components.
Added a 'Live' badge to each system metric card (CPU, Memory, Disk, Network) for clarity. Updated percentage values to display with one decimal place and corrected CPU core count to use 'count_logical'.
Introduces clickable filter buttons to toggle CPU, memory, and disk metrics in MetricsGraph, replacing the static legend. Refines app name validation in both backend and frontend for template installation, allowing 2+ character names and improving error handling. WorkflowBuilder now handles missing workflow data gracefully and supports a fullscreen layout. Updates related styles for new filter legend and fullscreen workflow view.
Switches from LineChart to AreaChart for main metrics graph, adds animated gradients and glow effects, and updates legend styling. Tooltip UI is improved with clearer layout, colored dots, and value formatting. Chart colors now use explicit hex values for better SVG compatibility, and LESS styles are updated for improved appearance and interactivity.
- GET /workflows - List all workflows for user
- GET /workflows/<id> - Get single workflow
- POST /workflows - Create new workflow
- PUT /workflows/<id> - Update workflow
- DELETE /workflows/<id> - Delete workflow
- JWT authentication and access control
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- SQLAlchemy model with name, description, nodes, edges, viewport
- JSON string storage for React Flow state
- to_dict() method with node/edge counts
- User relationship and timestamps
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Register ConnectionEdge as custom edge type
- Track selectedEdge state
- onEdgeClick handler
- Delete key/Backspace handler for edge deletion
- Pass onDelete to edge data for delete button
- Store connection metadata (sourceType, targetType)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Extends smoothstep edge with labels
- Shows connection type label (Routes to, Uses DB, etc.)
- Color-coded by connection type
- Selected state with glow effect
- Delete button on selection
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Import connection validation utility
- Add isValidConnection callback using rules
- Add onConnectStart/onConnectEnd for error tracking
- Show connection error toast when invalid
- Auto-clear error after 3 seconds
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Phase 18 completed with 7 commits:
- ConfigPanel base component
- DockerApp, Database, Domain, Service config panels
- Panel wiring with real-time node updates
- Panel styles with slide animation
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Sliding panel from right with open/close animation
- Panel header with type-specific border color
- Panel body with form styling
- Port list styles for Docker config
- btn-icon and btn-danger-ghost for remove buttons
- Fixed @shadow-2xl -> @shadow-lg
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Import all config panel components
- Track selectedNode state
- onNodeClick opens appropriate panel
- onPaneClick closes panel
- handleNodeDataChange updates node data in real-time
- renderConfigPanel switches by node type
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>