# Phase 5: Portainer Integration **Status:** ⬜ Not Started **Parent plan:** [PLAN.md](./PLAN.md) **Domain:** backend ## Objective Implement Portainer integration to display container and stack status from Docker environments managed by Portainer. ## Tasks - [ ] Task 1: Create `src/lib/server/integrations/portainer/schema.ts` — Zod schemas for auth config (`{ apiKey: string, endpointId: number }`) and endpoint responses. - [ ] Task 2: Create `src/lib/server/integrations/portainer/client.ts` — HTTP client for Portainer API. Auth via `X-API-Key` header. Endpoints: `/api/endpoints/{id}/docker/containers/json`, `/api/stacks`, `/api/endpoints/{id}/docker/containers/{cid}/json`. - [ ] Task 3: Create `src/lib/server/integrations/portainer/transform.ts` — Transform: containers → summary (running/stopped/error counts as stat-card), container list with state + CPU/memory, stacks → list with up/down status. - [ ] Task 4: Create `src/lib/server/integrations/portainer/index.ts` — Integration implementation. Endpoints: `container-summary` (stat-card), `container-list` (list), `stack-status` (list). testConnection: fetch endpoints list. - [ ] Task 5: Register Portainer integration in registry. ## Files to Modify/Create - `src/lib/server/integrations/portainer/schema.ts` — new - `src/lib/server/integrations/portainer/client.ts` — new - `src/lib/server/integrations/portainer/transform.ts` — new - `src/lib/server/integrations/portainer/index.ts` — new - `src/lib/server/integrations/registry.ts` — modify: register Portainer ## Acceptance Criteria - Container summary shows running/stopped/error counts - Container list shows name, state, image, CPU/memory usage - Stack status shows stack names with up/down indicators - Test connection validates API key and endpoint ID - Handles multiple Portainer endpoints ## Notes - Portainer API uses API key in `X-API-Key` header - Container stats (CPU/memory) require a separate API call per container — limit to top N for performance - Stack status comes from a separate endpoint - endpointId is required — Portainer manages multiple Docker hosts ## Review Checklist - [ ] All tasks completed - [ ] Performance: limited container stats calls - [ ] Code follows project conventions ## Handoff to Next Phase