Skip to content

Latest commit

ย 

History

30 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿฆ  PANDEMIC

Condivisione audio locale offline-first tra dispositivi mobili

Pandemic รจ un'applicazione mobile che permette la condivisione di file audio direttamente tra dispositivi nella stessa area fisica, senza connessione Internet, senza server centrali e senza blockchain.


๐Ÿ“‹ Indice


๐ŸŽฏ Panoramica

Idea Core

Gli utenti fisicamente vicini (stesso locale, evento, festival) possono:

  • Scoprire altri dispositivi nelle vicinanze
  • Sfogliare i metadati audio condivisi
  • Scaricare file audio compressi direttamente device-to-device

Mental Model

Questo sistema si comporta come:

  • ๐Ÿ“€ Un tavolo di scambio digitale
  • ๐Ÿ“ป Una radio da locale
  • ๐Ÿ“„ Volantini digitali che camminano con le persone

NON come:

  • โŒ Un servizio cloud
  • โŒ Una piattaforma streaming
  • โŒ Una rete P2P torrent

๐Ÿ—๏ธ Architettura

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                         PANDEMIC - ARCHITETTURA                             โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    BLE Discovery + GATT     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”              โ”‚
โ”‚   โ”‚   DEVICE A  โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚   DEVICE B  โ”‚              โ”‚
โ”‚   โ”‚   (HOST)    โ”‚  (Room info + Hotspot creds)โ”‚   (GUEST)   โ”‚              โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜                             โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”˜              โ”‚
โ”‚          โ”‚                                           โ”‚                      โ”‚
โ”‚          โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚                      โ”‚
โ”‚          โ”‚  โ”‚         LOCAL WI-FI NETWORK          โ”‚ โ”‚                      โ”‚
โ”‚          โ”‚  โ”‚  (Venue Router / Phone Hotspot ๐Ÿ“ฑ)   โ”‚ โ”‚                      โ”‚
โ”‚          โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚                      โ”‚
โ”‚          โ”‚                    โ”‚                      โ”‚                      โ”‚
โ”‚          โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                      โ”‚
โ”‚                               โ”‚                                             โ”‚
โ”‚                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                                 โ”‚
โ”‚                    โ”‚   WebSocket/HTTP    โ”‚                                 โ”‚
โ”‚                    โ”‚   Data Transfer     โ”‚                                 โ”‚
โ”‚                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                                 โ”‚
โ”‚                                                                             โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                          LAYER ARCHITECTURE                                 โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                                             โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚                        UI LAYER (React Native)                       โ”‚  โ”‚
โ”‚   โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚  โ”‚
โ”‚   โ”‚  โ”‚  Home  โ”‚ โ”‚ Host   โ”‚ โ”‚ LAN    โ”‚ โ”‚  Guest   โ”‚ โ”‚    Library       โ”‚ โ”‚  โ”‚
โ”‚   โ”‚  โ”‚ Screen โ”‚ โ”‚ Mode   โ”‚ โ”‚ Host๐Ÿ“ฑ โ”‚ โ”‚  Mode    โ”‚ โ”‚    + Player      โ”‚ โ”‚  โ”‚
โ”‚   โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                    โ”‚                                        โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚                      SERVICE LAYER                                   โ”‚  โ”‚
โ”‚   โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚  โ”‚
โ”‚   โ”‚  โ”‚   Room    โ”‚  โ”‚   Peer    โ”‚  โ”‚ Transfer  โ”‚  โ”‚   Audio Library   โ”‚ โ”‚  โ”‚
โ”‚   โ”‚  โ”‚   Manager โ”‚  โ”‚  Discoveryโ”‚  โ”‚   Manager โ”‚  โ”‚   + Playback      โ”‚ โ”‚  โ”‚
โ”‚   โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                    โ”‚                                        โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚                     TRANSPORT LAYER                                  โ”‚  โ”‚
โ”‚   โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚  โ”‚
โ”‚   โ”‚  โ”‚   BLE Service     โ”‚  โ”‚   LAN Service    โ”‚ โ”‚ Phone Host Server โ”‚ โ”‚  โ”‚
โ”‚   โ”‚  โ”‚   - Advertising   โ”‚  โ”‚   - mDNS         โ”‚ โ”‚ - WebSocket (8787)โ”‚ โ”‚  โ”‚
โ”‚   โ”‚  โ”‚   - Scanning      โ”‚  โ”‚   - Venue client โ”‚ โ”‚ - File Relay      โ”‚ โ”‚  โ”‚
โ”‚   โ”‚  โ”‚   - GATT Server   โ”‚  โ”‚   - File relay   โ”‚ โ”‚ - GATT credentialsโ”‚ โ”‚  โ”‚
โ”‚   โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                    โ”‚                                        โ”‚
โ”‚   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚
โ”‚   โ”‚                      STORAGE LAYER                                   โ”‚  โ”‚
โ”‚   โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚  โ”‚
โ”‚   โ”‚  โ”‚   AsyncStorage       โ”‚  โ”‚   FileSystem                       โ”‚   โ”‚  โ”‚
โ”‚   โ”‚  โ”‚   - Metadata Index   โ”‚  โ”‚   - Audio Files                    โ”‚   โ”‚  โ”‚
โ”‚   โ”‚  โ”‚   - Room State       โ”‚  โ”‚   - Library folder                 โ”‚   โ”‚  โ”‚
โ”‚   โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚  โ”‚
โ”‚   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚
โ”‚                                                                             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ› ๏ธ Stack Tecnologico

