KAFA
Version du 10 novembre 2026
KAFA Scan Brew and Learn transforme la photo d’un sachet de café en fiche de préparation. L’application est éditée par WHAT THE FILM (EURL), sous la marque KAFA (contact : hello@getkafa.com). Elle n’affiche aucune publicité et nous ne vendons aucune donnée. Cette page décrit les traitements de l’application, de notre serveur et des services auxquels tu fais appel.
Quand tu scannes un sachet, chaque face photographiée (une ou deux) part vers notre serveur, puis chez Google (le service d’IA Gemini), qui lit ce qui est imprimé. Si Gemini ne répond pas, Anthropic (le service d’IA Claude) lit la photo à sa place. Pour dessiner le visuel de la fiche, la photo repart chez Gemini.
Nous gardons, dans un espace de stockage privé, chaque face envoyée, ce que l’IA y a lu et le déroulé du scan (modèle utilisé, réussite ou échec, coût). Si tu es connecté, la photo peut aussi être gardée comme modèle du visuel, avec un lien vers ton compte. Sans connexion, aucune copie supplémentaire n’est conservée pour le dessin. Ces données servent à redessiner un visuel, à comprendre une lecture ratée et à améliorer le scan. Elles ne sont jamais publiées ni montrées à un autre utilisateur ; l’équipe KAFA peut les consulter dans son outil d’administration.
Avant le premier envoi, l’application te demande ton accord et nomme les services qui reçoivent les photos. Tu peux le retirer dans Profil, Réglages, L’app, Photos et IA. Cela bloque les prochains envois jusqu’à un nouvel accord. Pour effacer les images déjà reçues, utilise la suppression du compte ou des données sans compte décrite ci-dessous.
Pour compléter la fiche, le serveur cherche ce que le torréfacteur dit du café, sur son site d’abord. Cette recherche part du nom du café et de celui du torréfacteur, jamais de la photo ni de ton identité. Les notes de dégustation sont ensuite traduites dans ta langue par Claude.
À la première ouverture, l’application génère un code aléatoire (UUID), qu’elle garde sur ton téléphone. Ce code accompagne chaque scan et chaque recherche. Notre serveur y rattache tes scans offerts, ton solde de scans payés et les droits achetés sans compte. Le code ne contient ni ton nom ni ton numéro ; quand tu te connectes, nous le relions à ton compte.
Tu peux utiliser l’application sans compte. Si tu te connectes avec Apple ou Google, ou par un code reçu par email, nous gardons ton adresse email, le nom qu’Apple ou Google nous transmet si tu l’as partagé, et un identifiant de connexion.
Le compte synchronise tes fiches entre tes appareils, avec l’historique de tes tasses : méthode, dose, mouture, temps, courbe de versement, goût et notes. Les photos envoyées pour le scan suivent les règles décrites au point 1. L’équipe KAFA voit ces fiches dans son outil d’administration, avec ton adresse et ton nom, pour le support et pour améliorer l’application.
La connexion Google utilise son SDK natif. Google indique qu’il peut conserver un identifiant de connexion et déduire une localisation approximative de l’adresse IP pour prévenir la fraude. Son manifeste de confidentialité déclare aussi le nom, l’email, le numéro de téléphone, des identifiants, des données d’utilisation et d’autres types de données, pour la connexion et l’analyse du service. Ces traitements propres à Google peuvent être liés à ton identité, même lorsque notre application ne reçoit pas ces informations. KAFA ne demande pas ton numéro de téléphone et n’accède pas à ta position GPS. Informations Google et manifeste du SDK.
Le serveur note chaque scan, chaque recherche et chaque achat, avec son coût, relié à ton compte ou à l’identifiant de ton téléphone. Il retient aussi la liste des cafés que tu as scannés, pour qu’un sachet déjà vu se rescanne sans être décompté.
Ton adresse IP sert à plafonner, par réseau, le nombre de scans, de recherches, de visuels, de rapports de plantage et d’envois de mesure d’usage. Elle est gardée, sans lien avec ton compte, dans un compteur que nous ne vidons pas encore automatiquement.
Quand l’application plante, elle envoie ensuite à notre serveur un rapport court : le type d’écran (sans ce qu’il affichait), le message d’erreur nettoyé de tout identifiant, la version de l’application et la plateforme, avec l’identifiant de ton téléphone. Ces rapports servent à corriger les plantages.
Sentry, hébergé en Allemagne (Union européenne), reçoit aussi ces rapports, ainsi que les plantages du code natif de l’application, et nous alerte par email. Avant l’envoi, l’application retire tout ce qui pourrait te désigner : ton compte, la requête en cours, le fil des actions précédentes (touches et adresses web appelées) et le nom de ton téléphone ; le message d’erreur passe par le même nettoyage. Restent notamment le modèle et le système de l’appareil, la version de l’application et le type d’écran. Aucune capture n’est jointe. Ces rapports ne dépendent pas de la mesure d’usage décrite ci-dessous.
L’application note aussi une dizaine de moments d’usage, avec le seul identifiant de ton téléphone : première ouverture, fin de l’accueil, offre consultée, essai ou achat, préparation lancée et terminée, cours lu, balance reliée, voix utilisée, sortie audio en panne. Pour la voix, la mesure retient laquelle te guide, KAFA ou le téléphone, et combien de phrases le téléphone dit faute d’enregistrement. Selon le moment, quelques mots de contexte l’accompagnent : niveau choisi, écran ouvert après l’accueil, endroit d’où s’ouvre l’offre, produit et magasin, méthode et durée de la préparation, identifiant du cours, marque de la balance. Tous portent leur heure, la plateforme, la version de l’application et celle de sa mise à jour. Une tasse terminée arrive aussi avec l’identifiant du scan de son sachet, s’il a été scanné : nous savons ainsi quel café a servi. Le même identifiant part quand un scan devient une fiche sur ton téléphone : nous voyons alors que la lecture a réussi. Ni ton compte ni un texte saisi n’y figurent. Cette mesure reste sur notre serveur et fonctionne par défaut.
Si tu actives toi-même « Mesure d’usage », dans Profil, Tes données, ces moments partent aussi chez PostHog, hébergé dans l’Union européenne, avec leur contexte. PostHog note en plus l’installation de l’application, ses mises à jour, ses ouvertures et ses passages en arrière-plan, et y joint de lui-même la marque et le modèle du téléphone, son système, sa langue, son fuseau horaire et la taille de l’affichage. Il ne te connaît que par un code aléatoire qui lui est propre, sans lien avec l’identifiant de ton téléphone, et ne reçoit jamais ton nom ni ton email ; ton adresse IP n’y est pas conservée et ne sert pas à te localiser. Aucun écran n’est enregistré, aucune touche captée. Choisir « Coupée » arrête les deux mesures, la nôtre et celle de PostHog.
À partir de la version 2.7.1, sur iPhone, cet accord couvre aussi la mesure des campagnes Apple Ads. L’application demande à Apple l’origine publicitaire de l’installation, puis joint à ces événements les identifiants de campagne, groupe, mot-clé et annonce, le type de conversion et l’emplacement. Le jeton temporaire est envoyé uniquement à Apple, sans être conservé. Le code PostHog persistant rend ces données pseudonymes. Elles servent notamment à relier les essais et les achats aux campagnes, sans ciblage publicitaire ni suivi entre les apps d’autres développeurs. Un ancien accord doit être renouvelé pour ce nouvel usage. Le refus reste respecté ; couper la mesure arrête l’attribution et efface son cache local.
Pendant l’accueil, un compteur à part signale chaque étape franchie, une seule fois par installation : la première ouverture, le passage sur chacun des écrans, puis la suite choisie (scanner un sachet, essayer un exemple, faire la visite ou ouvrir l’École). Un envoi contient cette étape, la plateforme et la version de l’application, sans l’identifiant de ton téléphone, ton compte ni l’heure de l’appareil ; notre serveur le date à sa réception. Nous n’en tirons que des totaux, jamais le parcours d’une personne. Ce comptage se passe de ton accord à la mesure d’usage ; choisir « Coupée » l’arrête aussi.
Les paiements passent par l’App Store sur iPhone et iPad, et par Google Play sur Android. Aucune donnée bancaire ne nous parvient. Notre serveur vérifie chaque achat auprès du magasin correspondant. Nous gardons la référence de transaction ou le jeton d’achat, le produit, le nombre de scans crédités, l’échéance d’un abonnement et la date d’achat, reliés à ton compte ou, sans connexion, à l’identifiant de ton téléphone. Ces lignes empêchent qu’un paiement soit crédité deux fois. Les magasins nous signalent aussi les renouvellements et les remboursements.
Si tu demandes la dureté de ton eau (en France), ton téléphone envoie ton code postal à deux services publics, geo.api.gouv.fr et Hub’Eau, sans compte ni identifiant. Le code postal reste enregistré sur ton téléphone, pas sur notre serveur.
L’application télécharge ses mises à jour chez Expo (EAS Update), qui reçoit l’adresse IP du téléphone, sa plateforme et la version installée.
Le site est hébergé par Cloudflare, qui reçoit l’adresse IP de chaque visite. Il mesure son audience avec Cloudflare Web Analytics, sans cookie de suivi ni profil de visiteur. Ton choix de langue reste dans ton navigateur.
Si tu laisses ton adresse email pour être prévenu de la sortie sur iPhone, nous gardons cette adresse, la date et le type de navigateur dans notre base, chez Supabase, pour t’envoyer un seul message à la sortie. Écris à hello@getkafa.com pour la retirer.
Certains de ces prestataires traitent les données hors de l’Union européenne. Les services d’IA ne reçoivent que ce qu’il faut pour leur tâche : la photo pour la lire, le nom du café pour le chercher.
Les données d’un compte restent tant que le compte existe. Celles d’un téléphone utilisé sans compte restent jusqu’à une demande d’effacement, ou jusqu’à la suppression d’un compte relié à ce téléphone.
Dans l’application : Profil, puis Réglages, puis Supprimer le compte. Sans l’application, les étapes sont sur la page de suppression de compte.
La suppression efface ton compte (adresse, nom, identifiant de connexion), tes fiches avec l’historique de tes tasses, les photos et les lectures de tes scans, les photos de visuel envoyées depuis ton compte, les lignes du journal du service qui te désignent et la liste de tes cafés scannés. Elle efface aussi ce que tes téléphones ont fait avant la connexion : celui depuis lequel tu supprimes, et ceux que nous avons reliés à ton compte. Le lien entre le compte et tes appareils est défait, et ton solde de scans payés et ton abonnement repassent sur le téléphone depuis lequel tu supprimes.
Ce qui reste : les lignes d’achat, sans ton compte, pour qu’un achat ne soit jamais crédité deux fois (un achat fait sans compte garde l’identifiant du téléphone, qui porte encore son solde et ses renouvellements) ; le coût de chaque appel aux services d’IA, réduit à un montant, une date et un type d’appel. Ton téléphone garde son identifiant et tes préférences. Sur notre serveur, cet identifiant reste lié à ton solde de scans payés, à ton abonnement et au compteur des scans offerts de ce téléphone, pour qu’une suppression ne remette pas ces scans à zéro. Ce registre n’est pas encore vidé automatiquement. Un téléphone déjà relié à un autre compte garde ce qu’il a fait sans compte. Le compteur d’adresses IP reste pour limiter les abus par réseau.
Dans Profil, Réglages, touche Supprimer les données. Si cette option n’apparaît pas dans ta version, écris à hello@getkafa.com. Cette action efface les fiches et les tasses sans compte de cet appareil, leurs photos, ainsi que les captures, lectures et journaux de scans que notre serveur rattache à cet usage. Elle préserve les autres comptes, les achats et le solde payé. Une photo locale encore utilisée par une autre fiche ou un autre compte est conservée. Tes réglages, ton matériel et tes observations de dégustation restent sur ce téléphone.
L’identifiant du téléphone, les compteurs de scans offerts et une trace technique de l’effacement restent pour conserver tes droits et empêcher qu’une requête ancienne recrée les données. Les coûts d’IA sont anonymisés. Les anciens fichiers locaux dont le propriétaire ne peut pas être établi restent protégés pour éviter d’effacer ceux d’un autre compte. Contacte-nous si tu souhaites aussi les retirer. Un abonnement continue tant que tu ne le résilies pas dans l’App Store ou Google Play.
Tu peux demander l’accès à tes données, leur correction, leur effacement ou t’opposer à leur traitement en écrivant à hello@getkafa.com. L’export du journal, dans l’application, te rend tes fiches. Tu peux aussi saisir la CNIL.
Version of November 10, 2026
KAFA Scan Brew and Learn turns the photo of a coffee bag into a brew card. The app is published by WHAT THE FILM (EURL) under the KAFA brand (contact: hello@getkafa.com). It shows no ads and we sell no data. This page describes how the app, our server and the services you use handle your data.
When you scan a bag, each photographed side (one or two) goes to our server, then to Google (the Gemini AI service), which reads what is printed. If Gemini does not respond, Anthropic (the Claude AI service) reads the photo instead. To draw the card artwork, the photo goes back to Gemini.
In private storage we keep each side you send, what the AI read on it, and how the scan went (model used, success or failure, cost). When you are signed in, a photo may also be kept as an artwork reference, linked to your account. When signed out, no extra copy is stored for drawing. We use these records to redraw artwork, understand a failed reading and improve scanning. They are never published or shown to another user; the KAFA team can view them in its admin tool.
Before the first upload, the app asks for your consent and names the services that receive your photos. You can withdraw it in Profile, Settings, The app, Photos and AI. This blocks future uploads until you agree again. To erase images already received, use the account or guest data deletion options described below.
To complete the card, the server looks up what the roaster says about the coffee, on the roaster’s own site first. The search starts from the coffee’s name and the roaster’s name, never from the photo or your identity. Claude then translates the tasting notes into your language.
On first launch, the app generates a random code (UUID) and keeps it on your phone. The code travels with each scan and search. Our server stores your free scans, your paid scan balance and any purchase rights acquired without an account under this code. The code holds neither your name nor your number; when you sign in, we link it to your account.
You can use the app without an account. If you sign in with Apple or Google, or with a code sent by email, we keep your email address, the name Apple or Google passes on if you shared it, and a login identifier.
The account syncs your cards across your devices, with the history of your cups: method, dose, grind, time, pour curve, taste and notes. Photos uploaded for scanning follow the rules in section 1. The KAFA team sees these cards in its admin tool, with your address and name, for support and to improve the app.
Google sign-in uses its native SDK. Google says it may retain a sign-in identifier and infer an approximate location from your IP address to prevent fraud. Its privacy manifest also declares names, email addresses, phone numbers, identifiers, usage data and other data types for sign-in and service analytics. Google’s processing may link these data to your identity, even when our app does not receive them. KAFA does not ask for your phone number or access your GPS location. Google’s disclosure and SDK manifest.
The server records each scan, search and purchase, with its cost, linked to your account or to your phone’s identifier. It also keeps the list of coffees you scanned, so a bag you already scanned can be scanned again without counting.
Your IP address is used to cap, per network, the number of scans, searches, artworks, crash reports and usage stats uploads. It is kept, unlinked from your account, in a counter we do not yet clear automatically.
When the app crashes, it later sends our server a short report: the kind of screen (not what it showed), the error message stripped of any identifier, the app version and platform, along with your phone’s identifier. These reports are used to fix crashes.
Sentry, hosted in Germany (European Union), receives these reports too, along with crashes in the app’s native code, and alerts us by email. Before sending, the app strips anything that could point to you: your account, the request in progress, the trail of earlier actions (taps and web addresses called) and your phone’s name; the error message goes through the same cleanup. What remains includes the device’s model and system, the app version and the kind of screen. No screenshot is attached. These reports do not depend on the usage stats setting described below.
The app also records about ten usage moments, with your phone’s identifier only: first launch, end of onboarding, offer viewed, trial or purchase, brew started and finished, lesson read, scale connected, voice used, audio output failed. For the voice, it notes which one guides you, KAFA or the phone, and how many sentences the phone speaks for lack of a recording. Depending on the moment, a few words of context come along: level chosen, screen opened after onboarding, where the offer was opened from, product and store, brew method and duration, lesson identifier, scale brand. Every moment carries its time, the platform, the app version and the update version. A finished cup also comes with the identifier of its bag’s scan, if there was one, so we know which coffee was used. The same identifier is sent when a scan becomes a brew card on your phone, so we can see that the scan worked. Your account and anything you type are never included. This measurement stays on our server and is on by default.
If you turn on “Usage measurement” yourself, in Profile, Your data, these moments and their context also go to PostHog, hosted in the European Union. PostHog adds its own records of the app being installed, updated, opened and sent to the background, along with the phone’s make and model, its system, language, time zone and display size. It knows you only by a random code of its own, unrelated to your phone’s identifier, and never receives your name or email; your IP address is not stored there and is not used to locate you. No screen is recorded and no tap is captured. Choosing Off stops both measurements, ours and PostHog’s.
Starting with version 2.7.1 on iPhone, this consent also covers Apple Ads campaign measurement. The app asks Apple which ad led to the installation, then adds campaign, ad group, keyword and ad identifiers, conversion type and placement to these events. The temporary token is sent only to Apple and is not stored. The persistent PostHog code makes this data pseudonymous. It is used to link trials and purchases to campaigns, among other events, without ad targeting or tracking across other developers’ apps. Previous consent must be renewed for this new use. A refusal remains in effect; turning measurement off stops attribution and clears its local cache.
During onboarding, a separate counter reports each step once per installation: the first launch, every screen, then what you choose next (scan a bag, try an example, take the tour or open the School). A report holds that step, the platform and the app version, with no phone identifier, no account and no device clock time; our server dates it on arrival. It gives us totals, never one person’s journey. This count does not wait for your consent to usage measurement, and choosing Off stops it too.
Payments go through the App Store on iPhone and iPad, and Google Play on Android. No banking data reaches us. Our server verifies each purchase with the relevant store. We keep the transaction reference or purchase token, product, number of scans credited, subscription expiry and purchase date, linked to your account or, when you are signed out, to your phone’s identifier. These records stop a payment from being credited twice. The stores also notify us about renewals and refunds.
If you look up your water hardness (in France), your phone sends your postal code to two public services, geo.api.gouv.fr and Hub’Eau, with no account or identifier. The postal code stays stored on your phone, not on our server.
The app downloads its updates from Expo (EAS Update), which receives the phone’s IP address, its platform and the installed version.
The website is hosted by Cloudflare, which receives the IP address of each visit. It measures its audience with Cloudflare Web Analytics, without tracking cookies or visitor profiles. Your language choice stays in your browser.
If you leave your email address to hear about the iPhone release, we keep that address, the date and your browser type in our database, at Supabase, to send you a single message at launch. Write to hello@getkafa.com to have it removed.
Some of these processors handle data outside the European Union. The AI services only receive what their task needs: the photo to read it, the coffee’s name to look it up.
Account data stays as long as the account exists. Data from a phone used without an account stays until someone asks for it to be erased, or until an account linked to that phone is deleted.
In the app: Profile, then Settings, then Delete account. Without the app, the steps are on the account deletion page.
Deletion erases your account (address, name, login identifier), your cards with the history of your cups, the photos and readings of your scans, the artwork photos sent from your account, the service log entries that name you and the list of coffees you scanned. It also erases what your phones did before you signed in: the one you delete from, and those we linked to your account. The link between the account and your devices is removed, and your paid scan balance and subscription move to the phone you delete from.
What remains: purchase records, without your account, so a purchase is never credited twice (a purchase made without an account keeps the phone’s identifier, which still holds its balance and renewals); the cost of each call to the AI services, reduced to an amount, a date and a call type. Your phone keeps its identifier and your preferences. On our server, that identifier stays linked to your paid scan balance, your subscription and this phone’s free scan counter, so a deletion does not reset those scans. This record is not yet cleared automatically. A phone already linked to another account keeps what it did without an account. The IP address counter remains to limit abuse per network.
In Profile, Settings, tap Delete data. If your version does not show this option, email hello@getkafa.com. This erases this device’s guest cards and brews, their photos, and the scan captures, readings and logs our server links to that guest use. Other accounts, purchases and your paid balance are preserved. A local photo still used by another card or account is kept. Your settings, equipment and tasting observations stay on this phone.
The phone’s identifier, free scan counters and a technical deletion record remain to preserve your rights and stop an old request from recreating erased data. AI costs are anonymized. Older local files with no identifiable owner are protected to avoid erasing another account’s files. Contact us if you also want them removed. A subscription continues until you cancel it in the App Store or Google Play.
You can ask to access, correct or erase your data, or object to its processing, by writing to hello@getkafa.com. The journal export, in the app, gives you your cards. You can also complain to the CNIL, the French data protection authority.