Skip to content

Commit 743168e

Browse files
committed
add web gui prd
1 parent 64549b2 commit 743168e

1 file changed

Lines changed: 158 additions & 0 deletions

File tree

web-gui/PRD.md

Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
# CKAN Open Data Explorer
2+
3+
**Versione**: 1.0
4+
**Data**: 25 luglio 2024
5+
6+
---
7+
8+
## 1. Introduzione
9+
10+
"CKAN Open Data Explorer" è un'applicazione web frontend progettata per facilitare l'interazione con portali Open Data basati su CKAN, sfruttando un'interfaccia di chat in linguaggio naturale potenziata dall'API Gemini. L'obiettivo principale è rendere l'esplorazione dei dataset e delle risorse Open Data più accessibile e intuitiva per gli utenti, eliminando la necessità di navigare direttamente le interfacce complesse dei portali CKAN o di formulare query API specifiche.
11+
12+
---
13+
14+
## 2. Obiettivi del Prodotto
15+
16+
- **Semplificare l'accesso ai dati**: Permettere agli utenti di trovare e comprendere i dataset Open Data utilizzando domande e comandi in linguaggio naturale
17+
- **Migliorare l'esperienza utente**: Fornire un'interfaccia conversazionale fluida e reattiva che guida l'utente attraverso il processo di ricerca dati
18+
- **Abilitare l'interazione tool-driven**: Utilizzare il modello Gemini per orchestrare chiamate a un server MCP (Microservice Controller Proxy) che a sua volta interagisce con i portali CKAN
19+
- **Gestire errori comuni**: Fornire feedback chiari e gestibili per errori di connessione al server MCP o problemi di quota dell'API Gemini
20+
- **Configurabilità**: Consentire agli utenti di configurare l'endpoint del server MCP per adattarsi a diversi ambienti o istanze
21+
22+
---
23+
24+
## 3. Utenti Target / Personas
25+
26+
- **Ricercatori e Analisti Dati (Principianti)**: Cercano dati specifici ma non hanno familiarità con le API CKAN o la navigazione approfondita dei portali
27+
- **Giornalisti o Cittadini Curiosi**: Vogliono esplorare i dati pubblici per storie o interessi personali senza barriere tecniche
28+
- **Sviluppatori (per testing)**: Potrebbero usarlo per testare il funzionamento del server MCP o per esplorare la capacità di Gemini di interpretare le richieste utente e tradurle in chiamate a tool
29+
30+
---
31+
32+
## 4. Funzionalità
33+
34+
### 4.1 Interfaccia di Chat in Linguaggio Naturale
35+
36+
**Input Messaggi**:
37+
- Campo di testo per l'utente per digitare domande e comandi
38+
- Supporta l'invio tramite tasto Invio o un pulsante dedicato
39+
40+
**Display Messaggi**:
41+
- Messaggi dell'utente visualizzati con sfondo grigio chiaro e testo nero
42+
- Messaggi dell'assistente visualizzati con sfondo bianco
43+
- Supporto per il rendering Markdown (tramite react-markdown e remark-gfm)
44+
- Icone chiare (User, Bot) per distinguere il mittente
45+
46+
**Comportamenti**:
47+
- Scroll automatico verso il basso per mostrare l'ultimo messaggio
48+
- Messaggio di benvenuto iniziale per guidare l'utente
49+
- Suggerimenti di query iniziali per aiutare gli utenti a iniziare
50+
51+
### 4.2 Integrazione con Gemini API per NLU e Tool Calling
52+
53+
- **Orchestrazione Gemini**: L'API Gemini (gemini-3-pro-preview) viene utilizzata per comprendere le intenzioni dell'utente e decidere quali tool dell'MCP chiamare
54+
- **System Instruction**: Istruzione di sistema personalizzata che guida Gemini a comportarsi come "esperto assistente Open Data specializzato in portali CKAN" con regole rigide per l'utilizzo dei tool e la gestione degli errori CKAN
55+
- **Tool Calling**: Gemini identifica e formatta le chiamate ai tool (search_datasets, get_dataset) basandosi sul inputSchema fornito dal server MCP
56+
- **Ciclo di Tool Execution**: L'applicazione gestisce un ciclo di esecuzione dei tool, inviando le risposte dei tool a Gemini per ulteriori elaborazioni e generazioni di risposte in linguaggio naturale
57+
- **Visualizzazione Tool in Uso**: Durante l'esecuzione di un tool, viene visualizzato un messaggio "Utilizzo tool: [nome_tool]" con icona di caricamento e parametri JSON della chiamata tool (con break-all per adattamento a tutti i dispositivi)
58+
59+
### 4.3 Integrazione con MCP (Microservice Controller Proxy)
60+
61+
- **Endpoint Configurable**: L'URL del server MCP è configurabile tramite interfaccia utente dedicata (sezione "Impostazioni")
62+
- **Salute del Server**: Indicatore di stato che mostra se il server MCP è online, offline o in fase di verifica (CheckCircle2, XCircle, RefreshCw)
63+
- **Fallback Tool Definitions**: Se il server MCP non è raggiungibile, l'applicazione usa definizioni di tool di fallback per mantenere funzionalità minima
64+
- **Chiamate JSON-RPC**: Il servizio mcp.ts gestisce le chiamate JSON-RPC per listare i tool (tools/list) e chiamare i tool specifici (tools/call)
65+
- **Gestione CORS**: Include logica di fallback utilizzando proxy corsproxy.io se la richiesta diretta fallisce
66+
- **Output Tool**: L'output JSON dei tool viene parsato e visualizzato nella chat, con rendering specifico per DatasetCard
67+
68+
### 4.4 Visualizzazione Dati (DatasetCard)
69+
70+
- **Card Dettagli Dataset**: Quando Gemini restituisce risultati di dataset, questi vengono visualizzati come DatasetCard con informazioni chiave: titolo, descrizione, data di creazione, autore, licenza, tag e elenco di risorse (con link esterni)
71+
- **Formattazione**: Date formattate in modo leggibile, link alle risorse chiaramente distinguibili
72+
- **Troncamento**: Viene mostrato un numero limitato di risorse con messaggio "Mostrati i primi X risultati" se ce ne sono di più
73+
74+
### 4.5 Gestione Errori e Feedback Utente
75+
76+
**Errori Gemini API**:
77+
- Gestione specifica degli errori di quota (RESOURCE_EXHAUSTED, codice 429)
78+
- Banner di avviso (AlertTriangle) in caso di quota esaurita
79+
- Istruzione per selezionare chiave API da progetto a pagamento con link alla documentazione di fatturazione
80+
- Pulsante per aprire il selettore di chiavi API (se window.aistudio.openSelectKey disponibile)
81+
82+
**Errori MCP**:
83+
- Messaggi di errore chiari se il server MCP non è raggiungibile o se una chiamata tool fallisce (es. Status 404)
84+
- Incoraggiamento a controllare l'URL dell'MCP nelle impostazioni
85+
86+
**Stati di Caricamento**:
87+
- Indicatore "Gemini sta elaborando..." al centro dello schermo quando l'API Gemini è attiva ma non sta chiamando un tool
88+
- Indicatore "Utilizzo tool: [nome_tool]" quando un tool MCP è in esecuzione
89+
- Pulsante di invio disabilitato durante il caricamento, se l'input è vuoto, o se l'MCP è offline
90+
91+
### 4.6 Configurabilità
92+
93+
- **Sezione Impostazioni**: Icona Settings apre un pannello dove l'utente può visualizzare e modificare l'endpoint del server MCP e la propria API key di Gemini
94+
- **Salvataggio Endpoint**: Pulsante Applica salva il nuovo endpoint e verifica immediatamente la connettività MCP
95+
- **Gestione API Key**: L'utente inserisce la propria API key di Gemini tramite interfaccia dedicata (campo di input protetto). La chiave viene salvata nel browser storage (localStorage) e rimane disponibile per le sessioni successive
96+
97+
---
98+
99+
## 5. Requisiti Tecnici
100+
101+
### Frontend
102+
103+
- **Framework**: React 19 (tramite react/)
104+
- **Linguaggio**: TypeScript
105+
- **Styling**: Tailwind CSS (con plugin typography) per design moderno e responsivo
106+
- **Icone**: Lucide React (lucide-react) per interfaccia visivamente accattivante
107+
- **Rendering Markdown**: react-markdown con remark-gfm per rendering robusto del testo generato da Gemini
108+
- **Gestione Moduli**: Utilizzo di importmap in index.html per caricamento diretto dei moduli ES6
109+
110+
### Backend (Implicito)
111+
112+
- **Gemini API**: Comunicazione con gemini-3-pro-preview tramite @google/genai SDK
113+
- **MCP Server**: Interazione con un server MCP (es. ckan-mcp-server.andy-pr.workers.dev/mcp) che espone API JSON-RPC
114+
- **API Key Management**: L'API key di Gemini è inserita dall'utente tramite l'interfaccia di impostazioni. La chiave viene salvata in localStorage e recuperata in ogni sessione. Supporta anche process.env.API_KEY come fallback per ambienti di sviluppo. Include meccanismo per interagire con window.aistudio.openSelectKey() per selezione di chiave API a pagamento
115+
- **Error Handling**: Gestione robusta di errori HTTP, errori JSON-RPC e errori specifici dell'API Gemini
116+
117+
---
118+
119+
## 6. Requisiti Non Funzionali
120+
121+
### Performance
122+
123+
- Caricamento rapido dell'interfaccia utente
124+
- Risposte della chat ottimizzate per la velocità, minimizzando la latenza delle chiamate API
125+
- Scroll fluido della chat, anche con molti messaggi
126+
127+
### Usabilità (UX)
128+
129+
- Interfaccia intuitiva e facile da usare per utenti di tutti i livelli tecnici
130+
- Feedback visivo chiaro per stati di caricamento, errori e successo delle operazioni
131+
- Messaggi di errore comprensibili e azioni suggerite
132+
133+
### Reattività
134+
135+
L'applicazione deve essere completamente responsiva e funzionare bene su desktop, tablet e dispositivi mobili
136+
137+
### Accessibilità (A11Y)
138+
139+
- Utilizzo di elementi HTML semantici
140+
- Contrasto colori adeguato
141+
- Navigazione da tastiera e supporto per lettori di schermo (da verificare e migliorare)
142+
143+
### Compatibilità Cross-browser
144+
145+
Funzionalità e aspetto devono essere coerenti sui principali browser moderni (Chrome, Firefox, Safari, Edge)
146+
147+
### Sicurezza
148+
149+
- La chiave API di Gemini è gestita tramite variabili d'ambiente e non esposta nel codice sorgente lato client
150+
- Il CORS proxy è usato come fallback, ma si raccomanda che il server MCP gestisca il CORS direttamente per maggiore sicurezza
151+
152+
### Internazionalizzazione
153+
154+
Attualmente l'interfaccia è interamente in italiano
155+
156+
### Offline Functionality
157+
158+
L'applicazione richiede una connessione internet attiva sia per l'API Gemini che per il server MCP, quindi non supporta la funzionalità offline

0 commit comments

Comments
 (0)