Layer Tecnologia Scopo
Framework React Native + Expo Cross-platform mobile
Linguaggio TypeScript Type safety
Navigazione expo-router File-based routing
State Zustand Gestione stato globale
BLE react-native-ble-plx Bluetooth Low Energy
Network expo-network Stato rete e IP
Audio expo-av Playback audio
Storage expo-file-system File audio locali
Storage AsyncStorage Metadati e impostazioni
Native iOS Network.framework, NetService, CoreBluetooth WS server, Bonjour, BLE
Native Android NsdManager, Java-WebSocket, BLE mDNS, WS server, BLE
Build iOS EAS Build + TestFlight Distribuzione iOS
Build Android Gradle + keystore firmato APK distribuzione

๐Ÿ“ก Modello di Connettivitร 

Decisione Architetturale

Adottiamo un MODELLO DUAL-STACK DI NETWORKING LOCALE:

  1. Bluetooth (BLE) = discovery + coordinazione
  2. Wi-Fi LAN = trasferimento dati
  3. Room host = index + coordinatore, NON storage

Matrice Decisionale

Aspetto BLE Wi-Fi LAN Decisione
Discovery โœ… Eccellente โŒ Richiede rete BLE
Throughput โŒ 50-200 KB/s โœ… 10-100+ Mbps Wi-Fi
Range ~10-30m ~50-100m Comparabile
Battery โœ… Basso โš ๏ธ Moderato BLE per idle
Background iOS โŒ Limitato โš ๏ธ Limitato Foreground
Setup โœ… Zero config โš ๏ธ Richiede rete BLE piรน semplice
File grandi โŒ Impraticabile โœ… Ottimale Wi-Fi
Fallback โœ… Sempre โŒ Dipende BLE come backup

Cosa NON Usiamo

  • โŒ WebRTC (richiede IP networking, non funziona su BLE)
  • โŒ TURN / STUN (server esterni)
  • โŒ Mesh relaying (troppo complesso, consuma batteria)
  • โŒ GPS enforcement (privacy, batteria)

๐Ÿ”„ Protocollo MVP

Flusso Completo

FASE 1: CREAZIONE ROOM (HOST)
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
    HOST                                          
    1. User taps "Create Room"                    
    2. Generate: roomId (UUID), sessionToken, ephemeralHostId
    3. Get local IP address (if Wi-Fi available) 
    4. Start BLE advertising: roomId, roomName, hostAddress
    5. Start HTTP/WebSocket server on port 8080   
    6. Initialize room state: peers: [], sharedFiles: []

FASE 2: DISCOVERY (GUEST)
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
    GUEST                                         
    1. User taps "Join Room"                      
    2. Start BLE scanning                         
    3. Discover nearby rooms (sorted by RSSI)
    4. Display list to user
    5. User selects room                          

FASE 3: JOIN ROOM (HANDSHAKE)
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
    GUEST                              HOST
    1. Connect via BLE GATT โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ 
                                        2. Accept connection
    3. Request join: { peerId, peerName } โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ 
                                        4. Generate session token
                            โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 5. Response: { sessionToken, hostAddress }
    6. Disconnect BLE                   
    7. Connect HTTP/WS to hostAddress โ”€โ–บ
                                        8. Validate token
                                        9. Add to peers list
                            โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 10. Broadcast: PEER_JOINED

