Flutter · IA embarquée · Hors ligne

Tidemark, l'IA qui reste sur le téléphone

Un journal d'humeur mobile dont l'IA tourne entièrement sur l'appareil : un modèle de langage local étiquette chaque entrée et met en mots le bilan de la semaine. Aucune donnée ne part sur un serveur, sauf l'export que la personne déclenche elle-même.

Démonstrateur, données fictives. Projet interne, non publié sur les stores. L'app ne donne aucun conseil médical.

  • Flutter
  • Dart
  • llama.cpp
  • Qwen2.5-1.5B
  • SQLite chiffré
Analyse
Sans réseau
Simulateur iOS, avec le vrai modèle et sans réseau ; l'attente de l'analyse est accélérée 4 fois
Statut
Démonstrateur
Plateformes
iOS · Android
Design
Rachel Jorge de Almeida
Développement
Yanis Vroland

L'idée

Beaucoup d'apps envoient chaque saisie à un modèle d'IA dans le cloud. Pour des données sensibles, humeur, santé, notes personnelles, c'est souvent rédhibitoire. Tidemark montre qu'on peut faire autrement : un modèle de langage compact, téléchargé une fois, qui travaille sur le téléphone, même en mode avion.

Ce que fait l'app

Saisie rapide

Une humeur de 1 à 5 et quelques lignes de texte, enregistrées dans une base chiffrée sur le téléphone.

Étiquetage automatique

Le modèle local repère émotions et thèmes de chaque entrée, en arrière-plan, sans connexion.

Bilan de la semaine

Chiffres calculés par l'app, puis mis en mots par le modèle quand la semaine s'y prête.

Écran d'aide

Si une entrée signale une détresse, l'app affiche un écran fixe avec le 3114, jamais un texte généré.

Modèle téléchargé une fois

Sur demande, depuis une adresse épinglée, avec vérification de son empreinte avant tout usage.

Export et suppression totale

Export du journal à la demande ; la suppression efface entrées, clé de chiffrement et modèle.

Une IA locale, encadrée

Le modèle aide, il ne décide de rien d'important. Chaque garde-fou est écrit en code et testé, pas laissé au bon vouloir du modèle.

  • Sortie contrainte par un schéma JSON à liste d'étiquettes fermée, puis revalidée par l'app : le modèle ne peut rien inventer.
  • Une réponse non conforme laisse simplement l'entrée sans étiquette, sans plantage.
  • Détection de détresse par des règles déterministes, avant le modèle : une entrée sensible ne lui est jamais envoyée.
  • « L'app calcule, le modèle met en mots » : aucun chiffre du bilan ne vient du modèle, et son texte est filtré.
  • Le seul accès réseau est le téléchargement du modèle ; un test refuse tout autre code réseau dans l'app.
  • Clé de la base gardée dans le trousseau iOS ou le Keystore Android.

Mesuré sur un vrai téléphone

Choix du moteur fait sur mesures, sur un iPhone 15 Pro, avec 20 entrées fictives en français.

Réponses valides
20/20
Temps par entrée
0,83 s
Taille du modèle
1,1 Go
En mode avion
20/20

Ce que ces chiffres ne disent pas : le modèle retrouve environ la moitié des étiquettes attendues ; l'étiquetage reste une aide, jamais un diagnostic. Android n'est vérifié que sur émulateur, et 20 entrées restent un petit échantillon.

La créa, signée Rachel

Logo, charte et maquettes de chaque écran, en clair et en sombre : Rachel Jorge de Almeida a dessiné une interface calme, qui inspire confiance sans infantiliser. On y note parfois une mauvaise journée, parfois bien pire.

Tidemark

Le logo

Un T dont la barre est une vague, avec un point sable à son pied : la laisse de mer, cette ligne que la marée dépose sur le sable jour après jour, comme les entrées d'un journal.

La charte

Une couleur d'action, le bleu-vert de la marée, et une échelle d'humeur qui va du bleu ardoise de la marée basse au sable chaud. Toutes les paires de couleurs passent les seuils de contraste WCAG, dans les deux thèmes.

  • Marée#1d5f6b
  • Très bas#3c4f7c
  • Bas#6684b0
  • Neutre#86b2ab
  • Bien#e2b55a
  • Très bien#ef8c59
  • Jamais la couleur seule : chaque pastille d'humeur porte son chiffre et son libellé.
  • On décrit, on ne prescrit pas : aucun conseil, aucun diagnostic, aucun jugement sur l'humeur.
  • L'écran d'aide reste calme : pas de rouge d'alerte, le numéro bien visible et un bouton pour appeler.
  • Polices embarquées et tailles qui suivent les réglages du téléphone : rien n'est tronqué à 200 %.
Sélecteur d'humeur : cinq pastilles numérotées de 1 à 5, du bleu ardoise au sable, la 4 « Bien » sélectionnée
Sélecteur d'humeur
Carte d'une entrée du journal : humeur 4, date, texte et étiquettes fatigue, calme, travail, nature
Carte d'entrée, thème clair
La même carte d'entrée en thème sombre
Carte d'entrée, thème sombre
Détail d'une entrée : humeur 2 « Bas », texte, étiquettes trouvées par le modèle local et mention « Analysé sur ton téléphone »
Entrée étiquetée
Le même détail d'entrée en thème sombre
Thème sombre
Bilan de la semaine : nombre d'entrées, humeur moyenne, répartition des humeurs et jours notés
Bilan de la semaine
Réglages : modèle d'analyse prêt sur le téléphone et sensibilité de l'écran d'aide
Réglages

Composants : captures de la charte. Écrans : app développée d'après les maquettes, sur émulateur Android, modèle local chargé, avec des entrées fictives.

Comment on l'a construit

Une maquette avant chaque écran

Chaque fonctionnalité a sa spécification et sa maquette, validées avant la première ligne de code.

Tests d'abord

Tests écrits à partir des critères d'acceptation, avant le code ; aucun ne dépend du vrai modèle.

Garde-fous vérifiés

Chaque protection est désactivée une fois pour s'assurer qu'un test échoue bien : un garde-fou non testé ne compte pas.

Choix du moteur sur mesures

Plusieurs moteurs comparés sur iPhone : la sortie toujours valide a été préférée à un rappel un peu meilleur.

De l'IA dans votre app, sans envoyer vos données ?

Santé, RH, juridique, notes internes : quand les données ne doivent pas quitter le téléphone, on regarde ensemble ce qu'un modèle local peut faire, et ce qu'il ne fera pas.