# Prompt: Kickoff v0.4.0 - Implementazione Reports, Charts & Comparison > **Progetto:** mockupAWS - Backend Profiler & Cost Estimator > **Versione Target:** v0.4.0 > **Data Kickoff:** 2026-04-07 > **Deadline:** 2-3 settimane > **Stato:** 🚀 Pronta per inizio implementazione --- ## 🎯 Contesto e Stato Attuale ### ✅ Cosa è stato completato (v0.3.0) - **Backend v0.3.0:** Database PostgreSQL, API CRUD scenari, Ingest, Metrics, autenticazione base - **Frontend v0.3.0:** React + Vite + TypeScript, Dashboard, Scenario Detail/Edit, API integration - **DevOps:** Docker Compose, PostgreSQL container - **Documentazione:** PRD, Architecture, Kanban, Progress tracking ### 📋 Cosa è pronto per v0.4.0 - **Pianificazione completa:** `prompt/prompt-v0.4.0-planning.md` con 27 task dettagliati - **Kanban:** `export/kanban-v0.4.0.md` con priorità e dipendenze - **Architecture:** Pattern definiti, librerie scelte, API specs --- ## 🚀 OBIETTIVO: Implementare v0.4.0 ### Goals 1. **Report Generation System** - PDF/CSV professionali con download 2. **Data Visualization** - Grafici interattivi (Pie, Area, Bar) con Recharts 3. **Scenario Comparison** - Confronto multi-scenario side-by-side 4. **Dark/Light Mode** - Toggle tema completo per tutta l'app 5. **E2E Testing** - Suite Playwright con 94+ test cases ### Metriche di Successo - [ ] Report PDF generati in <3 secondi - [ ] 3+ tipi di grafici funzionanti e responsive - [ ] Confronto 2-4 scenari simultaneamente - [ ] Dark mode applicabile a tutti i componenti - [ ] E2E tests passanti su Chromium (priorità) - [ ] Code coverage >70% --- ## 👥 ASSEGNAZIONE TASK ### @backend-dev - Backend Report Generation (5 task) **Priorità P1 - Week 1 Focus** #### BE-RPT-001: Report Service Implementation **File:** `src/services/report_service.py` (creare) - [ ] Metodo `generate_pdf(scenario_id: UUID) -> Report` - Usare `reportlab` per PDF - Template professionale: header con logo, footer con pagine, tabelle zebra - Sezioni: scenario summary, cost breakdown (SQS/Lambda/Bedrock), metrics aggregate, top 10 logs, PII violations - [ ] Metodo `generate_csv(scenario_id: UUID) -> Report` - Usare `pandas` per CSV - Tutti i campi dei logs inclusi - [ ] Metodo `compile_metrics(scenario_id: UUID) -> dict` - Aggregare dati da scenario_logs e scenario_metrics - Calcolare totali, medie, percentuali - [ ] Metodo `cleanup_old_reports()` - Rimozione automatica file >30 giorni **Test:** Verificare generazione PDF/CSV funzioni correttamente #### BE-RPT-002: Report Generation API **File:** `src/api/v1/reports.py` (creare) - [ ] Endpoint `POST /api/v1/scenarios/{id}/reports` - Request body: `{format: "pdf"|"csv", include_logs: bool, date_from?: string, date_to?: string, sections: string[]}` - Response: `202 Accepted` con `{report_id: uuid, status: "pending"}` - Implementare come background task async - [ ] Endpoint `GET /api/v1/reports/{id}/status` - Response: `{report_id, status: "pending"|"processing"|"completed"|"failed", progress: number, message: string}` - [ ] Endpoint `GET /api/v1/scenarios/{id}/reports` (list) - Query params: page, page_size - Response: lista reports con metadata **Integrazione:** Aggiornare `src/api/v1/__init__.py` per includere router #### BE-RPT-003: Report Download API **File:** Modificare `src/api/v1/reports.py` - [ ] Endpoint `GET /api/v1/reports/{id}/download` - File streaming con `StreamingResponse` - Headers: `Content-Type` (application/pdf o text/csv), `Content-Disposition: attachment` - Rate limiting: 10 download/minuto (usare slowapi) - [ ] Endpoint `DELETE /api/v1/reports/{id}` - Cancellare record DB e file fisico **Test:** Verificare download funzioni, rate limiting attivo #### BE-RPT-004: Report Storage **File:** Modificare `src/core/config.py`, creare directory - [ ] Path storage: `./storage/reports/{scenario_id}/{report_id}.{format}` - [ ] Creare directory se non esiste - [ ] Max file size: 50MB (configurabile in Settings) - [ ] Cleanup job: eseguire `cleanup_old_reports()` periodicamente #### BE-RPT-005: PDF Templates **File:** `src/services/report_templates/` (creare directory) - [ ] Template base con: - Header: logo mockupAWS (placeholder), titolo report - Colori: primario #0066CC, grigio #F5F5F5 per sfondi - Font: Helvetica/Arial (standard ReportLab) - Tabelle: zebra striping, bordi sottili - Footer: "Pagina X di Y", data generazione - [ ] Stili definiti in `styles.py` **Output atteso:** PDF professionale e leggibile --- ### @frontend-dev - Frontend Implementation (18 task) **Priorità P1 - Week 1-2, Priorità P2 - Week 2-3** #### FE-VIZ-001: Recharts Integration (Setup) **File:** Installazioni e config - [ ] Installare: `npm install recharts date-fns` - [ ] Creare `src/components/charts/ChartContainer.tsx` (wrapper responsive) - [ ] Definire color palette per charts (coerente con Tailwind) - [ ] Setup tema per dark mode #### FE-VIZ-002: Cost Breakdown Chart **File:** `src/components/charts/CostBreakdown.tsx` - [ ] Componente Pie/Donut chart - [ ] Props: `data: Array<{service: string, cost: number, percentage: number}>` - [ ] Legend interattiva (toggle servizi) - [ ] Tooltip con valori esatti in $ - [ ] Responsive (usa ChartContainer) - [ ] **Posizione:** Integrare in Dashboard e ScenarioDetail #### FE-VIZ-003: Time Series Chart **File:** `src/components/charts/TimeSeries.tsx` - [ ] Componente Area/Line chart - [ ] Props: `data: Array<{timestamp: string, value: number}>`, `series: Array<{key: string, name: string, color: string}>` - [ ] Multi-line support (diverse metriche) - [ ] X-axis: timestamp formattato (date-fns) - [ ] **Posizione:** Tab "Metrics" in ScenarioDetail #### FE-VIZ-004: Comparison Bar Chart **File:** `src/components/charts/ComparisonBar.tsx` - [ ] Componente Grouped Bar chart - [ ] Props: `scenarios: Array`, `metric: string` - [ ] Selettore metrica (dropdown) - [ ] Colori diversi per ogni scenario - [ ] **Posizione:** Compare page #### FE-VIZ-005 & 006: Additional Charts (P2) - [ ] Metrics Distribution (istogramma) - se Recharts supporta - [ ] Dashboard sparklines (mini charts) #### FE-CMP-001: Comparison Selection UI **File:** Modificare `src/pages/ScenariosPage.tsx` - [ ] Aggiungere checkbox multi-selezione in ogni riga scenario - [ ] Stato: `selectedScenarios: string[]` - [ ] Bottone "Compare Selected" (disabled se <2 o >4 selezionati) - [ ] Mostrare contatore "2-4 scenarios selected" - [ ] Modal confirmation con lista scenari selezionati - [ ] Click su "Compare" naviga a `/compare?ids=id1,id2,id3` #### FE-CMP-002: Compare Page **File:** `src/pages/Compare.tsx` (creare) - [ ] Route: `/compare` - [ ] Leggere query param `ids` (comma-separated UUIDs) - [ ] Layout responsive: - Desktop: 2-4 colonne side-by-side - Tablet: 2 colonne + scroll - Mobile: scroll orizzontale o accordion - [ ] Header per ogni scenario: nome, regione, stato badge - [ ] Summary cards: total cost, requests, SQS blocks, tokens #### FE-CMP-003: Comparison Tables **File:** Modificare `src/pages/Compare.tsx` - [ ] Tabella dettagliata con metriche affiancate - [ ] Colonne: Metrica | Scenario 1 | Scenario 2 | ... | Delta - [ ] Color coding: - Verde: valore migliore (es. costo minore) - Rosso: valore peggiore - Grigio: neutro - [ ] Calcolo delta percentuale vs baseline (primo scenario) - [ ] Export comparison button (CSV) #### FE-CMP-004: Visual Comparison **File:** Integrare in `src/pages/Compare.tsx` - [ ] Includere ComparisonBar chart - [ ] Toggle metriche da confrontare - [ ] Highlight scenario selezionato on hover #### FE-RPT-001: Report Generation UI **File:** `src/pages/Reports.tsx` (creare) - [ ] Route: `/scenarios/:id/reports` - [ ] Sezione "Generate Report": - Toggle formato: PDF / CSV - Checkbox: include_logs - Date range picker (opzionale, default: tutto) - Selezione sezioni: summary, costs, metrics, logs, pii - Preview: conteggio logs che saranno inclusi - [ ] Bottone "Generate" con loading state - [ ] Toast notification quando report pronto (polling su status) #### FE-RPT-002: Reports List **File:** Modificare `src/pages/Reports.tsx` - [ ] Tabella reports già generati - [ ] Colonne: Data, Formato, Dimensione, Stato, Azioni - [ ] Badge stato: 🟡 Pending / 🟢 Completed / 🔴 Failed - [ ] Azioni: Download (icona), Delete (icona cestino), Regenerate - [ ] Sorting per data (newest first) - [ ] Empty state se nessun report #### FE-RPT-003: Report Download Handler **File:** Hook o utility - [ ] Funzione `downloadReport(reportId: string, filename: string)` - [ ] Axios con `responseType: 'blob'` - [ ] Creare ObjectURL e trigger download - [ ] Cleanup dopo download - [ ] Error handling con toast #### FE-RPT-004: Report Preview (P2) **File:** Modificare `src/pages/Reports.tsx` - [ ] Preview CSV: mostrare prime 10 righe in tabella - [ ] Info box con summary prima di generare - [ ] Stima dimensione file #### FE-THM-001: Theme Provider Setup **File:** `src/providers/ThemeProvider.tsx` (creare) - [ ] Context: `{ theme: 'light'|'dark'|'system', setTheme: fn }` - [ ] Persistenza in localStorage - [ ] Default: 'system' (usa media query prefers-color-scheme) - [ ] Effetto: applica classe 'dark' o 'light' al root #### FE-THM-002: Tailwind Dark Mode Config **File:** `tailwind.config.js`, `src/index.css` - [ ] Aggiungere `darkMode: 'class'` in tailwind.config.js - [ ] Definire CSS variables per colori temizzabili - [ ] Transition smooth tra temi (300ms) #### FE-THM-003: Component Theme Support **File:** Tutti i componenti UI - [ ] Verificare tutti i componenti shadcn/ui supportino dark mode - [ ] Aggiornare classi custom: - `bg-white` → `bg-white dark:bg-gray-900` - `text-gray-900` → `text-gray-900 dark:text-white` - `border-gray-200` → `border-gray-200 dark:border-gray-700` - [ ] Testare ogni pagina in entrambi i temi #### FE-THM-004: Theme Toggle Component **File:** `src/components/ui/theme-toggle.tsx` (creare) - [ ] Toggle button con icona sole/luna - [ ] Dropdown: Light / Dark / System - [ ] Posizione: Header (vicino ad altre icone) - [ ] Stato attivo evidenziato **Aggiuntivi:** - [ ] Chart theming (Recharts supporta temi) - [ ] Toast notifications (sonner già supporta dark mode) --- ### @qa-engineer - E2E Testing (4 task) **Priorità P3 - Week 2-3 (dopo che FE/BE sono stabili)** #### QA-E2E-001: Playwright Setup **File:** Configurazioni - [ ] Verificare `@playwright/test` installato - [ ] Verificare `playwright.config.ts` configurato: - Test directory: `e2e/` - Base URL: `http://localhost:5173` - Browsers: Chromium (priority), Firefox, WebKit - Screenshots on failure: true - Video: on-first-retry - [ ] Scripts NPM funzionanti: - `npm run test:e2e` - `npm run test:e2e:ui` - `npm run test:e2e:debug` #### QA-E2E-002: Test Implementation **File:** `frontend/e2e/*.spec.ts` (verificare/esistono già) - [ ] `scenario-crud.spec.ts` - 11 tests - Create, edit, delete scenarios - Validation errori - [ ] `ingest-logs.spec.ts` - 9 tests - Ingest logs, verify metrics update - PII detection verification - [ ] `reports.spec.ts` - 10 tests - Generate PDF/CSV reports - Download reports - Verify file contents - [ ] `comparison.spec.ts` - 16 tests - Select multiple scenarios - Navigate to compare page - Verify comparison data - [ ] `navigation.spec.ts` - 21 tests - All routes accessible - 404 handling - Mobile responsive - [ ] `visual-regression.spec.ts` - 18 tests - Screenshot testing - Dark/light mode consistency **Verificare:** Tutti i test siano deterministici (no flaky tests) #### QA-E2E-003: Test Data & Fixtures **File:** `frontend/e2e/fixtures/`, `utils/` - [ ] `test-scenarios.ts` - Dati scenari di test - [ ] `test-logs.ts` - Dati logs di test - [ ] `test-helpers.ts` - API utilities (createScenario, cleanup, etc.) - [ ] Database seeding prima dei test - [ ] Cleanup dopo ogni test suite #### QA-E2E-004: Visual Regression & CI **File:** GitHub Actions, screenshots - [ ] Baseline screenshots in `e2e/screenshots/baseline/` - [ ] Configurare threshold (20% tolerance) - [ ] GitHub Actions workflow `.github/workflows/e2e.yml`: - Trigger: push/PR to main - Services: PostgreSQL - Steps: setup, seed DB, run tests, upload artifacts - [ ] Documentazione in `frontend/e2e/README.md` --- ## 📅 TIMELINE SUGGERITA ### Week 1: Foundation & Reports - **Giorno 1-2:** @backend-dev BE-RPT-001, @frontend-dev FE-VIZ-001 + FE-THM-001 - **Giorno 3:** @backend-dev BE-RPT-002, @frontend-dev FE-VIZ-002 + FE-VIZ-003 - **Giorno 4:** @backend-dev BE-RPT-003 + BE-RPT-004, @frontend-dev FE-RPT-001 + FE-RPT-002 - **Giorno 5:** @backend-dev BE-RPT-005, @frontend-dev FE-THM-002 + FE-THM-004 - **Weekend:** Testing integrazione, bugfixing ### Week 2: Charts & Comparison - **Giorno 6-7:** @frontend-dev FE-CMP-001 + FE-CMP-002 + FE-VIZ-004 - **Giorno 8:** @frontend-dev FE-CMP-003 + FE-CMP-004 - **Giorno 9:** @frontend-dev FE-RPT-003 + FE-RPT-004 - **Giorno 10:** @frontend-dev FE-THM-003 (audit tutti componenti) - **Giorno 11-12:** @frontend-dev Polish, responsive, animazioni ### Week 3: Testing & Polish - **Giorno 13-14:** @qa-engineer QA-E2E-001 + QA-E2E-002 (setup e test principali) - **Giorno 15:** @qa-engineer QA-E2E-003 + QA-E2E-004 (fixtures e CI) - **Giorno 16:** Bugfixing cross-team - **Giorno 17:** Performance optimization - **Giorno 18:** Final review, documentation update - **Giorno 19-21:** Buffer per imprevisti --- ## 🔧 CONSEGNE (Deliverables) ### Backend (@backend-dev) - [ ] `src/services/report_service.py` con metodi PDF/CSV - [ ] `src/api/v1/reports.py` con 5 endpoints - [ ] `src/schemas/report.py` con Pydantic models - [ ] `src/repositories/report.py` con metodi DB - [ ] Directory `storage/reports/` funzionante - [ ] Test manuale: generazione PDF/CSV funziona ### Frontend (@frontend-dev) - [ ] 4 Chart components funzionanti e responsive - [ ] Compare page con confronto 2-4 scenari - [ ] Reports page con generazione e download - [ ] Dark mode applicato a tutta l'app - [ ] Tutte le pagine responsive (mobile, tablet, desktop) ### QA (@qa-engineer) - [ ] 94+ test cases passanti - [ ] Test suite stabile (no flaky tests) - [ ] CI/CD pipeline funzionante - [ ] Documentazione testing completa --- ## 📋 DIPENDENZE CRITICHE ``` BE-RPT-001 → BE-RPT-002 → BE-RPT-003 ↓ ↓ ↓ FE-RPT-001 → FE-RPT-002 → FE-RPT-003 FE-VIZ-001 → Tutti i charts FE-CMP-001 → FE-CMP-002 → FE-CMP-003 FE-THM-001 → FE-THM-002 → FE-THM-003 ``` **Note:** Frontend può iniziare FE-VIZ e FE-THM in parallelo al backend. --- ## ✅ DEFINITION OF DONE Per ogni task: - [ ] Codice scritto seguendo pattern esistenti - [ ] TypeScript: nessun errore di tipo (`npm run build` passa) - [ ] Backend: API testate con curl/Postman - [ ] Frontend: Componenti visualizzabili e funzionanti - [ ] Responsive design verificato - [ ] Error handling implementato - [ ] Code commentato dove necessario Per la release v0.4.0: - [ ] Tutti i task P1 completati - [ ] Test E2E passanti su Chromium - [ ] Documentazione aggiornata (README, API docs) - [ ] CHANGELOG.md aggiornato - [ ] Commit e push effettuati - [ ] Tag v0.4.0 creato (opzionale) --- ## 🆘 SUPPORTO **Se bloccati:** 1. Consultare `prompt/prompt-v0.4.0-planning.md` per dettagli 2. Verificare `export/kanban-v0.4.0.md` per dipendenze 3. Chiedere a @spec-architect per decisioni architetturali 4. Consultare codice v0.3.0 per pattern esistenti **Risorse utili:** - ReportLab docs: https://docs.reportlab.com/ - Recharts docs: https://recharts.org/ - Playwright docs: https://playwright.dev/ - shadcn/ui: https://ui.shadcn.com/ --- ## 🎯 COMANDO DI INIZIO Per ogni agente, iniziare con: ```bash # @backend-dev cd /home/google/Sources/LucaSacchiNet/mockupAWS # Iniziare da BE-RPT-001 # @frontend-dev cd /home/google/Sources/LucaSacchiNet/mockupAWS/frontend npm run dev # Iniziare da FE-VIZ-001 e FE-THM-001 in parallelo # @qa-engineer cd /home/google/Sources/LucaSacchiNet/mockupAWS/frontend # Iniziare da QA-E2E-001 (verifica setup esistente) ``` --- **In bocca al lupo team! 🚀** *Prompt kickoff generato il 2026-04-07* *Inizio implementazione v0.4.0*