FASE 4: METADATA SYNC
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
    GUEST                              HOST
    1. Publish shared files โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ 
                                        2. Aggregate to room index
                            โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ 3. Broadcast: INDEX_UPDATED

FASE 5: FILE TRANSFER (P2P over LAN)
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
    GUEST A (requester)        HOST              GUEST B (owner)
    1. Request file: { fileId, ownerId } โ”€โ”€โ”€โ–บ
                               2. Lookup owner address
                               3. Response: { ownerAddress }
                            โ—„โ”€โ”€ 
    4. Direct HTTP GET โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ 
                                                  5. Stream file
                            โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€   (chunked)
    6. Save to local storage   
    7. Notify HOST: TRANSFER_COMPLETE โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บ

Modalitร  Bluetooth-Only (Fallback)

Per scenari senza Wi-Fi (campeggio, aree remote, disastri):

  • Transport: BLE GATT
  • MTU: ~185โ€“512 bytes
  • Throughput: ~50โ€“200 KB/s (best case)
  • Dimensione file consigliata: โ‰ค 1โ€“3 MB
  • UI avvisa: "Modalitร  Bluetooth โ€” trasferimenti lenti"

๐Ÿš€ Installazione

Prerequisiti

  • Node.js >= 20.x
  • npm o yarn
  • Expo CLI
  • Xcode (per iOS)
  • Android Studio (per Android)

Setup

# Clona il repository
git clone https://github.com/yourusername/pandemic.git
cd pandemic

# Installa dipendenze
npm install

# Avvia in development
npm start

# Avvia su iOS
npm run ios

# Avvia su Android  
npm run android

Build per Device Fisico

Per testare BLE e networking locale, รจ necessario un build nativo:

# Prebuild (genera progetti nativi)
npx expo prebuild

# Build iOS
npx expo run:ios --device

# Build Android
npx expo run:android --device

Build Android Release (APK firmato)

Genera un APK installabile per distribuzione/test:

# Da android/
export PANDemic_RELEASE_STORE_PASSWORD="YOUR_PASSWORD"
export PANDemic_RELEASE_KEY_PASSWORD="YOUR_PASSWORD"

./gradlew assembleRelease

Output: release/Pandemic-android-release.apk

Build iOS (TestFlight)

# Build via EAS (cloud)
eas build --platform ios --profile production

# Submit a TestFlight
eas submit --platform ios --latest

Richiede account Apple Developer (configurato in eas.json).


๐Ÿ“ฑ Utilizzo

Same-Platform P2P (Androidโ†”Android, iOSโ†”iOS)

Come Host:

  1. Apri l'app
  2. Tap "Crea Stanza"
  3. Inserisci un nome per la stanza
  4. Attendi che altri si connettano
  5. Condividi file dalla tua libreria

Come Guest:

  1. Apri l'app
  2. Tap "Trova Stanze"
  3. Cerca in "Stanze Vicine (P2P)"
  4. Seleziona una stanza dalla lista
  5. Sfoglia i file disponibili
  6. Scarica i file che ti interessano

Cross-Platform (Androidโ†”iOS) - Venue Mode ๐ŸŒ

Per condividere file tra Android e iOS serve un Venue Host locale (laptop/Raspberry Pi) sulla stessa rete Wi-Fi.

1. Avvia il Venue Host:

cd venue-host
npm install
npm run dev

2. Monitora la Dashboard: Apri http://localhost:8787 per:

  • Creare/gestire la room (nome, lock, close)
  • Caricare file audio come host (Host Library)
  • Monitorare peers e file in tempo reale
  • Vedere trasferimenti attivi

3. Sui device mobili:

  1. Connettiti alla stessa rete Wi-Fi del Venue Host
  2. Apri l'app โ†’ "Trova Stanze"
  3. Cerca in "Venue Rooms (Wi-Fi Cross-Platform)"
  4. Tocca la room del venue host per entrare
  5. Vedi immediatamente:
    • Tutti i peer connessi
    • File host (se caricati nella dashboard)
    • File condivisi da altri peer
  6. Per condividere: "+ Add" โ†’ Library โ†’ Seleziona file โ†’ "Condividi"
  7. Per scaricare: Tocca il pulsante download โ†’ File salvato in Library automaticamente

