Aller au contenu
Écran d’application mobile bleu nuit : carte du groupe avec un anneau de progression, liste des membres et bouton Cotiser

Étude de cas

Natt

Une application mobile pour tenir les tontines entre proches : cotisations, tour de rôle et rappels, même quand le réseau se fait attendre.

Rôle
Développeur mobile
Année
2025
Stack
  • Flutter
  • Dart
  • Firebase
  • Figma
01

Contexte

Une coopérative d’épargne imaginaire, présente dans plusieurs villes d’Afrique de l’Ouest, suivait les tontines de ses membres dans des cahiers et des groupes de messagerie. Les trésoriers passaient leurs soirées à recompter, et chacun se demandait quand viendrait son tour.

L’objectif : que chaque membre voie, depuis son téléphone, où en est son groupe.

02

Défi

Beaucoup de membres utilisent des téléphones d’entrée de gamme, avec une connexion intermittente et des forfaits de données serrés. Une cotisation notée hors ligne ne doit jamais se perdre, ni compter deux fois quand le réseau revient.

  • Une application légère, fluide sur des téléphones modestes
  • Une saisie qui fonctionne sans réseau et se synchronise ensuite
  • Des écrans clairs pour des membres peu habitués aux applications
03

Solution

Une seule application Flutter pour Android et iOS, adossée à Firebase pour la connexion par numéro de téléphone, les données et les notifications. La copie locale de Firestore affiche aussitôt une cotisation saisie hors ligne et l’envoie dès que le réseau revient.

Une cotisation, une seule fois

Chaque cotisation porte un identifiant construit à partir du groupe, du membre et du tour : renvoyée après une coupure, elle réécrit la même entrée au lieu d’en créer une seconde.

Les rappels partent d’une Cloud Function planifiée, qui ne prévient que les membres dont la cotisation du tour manque encore.

TypeScript
export const remindMembers = onSchedule('every day 08:00', async () => {
  const groups = await db.collection('groups').where('roundEndsAt', '<=', tomorrow()).get()
  for (const group of groups.docs) {
    await notify(await membersWithoutContribution(group), 'rappel-cotisation')
  }
})
Schéma abstrait de services reliés entre eux par des flux
Les échanges entre l’application, sa copie locale et Firebase.
  • Schéma abstrait de services reliés entre eux par des flux
04

Résultat

Les trésoriers ne recomptent plus à la main, et chaque membre sait quand vient son tour.

  • Des groupes qui ont rangé le cahier dès les premières semaines
  • Des cotisations saisies au marché, sans réseau, et retrouvées le soir
  • Une application que les membres prennent en main sans explication