{"owner":"bastienwirtz","repo":"homer","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md"],"skills":{"AGENTS.md":"# AGENTS Instructions\n\nThis file provides guidance to AI Agents when working with code in this repository.\n\n## Development Commands\n\n```bash\npnpm install      # Install dependencies (PNPM enforced via packageManager)\npnpm dev          # Start development server on http://localhost:3000\npnpm mock         # Start mock API server for testing service integrations\npnpm build        # Build for production\npnpm preview      # Preview production build\npnpm lint         # Run ESLint with auto-fix\n```\n\n## Architecture Overview\n\nHomer is a static Vue.js 3 PWA dashboard that loads configuration from YAML files. The architecture is service-oriented with dynamic component loading.\n\n### Core Application Structure\n\n- **Entry Point**: `src/main.js` mounts the Vue app\n- **Root Component**: `src/App.vue` handles layout, configuration loading, and routing\n- **Configuration System**: YAML-based with runtime merging of defaults (`src/assets/defaults.yml`) and user config (`/assets/config.yml`)\n- **Service Components**: 53 specialized integrations in `src/components/services/` that extend a Generic component pattern\n\n### Service Integration Pattern\n\nAll service components follow this architecture:\n\n- Extend `Generic.vue` using Vue slots (`<template #indicator>`, `<template #content>`, `<template #icon>`)\n- Use the `service.js` mixin (`src/mixins/service.js`) for common API functionality\n- Use a custom `fetch` method provided by the service mixin to seamlessly support proxy configuration, custom headers, and credentials.\n\n### Auto-Update Configuration\n\nServices support automatic data refreshing using a centralized scheduler system with global and per-service configuration:\n\n#### Global Configuration\n\n`autoUpdate: 30000` - Set default interval for all services (30 seconds)\n\n#### Service Configuration\n- **Service-specific interval**: `updateInterval: 10000` - Override global default\n- **Disable per service**: `autoUpdateInterval: false` - Disable for specific service\n- **Use global default**: Omit `autoUpdateInterval` to use global setting\n\n### Configuration & Routing\n\n- **Multi-page Support**: Hash-based routing without Vue Router\n- **Dynamic Config Loading**: External URLs supported via `config.remote_config`\n- **Theme System**: CSS layers architecture with three built-in themes in `src/assets/themes/`\n- **Asset Management**: Static files served from `/assets/` with runtime configuration merging\n\n### Build System Details\n\n- **Vite 7**: Modern build tool with Vue plugin\n- **PWA**: Auto-updating service worker via `vite-plugin-pwa`\n- **SCSS**: Bulma framework with modular component styling\n- **Docker**: Multi-stage build (Node.js → Alpine + Lighttpd)\n\n### Mock Data Creation Pattern\n\nWhen creating mock data for service components testing:\n\n**Structure**: `dummy-data/[component-name]/[api-path]/[endpoint]`\n\n**Steps**:\n\n1. **Analyze component**: Read the Vue component file to identify API calls (look for `this.fetch()` calls)\n2. **Check existing mock**: If mock directory exists, read existing files to check for missing fields\n3. **Create/update structure**: `mkdir -p dummy-data/[lowercase-component-name]/` and mirror API endpoint paths\n4. **Create/update JSON files**: Write realistic mock responses matching the expected data structure\n5. **Verify fields**: Ensure all fields used in the component's computed properties and templates are included\n6. **Update existing mocks**: If mock files exist but are missing fields, add the missing fields without removing existing data\n\n**Key Points**:\n\n- Component directory name should be lowercase version of component name (e.g., `AdGuardHome.vue` → `adguardhome/`)\n- Directory structure mirrors API endpoints exactly\n- Files contain JSON responses (no file extension needed)\n- Mock server serves from `dummy-data/` via `pnpm mock` command\n- Each component gets isolated directory to prevent API path conflicts\n- When updating existing mocks, preserve existing data and only add missing fields required by the component\n- Always read existing mock files first to understand current structure before making changes\n\n**Example**: For `AdGuardHome.vue`:\n- API calls: `/control/status`, `/control/stats`\n- Mock files: `dummy-data/adguardhome/control/status`, `dummy-data/adguardhome/control/stats`\n\n### Development Notes\n\n- Use `pnpm mock` to test service integrations with dummy data\n- Configuration changes require restart in development mode\n- New service components should follow the Generic component slot pattern\n- Themes use CSS custom properties for dynamic color switching\n- The app has no backend dependencies and generates static files only\n"},"files":{"AGENTS.md":"# AGENTS Instructions\n\nThis file provides guidance to AI Agents when working with code in this repository.\n\n## Development Commands\n\n```bash\npnpm install      # Install dependencies (PNPM enforced via packageManager)\npnpm dev          # Start development server on http://localhost:3000\npnpm mock         # Start mock API server for testing service integrations\npnpm build        # Build for production\npnpm preview      # Preview production build\npnpm lint         # Run ESLint with auto-fix\n```\n\n## Architecture Overview\n\nHomer is a static Vue.js 3 PWA dashboard that loads configuration from YAML files. The architecture is service-oriented with dynamic component loading.\n\n### Core Application Structure\n\n- **Entry Point**: `src/main.js` mounts the Vue app\n- **Root Component**: `src/App.vue` handles layout, configuration loading, and routing\n- **Configuration System**: YAML-based with runtime merging of defaults (`src/assets/defaults.yml`) and user config (`/assets/config.yml`)\n- **Service Components**: 53 specialized integrations in `src/components/services/` that extend a Generic component pattern\n\n### Service Integration Pattern\n\nAll service components follow this architecture:\n\n- Extend `Generic.vue` using Vue slots (`<template #indicator>`, `<template #content>`, `<template #icon>`)\n- Use the `service.js` mixin (`src/mixins/service.js`) for common API functionality\n- Use a custom `fetch` method provided by the service mixin to seamlessly support proxy configuration, custom headers, and credentials.\n\n### Auto-Update Configuration\n\nServices support automatic data refreshing using a centralized scheduler system with global and per-service configuration:\n\n#### Global Configuration\n\n`autoUpdate: 30000` - Set default interval for all services (30 seconds)\n\n#### Service Configuration\n- **Service-specific interval**: `updateInterval: 10000` - Override global default\n- **Disable per service**: `autoUpdateInterval: false` - Disable for specific service\n- **Use global default**: Omit `autoUpdateInterval` to use global setting\n\n### Configuration & Routing\n\n- **Multi-page Support**: Hash-based routing without Vue Router\n- **Dynamic Config Loading**: External URLs supported via `config.remote_config`\n- **Theme System**: CSS layers architecture with three built-in themes in `src/assets/themes/`\n- **Asset Management**: Static files served from `/assets/` with runtime configuration merging\n\n### Build System Details\n\n- **Vite 7**: Modern build tool with Vue plugin\n- **PWA**: Auto-updating service worker via `vite-plugin-pwa`\n- **SCSS**: Bulma framework with modular component styling\n- **Docker**: Multi-stage build (Node.js → Alpine + Lighttpd)\n\n### Mock Data Creation Pattern\n\nWhen creating mock data for service components testing:\n\n**Structure**: `dummy-data/[component-name]/[api-path]/[endpoint]`\n\n**Steps**:\n\n1. **Analyze component**: Read the Vue component file to identify API calls (look for `this.fetch()` calls)\n2. **Check existing mock**: If mock directory exists, read existing files to check for missing fields\n3. **Create/update structure**: `mkdir -p dummy-data/[lowercase-component-name]/` and mirror API endpoint paths\n4. **Create/update JSON files**: Write realistic mock responses matching the expected data structure\n5. **Verify fields**: Ensure all fields used in the component's computed properties and templates are included\n6. **Update existing mocks**: If mock files exist but are missing fields, add the missing fields without removing existing data\n\n**Key Points**:\n\n- Component directory name should be lowercase version of component name (e.g., `AdGuardHome.vue` → `adguardhome/`)\n- Directory structure mirrors API endpoints exactly\n- Files contain JSON responses (no file extension needed)\n- Mock server serves from `dummy-data/` via `pnpm mock` command\n- Each component gets isolated directory to prevent API path conflicts\n- When updating existing mocks, preserve existing data and only add missing fields required by the component\n- Always read existing mock files first to understand current structure before making changes\n\n**Example**: For `AdGuardHome.vue`:\n- API calls: `/control/status`, `/control/stats`\n- Mock files: `dummy-data/adguardhome/control/status`, `dummy-data/adguardhome/control/stats`\n\n### Development Notes\n\n- Use `pnpm mock` to test service integrations with dummy data\n- Configuration changes require restart in development mode\n- New service components should follow the Generic component slot pattern\n- Themes use CSS custom properties for dynamic color switching\n- The app has no backend dependencies and generates static files only\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","title":"AGENTS.md","content":"# AGENTS Instructions\n\nThis file provides guidance to AI Agents when working with code in this repository.\n\n## Development Commands\n\n```bash\npnpm install      # Install dependencies (PNPM enforced via packageManager)\npnpm dev          # Start development server on http://localhost:3000\npnpm mock         # Start mock API server for testing service integrations\npnpm build        # Build for production\npnpm preview      # Preview production build\npnpm lint         # Run ESLint with auto-fix\n```\n\n## Architecture Overview\n\nHomer is a static Vue.js 3 PWA dashboard that loads configuration from YAML files. The architecture is service-oriented with dynamic component loading.\n\n### Core Application Structure\n\n- **Entry Point**: `src/main.js` mounts the Vue app\n- **Root Component**: `src/App.vue` handles layout, configuration loading, and routing\n- **Configuration System**: YAML-based with runtime merging of defaults (`src/assets/defaults.yml`) and user config (`/assets/config.yml`)\n- **Service Components**: 53 specialized integrations in `src/components/services/` that extend a Generic component pattern\n\n### Service Integration Pattern\n\nAll service components follow this architecture:\n\n- Extend `Generic.vue` using Vue slots (`<template #indicator>`, `<template #content>`, `<template #icon>`)\n- Use the `service.js` mixin (`src/mixins/service.js`) for common API functionality\n- Use a custom `fetch` method provided by the service mixin to seamlessly support proxy configuration, custom headers, and credentials.\n\n### Auto-Update Configuration\n\nServices support automatic data refreshing using a centralized scheduler system with global and per-service configuration:\n\n#### Global Configuration\n\n`autoUpdate: 30000` - Set default interval for all services (30 seconds)\n\n#### Service Configuration\n- **Service-specific interval**: `updateInterval: 10000` - Override global default\n- **Disable per service**: `autoUpdateInterval: false` - Disable for specific service\n- **Use global default**: Omit `autoUpdateInterval` to use global setting\n\n### Configuration & Routing\n\n- **Multi-page Support**: Hash-based routing without Vue Router\n- **Dynamic Config Loading**: External URLs supported via `config.remote_config`\n- **Theme System**: CSS layers architecture with three built-in themes in `src/assets/themes/`\n- **Asset Management**: Static files served from `/assets/` with runtime configuration merging\n\n### Build System Details\n\n- **Vite 7**: Modern build tool with Vue plugin\n- **PWA**: Auto-updating service worker via `vite-plugin-pwa`\n- **SCSS**: Bulma framework with modular component styling\n- **Docker**: Multi-stage build (Node.js → Alpine + Lighttpd)\n\n### Mock Data Creation Pattern\n\nWhen creating mock data for service components testing:\n\n**Structure**: `dummy-data/[component-name]/[api-path]/[endpoint]`\n\n**Steps**:\n\n1. **Analyze component**: Read the Vue component file to identify API calls (look for `this.fetch()` calls)\n2. **Check existing mock**: If mock directory exists, read existing files to check for missing fields\n3. **Create/update structure**: `mkdir -p dummy-data/[lowercase-component-name]/` and mirror API endpoint paths\n4. **Create/update JSON files**: Write realistic mock responses matching the expected data structure\n5. **Verify fields**: Ensure all fields used in the component's computed properties and templates are included\n6. **Update existing mocks**: If mock files exist but are missing fields, add the missing fields without removing existing data\n\n**Key Points**:\n\n- Component directory name should be lowercase version of component name (e.g., `AdGuardHome.vue` → `adguardhome/`)\n- Directory structure mirrors API endpoints exactly\n- Files contain JSON responses (no file extension needed)\n- Mock server serves from `dummy-data/` via `pnpm mock` command\n- Each component gets isolated directory to prevent API path conflicts\n- When updating existing mocks, preserve existing data and only add missing fields required by the component\n- Always read existing mock files first to understand current structure before making changes\n\n**Example**: For `AdGuardHome.vue`:\n- API calls: `/control/status`, `/control/stats`\n- Mock files: `dummy-data/adguardhome/control/status`, `dummy-data/adguardhome/control/stats`\n\n### Development Notes\n\n- Use `pnpm mock` to test service integrations with dummy data\n- Configuration changes require restart in development mode\n- New service components should follow the Generic component slot pattern\n- Themes use CSS custom properties for dynamic color switching\n- The app has no backend dependencies and generates static files only\n","category":"root","tokens":1156}]}