Fallback connessione manuale: Se mDNS non funziona (reti con AP isolation, Android vecchi):

  • Tocca "๐Ÿ“ถ Connetti manualmente a Venue Host"
  • Inserisci IP del laptop (es. 192.168.1.5) e porta (8787)

โš ๏ธ Nota: Su Android 10 e precedenti (API 30-), la discovery mDNS puรฒ essere intermittente. Vedi ANDROID_DISCOVERY_ISSUES.md per dettagli e workaround implementati.

๐Ÿ“– Dettagli completi in P2P_README.md

Cross-Platform (Androidโ†”iOS) - Phone Host Mode ๐Ÿ“ฑ

Alternativa senza laptop! Un telefono puรฒ fare da host usando la stessa rete Wi-Fi o il proprio hotspot.

Scenario 1: Stessa rete Wi-Fi

  1. Host apre l'app โ†’ "Crea LAN Room (Wi-Fi/Hotspot)"
  2. Inserisce nome stanza โ†’ "Avvia Stanza"
  3. Guests sullo stesso Wi-Fi vedono automaticamente la stanza in "Trova Stanze"
  4. Tap sulla stanza โ†’ connessione diretta

Scenario 2: Hotspot dell'Host (nessun Wi-Fi disponibile) ๐Ÿ”ฅ

  1. Host attiva l'hotspot del telefono (nelle impostazioni di sistema)
  2. Host apre l'app โ†’ "Crea LAN Room"
  3. Abilita "Modalitร  Hotspot" e inserisce:
    • Nome rete (SSID) dell'hotspot
    • Password dell'hotspot
  4. "Avvia Stanza" โ†’ BLE + mDNS + WebSocket server partono

Per i Guests:

  1. Apri l'app โ†’ "Trova Stanze"
  2. Vedi la stanza con badge ๐Ÿ“ก e ๐Ÿ”ฅ Hotspot (trovata via BLE)
  3. Tap sulla stanza โ†’ appare modal con credenziali hotspot
  4. Premi "Apri Impostazioni Wi-Fi" โ†’ si aprono le impostazioni
  5. Connettiti all'hotspot dell'host
  6. Torna nell'app โ†’ premi "Sono Connesso"
  7. Ora sei nella stanza!

Come funziona sotto il cofano:

  • L'host pubblica le credenziali dell'hotspot via BLE GATT (caratteristica leggibile)
  • I guests trovano l'host via BLE scanning
  • Toccando la stanza, il guest si connette via GATT e legge SSID + password
  • Dopo la connessione all'hotspot, il guest si collega al WebSocket server dell'host

Limitazioni:

  • iOS/Android non permettono la connessione automatica all'hotspot (serve intervento manuale)
  • L'hotspot deve essere attivato manualmente dall'host

Audio Library ๐ŸŽต

La Libreria Audio รจ il punto centrale per gestire i tuoi file audio:

Funzionalitร :

  • Import da dispositivo: Importa file audio dalla memoria locale del device
  • Download automatico: I file scaricati dalle room vengono salvati automaticamente
  • Riordinamento: Riordina i brani manualmente (frecce โ–ฒ/โ–ผ)
  • Playback singolo: Tocca un brano per riprodurlo
  • Playlist sequenziale: Usa il player globale in basso per riprodurre in ordine
  • Persistenza: Tutti i file e l'ordine vengono salvati tra riavvii

Accesso:

  • Dalla Home: Tocca "La tua Libreria"
  • Dalla Room: Tocca "+ Add" โ†’ si apre la Library (non il file picker del sistema)
  • I file condivisi vengono selezionati dalla Library

Player globale:

  • Barra player fissa in basso con controlli Play/Pause, Next, Previous
  • Auto-avanzamento: quando un brano finisce, parte il successivo
  • Progress bar e informazioni brano corrente

โš ๏ธ Limitazioni di Piattaforma

iOS

  • โœ… Full native support: WebSocket server (Network.framework), Bonjour (NetService), BLE (CoreBluetooth)
  • โœ… Distribuzione via TestFlight (EAS Build)
  • โš ๏ธ BLE funziona affidabilmente solo in foreground
  • โš ๏ธ Trasferimenti background inaffidabili
  • โŒ Connessione automatica a hotspot impossibile - Apple blocca la connessione programmatica a reti Wi-Fi
  • ๐Ÿ’ก Mantieni l'app aperta durante i trasferimenti

