Il progetto ha come obiettivo la realizzazione di una piattaforma che consenta agli utenti di barattare posti letto usando un token, chiamato REST, offrendo 2 tipi di servizi:
- Mettere a disposizione uno o più posti letto in cambio di 1 REST a notte
- Usufruire di tali posti letto pagando 1 REST a notte per posto letto
Chi ospita viene chiamato host, chi viene ospitato guest.
-
RF1.1: Cercare posti letto Il sistema consentirà di cercare posti letto senza necessità di registrarsi o autenticarsi. Inserendo un luogo, una data di inizio ed una di fine e opzionalmente dei filtri verranno elencati i posti letto conformi ai filtri specificati in ordine di vicinanza a quel luogo e disponibili in tali date.
-
RF1.2: Registrazione
La registrazione di un utente verrà effettuata tramite Metamask, dove verranno richiesti i seguenti dati: nome, cognome, e-mail, ed un account Telegram.
-
RF1.3: Verifica Registrazione
Inseriti i dati della registrazione verrà inviata una mail di conferma contenente un codice segreto di 6 cifre numeriche avente validità di 2 ore, trascorse le quali sarà necessario ripetere la procedura di registrazione. Bisognerà verificare tale codice ed aggiungere il proprio account Metamask per i futuri accessi.
-
RF1.4: Autenticazione
Il sistema consentirà agli utenti già registrati di autenticarsi tramite Metamask. Questa operazione sarà facoltativa durante la navigazione nel sistema, ma diventerà obbligatoria alla prenotazione di un posto letto.
-
RF1.5: RESTs
Una volta effettuata la registrazione verranno consegnati 5 RESTs al nuovo account. Questi RESTs verranno utilizzati per pagare un host alla prenotazione di un posto letto e potranno essere guadagnati quando un guest prenoterà un proprio posto letto. Il sistema consentirà agli utenti di visualizzare il bilancio dei propri RESTs.
-
RF1.6: Uscire dal proprio account
Il sistema consentirà agli utenti di uscire dal proprio account e di continuare la navigazione come utenti anonimi.
-
RF1.7: Eliminare il proprio account
Il sistema consentirà agli utenti di cancellare il proprio account.
-
RF1.8: Visualizzare dati profilo
Il sistema consentirà agli utenti di visualizzare i dati del proprio profilo.
-
RF1.9: Modificare dati profilo
Il sistema consentirà agli utenti di modificare i dati del proprio profilo.
-
RF2.1: Cercare posti letto
Il sistema consentirà di cercare posti letto inserendo un luogo, una data di inizio ed una di fine e opzionalmente dei filtri. Il sistema mostrerà posti letto conformi ai filtri specificati in ordine di vicinanza a quel luogo e disponibili in tali date.
-
RF2.2: Visualizzare commenti di altri guest
Il sistema consentirà agli utenti di visualizzare i commenti di altri guest su un determinato posto letto prima di effettuare la prenotazione.
-
RF2.3: Visualizzare la valutazione di altri guest
Il sistema consentirà agli utenti di visualizzare la valutazione di altri guest su un determinato posto letto prima di effettuare la prenotazione.
-
RF2.4: Prenotare un posto letto
Per poter prenotare un posto letto l'utente dovrà necessariamente effettuare l'autenticazione, selezionare il posto letto d'interesse tra quelli offerti dal sistema, specificare le date in cui intende permanere, e successivamente scambiare un REST. Si può prenotare al massimo con un anticipo di 90 giorni.
-
RF2.5: Visualizzare le proprie prenotazioni
Il sistema consentirà di visualizzare le proprie prenotazioni.
-
RF2.6: Comunicare con gli host
Il sistema consentirà ai guest di visualizzare il contatto Telegram degli host e di contattarli in caso di bisogno.
-
RF2.7: Recensire posti letto
Dopo aver usufruito di un posto letto, i guest potranno recensirlo descrivendo la loro esperienza.
-
RF2.8: Valutare posti letto
Dopo aver usufruito di un posto letto, i guest potranno valutarlo con un punteggio da 1 a 5.
-
RF3.1 Aggiungere un posto letto
Gli utenti, una volta autenticati, per inserire un posto letto dovranno fornire: l'indirizzo dell'abitazione, da 1 a 5 foto, il tempo di preavviso per la prenotazione (minimo 1, massimo 30 giorni) e opzionalmente delle informazioni per l'ospite. Inoltre, dovranno specificare la presenza dei seguenti servizi:
- connessione internet
- bagno
- riscaldamento
- condizionatore
- corrente elettrica
- acqua corrente
- presenza biancheria da letto
- presenza cuscini
-
RF3.2: Visualizzare i propri posti letto
Il sistema consentirà agli utenti di visualizzare i posti letto inseriti.
-
RF3.3 Modificare un posto letto
Il sistema consentirà agli utenti di modificare le informazioni riguardanti i posti letto inseriti.
-
RF3.4 Eliminare un posto letto
Il sistema consentirà agli utenti di eliminare i posti letto inseriti.
-
RF3.5 Aggiungere un nuovo intervallo disponibilità
Sarà possibile scegliere tra i posti letto caricati sul proprio account e specificarne l'intervallo disponibilità inserendone la data di inizio e di fine (quest'ultima non potrà superare i 90 successivi alla data di aggiunta): così facendo gli altri utenti potranno prenotare il posto letto nell'intervallo di tempo specificato.
-
RF3.6: Visualizzare i propri intervalli disponibilità
Il sistema consentirà agli utenti di visualizzare gli intervalli disponibilità inseriti.
-
RF3.7 Modificare un intervallo disponibilità
Il sistema consentirà agli utenti di modificare la data di inizio e di fine dell'intervallo disponibilità.
-
RF3.8 Eliminare un intervallo disponibilità
Il sistema consentirà agli utenti di eliminare un intervallo disponibilità.
-
RF3.9: Visualizzare prenotazioni relative ad un intervallo disponibilità
Il sistema consentirà agli host di visualizzare le prenotazioni relative ad un certo intervallo disponibilità. Per ogni prenotazione verrà mostrato anche il codice segreto che il guest dovrà esibire per autenticarsi.
-
RF3.10 Visualizzare i commenti dei guest
Il sistema consentirà agli host di visualizzare i commenti dei guest.
-
RF3.11 Visualizzare le valutazioni dei guest
Il sistema consentirà agli host di visualizzare le valutazioni lasciate dai guest.
-
RNF1: Privacy
Il sito sarà GDPR compliant. Saranno richiesti agli utenti solamente i dati strettamente necessari al servizio di cui vogliono usufruire, in ottemperanza delle vigenti disposizioni di legge in materia di tutela della privacy e trattamento dei dati, garantendo comunque un livello accettabile di affidabilità.
-
RNF2: Memorizzazione
Il sito utilizzerà MongoDB per memorizzare i dati degli utenti, i loro posti letto, contenti foto ed informazioni, e le relative disponibilità.
-
RNF3: Logging & Monitoring
Il sito consentirà di registrarsi ed autenticarsi con Metamask.
-
RNF4: RESTs
Il token REST sarà decentralizzato su blockchain EVM-compatible, non verrà dunque direttamente implementato dalla piattaforma. Dato che quindi sarà indipendente dalla piattaforma stessa, potrà venire riutilizzato da enti terzi. Dunque ogni servizio che riutilizzerà il token REST dovrà obbligatoriamente implementare esclusivamente i 2 servizi elencati negli obiettivi. Ciò garantirà agli utenti di poter utilizzare i REST anche al di fuori della piattaforma.
-
RNF5: Scambio di RESTs
Gli scambi di REST altro non saranno che transazioni sulla blockchain EVM-compatible.
-
RNF6: Assunzione problema speculazioni/inflazioni/deficit o surplus di liquidità del token REST e assunzione problema della distribuzione di liquidità
Assumiamo che saranno ignorati possibili speculazioni/inflazioni/deficit o surplus di liquidità del token REST e il problema della distribuzione di liquidità. Una causa può essere ad esempio che ogni utente crei più account.
-
RNF7: Notifiche
Verranno inviate email di notifica nei seguenti casi:
- Registrazione nuovo account (verifica mail)
- Prenotazione posto letto sia all'host che all'ospite
- Aggiunta di recensione da parte di un ospite
-
RNF8: Sicurezza
Il sito garantirà la massima sicurezza per gli utenti, avvalendosi del protocollo grpc per la trasmissione dei dati attraverso la rete, e di JWT per autenticare le sessioni. Per la generazione dei JWT verrà utilizzata la signature fornita da Metamask.
-
RNF9: Affidabilità
Essendo il token REST decentralizzato, garantirà agli utenti una maggiore affidabilità in quanto ogni transazione di REST sarà pubblicamente verificabile.
-
RNF10: Prevenzione truffe
La data di creazione di ogni account sarà pubblica, consentendo agli utenti di vedere da quanto tempo un account è presente nel sistema.
-
RNF11: Lingua di sistema
Il sito sarà disponibile in lingua italiana ed inglese.
-
RNF12: Prestazioni
Il sito utilizzerà sistemi di caching per migliorare le prestazioni in situazioni di scarsa connessione.
-
RNF13: Compatibilità
Il sito deve essere mobile-first, deve aderire allo standard w3c e deve essere compatibile con i browsers più utilizzati, quali:
- Firefox 91 e successivi
- Chromium 81 e successivi
- Safari 16 e successivi
- Edge 88 e successivi
-
RNF14: Apprendimento del sistema
Gli utenti dovranno essere in grado di utilizzare il sistema con sicurezza dopo 30 minuti di utilizzo.
-
RNF15: Assunzione problema verifica account Telegram
Gli account Telegram degli utenti non verranno verificati in quanto risulterebbe troppo complicato.
-
RNF16: Foto
Gli utenti dovranno caricare da 1 a 5 foto per ogni posto letto, mentre potranno caricare al massimo una foto per il proprio profilo. Tutte le foto saranno dovranno avere una dimensione massima di 512kb e dovranno avere un aspect ratio 1:1
Di seguito sono riportati dei mock-up delle schermate del sito. Sono rappresentate le funzioni principali offerte agli utenti.
Di seguito è presente un modello del Back-end del sito. Esso si interfaccerà direttamente con il database MongoDB, il Node provider della Blockchain EVM e le api per mandare mail, mentre si interfaccerà attraverso il frontend con Telegram e MetaMask.