--- title: UX Analyst AI emoji: 🧐 colorFrom: indigo colorTo: blue sdk: docker app_port: 7860 pinned: false --- # UX Analyst AI An AI-powered UX analysis tool that provides comprehensive website analysis with actionable recommendations and implementation code generation. ## Features ### 🎯 **Comprehensive UX Analysis** - Multi-viewport screenshot capture (desktop, tablet, mobile) - Visual design analysis with color, layout, and typography insights - AI-powered UX critique with actionable recommendations - Accessibility compliance checking - Performance and usability scoring ### 💻 **Implementation Ready** - Generates HTML, CSS, JavaScript code for recommended improvements - Step-by-step implementation guides - Copy-paste ready code snippets - Framework-agnostic solutions ### 🚀 **Multiple Interfaces** - **Web Interface**: Full-featured dashboard with real-time progress - **Command Line Tool**: Perfect for CI/CD integration and automation - **MCP Server**: Natural language UX analysis with Claude and other LLMs - **Programmatic API**: Integrate into your own tools and workflows ### ⚙️ **Developer Friendly** - Circuit breaker pattern for fault tolerance - Browser pool management for resource efficiency - Dependency injection architecture - Comprehensive error handling and logging ## Tech Stack ### Backend - Node.js with Express - Puppeteer for screenshot capture - @axe-core/puppeteer for accessibility scanning - Google Gemini AI for UX critique generation with vision analysis - SQLite for data storage ### Frontend - React with Vite - Tailwind CSS for styling - React Query for state management - React Router for navigation ## Quick Start ### Prerequisites 1. **Node.js 18+** and npm 2. **Google Gemini API Key** - Get one from [Google AI Studio](https://aistudio.google.com/) ### Installation & Setup ```bash # Clone the repository git clone https://github.com/grzetich/eyeson.git cd eyeson/ux-analyst-ai # Install dependencies for all components npm run install:all # Set up your API key export GEMINI_API_KEY="your-api-key-here" # Or create a .env file in the backend directory echo "GEMINI_API_KEY=your-api-key-here" > backend/.env ``` ## Usage Options ### 1. Command Line Interface (Recommended for CI/CD) ```bash # Install CLI globally cd cli && npm link # Basic analysis ux-analyze https://example.com # Quick analysis with code generation ux-analyze https://example.com --quick --code --accessibility # Interactive mode with guided prompts ux-analyze interactive # Custom output format and location ux-analyze https://example.com --format html --output ./my-analysis # CI/CD friendly JSON output ux-analyze https://example.com --format json --quick ``` #### CLI Options - `-o, --output ` - Output directory (default: `./ux-analysis`) - `-f, --format ` - Output format: `json`, `html`, `markdown` (default: `json`) - `-v, --viewports ` - Comma-separated viewports (default: `desktop,tablet,mobile`) - `--quick` - Run quick analysis (faster, less detailed) - `--code` - Generate implementation code - `--accessibility` - Include accessibility analysis - `--api-key ` - Gemini API key (or set `GEMINI_API_KEY` env var) ### 2. Web Interface ```bash # Start the backend server cd backend && npm run dev # Start the frontend (in another terminal) cd frontend && npm run dev # Open http://localhost:3000 in your browser ``` ### 3. Programmatic Usage ```javascript const { UXAnalyzer } = require('./cli/lib/UXAnalyzer'); const analyzer = new UXAnalyzer({ ai: { geminiApiKey: process.env.GEMINI_API_KEY } }); const result = await analyzer.analyze('https://example.com', { viewports: ['desktop', 'mobile'], includeCodeGeneration: true, includeAccessibility: true }); console.log('UX Score:', result.report.summary.uxScore); console.log('Implementation Code:', result.implementationCode); ``` ### 4. MCP Server (Natural Language Interface) The MCP server allows you to use natural language with Claude and other LLMs to analyze websites. #### Setup ```bash # Configure Claude Desktop # Add to ~/.config/claude/claude_desktop_config.json (Linux/Mac) # or %APPDATA%/Claude/claude_desktop_config.json (Windows) { "mcpServers": { "ux-analyst": { "command": "node", "args": ["/path/to/ux-analyst-ai/mcp-server/index.js"], "env": { "UX_BACKEND_URL": "http://localhost:3005" } } } } ``` #### Usage Just ask Claude naturally: ``` "Please analyze the UX of https://example.com" "Can you do a comprehensive UX analysis including accessibility?" "Show me the screenshots from the mobile viewport" "What implementation code do you recommend for the UX issues?" ``` #### Benefits - **Natural conversation**: No command syntax to remember - **Progressive updates**: Claude monitors progress and explains what's happening - **Visual analysis**: Claude can see and discuss the actual screenshots - **Intelligent presentation**: Results formatted based on your specific questions - **Code explanations**: Claude explains generated code and why it works ## Integration Examples ### NPM Scripts Add to your `package.json`: ```json { "scripts": { "ux:check": "ux-analyze http://localhost:3000 --quick", "ux:full": "ux-analyze http://localhost:3000 --code --accessibility --format html", "ux:mobile": "ux-analyze http://localhost:3000 --viewports mobile --quick", "ux:ci": "ux-analyze $UX_TARGET_URL --format json --quick --output ./ux-reports" } } ``` ### GitHub Actions CI/CD ```yaml name: UX Analysis on: pull_request: branches: [ main ] push: branches: [ main ] jobs: ux-analysis: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: '18' - name: Install UX Analyzer run: | cd ux-analyst-ai/cli npm install npm link - name: Run UX Analysis env: GEMINI_API_KEY: ${{ secrets.GEMINI_API_KEY }} run: | ux-analyze https://your-staging-site.com \ --format json \ --output ./ux-reports \ --quick \ --accessibility - name: Upload UX Reports uses: actions/upload-artifact@v3 with: name: ux-analysis-reports path: ./ux-reports/ ``` ### Pre-commit Hook ```bash #!/bin/bash # .git/hooks/pre-commit echo "Running UX analysis..." npm run ux:check if [ $? -ne 0 ]; then echo "❌ UX analysis failed. Please review and fix issues before committing." exit 1 fi echo "✅ UX analysis passed!" ``` ## Architecture ### Backend Services - **AnalysisService**: Core analysis orchestration - **ScreenshotService**: Multi-viewport screenshot capture with browser pooling - **AICritiqueService**: AI-powered UX evaluation using Google Gemini - **VisualDesignAnalyzer**: Color, layout, and typography analysis - **CodeGenerationService**: AI-powered implementation code generation ### Frontend Components - **React Dashboard**: Real-time analysis progress and results - **AnalysisForm**: URL input and configuration - **ProgressTracker**: Live analysis status updates - **ResultsViewer**: Interactive report display - **CodeImplementationSection**: Generated code display with copy/download ### CLI Tool - **Commander.js**: Robust CLI argument parsing - **Interactive Mode**: Guided prompts with inquirer - **Progress Tracking**: Real-time spinners and status updates - **Multiple Output Formats**: JSON, HTML, Markdown support ### MCP Server - **Model Context Protocol**: Standard interface for LLM tool integration - **Natural Language Interface**: Conversational UX analysis with Claude - **Progressive Updates**: Real-time progress monitoring and explanations - **Visual Content Support**: Screenshots and images for LLM analysis ## Configuration ### Environment Variables ```bash # Required GEMINI_API_KEY="your-gemini-api-key" # Optional PORT=3000 NODE_ENV=development ``` ### Configuration File Create `ux-config.json`: ```json { "ai": { "geminiApiKey": "your-api-key" }, "defaults": { "viewports": ["desktop", "tablet", "mobile"], "outputFormat": "html", "includeCode": true, "includeAccessibility": true }, "analysis": { "timeoutMs": 300000, "maxConcurrentAnalyses": 3 } } ``` Use with: `ux-analyze https://example.com --config ux-config.json` ## Output Formats ### JSON (Machine-readable) - Raw analysis data perfect for CI/CD integration - Parseable by other tools and scripts - Contains all metrics, scores, and recommendations ### HTML (Human-readable) - Beautiful visual reports with embedded screenshots - Implementation code included with syntax highlighting - Shareable analysis results ### Markdown (Documentation-friendly) - README-compatible format for documentation - Version control friendly - Great for team collaboration ## API Documentation ### Start Analysis ```http POST /api/analyze Content-Type: application/json { "url": "https://example.com", "options": { "viewports": ["desktop", "tablet", "mobile"], "includeAccessibility": true, "analysisType": "comprehensive" } } ``` ### Get Analysis Result ```http GET /api/analyze/{analysisId} ``` ### Get HTML Report ```http GET /api/analyze/{analysisId}/report ``` ### Health Check ```http GET /api/health ``` ## Development ### Project Structure ``` ux-analyst-ai/ ├── backend/ # Express API server │ ├── services/ # Core business logic │ ├── routes/ # API routes │ ├── database/ # Database setup │ └── server.js # Entry point ├── frontend/ # React application │ ├── src/ │ │ ├── components/ # React components │ │ ├── pages/ # Page components │ │ └── api/ # API client │ └── dist/ # Built assets ├── data/ # Runtime data (screenshots, DB) └── docker-compose.yml # Production deployment ``` ### Available Scripts ```bash # Development npm run dev # Start both backend and frontend npm run dev:backend # Start only backend npm run dev:frontend # Start only frontend # Building npm run build # Build frontend npm run install:all # Install all dependencies # Testing npm test # Run backend tests ``` ### Adding New Features 1. **Backend Services**: Add to `backend/services/` 2. **API Routes**: Add to `backend/routes/` 3. **Frontend Components**: Add to `frontend/src/components/` 4. **Database Changes**: Modify `backend/database/init.js` ## Troubleshooting ### Common Issues 1. **Puppeteer Chrome Issues** ```bash # Linux: Install dependencies sudo apt-get install -y gconf-service libasound2 libatk1.0-0 libc6 libcairo2 # Docker: Already included in Dockerfile ``` 2. **Gemini API Errors** - Verify API key is set correctly - Check API usage limits and quotas - Ensure Gemini API access is enabled 3. **Out of Memory** ```bash # Increase Node.js memory limit export NODE_OPTIONS="--max-old-space-size=4096" ``` 4. **Screenshots Not Loading** - Check file permissions in `data/screenshots/` - Verify `SCREENSHOT_STORAGE_PATH` is correct - Ensure sufficient disk space ### Performance Optimization - **Reduce Concurrent Analyses**: Lower `MAX_CONCURRENT_ANALYSES` - **Optimize Screenshots**: Reduce viewport sizes or skip viewports - **Database**: Consider PostgreSQL for production - **Caching**: Add Redis for session caching ## Contributing 1. Fork the repository 2. Create a feature branch 3. Make your changes 4. Add tests for new functionality 5. Submit a pull request ## License MIT License - see LICENSE file for details. ## Support For issues and questions: 1. Check this README and troubleshooting section 2. Review the [docs](../docs/) for architecture details 3. Open an issue with reproduction steps --- **Note**: This is an MVP implementation. See the roadmap in the docs for planned enhancements including Figma integration, team collaboration, and enterprise features.