Android

  • โœ… Piรน permissivo per BLE
  • โœ… Throughput generalmente superiore
  • โš ๏ธ Background comunque limitato
  • โš ๏ธ Hotspot richiede conferma utente - WifiNetworkSuggestion mostra sempre una notifica
  • โš ๏ธ Android 12+ richiede permessi BLE runtime (BLUETOOTH_ADVERTISE, BLUETOOTH_CONNECT)
  • โš ๏ธ mDNS Discovery limitata su Android 10-11 (API 29-30) - La discovery automatica puรฒ essere intermittente o non funzionare. Workaround: usa Hotspot mode o Connessione manuale. Vedi ANDROID_DISCOVERY_ISSUES.md per dettagli tecnici.

Generale

  • ๐Ÿ“ถ Wi-Fi LAN richiede stessa rete
  • ๐Ÿ”‹ Trasferimenti grandi consumano batteria
  • ๐Ÿ“ฑ Tieni lo schermo acceso durante i trasferimenti
  • ๐Ÿ”ฅ Hotspot mode: la connessione all'hotspot richiede sempre intervento manuale dell'utente

๐Ÿ“ Struttura Progetto

pandemic/
โ”œโ”€โ”€ app/                    # Schermate (expo-router)
โ”‚   โ”œโ”€โ”€ _layout.tsx        # Root layout
โ”‚   โ”œโ”€โ”€ index.tsx          # Home screen (con richiesta permessi)
โ”‚   โ”œโ”€โ”€ join.tsx           # Find rooms (P2P + Venue + LAN Host)
โ”‚   โ”œโ”€โ”€ room.tsx           # Active room
โ”‚   โ”œโ”€โ”€ lan-host.tsx       # ๐Ÿ“ฑ Phone Host Mode (crea LAN room da telefono)
โ”‚   โ”œโ”€โ”€ library.tsx        # Audio library (import, playback, reorder)
โ”‚   โ””โ”€โ”€ settings.tsx       # Settings
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ components/        # UI components
โ”‚   โ”œโ”€โ”€ services/          # Business logic
โ”‚   โ”‚   โ”œโ”€โ”€ AudioLibraryService.ts  # Library management
โ”‚   โ”‚   โ”œโ”€โ”€ AudioPlaybackService.ts # Playback control
โ”‚   โ”‚   โ”œโ”€โ”€ BleService.ts           # BLE scanning + GATT read
โ”‚   โ”‚   โ”œโ”€โ”€ P2PRoomServiceAdapter.ts # P2P/Venue adapter
โ”‚   โ”‚   โ””โ”€โ”€ native/
โ”‚   โ”‚       โ””โ”€โ”€ BleAdvertisingNative.ts # BLE advertising wrapper
โ”‚   โ”œโ”€โ”€ stores/            # Zustand stores
โ”‚   โ”‚   โ””โ”€โ”€ libraryStore.ts # Audio library state
โ”‚   โ”œโ”€โ”€ p2p/               # Native P2P transport (Nearby/Multipeer)
โ”‚   โ”‚   โ”œโ”€โ”€ transport.base.ts   # Abstract interface
โ”‚   โ”‚   โ”œโ”€โ”€ transport.android.ts
โ”‚   โ”‚   โ”œโ”€โ”€ transport.ios.ts
โ”‚   โ”‚   โ””โ”€โ”€ protocol/      # Room protocol
โ”‚   โ”œโ”€โ”€ venue/             # Venue LAN cross-platform
โ”‚   โ”‚   โ”œโ”€โ”€ types.ts       # Venue types
โ”‚   โ”‚   โ”œโ”€โ”€ discovery.ts   # mDNS discovery + advertisement
โ”‚   โ”‚   โ”œโ”€โ”€ transport.ts   # WebSocket transport
โ”‚   โ”‚   โ””โ”€โ”€ relay.ts       # File relay
โ”‚   โ”œโ”€โ”€ lanHost/           # ๐Ÿ“ฑ Phone Host Mode
โ”‚   โ”‚   โ”œโ”€โ”€ types.ts       # LAN host types
โ”‚   โ”‚   โ”œโ”€โ”€ hostState.ts   # In-memory room state
โ”‚   โ”‚   โ”œโ”€โ”€ PhoneHostServer.ts # Native WS server wrapper
โ”‚   โ”‚   โ”œโ”€โ”€ wsHandler.ts   # WebSocket message handler
โ”‚   โ”‚   โ””โ”€โ”€ index.ts       # Exports
โ”‚   โ”œโ”€โ”€ types/             # TypeScript types
โ”‚   โ”œโ”€โ”€ utils/             # Utilities
โ”‚   โ””โ”€โ”€ constants/         # Theme & constants
โ”œโ”€โ”€ venue-host/            # ๐ŸŒ Local LAN host (Node.js)
โ”‚   โ”œโ”€โ”€ src/
โ”‚   โ”‚   โ”œโ”€โ”€ index.ts       # Entry + HTTP server
โ”‚   โ”‚   โ”œโ”€โ”€ types.ts       # Zod schemas
โ”‚   โ”‚   โ”œโ”€โ”€ room-manager.ts # Room & peer state
โ”‚   โ”‚   โ”œโ”€โ”€ ws-handler.ts   # WebSocket protocol
โ”‚   โ”‚   โ”œโ”€โ”€ host-state.ts   # Persistent state (room, files)
โ”‚   โ”‚   โ”œโ”€โ”€ dashboard.ts    # Web dashboard HTML
โ”‚   โ”‚   โ””โ”€โ”€ admin-api.ts   # REST API for dashboard
โ”‚   โ”œโ”€โ”€ package.json
โ”‚   โ””โ”€โ”€ README.md
โ”œโ”€โ”€ ios-native-modules/    # iOS native module sources (injected by config plugin)
โ”‚   โ”œโ”€โ”€ LanHostModule.h/m  # WebSocket server (Network.framework) + file write
โ”‚   โ”œโ”€โ”€ VenueDiscoveryModule.h/m # Bonjour mDNS (NetService)
โ”‚   โ””โ”€โ”€ BleAdvertisingModule.h/m # BLE GATT server (CoreBluetooth)
โ”œโ”€โ”€ plugins/
โ”‚   โ””โ”€โ”€ withIosNativeModules.js  # Expo config plugin for iOS native modules
โ”œโ”€โ”€ android/               # Native Android modules
โ”‚   โ””โ”€โ”€ app/src/main/java/com/pandemic/app/
โ”‚       โ”œโ”€โ”€ lanhost/       # WebSocket server (Java-WebSocket)
โ”‚       โ”œโ”€โ”€ venue/         # mDNS (NsdManager)
โ”‚       โ”œโ”€โ”€ BleAdvertisingModule.kt # BLE GATT server
โ”‚       โ””โ”€โ”€ nearby/        # Nearby Connections
โ”œโ”€โ”€ assets/                # Images, fonts
โ”œโ”€โ”€ app.json              # Expo config
โ”œโ”€โ”€ package.json
โ”œโ”€โ”€ tsconfig.json
โ”œโ”€โ”€ P2P_README.md         # ๐Ÿ“– P2P + Venue documentation
โ””โ”€โ”€ README.md

