Ellyo : construire un journal d’enfant que l’on peut enrichir à plusieurs
Ellyo réunit les souvenirs, les premières fois, les activités et les émotions d’un enfant dans un journal parental. Derrière les écrans de ce carnet, il faut rattacher chaque moment au bon enfant, préparer les photos pour la consultation et gérer les personnes qui peuvent contribuer. Voici comment ces besoins se traduisent dans l’architecture de l’application.
Une photo conserve une image, mais pas toujours ce qui la rend importante : la phrase prononcée ce jour-là, une première fois, le contexte ou l’émotion. Ellyo est un journal parental conçu pour réunir ces éléments. J’ai mené la conception de l’application, les parcours utilisateur et le développement des écrans et de la gestion des contenus, jusqu’à la publication sur iOS et Android.
Des contenus différents, rattachés au même enfant
Une note libre, une première fois et une séance d’activité ont des points communs : une date, un auteur et un enfant. Ils n’ont pourtant pas exactement les mêmes informations. Le modèle d’Ellyo conserve ces liens tout en distinguant les types de contenus. Une entrée du journal peut contenir du texte, des étiquettes, une émotion, des photos et un marqueur d’importance. Les séances d’activité et les étapes de développement ont leurs propres données.
Le profil enfant sert de point d’entrée pour consulter ces informations. Quand une famille suit plusieurs enfants, le contenu présenté doit correspondre au profil sélectionné. Le rattachement à l’enfant sert aussi au partage : une personne peut contribuer à l’histoire d’un enfant sans que cela lui donne accès à tous les profils gérés par le parent.
Ajouter un souvenir avec sa date et ses photos
Le formulaire de note permet de choisir la date du souvenir, d’écrire un texte et, selon les droits disponibles, d’ajouter des photos et une émotion. La date de l’événement est distincte de la date de création de l’entrée. C’est important pour noter un souvenir après coup sans le déplacer artificiellement au jour où l’on a ouvert l’application.
Les images sélectionnées restent locales pendant la préparation du formulaire. Leur envoi vers Firebase Storage commence lors de la sauvegarde. Le traitement récupère les adresses des images préparées, puis les rattache à l’entrée avec l’identifiant de l’enfant et celui de l’auteur. Les limites de photos sont examinées avant leur ajout et lors de l’enregistrement ; elles font partie du parcours de saisie, pas seulement de la page d’abonnement.
Préparer les images pour le journal et pour le détail
Un journal photographique peut accumuler des images volumineuses. Le projet utilise Expo ImageManipulator pour préparer deux versions de chaque photo avant son envoi : une image de consultation et une miniature pour les cartes du journal. Elles sont redimensionnées et compressées au format WebP, puis enregistrées dans Firebase Storage. L’entrée conserve les adresses des deux versions.
Cette séparation permet d’utiliser une miniature dans la liste et une image plus grande dans le détail. Le traitement prévoit également de retrouver les fichiers associés à une photo, y compris sa miniature, lorsqu’il faut les supprimer. Le choix de créer deux formats a donc des conséquences sur tout le cycle de vie du souvenir : envoi, affichage, modification et nettoyage du stockage.
Charger le journal sans dépendre de tous les autres écrans
Les entrées sont enregistrées dans Cloud Firestore et consultées pour l’enfant sélectionné, avec un ordre par date décroissante. Le journal démarre avec une liste limitée ; l’utilisateur peut en charger davantage. Une écoute des données permet à l’écran de recevoir les changements sans recharger manuellement toute l’application.
Les données du journal ont aussi leur propre contexte React, séparé de ceux des activités et des premières fois. Les écrans qui ont besoin des notes peuvent ainsi utiliser les entrées et leurs opérations de modification sans dépendre d’un seul ensemble regroupant toutes les données de l’enfant. Le journal dispose de ses états de chargement, de sa recherche, de ses filtres et de la possibilité d’étendre la liste.
Partager un journal demande de gérer les accès dans la durée
Le partage fonctionne avec des invitations et des membres rattachés à un enfant. Le modèle distingue le propriétaire et les partenaires. L’envoi d’une invitation passe par une Cloud Function Firebase qui vérifie notamment l’identité du propriétaire, son accès au partage, les limites de sa formule et l’existence d’une invitation déjà active. La vérification ne se limite donc pas au bouton affiché sur le téléphone.
Les règles Firestore utilisent les liens entre les comptes, les enfants et les membres pour contrôler les opérations sur les données. L’application gère également l’acceptation des invitations et le retrait de partenaires. Un journal partagé introduit des situations qu’un journal individuel ne rencontre pas : contenus de plusieurs auteurs, invitations en attente et personnes dont les droits changent.
RevenueCat gère les droits associés aux abonnements. Côté Firebase, un webhook reçoit les événements et met à jour le statut du compte. Le traitement prévoit la révocation des accès partagés à l’expiration et le retrait des partenaires excédentaires lors d’un changement vers une formule plus limitée. Le code prévoit aussi une synchronisation du statut premium lorsqu’une opération constate que les droits attendus ne sont pas encore disponibles.
Pouvoir récupérer les souvenirs enregistrés
Le projet comprend un export des données pour les comptes disposant de cette fonctionnalité. Il rassemble les données textuelles et télécharge les photos pour créer une archive ZIP. Les références distantes aux images sont remplacées par des noms de fichiers dans l’archive, qui est ensuite proposée via le partage natif du téléphone. Ce traitement permet de récupérer des fichiers, plutôt qu’une liste de liens vers les photos hébergées.
Ellyo distingue aussi ses environnements Firebase de développement et de production. Les essais de données et d’abonnements ont ainsi des configurations séparées. C’est un choix de maintenance qui accompagne les fonctionnalités visibles : les souvenirs et les droits familiaux demandent de pouvoir faire évoluer le produit sans utiliser les données réelles comme jeu d’essai.
Ce que cette réalisation démontre
Ellyo est une application React Native et TypeScript, construite avec Expo et Expo Router. Elle associe Firestore pour les contenus, Firebase Storage pour les photos et RevenueCat pour les abonnements. Les souvenirs, les premières fois, les activités, les émotions et le partage sont présentés dans sa fiche publique Google Play. Le site accompagne la découverte du carnet et donne accès aux liens de téléchargement.
Cette réalisation réunit la saisie d’un souvenir, sa consultation dans un journal et la contribution de plusieurs personnes. Le travail porte autant sur la forme du souvenir que sur sa date, son auteur, ses images et les droits qui l’entourent. Les photos ont leurs formats de consultation, les contributions restent rattachées à leur auteur et le partage suit l’évolution des accès du compte.
Vous pouvez découvrir mes autres applications mobiles ou consulter mon accompagnement pour créer une application iOS et Android. Pour un projet de carnet, de suivi ou de collaboration autour de contenus personnels, décrivez-moi les usages que vous souhaitez couvrir.
Développeuse indépendante à Angers. Huit ans de projets pour l’hôpital, les services de secours, l’aéronautique et l’assurance (CNP, Sodifrance), et trois applications publiées sur l’App Store et Google Play : Equio, VetSafe et Ellyo.