Backend (@backend-dev): - ReportService with PDF/CSV generation (reportlab, pandas) - Report API endpoints (POST, GET, DELETE, download with rate limiting) - Professional PDF templates with branding and tables - Storage management with auto-cleanup Frontend (@frontend-dev): - Recharts integration: CostBreakdown, TimeSeries, ComparisonBar - Scenario comparison: multi-select, compare page with side-by-side layout - Reports UI: generation form, list with status badges, download - Dark/Light mode: ThemeProvider, toggle, CSS variables - Responsive design for all components QA (@qa-engineer): - E2E testing setup with Playwright - 100 test cases across 7 spec files - Visual regression baselines - CI/CD workflow configuration - ES modules fixes Documentation: - Add todo.md with testing checklist and future roadmap - Update kickoff prompt for v0.4.0 27 tasks completed, 100% v0.4.0 delivery Closes: v0.4.0 milestone
16 KiB
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.mdcon 27 task dettagliati - Kanban:
export/kanban-v0.4.0.mdcon priorità e dipendenze - Architecture: Pattern definiti, librerie scelte, API specs
🚀 OBIETTIVO: Implementare v0.4.0
Goals
- Report Generation System - PDF/CSV professionali con download
- Data Visualization - Grafici interattivi (Pie, Area, Bar) con Recharts
- Scenario Comparison - Confronto multi-scenario side-by-side
- Dark/Light Mode - Toggle tema completo per tutta l'app
- 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
reportlabper 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
- Usare
- Metodo
generate_csv(scenario_id: UUID) -> Report- Usare
pandasper CSV - Tutti i campi dei logs inclusi
- Usare
- 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 Acceptedcon{report_id: uuid, status: "pending"} - Implementare come background task async
- Request body:
- Endpoint
GET /api/v1/reports/{id}/status- Response:
{report_id, status: "pending"|"processing"|"completed"|"failed", progress: number, message: string}
- Response:
- 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)
- File streaming con
- 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<Scenario>,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-900text-gray-900→text-gray-900 dark:text-whiteborder-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/testinstallato - Verificare
playwright.config.tsconfigurato:- Test directory:
e2e/ - Base URL:
http://localhost:5173 - Browsers: Chromium (priority), Firefox, WebKit
- Screenshots on failure: true
- Video: on-first-retry
- Test directory:
- Scripts NPM funzionanti:
npm run test:e2enpm run test:e2e:uinpm 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 testtest-logs.ts- Dati logs di testtest-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.pycon metodi PDF/CSVsrc/api/v1/reports.pycon 5 endpointssrc/schemas/report.pycon Pydantic modelssrc/repositories/report.pycon 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 buildpassa) - 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:
- Consultare
prompt/prompt-v0.4.0-planning.mdper dettagli - Verificare
export/kanban-v0.4.0.mdper dipendenze - Chiedere a @spec-architect per decisioni architetturali
- 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:
# @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