01Aperçu du projet
Kyndsy est une application mobile qui répond à une question que la plupart des gens ne peuvent pas répondre à propos d'eux-mêmes : comment est-ce que je parle réellement ? Elle écoute la voix de son propriétaire pendant une conversation ordinaire et compte les mots grossiers, les mots polis, les mots de remplissage et les moments où le ton devient aigü. Elle montre la tendance sur des jours et des semaines. Et puis elle s'arrête — elle ne dit pas à la personne quel genre d'humain cela fait d'eux.
Le principe est que les applications d'amélioration personnelle tracent principalement un graphique de votre propre opinion. Vous faites le bilan de votre journée, elles visualisent le rapport. Kyndsy part de quelque chose de plus difficile à contester : les mots qui ont réellement été prononcés, comptés pendant que la personne était occupée à vivre plutôt qu'à s'asseoir pour réfléchir.
C'est aussi ce qui rend le produit difficile. Compter la parole signifie un microphone, et un microphone signifie que la personne doit faire confiance à l'application plus qu'à presque tout le reste sur le téléphone. Donc, tout le produit est construit autour d'une promesse qui devait être structurelle : le son n'est jamais conservé, les mots ne sont jamais écrits, les voix des autres ne sont pas analysées, et il n'y a pas de compte auquel attacher quoi que ce soit.
Nous avons conçu et construit l'ensemble : l'application pour iOS et Android, son contenu en trente langues, le backend léger, le chemin de sortie du magasin et le site produit. Ci-dessous se trouvent le problème, les décisions et les parties que nous avons délibérément refusé de construire.
02Contexte et le problème
Une application qui écoute est une catégorie où l'implémentation évidente est aussi la mauvaise. Décomposer la tâche a produit un ensemble de contraintes qui ont façonné tout le reste.
- La confiance est le produit.Une application qui mesure la parole a exactement un atout, et ce n'est pas l'algorithme. Si une personne soupçonne que l'audio quitte le téléphone, peu importe la précision — elle désinstalle.
- D'autres personnes n'ont pas consenti.Un microphone dans une pièce capte quiconque s'y trouve. Analyser les personnes autour du propriétaire serait une application complètement différente, et bien pire.
- Un nombre concernant une personne est dangereux.Tout score unique qui prétend résumer un être humain est une affirmation que le produit ne peut pas honnêtement faire — et que les gens liront comme un verdict, peu importe la clause de non-responsabilité.
- Les comptes bruts mentent."Vous avez juré neuf fois aujourd'hui" récompense le silence. Une personne qui ne dit rien ressemble à une personne qui s'est améliorée.
- Les mots sont ambigus.Le même mot est une blague, une citation, une plainte auto-dirigée ou une véritable insulte selon le ton et le contexte. Compter la chaîne seule produit des chiffres que personne ne reconnaît comme son propre jour.
- Les gens ne parlent pas une seule langue.Ils changent en plein milieu de la phrase. Un compteur qui ne suit qu'une seule d'entre elles rapporte un jour étrangement calme chaque fois que son propriétaire change de code.
- Les magasins ont des règles concernant l'utilisation des microphones, concernant les revendications de santé et de psychologie, et concernant ce qu'un abonnement peut restreindre — et elles sont appliquées lors de la soumission, pas le jour du lancement.
Tout cela devait tenir sur un téléphone, en arrière-plan, sans vider la batterie ni la patience de la personne.
03Objectifs du projet
- Mesurer la parole sur l'appareil.L'analyse se fait sur le téléphone ; l'audio n'est jamais stocké et jamais téléchargé.
- Seulement la voix du propriétaire.Les autres voix sont ignorées plutôt qu'analysées, et il n'y a pas de mode pour diriger l'application vers une autre personne.
- Pas de compte, pas de nom.Rien à divulguer, car il n'y a rien collecté à divulguer.
- Taux, pas de comptes bruts.Tout par mille mots prononcés, donc une journée calme est une journée calme et non un accomplissement.
- Trente langues, y compris le discours mixte — les dictionnaires doivent exister dans toutes ces langues en même temps, sinon le nombre est incorrect pour les personnes qui changent.
- Distinguer les nuances. Ironie, sarcasme, une blague et une remarque acerbe authentique à distinguer et à étiqueter comme une supposition, jamais comme un verdict.
- Utile sans le microphone. Le journal, la boussole des valeurs, les tests et les questions du soir fonctionnent de manière autonome.
- Motivation qui ne peut pas être manipulée. Courses, niveaux et programmes jugés par mesure plutôt que par l'ouverture de l'application.
- Pas de score global d'une personne. Pas dans la version un et pas plus tard.
04Ce que nous avons fait
L'application est construite comme quatre espaces, chacun répondant à une question différente, plus les parties qui les soutiennent :
- Aujourd'hui — ce qui vient de se passer : le score du discours, les objectifs du jour et une seule suggestion, jamais une liste de six.
- Progrès — si cela avance quelque part : courses, niveaux, programmes et le rapport hebdomadaire.
- La Boussole — ce que la personne a décidé de viser : trois à cinq valeurs qu'elle a choisies elle-même, et le mouvement vers celles-ci.
- Vous — tout ce qui leur appartient uniquement : les tests d'auto-évaluation, l'accès familial, leurs données et le soutien.
En dessous se trouvent les éléments qui rendent ces quatre honnêtes : l'analyse vocale sur appareil, des dictionnaires et des règles pour trente langues, le classificateur d'ombre, le modèle de comptage qui fonctionne en taux plutôt qu'en totaux, un backend léger qui ne sait presque rien, et un registre de paramètres qui permet au produit de changer sans mise à jour du magasin.
05La confidentialité comme code, pas comme copie
Les revendications de confidentialité sur le site ne sont pas un texte marketing qu'une optimisation ultérieure pourrait invalider discrètement. Ce sont des propriétés de la construction, et le projet considère un changement qui rend l'une d'elles fausse comme un défaut plutôt qu'un compromis.
- Le son n'est écrit nulle part — ni dans un fichier, ni dans un tampon temporaire sur le disque, ni dans un journal. Pas dans une version de débogage non plus, car une version de débogage est la façon dont ces choses s'échappent.
- Seule la voix du propriétaire est analysée.La parole des autres est éliminée avant de devenir des mots.
- Rien n'est transcrit.L'application produit des compteurs, pas du texte ; il n'y a pas de phrase stockée à divulguer, à assigner ou à synchroniser accidentellement.
- Une session ne commence que lorsqu'une personne la commence.Pas de démarrage automatique après un redémarrage, pas de reprise discrète en arrière-plan.
- Le profil vocal ne quitte jamais le téléphone et est exclu des sauvegardes de l'appareil — c'est des données biométriques, et une sauvegarde est l'endroit où les gens oublient qu'elles peuvent voyager.
- Le backend reçoit quatre informations et pas plus : une demande de paramètres, un téléchargement de modèle unique, un message de support si la personne en a écrit un, et un reçu d'abonnement. Il n'y a pas de compte.
- Une personne est une paire de nombres aléatoires générés par son propre téléphone. Nous ne les émettons pas et ne les comptons pas — ce qui signifie que nous ne savons pas combien d'installations il y a, et c'était un prix délibéré.
- Se connecter est facultatif et ne débloque rien. Cela existe pour transférer un abonnement et un historique vers un nouveau téléphone. Rendre cela obligatoire aurait créé un lien avec une identité réelle là où il n'en existe aucune aujourd'hui.
Ce dernier point mérite d'être approfondi. L'exigence du propriétaire était de ne rien savoir d'autre qu'un identifiant anonyme — et la manière tentante de le satisfaire est une connexion obligatoire que nous promettons ensuite de ne pas lire. Nous avons fait le contraire : pas de compte du tout, et une connexion facultative qui lit exactement un champ du jeton et le stocke haché.
06Ce que l'application compte réellement
Quatre choses : expressions grossières, expressions polies, mots de remplissage et un ton élevé ou aiguisé. Tous sont rapportés par mille mots prononcés, jamais comme un total brut — car un décompte brut fait paraître le silence comme un progrès, et une application qui récompense son propriétaire pour ne pas parler a mal compris son propre travail.
Le titre du jour est un indice de discours respectueux, et les règles qui l'entourent sont aussi réfléchies que le nombre lui-même :
- Il est entièrement caché jusqu'à ce que cinquante mots aient été entendus.Un zéro un matin calme se lit comme une accusation, et non comme des données manquantes.
- Les jours de moins de cinquante mots sont affichés mais non comptés — visibles comme vides plutôt que de prétendre être une bonne journée.
- La politesse peut le faire monter de dix points au maximum.Tout ce qui dépasse et le score serait moins cher à manipuler avec des politesses qu'à gagner en ne étant pas aiguisé.
- Tout événement unique peut être marqué comme faux, et le faire change le nombre plutôt que de simplement rayer une ligne d'une liste.
Les vues en haut sont ordinaires dans leur forme et soignées dans les détails : une tendance sur sept jours, une image heure par heure de la journée, une grille de trente jours avec un carré par jour. La vue horaire refuse de déclarer une "pire heure" tant qu'elle n'a pas dix événements sur lesquels se baser ; la grille de trente jours laisse les jours calmes en beige plutôt que de les colorer en calme. Des graphiques qui sont confiants sur des données minces sont la façon dont un produit de mesure perd la confiance du lecteur — généralement pour de bon.
07Nuances de discours : ironie, blague, pique
Une blague et une insulte ne sont pas le même mot deux fois. Kyndsy sépare l'ironie d'une remarque vraiment acerbe, une blague d'un coup bas, une citation de quelque chose que la personne voulait dire — et montre ce qu'elle pense avoir entendu, en mots, à côté de l'événement.
Deux règles gardent cette fonctionnalité honnête. Premièrement, elle est présentée comme une supposition, pas un verdict: l'application dit "possiblement ironique" ou "une blague — non comptée" et montre sur quoi elle s'est basée. Deuxièmement, et plus important, la classification des nuances ne déplace jamais l'indice. Elle informe la personne ; elle n'ajuste pas silencieusement son score. Un nombre pondéré par la confiance serait impossible à vérifier pour quiconque et deviendrait silencieusement la fonctionnalité la plus contestée du produit.
Le même soin s'applique au contexte : le même mot compte différemment lorsque la personne cite quelqu'un, parle d'elle-même, ou est au milieu d'une dispute. Et parce qu'aucun dictionnaire ne peut savoir ce que les mots d'une personne particulière signifient pour elle, elle peut garder ses propres listes.
08Trente langues — et le mélange
L'application fonctionne en trente langues — anglais, espagnol, portugais, allemand, français, italien, néerlandais, suédois, danois, norvégien, finnois, polonais, tchèque, croate, roumain, hongrois, grec, turc, russe, ukrainien, biélorusse, hébreu, arabe, hindi, indonésien, vietnamien, thaï, chinois, japonais et coréen — et dans plusieurs d'entre elles à la fois, car c'est ainsi que beaucoup de gens parlent réellement.
Trente langues ne signifient pas trente traductions de l'interface. Ce sont trente ensembles de dictionnaires — expressions approximatives, formules polies, remplissages — et ils doivent atterrir en même temps. Une langue dont le dictionnaire est à moitié terminé ne faillit pas bruyamment ; elle rapporte une journée calme. La personne voit un bon nombre et y croit, ce qui est pire qu'un message d'erreur.
Une leçon de ce projet se généralise bien au-delà : une fonctionnalité détectée par la forme du texte échoue dans la première langue écrite différemment. Traiter "une phrase" comme "une chaîne contenant un espace" fonctionne jusqu'au japonais, au chinois et au thaï, qui s'écrivent sans espaces — et là, l'application ne trouve rien du tout, silencieusement, tout en ayant l'air de fonctionner. Le comportement linguistique doit provenir des propres données de la langue, et il doit être couvert par un test qui s'exécute sur les trente.
09La boussole et le journal
La parole n'est que la moitié du produit. L'autre moitié est ce que la personne a décidé de viser : elle choisit trois à cinq valeurs parmi sept — respect, honnêteté, maîtrise de soi, responsabilité, soin, équité, fiabilité — et l'application montre un mouvement vers celles-ci, plutôt que vers l'idée de quelqu'un d'autre d'une bonne personne.
Le mouvement est tiré de deux sources : les mesures de discours et le journal personnel des choses qu'ils ont faites — tenir une promesse, s'excuser, s'emporter contre quelqu'un, réparer les dégâts. Trois questions à la fin de la journée, quand ils le souhaitent.
Et il y a aucun score de moralité global, maintenant ou plus tard. C'est la seule chose que le produit refuse de calculer. C'est aussi la raison pour laquelle la boussole fonctionne : une personne choisira des valeurs honnêtes uniquement pour une application qui ne va pas les noter sur le résultat.
Tout dans cette moitié fonctionne sans le microphone. Le journal, la boussole, les tests et les questions du soir se tiennent seuls, donc une personne peut configurer la partie vocale plus tard, ou jamais, et obtenir quand même quelque chose de l'application. C'était une décision produit avec de réelles conséquences pour la rétention, et nous le referions — une invite de permission sur l'écran d'accueil est l'endroit où une application sensible à la vie privée perd les personnes pour qui elle a été conçue.
10Programmes, courses et le rapport hebdomadaire
La motivation dans cette application devait être immunisée contre les deux triches habituelles : ouvrir l'application beaucoup, et ne rien dire. Donc :
- Programmescourir 7 à 30 jours avec un seul objectif et un seul chiffre — sept jours sans mots durs, des réponses plus douces pendant une quinzaine, moins de remplissages sur un mois. Si cela a fonctionné, c'est décidé par les mesures, pas par le fait de cocher une case.
- Une coursecompte les jours pendant lesquels la personne a réellement maintenu le niveau.Les jours silencieux ne le rompent ni ne l'étendent — mettre le téléphone de côté n'est pas un moyen de gagner.
- Les niveaux sont gagnés par des jours, pas par des ouvertures d'application : Regarder, Contrôle, Discours calme.
- Les bouclierscouvrent une erreur, jusqu'à un certain point, et un jour brisé peut être racheté — mais une course de trente jours avec quatre jours rachetés n'est pas une course de trente jours, donc ceux-ci sont comptés et affichés séparément.
- Le rapport hebdomadaire dit clairement quand il n'y a pas assez de données à comparer.Un résumé dans lequel quelque chose s'améliore toujours cesse d'être lu au bout de la troisième semaine.
Une asymétrie délibérée mérite d'être nommée : le niveau gratuit limite combien d'historique est affiché, pas combien est compté. Calculer une période uniquement sur la fenêtre visible aurait affiché une période de trente jours comme sept — ce n'est pas une limitation du plan gratuit mais une fausse déclaration sur la personne.
11Une centaine de tests d'auto-évaluation
À côté des mesures se trouvent une centaine de tests de vérification personnelle structurés : vingt-cinq déclarations chacune, environ quatre minutes, notées sur cinq facettes séparément afin que la réponse ne soit jamais un chiffre plat. Ils couvrent la parole, les sentiments, les personnes proches de vous, le travail, vous-même, les habitudes et la vie en ligne.
Ils ne sont explicitement pas des diagnostics et pas des mesures de personnalité — ce sont des réflexions personnelles structurées, et l'application le dit là où une personne peut le lire plutôt que dans un écran de paramètres. Les réponses restent sur le téléphone comme tout le reste.
Le point d'ingénierie ici est qu'une centaine de tests ne peut pas être maintenue comme une centaine d'écrans écrits à la main. Ils sont une ressource, pas du code: générés à partir de sources, validés au moment de la construction, et refusés si un test n'a pas son ensemble complet d'instructions et de facettes. Cette vérification est ce qui rend possible d'en avoir une centaine, et c'est pourquoi leurs règles de déverrouillage peuvent être distribuées de manière cohérente plutôt que dispersées à la main.
La moitié d'entre eux s'ouvre par l'utilisation, l'autre moitié par l'achat. Les produits du magasin derrière la moitié payante sont délibérément peu nombreux plutôt qu'un par test — personne ne crée une centaine d'annonces de magasin à la main, et personne ne les traduit non plus en trente langues. Le produit vendu est un déverrouillage; la personne choisit sur quel test dépenser cela dans l'application, après que l'achat soit confirmé.
12Abonnement, famille et les magasins
Le niveau payant est un abonnement, et un plan familial le partage — six places pour un an, y compris celle de l'acheteur. Ce qui compte, c'est ce que la famille partage et ce qu'elle ne partage pas : une famille partage le droit, pas les données. Personne ne voit les chiffres, événements ou journaux des autres, et la personne qui a payé voit les places et dates libres, pas qui s'y trouve.
Ce n'est pas une ligne dans les petites lettres ; c'est ainsi que c'est construit. Les mesures des autres ne sont pas du tout sur le serveur, donc il n'y a rien à exposer accidentellement dans un écran familial. Entrer un code signifie accepter de partager un abonnement, pas accepter d'être identifié.
Deux règles de mise en œuvre de cette partie ont survécu à la fonctionnalité. Premièrement, l'abonnement et le droit familial sont un seul drapeau dans l'application : une deuxième question du type "ou peut-être qu'ils sont dans une famille" serait oubliée exactement aux endroits où cela compte. Deuxièmement, le silence du serveur ne révoque pas le droit — le réseau tombe beaucoup plus souvent qu'un abonnement ne se termine, et une application qui verrouille un client payant dans un train a fait un choix évident de manière erronée.
La politique de stockage a façonné beaucoup de la surface ici : ce qu'une application de microphone peut revendiquer, comment un niveau payant peut être présenté, et le fait qu'une version défectueuse ne peut pas être récupérée avec un correctif. C'est pourquoi la politique de version — version minimale prise en charge, mise à jour forcée, mode maintenance et le message affiché, dans toutes les langues du projet à la fois — est un paramètre côté serveur plutôt que quelque chose compilé.
13Architecture : application, backend, registre
L'architecture découle de la promesse de confidentialité : autant que possible sur le téléphone, le moins possible sur le serveur.
- L'application effectue l'analyse, conserve l'historique et possède le profil vocal. C'est le produit complet ; le serveur joue un rôle de support.
- Un backend léger répond à quatre types de demandes : paramètres, téléchargement d'un modèle unique, messages de support et reçus d'abonnement. Il n'a pas de table d'utilisateurs, car il n'a pas d'utilisateurs à y mettre.
- Un registre de configuration conserve ce qui serait autrement codé en dur dans l'application : identifiant de package, adresse API, paramètres de connexion, liste des langues, indicateurs de fonctionnalités et politique de version. Les valeurs sont générées dans la source plutôt que d'y être saisies, et le fichier généré est marqué comme non modifiable pour la simple raison qu'une modification manuelle est perdue lors de la prochaine génération.
- Une vérification préliminaire contrôle chaque build : elle refuse si l'identifiant de package a dérivé du registre, si la version n'est pas supérieure à la dernière expédiée, si le serveur de l'application ne répond pas, si un dictionnaire est incomplet dans l'une des langues du projet, si l'analyse statique n'est pas propre, si des tests échouent, ou si quoi que ce soit ressemblant à une clé est trouvé dans la source. Elle renvoie un code de sortie non nul, ce qui la rend utilisable comme une porte dans n'importe quel CI.
- Le niveau payant est derrière un indicateurqui peut être désactivé sans reconstruction et sans nouvelle version du magasin.
Le site est une petite application PHP sans base de données propre au-delà de la correspondance de support — le même principe s'applique à un niveau supérieur.
14Pile technologique
- Flutter pour iOS et Android à partir d'une seule base de code — avec un système de design dans le code, donc la couleur, l'espacement et le rayon sont déclarés à un seul endroit plutôt qu'à chaque widget.
- Reconnaissance vocale sur appareil et analyse sur appareil : les modèles sont téléchargés une fois et exécutés localement, avec le manifeste les décrivant construit à partir des fichiers plutôt que rédigé à la main.
- PHP 8.4 pour le backend de l'application et le site, avec une petite base de données utilisée uniquement pour la correspondance de support.
- Un registre de configuration comme source de vérité pour les paramètres de l'application, avec du code généré et une porte de pré-vol.
- Trente packs de langues pour l'application et trois pour le site, avec une parité de dictionnaire imposée par des tests plutôt que par révision.
- Une politique de sécurité du contenu stricte sur le site — pas de styles en ligne du tout, des valeurs calculées compilées dans une feuille de style, et une police auto-hébergée, de sorte que la page sur la vie privée ne récupère aucune ressource tierce.
15Design et UX
Le langage visuel est un thème sombre, tiré du site produit afin que ce qu'un visiteur se voit promettre soit ce qu'il ouvre. Un deuxième thème clair a été écrit dans les tokens et délibérément non expédié : deux thèmes signifient deux ensembles de captures d'écran et deux fois plus d'endroits où une mise en page se casse sans être remarquée.
La couleur, l'espacement et le rayon vivent dans un seul fichier de design, et la transition entre une couleur alarmante et une couleur calme se fait à travers un jaune chaud — l'interpolation directe donne une boue olive, ce qui ressemble à de la négligence et est en réalité un point de passage manquant.
L'application a un caractère, et les règles qui l'entourent concernent l'honnêteté autant que le charme : l'humeur est lisible à partir de la silhouette, pas seulement à partir de la couleur, donc une personne daltonienne voit la même chose que tout le monde ; l'humeur est une échelle continue animée entre des valeurs plutôt que cinq images fixes, car un saut se lit comme une image différente plutôt que le même ami ; et à l'extrémité anxieuse, les sourcils se lèvent aux extrémités intérieures, car vers le bas et vers l'intérieur c'est de la colère à la personne qui regarde.
Partout ailleurs, l'interface suit la règle centrale du produit : montrer ce qui a été mesuré, dire quand il n'y a pas assez pour dire quoi que ce soit, et ne jamais réduire une personne à un seul nombre.
16Comment nous avons travaillé
- La promesse d'abord. Nous avons écrit ce que l'application ne ferait jamais — conserver des enregistrements audio, analyser d'autres personnes, demander qui vous êtes, vous évaluer en tant que personne — avant de concevoir quoi que ce soit, car ces décisions contraignent l'architecture plutôt que d'en découler.
- Noyau de mesure. Analyse sur l'appareil, le modèle de comptage en taux, l'indice avec ses seuils et son refus d'apparaître sur des données minces.
- Travail linguistique.Trente dictionnaires et règles, avec parité appliquée par des tests sur tous en même temps.
- L'autre moitié.Boussole, journal, programmes, courses, rapport hebdomadaire — tout ce qui fonctionne sans le microphone.
- Tests en tant que ressource.Une centaine de tests d'auto-évaluation générés et validés, avec leur échelle de déverrouillage distribuée par le générateur.
- Monétisation.Abonnement, famille, le petit ensemble de produits en magasin, et un niveau payant derrière un drapeau.
- Chemin de publication.Registre, configuration générée, porte de pré-vol, enregistrement de construction et politique de version.
- Le site.Trois langues, une politique de sécurité de contenu stricte et une page d'accueil qui montre les véritables écrans de l'application.
Deux choses revenaient constamment pendant la construction, et les deux sont maintenant des règles. Tout ce que l'interface affirme sur le comportement d'une personne doit être vérifiable par rapport à une mesure, et tout ce que l'application promet concernant la confidentialité doit être appliqué par le code plutôt que par une note dans un document — une compréhension partagée survit exactement jusqu'à la prochaine personne qui ne l'a pas lue.
17Le résultat
Ce qui en est sorti est un produit de mesure pour quelque chose que les gens devinent généralement, construit de manière à ce que la mesure ne leur coûte pas leur vie privée.
- Analyse de la parole sur l'appareil : rien enregistré, rien transcrit, autres voix supprimées.
- Tout est rapporté par mille mots, donc le silence n'est pas confondu avec des progrès.
- Ironie, sarcasme et blagues mises à part — et étiquetées comme une supposition qui ne fait jamais bouger le score.
- Trente langues avec des dictionnaires qui atterrissent ensemble, couverts par des tests à travers toutes.
- Une boussole de valeurs, un journal, des programmes et un rapport hebdomadaire qui admet quand il a trop peu à comparer.
- Une centaine de tests d'auto-évaluation en tant que ressources validées, avec un petit ensemble de produits de stockage maintenable derrière la moitié payante.
- Un plan familial qui partage l'abonnement et rien d'autre, car les données ne sont pas sur le serveur à partager.
18Leçons à retenir
Kyndsy est le projet où l'ingénierie la plus difficile était dans les contraintes. Analyse sur appareil, pas de transcription, pas de compte, pas de score global, pas d'analyses de spectateurs — chacun de ces éléments a rendu la construction plus difficile et le produit possible. Une version de cette application avec un pipeline côté serveur et une connexion aurait été plus rapide à écrire et n'aurait mérité le microphone de personne.
La leçon que nous retenons concerne la manière dont les promesses sont tenues : une garantie qui vit dans un document est une garantie jusqu'au prochain changement que personne ne vérifie.. Ceux qui sont maintenus ici sont ceux exprimés sous forme de code et couverts par des tests — parité dans trente langues, contraste vérifié par un nombre plutôt que par un visuel, mouvement vérifié par des valeurs plutôt que par une capture d'écran, une porte de construction qui refuse plutôt que d'avertir.
Si vous construisez un produit mobile où la confidentialité est la fonctionnalité plutôt que la clause de non-responsabilité, quelque chose qui doit fonctionner dans de nombreuses langues à la fois, ou une application dont les chiffres sont censés être dignes de confiance pour les utilisateurs, c'est le type de travail que nous réalisons de l'idée à la boutique.



