# Dashboard Build System

This document explains how to keep the Flutter web dashboard in sync with the server's static files.

## Overview

The XP Nix server serves static files from `xp_server/lib/src/web/static/` directory. The Flutter dashboard is a separate project in `xp_dashboard/` that needs to be built for web and copied to the static directory.

## Build Methods

### Method 1: Using the Server Command (Recommended)

When the server is running, you can use the interactive `build` command:

1. Start the server:
   ```bash
   cd xp_server
   dart run bin/xp_nix.dart
   ```

2. Type `build` in the server console and press Enter:
   ```
   build
   ```

The server will:
- Check if Flutter is available
- Build the Flutter dashboard with `flutter build web --release`
- Copy all files from `xp_dashboard/build/web/` to `xp_server/lib/src/web/static/`
- Provide feedback on the build status

### Method 2: Using the Shell Script

For building outside of the running server, use the provided shell script:

```bash
./build_dashboard.sh
```

This script:
- Checks for Flutter availability
- Builds the Flutter dashboard
- Clears old static files
- Copies new files to the static directory

## Build Process Details

### What Gets Built

The Flutter build process creates:
- `index.html` - Main HTML file
- `main.dart.js` - Compiled Dart code
- `flutter.js`, `flutter_bootstrap.js` - Flutter runtime
- `flutter_service_worker.js` - Service worker for PWA features
- `assets/` - Flutter assets and fonts
- `canvaskit/` - CanvasKit rendering engine
- `icons/` - App icons
- `manifest.json` - Web app manifest
- Other supporting files

### File Synchronization

The build process:
1. **Clears** the existing `xp_server/lib/src/web/static/` directory
2. **Copies** all files from `xp_dashboard/build/web/` to the static directory
3. **Preserves** the directory structure including subdirectories

## Development Workflow

### When to Rebuild

Rebuild the dashboard when you:
- Make changes to Flutter widgets in `xp_dashboard/lib/`
- Update dependencies in `xp_dashboard/pubspec.yaml`
- Modify theme or styling
- Add new features to the dashboard

### Typical Workflow

1. Make changes to the Flutter dashboard code
2. Test locally if needed: `cd xp_dashboard && flutter run -d web-server`
3. Build and deploy: Use either the server `build` command or `./build_dashboard.sh`
4. Refresh your browser to see the changes

## Troubleshooting

### Flutter Not Found
```
❌ Flutter is not available in the system PATH
```
**Solution**: Ensure Flutter is installed and added to your PATH.

### Build Failed
```
❌ Flutter build failed
```
**Solution**: Check the error output, usually related to:
- Dart compilation errors
- Missing dependencies (`flutter pub get`)
- Invalid Flutter code

### Files Not Copied
```
❌ Build output directory not found
```
**Solution**: The Flutter build didn't complete successfully. Check the build output for errors.

## File Structure

```
xp_nix/
├── xp_dashboard/           # Flutter dashboard source
│   ├── lib/               # Flutter source code
│   ├── web/               # Web-specific files
│   └── build/web/         # Build output (generated)
├── xp_server/
│   ├── lib/src/web/static/ # Static files served by server
│   └── lib/src/build/      # Build system code
├── build_dashboard.sh      # Standalone build script
└── BUILD_DASHBOARD.md      # This documentation
```

## Advanced Usage

### Custom Build Options

To modify build options, edit the Flutter build command in:
- `xp_server/lib/src/build/dashboard_builder.dart` (for server command)
- `build_dashboard.sh` (for shell script)

Current build command: `flutter build web --release`

### Development vs Production

- **Development**: Use `flutter build web` (debug mode, faster builds)
- **Production**: Use `flutter build web --release` (optimized, smaller files)

The current setup uses `--release` for optimal performance.