๐ŸŽจ Design System

Palette Colori

Background:     #0A0A0B  (nero profondo)
Surface:        #141416  (grigio scuro)
Primary:        #FF2D6A  (magenta neon)
Secondary:      #00F5D4  (cyan elettrico)
Accent:         #FFB800  (ambra caldo)
Text Primary:   #FFFFFF
Text Secondary: #A0A0A5

Estetica

L'interfaccia รจ ispirata all'atmosfera di un warehouse party:

  • ๐ŸŒ‘ Tema scuro dominante
  • ๐Ÿ’ก Accenti neon vibranti
  • ๐Ÿญ Stile industriale/underground
  • โœจ Effetti glow sottili

๐Ÿ”ฎ Roadmap

MVP (v1.0) โœ…

  • Creazione stanze P2P
  • Discovery (Nearby Connections / MultipeerConnectivity)
  • Join room
  • Condivisione metadati
  • Libreria audio locale

v1.1 - Cross-Platform โœ…

  • Venue Host (Node.js) per Androidโ†”iOS
  • mDNS discovery (Bonjour / NSD)
  • WebSocket transport + file relay
  • Dashboard web per monitoring
  • Connessione manuale fallback
  • Host Library (upload file dalla dashboard)
  • Room management (create, lock, close)
  • Sincronizzazione file migliorata (file visibili anche se caricati prima dell'ingresso)
  • Audio Library con playback e riordinamento
  • Download automatico in Library con titoli completi

v1.2 - Phone Host Mode โœ…

  • Phone Host Mode: un telefono puรฒ fare da host (senza laptop)
  • WebSocket server nativo in-app (Android: Java-WebSocket, iOS: Network.framework)
  • mDNS advertisement da telefono
  • BLE GATT per hotspot credentials: scambio SSID/password via Bluetooth
  • UI per modalitร  hotspot (inserimento credenziali)
  • Modal con credenziali + bottone "Apri Impostazioni Wi-Fi"
  • Badge ๐Ÿ“ก/๐Ÿ”ฅ per stanze BLE/Hotspot
  • Gestione robusta del server WebSocket (SO_REUSEADDR, stop asincrono)
  • Auto-reconnect WebSocket con exponential backoff
  • Risoluzione mDNS sequenziale (workaround bug Android NSD)
  • WiFi Multicast Lock per Android vecchi

v1.3 - iOS Full Support + QR Code โœ…

  • iOS native modules (Objective-C): WebSocket server, Bonjour discovery, BLE advertising
  • Expo config plugin per injection automatica moduli nativi iOS
  • TestFlight distribution via EAS Build
  • QR Code sharing: host genera QR con deep link + credenziali Wi-Fi
  • QR Scanner: scansione QR da "Find Rooms" per join diretto
  • Native file write (writeBase64ToFile): scrittura binaria affidabile su iOS
  • Audio session management: riconfigurazione automatica su iOS
  • Content disclaimer: checkbox al primo avvio + nota nella home
  • Signed Android APK: distribuzione facilitata

v1.4 - Stabilitร  (In Progress)

  • Resume trasferimenti interrotti
  • Notifiche push locali
  • Migliorare discovery su Android vecchi (UDP broadcast fallback)
  • Cache IP per connessioni manuali ripetute

v2.0 - Funzionalitร  Avanzate

  • Modalitร  BLE-only completa (transfer via GATT)
  • Playlist condivise
  • Anteprima audio streaming
  • Compressione audio on-the-fly

๐Ÿ‘จโ€๐Ÿ’ป Guida per sviluppatori

Prerequisiti ambiente

  • Node.js: consigliato >= 20.x
  • Java: Java 17 (Temurin/OpenJDK) per Android/Gradle
  • Android Studio (SDK + Platform Tools installati)
  • Xcode (per build iOS)

Per configurare velocemente Java 17 sul Mac:

brew install --cask temurin@17

# Aggiungi a ~/.zshrc
export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-17.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH

Per configurare l'SDK Android:

# In ~/.zshrc
export ANDROID_HOME=$HOME/Library/Android/sdk
export PATH=$PATH:$ANDROID_HOME/emulator
export PATH=$PATH:$ANDROID_HOME/platform-tools

# In android/local.properties
sdk.dir=/Users/<USERNAME>/Library/Android/sdk

Flussi di sviluppo

  • Solo UI / sviluppo rapido (Expo Go):

    • npm start e scansione QR da Expo Go
    • BLE e permessi nativi hanno limitazioni, ma l'UI funziona
  • Dev build Android (consigliato per BLE + permessi completi):

    • npx expo prebuild
    • JAVA_HOME=$(/usr/libexec/java_home -v 17) npx expo run:android --device
  • Dev build iOS:

    • npx expo prebuild
    • npx expo run:ios --device

Documentazione interna

  • Architettura dettagliata: ARCHITECTURE.md
  • Testing e scenari QA: TESTING.md
  • Setup ambiente: SETUP_GUIDE.md, QUICK_START.md
  • Deep linking e routing: DEEP_LINKING.md
  • Problemi discovery Android/mDNS: ANDROID_DISCOVERY_ISSUES.md
  • Piano P2P (storico): P2P_IMPLEMENTATION_PLAN.md, P2P_README.md

Questi file sono pensati per nuovi sviluppatori che entrano nel progetto e vogliono una panoramica completa di architettura, protocolli e setup ambiente.


๐Ÿ“„ Licenza

MIT License


๐Ÿ‘ฅ Contributori

Made with โค๏ธ for offline-first, local-first communities.


๐Ÿฆ  PANDEMIC - Offline-first. Locale. Peer-to-peer.

About

bluetooth audio communities

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages