Page 1 of 8
System Requirements Document for chattare-linux
1. Introduction
chattare-linux è un programma di chat di gruppo testuale, ispirato nella forma a Zoom ma deliberatamente privo di qualsiasi funzionalità video. Serve a far conversare fino a 20 persone in una stanza di solo testo, e deve essere scaricabile e utilizzabile su PC Linux.
Il prodotto nasce da un'esigenza semplice e concreta: disporre di una "stanza" di gruppo con la stessa immediatezza di una call Zoom, ma senza camera, senza microfono e senza il peso di una piattaforma di videoconferenza. L'utente installa il programma una volta sul proprio PC Linux e da quel momento apre stanze numerate, invita il gruppo e conversa per iscritto.
Pubblico di riferimento: utenti Linux attenti alla privacy e piccoli team o organizzatori che vogliono una stanza di gruppo ordinata, leggibile e affidabile — uno strumento che si installa una volta e di cui ci si fida, non un prodotto di tendenza.
Intento del prodotto:
- Offrire una chat di gruppo esclusivamente testuale, con capienza massima di 20 persone per sessione.
- Distribuire il programma come pacchetto scaricabile per PC Linux.
- Mantenere una struttura di "stanza" riconoscibile (sessioni, partecipanti, messaggi) senza alcuna funzione video.
Page 2 of 8
2. System Overview
chattare-linux è un'applicazione desktop per Linux composta da un'interfaccia utente proprietaria e da un backend applicativo che mantiene sessioni, appartenenza dei partecipanti e messaggi testuali.
Attori accettati:
- Partecipante alla chat — persona che entra in una sessione, legge i messaggi altrui e invia i propri.
- Organizzatore della sessione — persona che crea e apre la sessione e ne condivide l'accesso con i partecipanti previsti.
Comportamento accettato in sintesi:
- Presentazione pubblica del programma (chat testuale di gruppo, assenza di video, supporto Linux).
- Primo utilizzo autonomo con creazione dell'identità applicativa e verifica al ritorno.
- Creazione e apertura di una sessione con capienza massima di 20 persone e condivisione dell'accesso.
- Ingresso in una sessione esistente da parte del partecipante.
- Conversazione testuale condivisa all'interno della sessione attiva, senza video.
Esclusioni esplicite:
- Nessuna funzionalità video (nessuna camera, nessuna trasmissione video).
- Nessuna capienza superiore a 20 persone per sessione.
Page 3 of 8
2a. Product Interpretation and Delivery Boundary
Consegna e accesso. chattare-linux è un programma scaricabile per PC Linux: l'utente lo installa sulla propria macchina e lo esegue come applicazione desktop. L'identità applicativa è di proprietà dell'applicazione: serve a legare in modo durevole sessioni, appartenenza alle stanze e cronologia dei messaggi alla persona corretta, e a permettere di riprendere sessioni e conversazioni al ritorno. Il primo utilizzo è self-service (creazione autonoma dell'identità); il ritorno richiede una verifica. Le superfici pubbliche di ingresso (presentazione, primo utilizzo, verifica al ritorno) sono raggiungibili senza identità; le superfici di lavoro (sessioni, creazione sessione, ingresso in sessione, chat) richiedono l'identità stabilita.
Confine corrente / futuro. Sono correnti: la chat testuale di gruppo, la capienza di 20 persone, la distribuzione per Linux, la creazione e condivisione delle sessioni, l'ingresso dei partecipanti e la conversazione testuale. Non sono correnti e non fanno parte dell'accettazione: qualsiasi funzionalità video, la condivisione dello schermo, le chiamate audio, e ogni capacità non elencata nella sezione 3.
Proprietà del lavoro. L'interazione umana (presentazione, primo utilizzo, verifica, creazione sessione, ingresso, invio e lettura messaggi) è di proprietà dell'applicazione tramite le proprie superfici. Il mantenimento di sessioni, limite di 20 partecipanti e messaggi testuali è di proprietà del backend applicativo, che non è una superficie umana.
2c. Page Content and Component Coverage
Page 4 of 8
Landing
- Informazione/stato: presentazione anonima del programma — chat di gruppo testuale, assenza di video, supporto Linux; stato di connessione al servizio.
- Azioni primarie: avviare il primo utilizzo (Sign Up); accedere alla verifica al ritorno (Login).
- Azioni di supporto: consultare la tabella tecnica delle specifiche; copiare i comandi di installazione.
- Entità di dominio: programma, vincoli del prodotto (nessun video, 20 posti, Linux), comandi di installazione.
- Responsabilità dei componenti:
- Banda tipografica di apertura a tutta larghezza con titolo di display e regola rossa a tutta larghezza.
- Pannello stanza con registro messaggi di esempio e manifesto partecipanti con conteggio tabulare in grande evidenza.
- Tabella tecnica a tre righe ruled: "Nessun video", "Massimo 20 partecipanti", "Linux: .deb / AppImage / Flatpak", con segni di stato colorati.
- Blocco terminale monospace bordato con i comandi di installazione e affordance di copia.
- Intestazione in stile transito con nome dell'app, voci numerate (01 Panoramica / 02 Sessioni / 03 Scarica) e chip di stato "connesso".
- Stati: loading — scheletro ruled della banda e del pannello; empty — non applicabile (contenuto statico di presentazione); success — contenuto completo con chip di stato verde; error — se lo stato del servizio non è disponibile, il chip passa a segnalazione di avviso e il contenuto di presentazione resta leggibile; recovery — rilettura dello stato del servizio con aggiornamento del chip.
Sign Up
- Informazione/stato: modulo di primo utilizzo per stabilire l'identità applicativa; stato di invio.
- Azioni primarie: creare l'identità applicativa e proseguire verso il lavoro protetto.
- Azioni di supporto: passare alla verifica al ritorno (Login) se l'identità esiste già.
- Entità di dominio: identità applicativa (credenziali di accesso), sessione utente.
- Responsabilità dei componenti:
- Campi ruled per le credenziali di primo utilizzo, con etichette 11px maiuscole.
- Blocco di invio solido rosso tagliato nel bordo destro del campo.
- Collegamento alla verifica al ritorno.
- Stati: loading — blocco di invio disabilitato durante l'invio; empty — campi vuoti con etichette visibili; success — identità stabilita e passaggio al lavoro protetto; error — credenziali non valide o già in uso, messaggio di errore in linea con il campo interessato; recovery — correzione dei campi e nuovo invio senza perdere i dati inseriti.
Page 5 of 8
Login
- Informazione/stato: modulo di verifica al ritorno per riprendere sessioni e conversazioni.
- Azioni primarie: verificare l'identità e riprendere il lavoro protetto.
- Azioni di supporto: passare al primo utilizzo (Sign Up) se l'identità non esiste.
- Entità di dominio: identità applicativa, sessione utente.
- Responsabilità dei componenti:
- Campi ruled per le credenziali di ritorno, con etichette 11px maiuscole.
- Blocco di invio solido rosso tagliato nel bordo destro del campo.
- Collegamento al primo utilizzo.
- Stati: loading — blocco di invio disabilitato durante la verifica; empty — campi vuoti con etichette visibili; success — verifica riuscita e ripresa del lavoro protetto; error — credenziali non riconosciute, messaggio di errore in linea; recovery — nuovo tentativo o passaggio al primo utilizzo.
Sessions
- Informazione/stato: elenco delle sessioni create dall'organizzatore, con numero di linea, nome della stanza, indicatore di stato colorato e conteggio membri tabulare.
- Azioni primarie: aprire una sessione esistente; avviare la creazione di una nuova sessione.
- Azioni di supporto: condividere l'accesso di una sessione esistente.
- Entità di dominio: sessione (numero di linea, nome, stato, conteggio partecipanti su 20).
- Responsabilità dei componenti:
- Rail sinistro persistente (240px) con le stanze come linee numerate ("01 Sala riunioni", "02 Progetto Linux"), punto di stato colorato e conteggio membri tabulare.
- Regola rossa di 2px che si disegna da sinistra sulla stanza attiva.
- Azione di creazione nuova sessione.
- Stati: loading — righe ruled in caricamento; empty — nessuna sessione creata, invito a crearne una; success — elenco con conteggi aggiornati; error — elenco non recuperabile, messaggio con azione di nuovo tentativo; recovery — ricaricamento dell'elenco.
Page 6 of 8
New Session
- Informazione/stato: modulo di creazione sessione con capienza massima di 20 persone; stato di creazione.
- Azioni primarie: creare e aprire la sessione.
- Azioni di supporto: condividere l'accesso alla sessione creata.
- Entità di dominio: sessione (nome, capienza massima 20, accesso condivisibile).
- Responsabilità dei componenti:
- Campo ruled per il nome della sessione, etichetta 11px maiuscola.
- Indicazione esplicita della capienza massima di 20 persone.
- Blocco di invio solido rosso tagliato nel bordo destro del campo.
- Blocco di condivisione dell'accesso dopo la creazione.
- Stati: loading — blocco di invio disabilitato durante la creazione; empty — campo vuoto con etichetta visibile; success — sessione creata e aperta, accesso condivisibile; error — creazione non riuscita, messaggio in linea; recovery — correzione e nuovo invio senza perdere i dati inseriti.
Join Session
- Informazione/stato: selezione o indicazione di una sessione esistente e stato di ingresso.
- Azioni primarie: unirsi alla conversazione della sessione scelta.
- Azioni di supporto: tornare all'elenco delle sessioni.
- Entità di dominio: sessione (identificativo/numero di linea, nome, conteggio partecipanti su 20).
- Responsabilità dei componenti:
- Campo ruled per indicare la sessione, etichetta 11px maiuscola.
- Elenco ruled delle sessioni disponibili con conteggio tabulare.
- Blocco di ingresso solido rosso tagliato nel bordo destro del campo.
- Stati: loading — blocco di ingresso disabilitato durante l'ingresso; empty — nessuna sessione disponibile o campo vuoto; success — ingresso riuscito e passaggio alla chat; error — sessione inesistente o sessione piena (20/20), con chip di capienza in giallo transito e timbro ruled "SESSIONE PIENA"; recovery — scelta di un'altra sessione o nuovo tentativo.
Page 7 of 8
Chat
- Informazione/stato: workspace condiviso della sessione attiva — registro messaggi testuali, manifesto partecipanti con conteggio su 20, stato di connessione.
- Azioni primarie: inviare un messaggio di testo; leggere i messaggi degli altri partecipanti.
- Azioni di supporto: consultare il manifesto partecipanti; tornare all'elenco delle sessioni.
- Entità di dominio: sessione attiva, messaggio testuale (autore, testo, orario), partecipante, conteggio partecipanti su 20.
- Responsabilità dei componenti:
- Rail sinistro persistente (240px) con le stanze come linee numerate, punto di stato colorato e conteggio membri tabulare; regola rossa di 2px che si disegna da sinistra sulla stanza attiva.
- Colonna chat come registro ruled: nessun avatar, nome autore in 11px maiuscole sopra il messaggio in 15px, separatore hairline, orario allineato a destra in numeri tabulari.
- Composer come campo bordato con blocco di invio solido rosso tagliato nel bordo destro.
- Rail destro (200px) con il manifesto partecipanti come lista allineata etichetta/valore e conteggio "17/20" in numeri tabulari di grande dimensione.
- Chip di stato connessione che cambia colore con un taglio netto.
- Stati: loading — registro e manifesto in caricamento; empty — nessun messaggio ancora inviato, invito a scrivere il primo; success — messaggio inviato e visibile nel registro, conteggio partecipanti aggiornato; error — invio non riuscito, messaggio conservato nel composer con segnalazione; recovery — nuovo invio del messaggio conservato; alla ventesima presenza il conteggio diventa "20/20" in giallo transito con timbro ruled "SESSIONE PIENA".
Page 8 of 8
3. Functional Requirements
FR-1 — Presentazione pubblica del programma
As a visitatore anonimo I should vedere una presentazione del programma che dichiara la chat di gruppo testuale, l'assenza di video e il supporto Linux so that possa decidere se scaricarlo e usarlo.
- Provenienza: required_inference (necessaria per rendere eseguibile il percorso accettato di primo utilizzo).
- Attore: visitatore anonimo (Partecipante alla chat / Organizzatore della sessione prima dell'accesso).
- Trigger/input: apertura della superficie pubblica di ingresso.
- Risultato osservabile: contenuto di presentazione visibile con i tre vincoli dichiarati (nessun video, massimo 20 partecipanti, Linux) e i comandi di installazione.
- Stato di accesso: nessuna identità richiesta.
- Fallimento/recupero: se lo stato del servizio non è disponibile, il chip di stato segnala l'avviso e il contenuto resta leggibile.
- Continuazione: avvio del primo utilizzo o passaggio alla verifica al ritorno.
FR-2 — Primo utilizzo con identità applicativa
As a Partecipante alla chat o Organizzatore della sessione I should stabilire autonomamente la mia identità applicativa al primo utilizzo so that le mie sessioni e conversazioni restino legate a me e possano essere riprese.
- Provenienza: required_inference.
- Attore: Partecipante alla chat / Organizzatore della sessione.
- Trigger/input: invio delle credenziali di primo utilizzo.
- Risultato osservabile: identità applicativa stabilita e accesso al lavoro protetto.
- Stato di accesso: superficie anonima; l'identità viene creata qui.
- Fallimento/recupero: credenziali non valide o già in uso → errore in linea, correzione e nuovo invio senza perdere i dati inseriti.
- Continuazione: creazione o ingresso in una sessione.
FR-3 — Verifica al ritorno
As a Partecipante alla chat o Organizzatore della sessione I should verificare la mia identità al ritorno so that possa riprendere sessioni e conversazioni.
- Provenienza: required_inference.
- Attore: Partecipante alla chat / Organizzatore della sessione.
- Trigger/input: invio delle credenziali di ritorno.
- Risultato osservabile: verifica riuscita e ripresa del lavoro protetto.
- Stato di accesso: superficie anonima; l'identità viene verificata qui.
- Fallimento/recupero: credenziali non riconosciute → errore in linea, nuovo tentativo o passaggio al primo utilizzo.
- Continuazione: elenco delle sessioni o ingresso in una sessione.
FR-4 — Creazione e apertura di una sessione
As a Organizzatore della sessione I should creare e aprire una sessione di chat con capienza massima di 20 persone so that il gruppo abbia una stanza in cui conversare senza video.
- Provenienza: explicit (chat di gruppo; capienza 20) + required_inference (meccanica di creazione).
- Attore: Organizzatore della sessione.
- Trigger/input: nome della sessione e conferma di creazione.
- Risultato osservabile: sessione creata e aperta, con capienza massima di 20 persone.
- Stato di accesso: identità richiesta.
- Fallimento/recupero: creazione non riuscita → messaggio in linea, correzione e nuovo invio senza perdere i dati inseriti.
- Continuazione: condivisione dell'accesso con i partecipanti previsti.
FR-5 — Condivisione dell'accesso alla sessione
As a Organizzatore della sessione I should condividere l'accesso alla sessione creata con i partecipanti previsti so that possano unirsi alla conversazione.
- Provenienza: required_inference.
- Attore: Organizzatore della sessione.
- Trigger/input: azione di condivisione dell'accesso sulla sessione creata.
- Risultato osservabile: accesso alla sessione disponibile per i partecipanti previsti.
- Stato di accesso: identità richiesta.
- Fallimento/recupero: condivisione non disponibile → l'organizzatore può riaprire la sessione dall'elenco e ritentare.
- Continuazione: il partecipante entra nella sessione.
FR-6 — Panoramica delle sessioni create
As a Organizzatore della sessione I should vedere l'elenco delle sessioni che ho creato con stato e conteggio partecipanti so that possa riaprirne una o crearne una nuova.
- Provenienza: required_inference.
- Attore: Organizzatore della sessione.
- Trigger/input: apertura dell'elenco delle sessioni.
- Risultato osservabile: elenco con numero di linea, nome, punto di stato colorato e conteggio membri tabulare su 20.
- Stato di accesso: identità richiesta.
- Fallimento/recupero: elenco non recuperabile → messaggio con azione di nuovo tentativo.
- Continuazione: apertura di una sessione esistente o creazione di una nuova.
FR-7 — Ingresso in una sessione esistente
As a Partecipante alla chat I should selezionare o indicare una sessione esistente e unirmi alla conversazione so that possa partecipare alla chat di gruppo.
- Provenienza: required_inference.
- Attore: Partecipante alla chat.
- Trigger/input: selezione o indicazione della sessione e conferma di ingresso.
- Risultato osservabile: ingresso riuscito nella sessione e passaggio alla chat.
- Stato di accesso: identità richiesta.
- Fallimento/recupero: sessione inesistente o sessione piena (20/20) → chip di capienza in giallo transito con timbro ruled "SESSIONE PIENA"; scelta di un'altra sessione o nuovo tentativo.
- Continuazione: lettura e invio di messaggi nella sessione attiva.
FR-8 — Invio di messaggi testuali
As a Partecipante alla chat o Organizzatore della sessione I should inviare messaggi di testo nella sessione attiva so that possa conversare con il gruppo.
- Provenienza: explicit (chat testuale, nessun video).
- Attore: Partecipante alla chat / Organizzatore della sessione.
- Trigger/input: testo inserito nel composer e invio.
- Risultato osservabile: messaggio visibile nel registro condiviso con autore, testo e orario.
- Stato di accesso: identità richiesta.
- Fallimento/recupero: invio non riuscito → messaggio conservato nel composer con segnalazione; nuovo invio.
- Continuazione: prosecuzione della conversazione.
FR-9 — Lettura dei messaggi degli altri partecipanti
As a Partecipante alla chat o Organizzatore della sessione I should vedere i messaggi degli altri partecipanti nel registro della sessione so that possa seguire la conversazione di gruppo.
- Provenienza: explicit (chat di gruppo).
- Attore: Partecipante alla chat / Organizzatore della sessione.
- Trigger/input: apertura della sessione attiva o arrivo di nuovi messaggi.
- Risultato osservabile: registro ruled con nome autore in 11px maiuscole, testo in 15px, separatore hairline e orario tabulare allineato a destra.
- Stato di accesso: identità richiesta.
- Fallimento/recupero: registro non aggiornato → indicazione dello stato di connessione e aggiornamento al ripristino.
- Continuazione: risposta con un nuovo messaggio.
FR-10 — Manifesto partecipanti e capienza della sessione
As a Partecipante alla chat o Organizzatore della sessione I should vedere il manifesto dei partecipanti con il conteggio su 20 so that sappia quante persone sono nella stanza e se è piena.
- Provenienza: explicit (capienza massima 20) + required_inference (manifesto e conteggio).
- Attore: Partecipante alla chat / Organizzatore della sessione.
- Trigger/input: apertura della sessione attiva o ingresso/uscita di un partecipante.
- Risultato osservabile: conteggio tabulare aggiornato (es. "17/20"); alla ventesima presenza "20/20" in giallo transito con timbro ruled "SESSIONE PIENA".
- Stato di accesso: identità richiesta.
- Fallimento/recupero: conteggio non aggiornato → indicazione dello stato di connessione e riallineamento al ripristino.
- Continuazione: prosecuzione della conversazione o scelta di un'altra sessione se piena.
FR-11 — Stato di connessione della sessione
As a Partecipante alla chat o Organizzatore della sessione I should vedere lo stato di connessione della sessione attiva so that sappia se sono collegato alla stanza.
- Provenienza: required_inference.
- Attore: Partecipante alla chat / Organizzatore della sessione.
- Trigger/input: variazione dello stato di connessione.
- Risultato osservabile: chip di stato che cambia colore con un taglio netto (verde transito per connesso).
- Stato di accesso: identità richiesta.
- Fallimento/recupero: connessione persa → chip in stato di avviso; al ripristino il chip torna verde e il registro si riallinea.
- Continuazione: prosecuzione della conversazione.
FR-12 — Distribuzione come programma scaricabile per PC Linux
As a utente Linux I should scaricare e installare il programma sul mio PC Linux so that possa usarlo come applicazione desktop.
- Provenienza: explicit.
- Attore: utente Linux (Partecipante alla chat / Organizzatore della sessione).
- Trigger/input: comandi di installazione mostrati sulla superficie pubblica (
.deb, AppImage, Flatpak).
- Risultato osservabile: programma installato ed eseguibile su PC Linux.
- Stato di accesso: nessuna identità richiesta per scaricare e installare.
- Fallimento/recupero: comando non applicabile alla propria distribuzione → scelta di un formato alternativo tra quelli indicati.
- Continuazione: primo utilizzo del programma.
FR-13 — Mantenimento di sessioni, limite di 20 partecipanti e messaggi testuali
As a sistema I should mantenere sessioni, appartenenza dei partecipanti entro il limite di 20 e messaggi testuali so that la conversazione di gruppo resti coerente e durevole.
- Provenienza: required_inference.
- Attore: sistema (backend applicativo).
- Trigger/input: creazione di sessioni, ingressi/uscite di partecipanti, invio di messaggi.
- **Risult
No comments yet. Be the first!