# Quick Reference: Dashboard & TUI Components ## Overview at a Glance ``` API Server (Port 3000) ↓ ┌─────────────┬──────────────┐ ↓ ↓ ↓ Dashboard TUI App CLI (Port 3001) (Terminal) (stdout) ``` --- ## 1. API Server (syntaxis-api) **Port**: 3000 **Config**: `syntaxis-api-config.template.toml` → `syntaxis-api-config.toml` **Database**: SQLite (`/tmp/syntaxis-data.db`) ```bash cargo run -p syntaxis-api --config syntaxis-api-config.toml ``` **Key Endpoints**: - GET `/api/projects` - List all projects - GET `/api/projects/{id}` - Get project details - GET `/api/projects/{id}/status` - Project status - GET `/api/projects/{id}/checklists` - Checklist items - POST `/api/projects` - Create project --- ## 2. Web Dashboard (syntaxis-dashboard) **Port**: 3001 **Framework**: Leptos (Rust) + Axum **Config**: Hardcoded (development phase) **Status**: Placeholder HTML with Tailwind CSS ```bash cargo run -p syntaxis-dashboard # Open http://localhost:3001 ``` **Key Files**: - Entry: `/crates/syntaxis-dashboard/src/bin/main.rs` - API Client: `/crates/syntaxis-dashboard/src/api.rs` - Components: `/crates/syntaxis-dashboard/src/components/` - `header.rs`, `button.rs`, `card.rs`, `progress.rs` **Communicates with API at**: `http://localhost:3000/api` --- ## 3. Terminal UI (syntaxis-tui) **Framework**: Ratatui 0.25 + Crossterm **Config**: Hardcoded (development phase) **Key Bindings**: Arrow keys/hjkl (nav), Enter (select), 'c' (create), 's' (security), Esc (back), 'q' (quit) ```bash cargo run -p syntaxis-tui ``` **Key Files**: - Entry: `/crates/syntaxis-tui/src/main.rs` - App State: `/crates/syntaxis-tui/src/app.rs` (R-STATE-SEPARATION pattern) - UI Rendering: `/crates/syntaxis-tui/src/ui.rs` (R-WIDGET-COMPOSITION pattern) - API Client: `/crates/syntaxis-tui/src/api.rs` - Theme: `/crates/syntaxis-tui/src/theme.rs` (5 themes available) - Screens: `/crates/syntaxis-tui/src/screens/` - `projects.rs`, `phases.rs`, `checklist.rs` **Screens**: 1. **ProjectsList** - Default view, shows all projects 2. **ProjectDetail** - Details for selected project 3. **Security** - Security assessment 4. **CreateProject** - New project form **Communicates with API at**: `http://localhost:3000/api` --- ## 4. Shared TUI Library (rust-tui) **Location**: `/crates/rust-tui/` **Purpose**: Reusable Ratatui components and patterns **Key Exports**: - `Theme` - Color/style management (5 variants) - `AppHeader`, `AppFooter` - Widgets - `DirtyFlag` - Pattern implementation - `Plugin`, `PluginRegistry` - Plugin system **Design Patterns Implemented**: - **R-STATE-SEPARATION** - State ↔ Rendering separation - **R-WIDGET-COMPOSITION** - Pure rendering functions - **R-EVENT-LOOP** - Non-blocking event polling - **R-RESPONSIVE-LAYOUT** - Terminal layout responsive - **R-CONSISTENT-THEMING** - Unified theme system --- ## 5. Configuration Files | File | Location | Purpose | |------|----------|---------| | `syntaxis-api-config.template.toml` | Root | API config template | | `syntaxis-api-config.toml` | Root | Actual API config (after copy) | | `configs/features/*.toml` | Root/configs/features | Feature configs | | `Cargo.toml` (workspace) | Root | Workspace definition | **API Config Features** (enable/disable in main config): - `database` - Connection pooling, migrations - `health` - Status endpoint, health checks - `metrics` - Prometheus metrics - `rate_limit` - Request throttling - `auth` - API key validation - `cache` - In-memory caching - `multi_tenant` - Tenant isolation --- ## 6. Key Design Patterns ### R-STATE-SEPARATION ```rust pub struct App { pub screen: Screen, // UI state pub dirty: bool, // Needs redraw? pub projects: Vec, // Data pub api: ApiClient, // Dependencies } // Mutations go through methods, not direct assignment app.nav_down(); // ✅ Correct app.screen = X; // ❌ Wrong (not idiomatic) ``` ### R-WIDGET-COMPOSITION ```rust // Pure rendering - reads state, never modifies fn render(f: &mut Frame<'_>, app: &App) { // &App, not &mut App // Rendering logic here } ``` ### R-EVENT-LOOP ```rust loop { // Only redraw when dirty if app.dirty { terminal.draw(|f| render(f, &app))?; app.mark_rendered(); } // Handle events (non-blocking with 250ms timeout) match events.next()? { // Event handling } } ``` --- ## 7. Startup Sequence **Step 1**: Start API server (must be first) ```bash cargo run -p syntaxis-api --config syntaxis-api-config.toml # Listening on http://127.0.0.1:3000 ``` **Step 2**: Start TUI (optional) ```bash cargo run -p syntaxis-tui # Connects to API at http://localhost:3000/api ``` **Step 3**: Start Dashboard (optional, in separate terminal) ```bash cargo run -p syntaxis-dashboard # Serves at http://127.0.0.1:3001 # Connects to API at http://localhost:3000/api ``` --- ## 8. Testing & Benchmarks **Run all tests**: ```bash cargo test --workspace ``` **Run TUI tests**: ```bash cargo test -p syntaxis-tui ``` **Run TUI benchmarks** (Criterion): ```bash cargo bench -p syntaxis-tui # Tests: rendering_performance, event_handling, state_mutations ``` --- ## 9. Important Details ### Zero Unsafe Code Policy - All crates have `#![forbid(unsafe_code)]` - Uses safe Rust patterns exclusively - No unwrap() in production code ### API Integration - **Dashboard**: `reqwest` HTTP client → `http://localhost:3000/api` - **TUI**: `reqwest` HTTP client → `http://localhost:3000/api` - **Both**: Same endpoint structure, same DTOs ### Theme System **TUI Themes**: - `default()` - Cyan (recommended) - `dark()` - Dark mode - `light()` - Light mode - `minimal()` - High contrast - `professional()` - Corporate blue **Builder pattern**: ```rust let theme = AppTheme::default() .with_bold_headers() .with_italic_metadata(); ``` ### Event Handling **TUI Key Bindings**: - `↑/k` - Up - `↓/j` - Down - `Enter` - Select - `'c'` - Create project - `'s'` - View security - `'b'/Esc` - Back - `'q'/Ctrl+C` - Quit --- ## 10. File Structure Summary ``` syntaxis/ ├── syntaxis-api-config.template.toml # API config template ├── PROJECT_EXPLORATION.md # Detailed analysis (this doc) ├── QUICK_REFERENCE.md # Quick reference (this file) └── crates/ ├── syntaxis-core/ # Business logic ├── syntaxis-api/ # REST API server (Port 3000) ├── syntaxis-dashboard/ # Web UI (Port 3001) │ ├── src/bin/main.rs │ ├── src/api.rs # API client │ ├── src/components/ # Leptos components │ └── src/types.rs ├── syntaxis-tui/ # Terminal UI │ ├── src/main.rs │ ├── src/app.rs # State management │ ├── src/ui.rs # Rendering │ ├── src/api.rs # API client │ ├── src/theme.rs # Theme system │ ├── src/screens/ # UI screens │ └── benches/ # Performance tests ├── rust-tui/ # Shared TUI library │ └── src/ │ ├── theme.rs # Theme system │ ├── widgets.rs # Reusable widgets │ ├── patterns.rs # R-* patterns │ └── plugin.rs # Plugin system ├── syntaxis-cli/ # CLI interface └── vapora-project-lifecycle/ # VAPORA integration ``` --- ## 11. Common Tasks ### Build everything ```bash cargo build --workspace --release ``` ### Run all tests ```bash cargo test --workspace ``` ### Check code quality ```bash cargo fmt --check cargo clippy --all-targets --all-features ``` ### Generate documentation ```bash cargo doc --no-deps --open ``` ### Run with debug logging ```bash RUST_LOG=debug cargo run -p syntaxis-tui ``` --- ## Quick Troubleshooting **API server won't start** - Check port 3000 is free: `lsof -i :3000` - Check config file exists: `syntaxis-api-config.toml` - Ensure database directory exists: `mkdir -p /tmp` **Dashboard can't connect to API** - Is API server running on port 3000? - Check CORS is enabled in config: `cors_enabled = true` - API base URL is hardcoded: `http://localhost:3000/api` **TUI won't connect to API** - Is API server running on port 3000? - API base URL is hardcoded: `http://localhost:3000/api` - Check terminal size is at least 80x24 characters **Tests failing** - Run: `cargo clean && cargo test --workspace` - Check database isn't locked (SQLite) - Run single test: `cargo test -p syntaxis-tui test_name`