01Panoramica del progetto
Kyndsy è un'app mobile che risponde a una domanda a cui la maggior parte delle persone non può rispondere su se stessa: come parlo realmente? Ascolta la voce del suo proprietario durante una conversazione ordinaria e conta le parole rozze, quelle educate, i riempitivi e i momenti in cui il tono diventa acuto. Mostra la tendenza nel corso di giorni e settimane. E poi si ferma — non dice alla persona che tipo di umano la rende.
Il presupposto è che le app di auto-miglioramento tracciano principalmente un grafico della tua opinione. Tu riporti la tua giornata, loro visualizzano il rapporto. Kyndsy parte da qualcosa di più difficile da contestare: le parole che sono state effettivamente dette, contate mentre la persona era impegnata a vivere piuttosto che sedersi a riflettere.
Questo è anche ciò che rende il prodotto difficile. Contare il discorso significa un microfono, e un microfono significa che la persona deve fidarsi dell'app più di quanto non si fidi di quasi tutto il resto sul telefono. Quindi l'intero prodotto è costruito attorno a una promessa che doveva essere strutturale: il suono non viene mai registrato, le parole non vengono mai scritte, le voci di altre persone non vengono analizzate e non c'è alcun account a cui collegare tutto ciò.
Abbiamo progettato e costruito tutto: l'app per iOS e Android, il suo contenuto in trenta lingue, il backend leggero, il percorso di rilascio nello store e il sito del prodotto. Di seguito è il problema, le decisioni e le parti che abbiamo deliberatamente rifiutato di costruire.
02Contesto e problema
Un'app che ascolta è una categoria in cui l'implementazione ovvia è anche quella sbagliata. Scomporre il compito ha prodotto un insieme di vincoli che ha plasmato tutto il resto.
- La fiducia è il prodotto.Un'app che misura il parlato ha esattamente un bene, e non è l'algoritmo. Se una persona sospetta che l'audio esca dal telefono, non importa quanto sia precisa — disinstalla.
- Altre persone non hanno acconsentito.Un microfono in una stanza cattura chiunque sia presente. Analizzare le persone intorno al proprietario sarebbe un'app completamente diversa, e molto peggiore.
- Un numero su una persona è pericoloso.Qualsiasi punteggio singolo che pretende di riassumere un essere umano è un'affermazione che il prodotto non può onestamente fare — e che le persone leggeranno come un verdetto indipendentemente dal disclaimer.
- I conteggi grezzi mentono."Hai giurato nove volte oggi" premia il silenzio. Una persona che non dice nulla sembra una persona che è migliorata.
- Le parole sono ambigue.La stessa parola è una battuta, una citazione, un lamento auto-diretto o un vero insulto a seconda del tono e del contesto. Contare la stringa da sola produce numeri che nessuno riconosce come il proprio giorno.
- Le persone non parlano una sola lingua.Cambiano a metà frase. Un contatore che segue solo una di esse riporta un giorno sospettosamente calmo ogni volta che il suo proprietario cambia codice.
- I negozi hanno regolesull'uso del microfono, sulle affermazioni riguardanti la salute e la psicologia, e su cosa può essere bloccato da un abbonamento — e vengono applicate al momento della sottomissione, non al giorno del lancio.
Tutto questo doveva funzionare su un telefono, in background, senza scaricare la batteria o la pazienza della persona.
03Obiettivi del progetto
- Misura il discorso sul dispositivo.L'analisi avviene sul telefono; l'audio non viene mai memorizzato e mai caricato.
- Solo la voce del proprietario.Altre voci vengono scartate piuttosto che analizzate, e non c'è una modalità per puntare l'app su un'altra persona.
- Nessun account, nessun nome.Niente da divulgare, perché non c'è nulla raccolto da divulgare.
- Tassi, non conteggi grezzi.Tutto per mille parole pronunciate, quindi una giornata tranquilla è una giornata tranquilla e non un risultato.
- Trenta lingue, compresa la lingua mista — i dizionari devono esistere in tutte contemporaneamente, altrimenti il numero è sbagliato per le persone che cambiano.
- Distinguere le sfumature. Ironia, sarcasmo, una battuta e un commento acuto genuino distinti e etichettati come un'ipotesi, mai come un verdetto.
- Utile senza il microfono. Il diario, la bussola dei valori, i test e le domande serali funzionano da soli.
- Motivazione che non può essere manipolata. Corsa, livelli e programmi giudicati in base alla misurazione piuttosto che aprendo l'app.
- Nessun punteggio complessivo di una persona. Né nella versione uno né in seguito.
04Cosa abbiamo fatto
L'app è costruita come quattro sezioni, ognuna delle quali risponde a una domanda diversa, più le parti che le sostengono:
- Oggi — cosa è appena successo: il punteggio del discorso, gli obiettivi del giorno e un singolo suggerimento, mai un elenco di sei.
- Progresso — se sta andando da qualche parte: corse, livelli, programmi e il rapporto settimanale.
- La Bussola — cosa ha deciso di puntare: tre a cinque valori che ha scelto da solo, e il movimento verso di essi.
- Tu — tutto ciò che appartiene solo a loro: i test di autovalutazione, l'accesso familiare, i loro dati e supporto.
Sotto ci sono i pezzi che rendono quei quattro onesti: analisi vocale sul dispositivo, dizionari e regole per trenta lingue, il classificatore di ombre, il modello di conteggio che funziona in tassi piuttosto che in totali, un backend leggero che sa quasi nulla e un registro delle impostazioni che consente al prodotto di cambiare senza un rilascio dallo store.
05Privacy come codice, non copia
Le affermazioni sulla privacy sul sito non sono testi di marketing che una successiva ottimizzazione potrebbe invalidare silenziosamente. Sono proprietà della build, e il progetto tratta un cambiamento che rende false queste affermazioni come un difetto piuttosto che un compromesso.
- Il suono non è scritto da nessuna parte — non su un file, non su un buffer temporaneo su disco, non su un log. Nemmeno in una build di debug, perché una build di debug è come queste cose sfuggono.
- Solo la voce del proprietario viene analizzata.La voce di altre persone viene scartata prima che diventi parole.
- Niente viene trascritto.L'app produce contatori, non testo; non c'è nessuna frase memorizzata da trapelare, citare in giudizio o sincronizzare accidentalmente.
- Una sessione inizia solo quando una persona la avvia.Nessun avvio automatico dopo un riavvio, nessuna ripresa silenziosa in background.
- Il profilo vocale non lascia mai il telefono ed è escluso dai backup del dispositivo — è un dato biometrico, e un backup è l'unico posto in cui le persone dimenticano che può viaggiare.
- Il backend viene informato di quattro cose e nient'altro: una richiesta di impostazioni, un download di modello una tantum, un messaggio di supporto se la persona ne ha scritto uno, e una ricevuta di abbonamento. Non c'è alcun account.
- Una persona è una coppia di numeri casuali creati dal proprio telefono. Non li emettiamo e non li contiamo — il che significa che non sappiamo quante installazioni ci sono, e questo era un prezzo deliberato.
- Accedere è facoltativo e non sblocca nulla. Esiste per trasferire un abbonamento e la cronologia a un nuovo telefono. Renderlo obbligatorio avrebbe creato un collegamento a un'identità reale dove oggi non esiste.
Quel punto finale è quello su cui vale la pena soffermarsi. La richiesta del proprietario era di non sapere nulla tranne un id anonimo — e il modo allettante per soddisfarla è un accesso obbligatorio che poi promettiamo di non leggere. Abbiamo fatto l'opposto: nessun account e un accesso facoltativo che legge esattamente un campo dal token e lo memorizza in modo hash.
06Cosa conta realmente l'app
Quattro cose: espressioni rozze, espressioni educate, parole riempitive e un tono alzato o affilato. Tutte sono riportate per mille parole pronunciate, mai come un totale grezzo — perché un conteggio grezzo fa sembrare il silenzio un progresso, e un'app che premia il suo proprietario per non parlare ha frainteso il proprio lavoro.
Il titolo del giorno è un indice di discorso rispettoso, e le regole attorno ad esso sono considerate tanto quanto il numero stesso:
- È nascosto completamente fino a quando non sono state udite cinquanta parole.Uno zero in una mattina tranquilla suona come un'accusa, non come dati mancanti.
- Giorni sotto cinquanta parole sono mostrati ma non conteggiati — visibili come vuoti piuttosto che fingere di essere una buona giornata.
- La cortesia può sollevarlo di dieci punti al massimo.Qualsiasi ulteriore aumento renderebbe il punteggio più economico da manipolare con cortesie piuttosto che guadagnarlo non essendo scortese.
- Qualsiasi singolo evento può essere contrassegnato come sbagliato, e farlo cambia il numero piuttosto che semplicemente cancellare una voce da un elenco.
Le visualizzazioni in cima sono ordinarie nella forma e curate nei dettagli: una tendenza di sette giorni, un'immagine ora per ora della giornata, una griglia di trenta giorni con un quadrato per giorno. La visualizzazione oraria rifiuta di dichiarare un "ora peggiore" fino a quando non ha dieci eventi su cui basarsi; la griglia di trenta giorni lascia i giorni tranquilli beige piuttosto che colorarli come calmi. I grafici che sono sicuri su dati esigui sono come un prodotto di misurazione che perde la fiducia del lettore — di solito per sempre.
07Toni del discorso: ironia, una battuta, un colpo
Una battuta e un insulto non sono la stessa parola due volte. Kyndsy separa l'ironia da un commento tagliente genuino, una battuta da un colpo, una citazione da qualcosa che la persona intendeva — e mostra cosa pensa di aver sentito, in parole, accanto all'evento.
Due regole mantengono quella funzione onesta. Prima di tutto, è presentata come una supposizione, non un verdetto: l'app dice "possibile ironia" o "una battuta — non conteggiata" e mostra su cosa si basa. Secondo, e più importante, la classificazione delle sfumature non sposta mai l'indice. Informa la persona; non regola silenziosamente il loro punteggio. Un numero ponderato per fiducia sarebbe impossibile da controllare per chiunque e diventerebbe silenziosamente la caratteristica più contestata del prodotto.
La stessa attenzione si applica al contesto: la stessa parola conta in modo diverso quando la persona cita qualcuno, parla di se stessa o è nel mezzo di un argomento. E poiché nessun dizionario può sapere cosa significano le parole di una persona particolare per loro, possono tenere le proprie liste.
08Trenta lingue — e il mix
L'app funziona in trenta lingue — inglese, spagnolo, portoghese, tedesco, francese, italiano, olandese, svedese, danese, norvegese, finlandese, polacco, ceco, croato, romeno, ungherese, greco, turco, russo, ucraino, bielorusso, ebraico, arabo, hindi, indonesiano, vietnamita, tailandese, cinese, giapponese e coreano — e in diverse di esse contemporaneamente, perché è così che molte persone parlano realmente.
Trenta lingue non sono trenta traduzioni dell'interfaccia. Sono trenta set di dizionari — espressioni approssimative, formule cortesi, riempitivi — e devono atterrare nello stesso momento. Una lingua il cui dizionario è a metà non fallisce rumorosamente; riporta una giornata calma. La persona vede un buon numero e ci crede, il che è peggio di un messaggio di errore.
Una lezione di questo progetto si generalizza bene oltre di esso: una funzione rilevata dalla forma del testo si interrompe alla prima lingua scritta in modo diverso. Trattare "una frase" come "una stringa contenente uno spazio" funziona fino al giapponese, cinese e tailandese, che sono scritti senza di essi — e lì l'app non trova nulla, silenziosamente, mentre sembra che stia funzionando. Il comportamento linguistico deve provenire dai dati della lingua stessa, e deve essere coperto da un test che si esegue su tutte e trenta.
09La bussola e il diario
Il discorso è solo metà del prodotto. L'altra metà è ciò a cui la persona ha deciso di mirare: scelgono da tre a cinque valori tra sette — rispetto, onestà, autocontrollo, responsabilità, cura, equità, affidabilità — e l'app mostra movimento verso quelli, piuttosto che verso l'idea di qualcun altro su cosa significhi essere una brava persona.
Il movimento è tratto da due fonti: le misurazioni del discorso e il diario personale delle cose fatte — mantenere una promessa, scusarsi, rispondere male a qualcuno, riparare il danno. Tre domande alla fine della giornata, quando le vogliono.
E c'è nessun punteggio morale complessivo, né ora né mai. Questa è l'unica cosa che il prodotto rifiuta di calcolare. È anche il motivo per cui la bussola funziona: una persona sceglierà valori onesti solo per un'app che non la giudicherà in base al risultato.
Tutto in questa metà funziona senza il microfono. Il diario, la bussola, i test e le domande serali stanno in piedi da soli, quindi una persona può impostare la parte vocale in seguito, o mai, e comunque ottenere qualcosa dall'app. Questa è stata una decisione di prodotto con reali conseguenze per la retention, e la rifaremmo di nuovo — un prompt di autorizzazione nella prima schermata è dove un'app sensibile alla privacy perde le persone per cui è stata creata.
10Programmi, corse e il rapporto settimanale
La motivazione in quest'app doveva essere immune ai due soliti trucchi: aprire l'app molte volte e non dire nulla. Quindi:
- Programmicorri da 7 a 30 giorni con un obiettivo e un numero — sette giorni senza parole dure, risposte più dolci per quindici giorni, meno riempitivi in un mese. Se ha funzionato è deciso dalle misurazioni, non spuntando una casella.
- Una corsaconta i giorni in cui la persona ha effettivamente mantenuto il livello.I giorni silenziosi né lo interrompono né lo estendono— mettere via il telefono non è un modo per vincere.
- I livelli si guadagnano con i giorni, non con le aperture dell'app: Osservare, Controllo, Parlare calmo.
- Scudicoprono un errore, fino a un certo punto, e un giorno rotto può essere recuperato — ma una corsa di trenta giorni con quattro giorni recuperati non è una corsa di trenta giorni, quindi quelli sono contati e mostrati separatamente.
- Il rapporto settimanale dice chiaramente quando non c'è abbastanza da confrontare.Un riepilogo in cui qualcosa è sempre migliorato smette di essere letto dalla terza settimana.
Una asimmetria deliberata merita di essere nominata: il piano gratuito limita quanto storico è mostrato, non quanto è contato. Calcolare un'analisi solo sulla finestra visibile avrebbe mostrato un'analisi di trenta giorni come sette — non una limitazione del piano gratuito ma una falsa affermazione sulla persona.
11Cento test di autovalutazione
Accanto alle misurazioni ci sono cento test di autovalutazione strutturati: venticinque affermazioni ciascuna, circa quattro minuti, valutati su cinque aspetti separatamente in modo che la risposta non sia mai un numero piatto. Coprono il linguaggio, i sentimenti, le persone a te vicine, il lavoro, te stesso, le abitudini e la vita online.
Essi sono esplicitamente non diagnosi e non misurazioni della personalità — sono riflessioni strutturate su se stessi, e l'app lo dice dove una persona lo leggerà piuttosto che in una schermata delle impostazioni. Le risposte rimangono sul telefono come tutto il resto.
Il punto ingegneristico qui è che cento test non possono essere mantenuti come cento schermate scritte a mano. Sono una risorsa, non codice: generati da fonti, convalidati al momento della costruzione e rifiutati se un test non ha il suo set completo di dichiarazioni e aspetti. Quel controllo è ciò che rende possibile averne cento in totale, ed è il motivo per cui le loro regole di sblocco potrebbero essere distribuite in modo coerente piuttosto che sparse a mano.
Metà di essi si sbloccano attraverso l'uso, metà attraverso l'acquisto. I prodotti del negozio dietro la metà a pagamento sono deliberatamente pochi piuttosto che uno per test — nessuno crea cento elenchi nel negozio a mano, e nessuno traduce cento di essi in trenta lingue. Il prodotto venduto è uno sblocco; la persona sceglie su quale test spenderlo all'interno dell'app, dopo che l'acquisto è confermato.
12Abbonamento, famiglia e i negozi
Il livello a pagamento è un abbonamento, e un piano familiare lo condivide — sei posti per un anno, incluso quello dell'acquirente. Ciò che conta è ciò che la famiglia condivide e ciò che non condivide: una famiglia condivide il diritto, non i dati. Nessuno vede i numeri, gli eventi o il diario degli altri, e la persona che ha pagato vede posti e date libere, non chi è in essi.
Non è una riga nel piccolo stampato; è così che è costruito. Le misurazioni di altre persone non sono affatto sul server, quindi non c'è nulla da esporre accidentalmente in uno schermo familiare. Inserire un codice significa accettare di condividere un abbonamento, non accettare di essere identificati.
Due regole di implementazione di questa parte hanno superato la funzionalità. Prima, l'abbonamento e il diritto familiare sono una sola bandiera nell'app: una seconda domanda del tipo "o forse sono in una famiglia" verrebbe dimenticata esattamente nei posti dove conta. Secondo, il silenzio del server non revoca il diritto — la rete cade molto più spesso di quanto un abbonamento finisca, e un'app che blocca un cliente pagante su un treno ha fatto una scelta ovvia male.
La politica del negozio ha plasmato gran parte della superficie qui: cosa può affermare un'app per microfoni, come può essere presentato un livello a pagamento, e il fatto che una build rotta non può essere ripristinata con un hotfix. Ecco perché la politica delle versioni — versione minima supportata, aggiornamento forzato, modalità di manutenzione e il messaggio mostrato, in tutte le lingue del progetto contemporaneamente — è un'impostazione lato server piuttosto che qualcosa di compilato.
13Architettura: app, backend, registro
L'architettura deriva dalla promessa di privacy: il più possibile sul telefono, il meno possibile sul server.
- L'app esegue l'analisi, tiene la cronologia e possiede il profilo vocale. È il prodotto completo; il server ha un ruolo di supporto.
- Un backend leggero risponde a quattro tipi di richieste: impostazioni, download di un modello una tantum, messaggi di supporto e ricevute di abbonamento. Non ha una tabella utenti, perché non ha utenti da inserire.
- Un registro di configurazione contiene ciò che altrimenti sarebbe codificato in modo fisso nell'app: identificatore del pacchetto, indirizzo API, parametri di accesso, elenco delle lingue, flag delle funzionalità e politica delle versioni. I valori vengono generati nel sorgente piuttosto che digitati lì, e il file generato è contrassegnato come non modificabile per il semplice motivo che una modifica manuale viene persa alla generazione successiva.
- Un controllo pre-volo verifica ogni build: rifiuta se l'identificatore del pacchetto è deviato dal registro, se la versione non è superiore all'ultima spedita, se il server dell'app non risponde, se un dizionario è incompleto in una delle lingue del progetto, se l'analisi statica non è pulita, se i test falliscono, o se viene trovata qualsiasi cosa che somigli a una chiave nel sorgente. Restituisce un codice di uscita diverso da zero, il che lo rende utilizzabile come gate in qualsiasi CI.
- Il livello a pagamento è dietro un flagche può essere disattivato senza una ricostruzione e senza una nuova versione del negozio.
Il sito è una piccola applicazione PHP senza un proprio database oltre alla corrispondenza di supporto — lo stesso principio applicato a un livello superiore.
14Stack tecnologico
- Flutterper iOS e Android da un'unica base di codice — con un sistema di design nel codice, quindi colore, spaziatura e raggio sono dichiarati in un unico posto piuttosto che in ogni widget.
- Riconoscimento vocale su dispositivoe analisi su dispositivo: i modelli vengono scaricati una sola volta e eseguiti localmente, con il manifesto che li descrive costruito dai file piuttosto che scritto a mano.
- PHP 8.4per il backend dell'app e il sito, con un piccolo database utilizzato solo per la corrispondenza di supporto.
- Un registro di configurazionecome fonte di verità per le impostazioni dell'app, con codice generato e un gate di pre-volo.
- Trenta pacchetti linguisticiper l'app e tre per il sito, con parità del dizionario garantita da test piuttosto che da revisione.
- Una rigorosa politica di sicurezza dei contenuti sul sito — nessuno stile inline, valori calcolati compilati in un foglio di stile e un font auto-ospitato, quindi la pagina sulla privacy non recupera una singola risorsa di terze parti.
15Design e UX
Il linguaggio visivo è un tema scuro, preso dal sito del prodotto in modo che ciò che viene promesso a un visitatore sia ciò che apre. Un secondo tema chiaro è stato scritto nei token ed è stato deliberatamente non rilasciato: due temi significano due set di screenshot e il doppio dei luoghi in cui un layout si rompe senza essere notato.
Colore, spaziatura e raggio vivono in un unico file di design, e la transizione tra un colore allarmante e uno calmo avvieneattraverso un giallo caldo — l'interpolazione diretta dà un fango oliva, che è il tipo di cosa che sembra trascuratezza ed è in realtà un waypoint mancante.
L'app ha un carattere, e le regole che lo circondano riguardano l'onestà tanto quanto il fascino: l'umore è leggibile dalla silhouette, non solo dal colore, quindi una persona daltonica vede la stessa cosa che vedono tutti gli altri; l'umore è una scala continua animata tra valori piuttosto che cinque immagini fisse, perché un salto viene percepito come un'immagine diversa piuttosto che lo stesso amico; e all'estremità ansiosa le sopracciglia si alzano agli estremi interni, perché giù e dentro è rabbia verso la persona che guarda.
In ogni altro luogo l'interfaccia segue la regola centrale del prodotto: mostrare ciò che è stato misurato, dire quando non c'è abbastanza per dire nulla, e non trasformare mai una persona in un singolo numero.
16Come abbiamo lavorato
- La promessa prima. Abbiamo scritto cosa l'app non avrebbe mai fatto — mantenere audio, analizzare altre persone, chiedere chi sei, valutarti come persona — prima di progettare qualsiasi cosa, perché quelle decisioni vincolano l'architettura piuttosto che seguirne l'andamento.
- Nucleo di misurazione. Analisi sul dispositivo, il modello di conteggio in tassi, l'indice con le sue soglie e il suo rifiuto di apparire su dati esigui.
- Lavoro linguistico.Trenta dizionari e regole, con parità applicata da test su tutti loro contemporaneamente.
- L'altra metà.Bussola, diario, programmi, esecuzioni, rapporto settimanale — tutto ciò che funziona senza il microfono.
- Test come risorsa.Cento test di autovalutazione generati e convalidati, con la loro scala di sblocco distribuita dal generatore.
- Monetizzazione.Abbonamento, famiglia, il piccolo set di prodotti del negozio e un livello a pagamento dietro una bandiera.
- Percorso di rilascio.Registro, configurazione generata, gate di pre-volo, registrazione della build e politica di versione.
- Il sito.Tre lingue, una rigorosa politica di sicurezza dei contenuti e una pagina di atterraggio che mostra gli schermi reali dell'app.
Due cose continuavano a tornare durante la build, e entrambe ora sono regole. Qualsiasi cosa l'interfaccia affermi sul comportamento di una persona deve essere verificabile rispetto a una misurazione, e qualsiasi cosa l'app prometta sulla privacy deve essere applicata dal codice piuttosto che da una nota in un documento — una comprensione condivisa sopravvive esattamente fino alla prossima persona che non l'ha letta.
17Il risultato
Ciò che è emerso è un prodotto di misurazione per qualcosa che le persone di solito indovinano, costruito in modo che la misurazione non costi loro la privacy.
- Analisi del parlato sul dispositivo: nulla registrato, nulla trascritto, altre voci escluse.
- Tutto riportato per mille parole, quindi il silenzio non è scambiato per progresso.
- Ironia, sarcasmo e barzellette raccontate separatamente — e etichettate come un'ipotesi che non muove mai il punteggio.
- Trenta lingue con dizionari che atterrano insieme, coperte da test su tutte.
- Una bussola dei valori, un diario, programmi e un rapporto settimanale che ammette quando ha troppo poco da confrontare.
- Cento test di autovalutazione come risorse validate, con un piccolo set di prodotti di magazzino mantenibili dietro la metà a pagamento.
- Un piano familiare che condivide l'abbonamento e nient'altro, perché i dati non sono sul server da condividere.
18Lezioni apprese
Kyndsy è il progetto in cui l'ingegneria più difficile era nei vincoli. Analisi sul dispositivo, nessun trascritto, nessun account, nessun punteggio complessivo, nessuna analisi dei presenti — ognuno di questi ha reso la costruzione più difficile e il prodotto possibile. Una versione di questa app con un pipeline lato server e un login sarebbe stata più veloce da scrivere e non avrebbe meritato il microfono di nessuno.
La lezione che portiamo avanti riguarda come vengono mantenute le promesse: una garanzia che vive in un documento è una garanzia fino al prossimo cambiamento che nessuno controlla.. Quelli che sono stati mantenuti qui sono quelli espressi come codice e coperti da test — parità tra trenta lingue, contrasto verificato come numero piuttosto che a occhio, movimento verificato da valori piuttosto che da screenshot, un gate di build che rifiuta piuttosto che avvisare.
Se stai costruendo un prodotto mobile in cui la privacy è la caratteristica piuttosto che la clausola di esclusione, qualcosa che deve funzionare in molte lingue contemporaneamente, o un'app i cui numeri le persone dovrebbero fidarsi riguardo a se stesse, questo è il tipo di lavoro che portiamo dall'idea al negozio.



