Source: https://aiprimetech.io/it/blog/ui-open-source-ai/ Giu 14, 2026 · 8 min · Open source # Ui: un approfondimento per sviluppatori sul progetto IA del momento (2026) A Di [AI Prime Tech](https://aiprimetech.io/it/) · Con l'assistenza dell'AI ## Ui: un approfondimento per sviluppatori sul progetto IA del momento (2026) Alle 2:17 del mattino, il modello funzionava bene. Il prodotto no. Avevamo un assistente con generazione aumentata dal recupero che restituiva risposte fondate sulle fonti in circa 1.8 secondi al p95, trasmetteva i token in streaming senza problemi e otteneva discreti punteggi di valutazione. Ma l'interfaccia che lo circondava rallentava il team: i fumetti della chat erano incoerenti, le citazioni erano difficili da consultare rapidamente, gli stati di caricamento si spostavano continuamente, il pannello laterale delle impostazioni comprometteva la navigazione da tastiera e ogni “rapida correzione della UI” si trasformava in un'altra discussione sul sistema di design. Questo è il problema ingegneristico che shadcn-ui/ui risolve bene: non “rendere l'AI più intelligente”, ma rendere l'interfaccia del prodotto che circonda i sistemi AI più facile da costruire, gestire e modificare. Il repository GitHub shadcn-ui/ui è diventato uno dei progetti UI open source più importanti per i team che costruiscono applicazioni web moderne, inclusi i prodotti AI. Si descrive come “un insieme di componenti dal design curato e accessibili e una piattaforma di distribuzione del codice”, con supporto per i framework preferiti e argomenti relativi a base-ui, components, laravel, nextjs, radix-uie react. L'idea centrale è apparentemente semplice: invece di installare una libreria di componenti chiusa come dipendenza e lottare con le sue astrazioni, copi il codice sorgente dei componenti nel tuo progetto. Ne hai il controllo. Puoi modificarlo. Puoi eliminare ciò che non ti serve. Questo modello è molto importante per le applicazioni AI, dove la UI non è solo decorazione. È il piano di controllo per prompt, strumenti, tracce, caricamenti, citazioni, approvazioni, output in streaming, ripristino dopo gli errori e feedback umano. ## Il problema ingegneristico: le applicazioni AI hanno bisogno rapidamente di una UI pronta per un prodotto La maggior parte dei team che sviluppano applicazioni AI sottovaluta l'ampiezza dell'interfaccia. Una “semplice app di chat” di solito diventa: - Una sequenza cronologica di messaggi in streaming - Controlli per prompt e istruzioni di sistema - Selezione del modello tra GPT, Claude, Gemini, Llama, Qwen, DeepSeek, Kimi o endpoint interni - Stato di caricamento e analisi dei file - Visualizzazione delle fonti del recupero - Ispezione delle chiamate agli strumenti - Pannelli di valutazione e debug - Stati di autenticazione e fatturazione - Flussi di approvazione umana - Gestione degli errori per limiti di frequenza, timeout, superamento della capacità del contesto e filtri di sicurezza Il backend può essere più difficile sul piano intellettuale, ma il frontend assorbe la complessità disordinata che gli utenti percepiscono davvero. Le librerie di componenti tradizionali aiutano, ma spesso introducono un costo diverso: - Dipendi da astrazioni a livello di pacchetto che non puoi modificare facilmente. - Le personalizzazioni degli stili diventano fragili. - L'accessibilità è gestita solo in parte, a meno che tu non comprenda le primitive. - Distribuisci più codice del necessario. - La tua app inizia ad assomigliare a tutte le altre che usano la stessa libreria. shadcn-ui/ui adotta un approccio diverso: i componenti non sono un prodotto da usare a runtime, ma codice sorgente che integri nel tuo progetto. In pratica, questo cambia il modello di manutenzione. Se la spaziatura dei pulsanti è sbagliata nel tuo flusso di revisione AI, modifichi components/ui/button.tsx. Se il menu dei comandi ha bisogno di indicatori della latenza dei modelli, lo modifichi direttamente. Se la scheda delle citazioni deve mostrare i punteggi di recupero o i segmenti dei documenti, hai il controllo del markup. Sembra una cosa ordinaria, finché non devi rilasciare un'interfaccia AI personalizzata ogni settimana. ## Cosa shadcn-ui/ui Che cos'è realmente Il modo migliore per comprendere il progetto è considerarlo come due elementi correlati: - Una raccolta di componenti - Una piattaforma di distribuzione del codice La raccolta di componenti offre elementi UI riutilizzabili: pulsanti, finestre di dialogo, schede, campi di input, tabelle, menu, pannelli, moduli, palette dei comandi e primitive simili presenti nelle moderne applicazioni web. È il modello di distribuzione a renderla insolita. Invece di fare questo: ``` npm install some-ui-library ``` e importare componenti opachi da node_modules, un tipico shadcn/ui flusso di lavoro aggiunge i file sorgente dei componenti alla tua applicazione: ``` npx shadcn@latest init npx shadcn@latest add button card dialog input textarea ``` Poi li importi dal tuo progetto locale: ``` import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle, } from "@/components/ui/card" ``` La differenza è architetturale, non estetica. Il componente diventa parte della tua base di codice. Puoi esaminarlo, rifattorizzarlo, adattarlo ai tuoi token di design o integrarlo nelle convenzioni del tuo framework. L'ecosistema del progetto si intreccia spesso con React, Next.js, Radix UI, classi di utilità in stile Tailwind CSS e integrazioni con i framework. Gli argomenti del repository includono anche Laravel, a testimonianza di un'ambizione più ampia: non si tratta soltanto di una raccolta di componenti React, ma di un approccio alla distribuzione del codice per UI riutilizzabili in diversi stack applicativi. ## Architettura: componenti con sorgenti sotto il tuo controllo anziché astrazioni a runtime Il modo più chiaro per spiegare l'architettura è confrontare i confini di responsabilità. | Approccio | Dove risiedono i componenti | Modello di personalizzazione | Modello di aggiornamento | Ideale per | Pacchetto UI tradizionale | node_modules | Prop, temi, override | Aggiornamento del pacchetto | Applicazioni standardizzate con personalizzazione limitata | Primitive headless | node_modules più il markup dell'applicazione | Componi tu il comportamento | Aggiornamento del pacchetto | Team con solide competenze frontend | shadcn/ui stile | Il tuo albero dei sorgenti | Modifica direttamente il codice dei componenti | Aggiungi di nuovo, confronta le differenze o aggiorna manualmente | Team di prodotto che cercano velocità e controllo | Sistema di design completamente personalizzato | Il tuo albero dei sorgenti o i tuoi pacchetti | Pieno controllo | Processo interno | Grandi organizzazioni con team dedicati al sistema di design shadcn-ui/ui si colloca tra una libreria di componenti e un kit di partenza per un sistema di design. Ti offre componenti funzionanti, senza presumere che debbano rimanere intatti. Uno stack comune si presenta così: ``` app/ chat/ page.tsx components/ ai/ model-picker.tsx message-list.tsx citation-card.tsx tool-call-panel.tsx ui/ button.tsx card.tsx dialog.tsx input.tsx sheet.tsx textarea.tsx lib/ ai/ stream.ts models.ts retrieval.ts ``` Il confine importante è components/ui. Si tratta di primitive generiche. Le tue interfacce specifiche per l'AI si collocano al di sopra di esse, in components/ai. Una buona regola pratica: - components/ui: generico, riutilizzabile, ordinario - components/ai: schemi di interazione con l'AI specifici del prodotto - lib/ai: instradamento dei modelli, streaming, recupero delle informazioni, esecuzione degli strumenti - app/: instradamento del framework, azioni server, composizione delle pagine Questo evita che le primitive UI diventino un contenitore indiscriminato per comportamenti specifici dei modelli. ## Un flusso di lavoro realistico: creare una console di revisione AI Supponiamo che tu stia creando una console interna di revisione AI per i ticket di assistenza. Il backend recupera informazioni dai ticket precedenti e prepara bozze di risposta usando un modello come GPT-5.5, Claude Sonnet 4.6, Gemini 3 o un endpoint di un modello aperto. Il frontend deve mostrare: - Il ticket del cliente - La bozza generata - Le evidenze recuperate - Un indicatore del livello di confidenza - Un'azione di approvazione umana - Un selettore del modello per il debug Inizia aggiungendo i componenti UI di base: ``` npx shadcn@latest init npx shadcn@latest add button card badge textarea select separator skeleton ``` Poi definisci esplicitamente la configurazione del modello. Non nasconderla nelle etichette dell'interfaccia. ``` // lib/ai/models.ts export type ModelId = | "gpt-5.5" | "claude-sonnet-4.6" | "gemini-3" | "qwen" | "deepseek" export const models: Array<{ id: ModelId label: string contextHint: string }> = [ { id: "gpt-5.5", label: "GPT-5.5", contextHint: "General reasoning and agentic workflows", }, { id: "claude-sonnet-4.6", label: "Claude Sonnet 4.6", contextHint: "Long-form drafting and coding workflows", }, { id: "gemini-3", label: "Gemini 3", contextHint: "Multimodal and general assistant tasks", }, { id: "qwen", label: "Qwen", contextHint: "Open-model route", }, { id: "deepseek", label: "DeepSeek", contextHint: "Open-model route", }, ] ``` Ora componi il pannello di revisione usando componenti UI locali: ``` import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle, } from "@/components/ui/card" import { Textarea } from "@/components/ui/textarea" type Evidence = { title: string snippet: string score?: number } export function TicketReviewCard({ ticket, draft, evidence, isStreaming, }: { ticket: string draft: string evidence: Evidence[] isStreaming: boolean }) { return ( AI Draft Review
Customer ticket

{ticket}

{isStreaming ? "Generating" : "Draft ready"}