# Dashboard Maintenance Guide ## Overview The `index.html` dashboard automatically displays all demos in the project. It's designed to stay up-to-date with minimal effort. ## Quick Start ### View Dashboard ```bash # Start server (if not running) python3 -m http.server 8889 # Open in browser firefox http://localhost:8889/ ``` ### Update Dashboard ```bash # Regenerate after adding new demos ./generate_index.py # Or make it executable and run directly chmod +x generate_index.py ./generate_index.py ``` ### Generate Screenshot Previews (NEW!) ```bash # Install dependencies first (one time) npm install # Generate all screenshots npm run screenshots # Or generate by category npm run screenshots:threejs npm run screenshots:sdg npm run screenshots:ui ``` ## Auto-Update Strategies ### Option 1: Manual Regeneration (Simplest) Run after generating new demos: ```bash ./generate_index.py ``` **Best for:** Occasional updates, full control ### Option 2: File Watcher (Development) Auto-regenerate when files change: ```bash # Install watcher (Ubuntu/Debian) sudo apt install inotify-tools # Start watcher ./watch_and_update.sh ``` **Best for:** Active development, instant updates ### Option 3: Git Hook (Automated) Auto-regenerate before commits: ```bash # Copy hook to git hooks directory cp .githooks/pre-commit .git/hooks/pre-commit chmod +x .git/hooks/pre-commit ``` **Best for:** Team workflows, version control ### Option 4: Integrate with Generation Add to your infinite loop workflow: ```python # After agent completion in infinite loop python3 generate_index.py ``` **Best for:** Seamless workflow integration ## How It Works ### Generator Script (`generate_index.py`) **What it does:** 1. Scans demo directories (`threejs_viz/`, `sdg_viz/`, `src/`, `src_infinite/`, `src_group/`) 2. Extracts titles and descriptions from HTML files 3. Updates the `demos` object in `index.html` 4. Updates category counts and statistics 5. Preserves all styling and functionality **What it scans:** - `threejs_viz/threejs_viz_*.html` → Three.js demos - `sdg_viz/sdg_viz_*.html` → SDG network visualizations - `d3_test/d3_viz_*.html` → D3 data visualizations - `mapbox_test/mapbox_globe_*/index.html` → Mapbox globe visualizations - `claude_code_devtools/claude_devtool_*.html` → Claude Code developer tools - `src/ui_hybrid_*.html` → UI single-file components - `src_infinite/ui_hybrid_*.html` → Infinite mode UI - `src_group/ui_hybrid_*/index.html` → Modular UI components **Current stats:** 107 demos across 7 categories ### File Structure ``` infinite-agents/ ├── index.html # Dashboard (auto-generated data section) ├── generate_index.py # Generator script ├── watch_and_update.sh # File watcher script ├── DASHBOARD.md # This guide │ ├── threejs_viz/ # Three.js demos │ ├── threejs_viz_1.html │ ├── threejs_viz_2.html │ └── ... │ ├── sdg_viz/ # SDG network demos │ ├── sdg_viz_1.html │ ├── sdg_viz_2.html │ └── ... │ ├── d3_test/ # D3 data visualizations │ ├── d3_viz_1.html │ ├── d3_viz_2.html │ └── ... │ ├── mapbox_test/ # Mapbox globe visualizations │ ├── mapbox_globe_1/ │ │ └── index.html │ ├── mapbox_globe_2/ │ │ └── index.html │ └── ... │ ├── claude_code_devtools/ # Claude Code developer tools │ ├── claude_devtool_1.html │ ├── claude_devtool_2.html │ └── ... │ ├── src/ # UI hybrid (single file) │ ├── ui_hybrid_1.html │ ├── ui_hybrid_2.html │ └── ... │ ├── src_infinite/ # UI hybrid (infinite mode) │ ├── ui_hybrid_1.html │ ├── ui_hybrid_2.html │ └── ... │ └── src_group/ # UI hybrid (modular) ├── ui_hybrid_1/ │ └── index.html └── ... ``` ## Customization ### Add New Demo Category Edit `generate_index.py` and add scanning logic: ```python def generate_demo_data(): demos = { 'threejs': [], 'sdg': [], 'uiSingle': [], 'uiModular': [], 'newCategory': [] # Add new category } # Add scanning for new category new_files = scan_directory('new_dir', 'pattern_*.html') for i, filepath in enumerate(new_files, 1): demos['newCategory'].append({ 'number': i, 'title': extract_title_from_html(filepath), 'description': extract_description_from_html(filepath), 'path': filepath, 'type': 'New Type', 'techniques': [] }) return demos ``` Then update `index.html` template to add the category section. ### Modify Extraction Logic Edit `extract_title_from_html()` or `extract_description_from_html()` in `generate_index.py`: ```python def extract_title_from_html(filepath): """Customize how titles are extracted.""" # Add custom regex patterns # Try different HTML elements # Handle edge cases pass ``` ### Change Dashboard Styling Edit `index.html` directly - the generator only updates the `demos` object and stats, preserving all styling. ## Workflow Integration ### After Manual Demo Creation ```bash # 1. Create new demo nano threejs_viz/threejs_viz_6.html # 2. Regenerate dashboard ./generate_index.py # 3. Refresh browser to see changes ``` ### After Infinite Loop Generation Add to your agent completion callback: ```python # In your infinite loop orchestrator def on_generation_complete(): print("🔄 Updating dashboard...") subprocess.run(['python3', 'generate_index.py']) print("✅ Dashboard updated!") ``` ### With Version Control ```bash # 1. Generate new demos ./your_generation_command.sh # 2. Update dashboard ./generate_index.py # 3. Commit everything together git add threejs_viz/ index.html git commit -m "Add 5 new Three.js demos" ``` ## Troubleshooting ### Dashboard shows old count **Problem:** Statistics don't match actual files **Solution:** Run `./generate_index.py` manually ### Can't execute script **Problem:** Permission denied **Solution:** `chmod +x generate_index.py watch_and_update.sh` ### Titles look wrong **Problem:** Extraction isn't finding correct titles **Solution:** Check HTML file structure, customize extraction in `generate_index.py` ### Watcher doesn't work **Problem:** `inotifywait` command not found **Solution:** Install with `sudo apt install inotify-tools` ### Server not accessible **Problem:** Can't open http://localhost:8889/ **Solution:** Check if server is running: `python3 -m http.server 8889` ## Advanced Usage ### Generate JSON API Export demo list as JSON for external tools: ```bash # Add to generate_index.py import json demos = generate_demo_data() with open('demos.json', 'w') as f: json.dump(demos, f, indent=2) ``` ### Create Category Pages Generate separate pages per category: ```bash # Add to workflow ./generate_index.py --category threejs --output threejs.html ./generate_index.py --category sdg --output sdg.html ``` ### Statistics Dashboard Track growth over time: ```bash # Log counts on each generation ./generate_index.py | tee -a dashboard_stats.log ``` ## Best Practices 1. **Regenerate after bulk changes** - After generating multiple demos, run once instead of per-demo 2. **Use watcher during development** - Auto-update while actively creating 3. **Git hook for teams** - Ensure dashboard stays in sync across team 4. **Backup before customization** - Copy `index.html` before major changes 5. **Test extraction** - Verify titles/descriptions look good after adding new demo types ## Quick Reference ```bash # Update dashboard ./generate_index.py # Watch for changes ./watch_and_update.sh # Start server python3 -m http.server 8889 # View dashboard firefox http://localhost:8889/ # Check status find threejs_viz sdg_viz d3_test mapbox_test claude_code_devtools src src_infinite src_group -name "*.html" | wc -l ``` ## Screenshot Preview System ### Overview The dashboard now features a hybrid preview system combining: - **Static screenshots** displayed in each demo card (fast, zero overhead) - **Live iframe preview** on hover (interactive, full-featured) This provides instant visual feedback while maintaining excellent performance. ### How It Works 1. **Screenshot Thumbnails**: Each card shows a 200px tall screenshot 2. **Hover to Preview**: Hover over any card for 800ms to see a live iframe preview 3. **Single Modal**: Only one iframe loads at a time (efficient memory usage) 4. **Fallback Display**: If screenshot is missing, shows placeholder icon ### Generating Screenshots #### Initial Setup ```bash # Install Node.js dependencies npm install # Install Playwright browsers npx playwright install chromium ``` #### Generate All Screenshots ```bash # Start server in one terminal npm run server # Generate screenshots in another terminal npm run screenshots ``` This will capture screenshots for all 107 demos. Estimated time: ~5-8 minutes. #### Generate by Category ```bash # Only Three.js demos npm run screenshots:threejs # Only SDG network visualizations npm run screenshots:sdg # Only UI components npm run screenshots:ui # All categories available: # - screenshots:threejs # - screenshots:sdg # - screenshots:d3 # - screenshots:mapbox # - screenshots:devtools # - screenshots:ui ``` #### Generate Single Screenshot ```bash node generate_screenshots.js --single=threejs_viz/threejs_viz_1.html ``` ### Screenshot Organization ``` infinite-agents/ ├── screenshots/ # Auto-generated screenshots │ ├── threejs_viz_threejs_viz_1.html.png │ ├── sdg_viz_sdg_viz_1.html.png │ ├── src_ui_hybrid_1.html.png │ └── ... └── generate_screenshots.js # Screenshot generator script ``` Screenshot filenames follow the pattern: `path_to_file.html.png` with `/` replaced by `_`. ### Configuration Edit `generate_screenshots.js` to customize: ```javascript const DEMO_CATEGORIES = { threejs: { pattern: 'threejs_viz/threejs_viz_*.html', delay: 3000, // Wait time for WebGL rendering }, // ... other categories }; ``` **Delay settings:** - Three.js/Mapbox: 3000ms (WebGL needs time to render) - D3/SDG: 1500-2000ms (SVG rendering + animations) - UI Components: 800ms (static or simple animations) ### Troubleshooting Screenshots #### Server not running ```bash # Error: Server is not running! # Solution: Start server first python3 -m http.server 8889 ``` #### Playwright not installed ```bash # Error: Browser not found # Solution: Install Playwright browsers npx playwright install chromium ``` #### Missing screenshots ```bash # Cards show 📸 placeholder # Solution: Generate screenshots for that category npm run screenshots:threejs # or specific category ``` #### Update screenshots after changes ```bash # After updating a demo, regenerate its screenshot npm run screenshots # Regenerate all # or node generate_screenshots.js --single=path/to/demo.html ``` ### Workflow Integration #### After Infinite Loop Generation ```bash # 1. Generate new demos /project:infinite-web specs/threejs_visualization_progressive.md threejs_viz 5 # 2. Update dashboard ./generate_index.py # 3. Generate screenshots npm run screenshots:threejs # 4. Refresh browser to see new previews ``` #### Automated Workflow Script ```bash #!/bin/bash # update_dashboard.sh echo "Updating dashboard..." python3 generate_index.py echo "Generating screenshots..." npm run screenshots echo "✅ Dashboard updated with previews!" ``` ### Performance Metrics **Before (No Previews):** - Initial load: ~100KB - Memory: ~50MB - First paint: <100ms **After (Screenshot Previews):** - Initial load: ~2-3MB (all screenshots) - Memory: ~80MB - First paint: ~200ms - Hover preview: +40MB per iframe (unloaded after close) **With 107 Screenshots:** - Total screenshot size: ~15-20MB (compressed PNGs) - Browser caching: Screenshots cached after first load - No performance impact on browsing (lazy loading) ## Future Enhancements Potential improvements to consider: - [x] Screenshot thumbnails for each demo ✅ - [x] Iframe preview on hover ✅ - [x] Automatically populate cards with screenshots ✅ - [x] Use Playwright for automated testing and evaluation of demos ✅ - [ ] WebP format for smaller screenshots (~40% reduction) - [ ] Thumbnail optimization (reduced resolution for cards) - [ ] Video preview for animated demos - [ ] Demo tags and advanced filtering - [ ] Screenshot diff detection (only regenerate changed demos) --- **Last Updated:** October 10, 2025 **Current Version:** Dynamic auto-discovery with preview system **Total Demos:** 107 (and counting!) **Preview Features:** Screenshot thumbnails + Hover iframe preview