Mobile

Peddy – Il diario della crescita

  • React Native
  • Expo
  • TypeScript

Peddy è il diario personale che ti accompagna in ogni tappa della crescita, in totale sicurezza. Peddy 1.8 è disponibile, solo per Android.

Le schermate mostrano un profilo demo.

Novità della 1.8: la sincronizzazione tra dispositivi è molto più rapida. Leggi l’articolo sull’aggiornamento.

Dietro le quinte

Come è fatta l’app, in breve. Per il racconto completo leggi Peddy, dietro le quinte.

Lo stack: React Native, Expo e TypeScript

L’intera codebase usa Expo e React Native, tipizzata in TypeScript in modalità strict.

  • Expo Router per la navigazione.
  • React Context API e hook personalizzati per lo stato globale.
  • react-native-chart-kit e react-native-svg per le curve di crescita e i percentili OMS.
  • Un design system centralizzato (theme/appTheme.ts) per una UI coerente, senza valori hardcoded.

Privacy by design (GDPR Art. 9)

I dati restano tuoi: Peddy sincronizza solo ciò che serve a mantenere allineati i tuoi dispositivi.

L’approccio è “local-first”: profili, visite, anamnesi e tappe motorie sono salvati sul dispositivo con react-native-encrypted-storage, che usa la crittografia AES-256 tramite il Keystore di Android.

Backend serverless: Firebase e sincronizzazione cloud

Per gli utenti Premium c’è la sincronizzazione cloud e il backup multi-dispositivo, interamente su Firebase:

  • Authentication: accesso con Email/Password e Google OAuth 2.0.
  • Firestore: dati cifrati AES-256 at-rest e Security Rules che permettono a ciascun utente di accedere solo al proprio nodo.
  • Cloud Functions e notifiche: le push per richiami vaccinali e visite passano da FCM, con un job CRON giornaliero alle 09:00 nella region europe-west1.

La sfida: ottimizzare le chiamate a Firestore. Prima l’app sincronizzava ogni 10 minuti anche senza modifiche. Nel ProfileContext ora c’è un pattern di “sync on change” con debouncing di 3 secondi:

  • La sincronizzazione parte solo quando i dati cambiano, quindi molte meno chiamate a Firestore.
  • Un aggiornamento compare su un altro dispositivo in circa 3 secondi invece di circa 600: 99,5% di attesa in meno.
  • Nessun processo in background permanente, con un vantaggio per la batteria.

Testing e build

La logica è coperta da oltre 600 test automatici con Jest e @testing-library/react-native, con attenzione alle funzioni crittografiche (StorageService) e alla validazione dei form. In fase di prebuild nativa uso ProGuard per minimizzare e offuscare il codice.