1. In breve
Tacca è pensata per funzionare offline. Non c'è un account, non c'è un server dello sviluppatore e l'app non ci invia statistiche d'uso. Schede, allenamenti, foto e note restano sul tuo dispositivo e non vengono mai trasmessi a noi.
Qualcosa esce dal dispositivo solo in questi casi:
- Importazione AI con la tua API key — opzionale e disattivata finché non salvi una chiave: il testo e le foto che scegli vanno al provider che hai configurato (OpenRouter, Anthropic o Google), solo quando avvii tu l'importazione.
- Importazione tramite la tua chat AI — l'app non si collega a niente: prepara un messaggio e lo copia negli appunti, e sei tu a incollarlo nella chat che preferisci.
- Condivisione come immagine — la scheda esce dal dispositivo solo verso l'app che scegli tu nel foglio di condivisione.
- Solo su Android, lettura del testo dalle foto — la libreria ML Kit di Google, che riconosce il testo sul dispositivo, invia a Google dati diagnostici sul proprio funzionamento: mai le tue immagini né il testo riconosciuto.
Non raccogliamo dati personali. Non li vediamo, non li conserviamo, non li vendiamo, non li usiamo per pubblicità.
2. Chi siamo
Tacca è un progetto personale open source sviluppato e distribuito da Dorin Tverdohleb (sito tverdohleb.dev, codice sorgente su GitHub, licenza Apache 2.0). L'uso dell'app è regolato dai Termini e Condizioni.
Poiché l'app non trasmette dati a noi e non prevede alcun trattamento lato server, non ricopriamo il ruolo di titolare del trattamento rispetto ai dati che inserisci nell'app (art. 4, punto 7 GDPR): quei dati restano sul tuo dispositivo o vanno, su tua richiesta, ai servizi che scegli tu, e noi non abbiamo alcun modo di accedervi. Questa informativa è comunque fornita per trasparenza e per soddisfare i requisiti degli store.
3. Dati salvati sul tuo dispositivo
L'app conserva i tuoi dati nell'area di memoria riservata all'app:
- Schede di allenamento — nome, descrizione e note; giorni, blocchi ed esercizi con i loro parametri (serie, ripetizioni, carichi, tempi, note); stato «in uso» o «archiviata»; date di creazione e modifica. Database locale (ObjectBox).
- Storico degli allenamenti — per ogni sessione: inizio e fine, stato (in corso, completata, interrotta), note della sessione e i nomi di scheda, giorno ed esercizi com'erano al momento dell'allenamento; per ogni serie: ripetizioni, peso, note e orario. Database locale.
- Foto delle schede importate — gli originali delle foto usate per un'importazione AI vengono salvati a piena risoluzione e allegati alla scheda, dove li ritrovi come «Immagini originali». File nella cartella privata dell'app.
- Preferenze — lingua e tema scelti, provider e modello AI, versione dell'avviso iniziale che hai accettato. Secure storage del sistema (iOS Keychain / Android Keystore).
- Chiavi API — una per provider, solo se le inserisci tu. Secure storage del sistema.
Durante l'uso l'app crea anche alcuni dati tecnici temporanei, sempre locali: la coda delle serie confermate dalla schermata di blocco (quale sessione, esercizio e serie, e l'orario del tocco), svuotata appena l'app la applica; file temporanei per la lettura delle foto, eliminati subito, e per le immagini condivise e le foto selezionate, nelle cartelle temporanee che il sistema operativo ripulisce.
Questi dati non vengono trasmessi a noi, né a servizi di analytics, crash reporting o pubblicità; non sono associati a un account, perché l'app non ne prevede uno; puoi consultarli, modificarli ed eliminarli dall'app, con i limiti descritti nella sezione 11.
Se attivi un backup di sistema (Backup di Google su Android, Backup iCloud su iOS), i dati dell'app — il database, le foto allegate e, a seconda del sistema operativo, le voci del secure storage in forma cifrata — possono essere inclusi in quel backup secondo le regole del tuo sistema operativo e del relativo fornitore. Quel trattamento è governato dalle informative di Google e Apple, non da questa.
4. Permessi richiesti dall'app
L'app chiede solo i permessi necessari alle funzioni che usi, e ogni richiesta arriva nel momento in cui serve, non all'installazione.
- Fotocamera — solo se scegli di fotografare una scheda da importare. Su iPhone il sistema ti chiede il permesso la prima volta; su Android l'app apre l'app Fotocamera del sistema e riceve solo la foto che scatti.
- Foto / Galleria — solo se scegli immagini da importare. L'app riceve soltanto le immagini che selezioni; a seconda del sistema e della sua versione può comparire la richiesta di accesso alle foto oppure il selettore di sistema.
- Notifiche — all'avvio della prima sessione di allenamento: servono per i segnali del timer quando l'app è in background o lo schermo è spento, e per la notifica della sessione in corso.
- Sveglie e promemoria (Android) — può essere chiesto insieme alle notifiche, perché il segnale di fine recupero suoni all'istante giusto anche a schermo spento.
Il sistema concede inoltre in automatico, senza chiedertelo, alcune autorizzazioni tecniche: accesso a internet e allo stato della rete (per l'importazione AI e, su Android, per la libreria descritta nella sezione 8), vibrazione, schermo acceso durante la sessione e ripristino dei segnali programmati dopo il riavvio del telefono.
L'app non richiede posizione, contatti, microfono, calendario, né identificatori pubblicitari.
Se neghi un permesso, l'app continua a funzionare: perdi solo la funzione specifica (per esempio, senza fotocamera puoi comunque incollare il testo della scheda o scriverla a mano; senza notifiche il timer funziona a schermo acceso).
5. Schermata di blocco e notifiche
Durante una sessione l'app mostra l'esercizio in corso anche fuori dall'app: con una Live Activity (e nella Dynamic Island) su iPhone, con una notifica persistente su Android. Ci trovi il nome dell'esercizio, la serie a cui sei, il conto alla rovescia del recupero e il pulsante «Serie fatta».
- Queste informazioni sono visibili sulla schermata di blocco, anche a telefono bloccato, a chiunque guardi lo schermo; il pulsante «Serie fatta» funziona senza sbloccare il telefono.
- Tutto avviene sul dispositivo: la Live Activity e le notifiche vengono create e aggiornate localmente dall'app, senza alcun server di notifiche push.
- Puoi disattivarle dalle impostazioni di sistema (le Live Activity di Tacca su iPhone, le notifiche o il canale «Sessione in corso» su Android): la sessione funziona lo stesso, senza banner.
6. Importazione AI con la tua API key
È la funzione con cui Tacca, su tua richiesta, si collega a un servizio esterno. È opzionale e resta disattivata finché non configuri una chiave.
Come funziona:
- In Impostazioni → Intelligenza artificiale scegli un provider tra OpenRouter, Anthropic e Google (Gemini API), inserisci una chiave API di tua proprietà e scegli il modello.
- Quando premi «Digitalizza», l'app invia al provider scelto il contenuto da importare.
- Se il provider è OpenRouter, la richiesta viene inoltrata al fornitore del modello che hai selezionato.
- La risposta torna nell'app come scheda strutturata, che si apre nell'editor per la tua revisione. La scheda non viene salvata finché non premi Salva; le foto originali, invece, vengono già copiate nella cartella privata dell'app per restare allegate alla bozza (sezione 11).
Il pulsante «Prova connessione» invia al provider una sola richiesta autenticata per verificare la chiave, senza alcun contenuto tuo.
Cosa viene inviato, esattamente.
- Le foto che hai scelto, ridotte di risoluzione e ricompresse prima dell'invio: in questo passaggio i metadati EXIF delle foto (per esempio data di scatto o posizione, se presenti) non vengono copiati.
- Il testo che hai incollato o scritto.
- Le eventuali «Indicazioni per l'AI» che aggiungi.
- Le istruzioni tecniche dell'app: prompt fissi, in inglese e identici per tutti gli utenti, che spiegano al modello come restituire la scheda in formato JSON strutturato, senza alcuna informazione su di te, sul tuo dispositivo o sui tuoi allenamenti.
Ogni foto richiede due chiamate: nella prima il modello la trascrive, nella seconda riceve la trascrizione e la trasforma in una scheda. Se la risposta non è valida, l'app fa un solo nuovo tentativo automatico, rinviando la risposta precedente insieme all'errore di validazione. Se il modello selezionato non supporta le immagini, le foto non vengono trasmesse affatto: il testo viene letto sul dispositivo (sezione 8) e viene inviato solo quello.
Nelle richieste a OpenRouter l'app si presenta con il nome «Tacca»: è un'informazione sull'app, non su di te.
Cosa non viene inviato:
- Nessun identificatore del dispositivo o pubblicitario, e nessun account Tacca, che non esiste.
- Nessun dato del tuo storico allenamenti.
- Nessuna altra scheda presente nell'app.
- Nessuna impostazione o preferenza personale.
Come per qualsiasi connessione a internet, il provider riceve comunque l'indirizzo IP da cui parte la richiesta, e la chiave API collega le richieste al tuo account presso di lui.
Chi tratta i dati, e a che titolo. L'app non contiene alcuna chiave API nostra e non effettua chiamate di rete per conto proprio. La richiesta parte dal tuo dispositivo, con le tue credenziali, verso il tuo account presso il provider. Di conseguenza: il rapporto contrattuale e di trattamento è tra te e il provider (e, con OpenRouter, a valle il fornitore del modello); valgono le loro condizioni e informative privacy, che ti invitiamo a leggere prima di attivare la funzione; i costi delle richieste sono addebitati sul tuo account; noi non vediamo, non intercettiamo e non conserviamo né le richieste né le risposte.
Conservazione e addestramento presso i provider. Per quanto tempo il provider conserva i contenuti, e se può usarli per migliorare i propri modelli, dipende dal provider, dal modello e dal tuo piano. Alcuni servizi, soprattutto gratuiti, lo prevedono, anche con revisione umana: per esempio il livello gratuito della Gemini API per chi si trova fuori dallo Spazio Economico Europeo, dalla Svizzera e dal Regno Unito, o alcuni fornitori raggiungibili tramite OpenRouter, che puoi escludere dalle impostazioni privacy del tuo account OpenRouter. Documenti di riferimento: informativa di OpenRouter; Commercial Terms e informativa di Anthropic; condizioni aggiuntive della Gemini API e informativa di Google.
Poiché i provider e i fornitori dei modelli possono operare fuori dallo Spazio Economico Europeo, l'uso di questa funzione può comportare un trasferimento di dati verso paesi terzi. È una scelta che compi tu, per singola importazione.
Cosa non inviare. Le foto di una scheda cartacea possono contenere per inavvertenza dati che non intendi trasmettere: il tuo nome, quello del preparatore, annotazioni su condizioni di salute o infortuni. Controlla l'immagine prima di inviarla, oppure incolla solo il testo che ti serve.
Le chiavi API. Ogni chiave è conservata nel secure storage del sistema operativo (iOS Keychain / Android Keystore), separata per provider. Non viene mai scritta nel database dell'app, non compare nei log, non viene esportata e non viene trasmessa a nessuno tranne il provider a cui appartiene, come intestazione di autenticazione delle tue richieste. Puoi rimuoverla in qualunque momento dalle impostazioni.
7. Importazione tramite la tua chat AI
Con «Con la tua chat AI» ottieni la stessa importazione senza alcuna chiave, e l'app non si collega a niente:
- scrivi o incolli la scheda, oppure la fotografi: in quel caso il testo viene letto sul dispositivo (sezione 8) e inserito in un campo che puoi correggere;
- l'app prepara un messaggio con il testo della scheda, le eventuali indicazioni che aggiungi e le istruzioni per convertirla, e lo copia negli appunti di sistema;
- sei tu a incollarlo nella chat AI che preferisci e a riportare la risposta nell'app; l'app legge gli appunti solo quando premi «Incolla dagli appunti».
Le foto non vengono inviate da nessuna parte: nel messaggio finisce solo il testo che vedi nel campo, e le foto restano allegate alla scheda sul dispositivo, come nell'importazione automatica (sezione 11). La chat la scegli e la usi tu, con il tuo account: quello che vi incolli è trattato secondo le condizioni e l'informativa di quel servizio.
Tieni presente che gli appunti sono gestiti dal sistema operativo: altre app possono leggerne il contenuto, e alcune funzioni di sistema (per esempio gli Appunti universali di Apple) li sincronizzano con gli altri tuoi dispositivi.
8. Lettura del testo dalle foto (OCR)
Quando il testo va letto da una foto — con un modello che non supporta le immagini, o nell'importazione tramite la tua chat — il riconoscimento avviene sul dispositivo: con il framework Vision di Apple su iPhone, con la libreria ML Kit di Google, inclusa nell'app, su Android. La foto passa per un file temporaneo che viene eliminato subito dopo.
Su Android, secondo la documentazione di Google, ML Kit non invia né le immagini né il testo riconosciuto, ma trasmette a Google, cifrati via HTTPS, dati diagnostici e statistiche d'uso della libreria stessa: produttore e modello del dispositivo e versione del sistema, nome e versione dell'app, un identificatore per installazione che non è pensato per identificare l'utente o il dispositivo, metriche di prestazione, configurazione della richiesta (per esempio formato e risoluzione dell'immagine), eventi ed eventuali codici di errore. Google dichiara di usarli per diagnostica e analisi d'uso della libreria e di non cederli a terzi. Noi non li riceviamo e non vi abbiamo accesso.
9. Condivisione di una scheda come immagine
Dal dettaglio di una scheda, «Condividi» disegna la scheda intera in un'immagine PNG — nome, descrizione, note, giorni, blocchi ed esercizi con carichi e note — e la passa al foglio di condivisione del sistema, insieme al nome della scheda. L'immagine non contiene il tuo storico, i pesi registrati né le foto originali.
La destinazione la scegli tu (una chat, la posta, le tue foto…) e da lì l'immagine è soggetta alle regole di quell'app o servizio e di chi la riceve. L'app non ne conserva copie: il file viene preparato nella cartella temporanea, che il sistema ripulisce.
10. Cosa non facciamo
Per essere espliciti, Tacca non:
- richiede la creazione di un account;
- ci invia dati di utilizzo, statistiche o crash report, né integra servizi di analytics o crash reporting (l'unico invio automatico di dati diagnostici è quello di ML Kit su Android, descritto nella sezione 8);
- integra SDK di terze parti per pubblicità, tracking o attribuzione;
- usa identificatori pubblicitari (IDFA, GAID) o fingerprinting del dispositivo;
- accede alla posizione, ai contatti o al microfono;
- incorpora un browser: l'unico collegamento esterno, ai termini e condizioni, si apre nel browser di sistema;
- profila gli utenti né adotta processi decisionali automatizzati con effetti giuridici (art. 22 GDPR);
- vende, cede o condivide con terzi i tuoi contenuti: schede, storico, foto e note escono dal dispositivo solo quando sei tu a deciderlo.
11. Conservazione e cancellazione
I dati restano sul dispositivo finché non li cancelli tu.
- Schede e sessioni: puoi eliminarle una per una dall'app, le schede dall'archivio e le sessioni dallo storico. La cancellazione di una scheda non elimina lo storico ad essa collegato, che resta consultabile perché conserva i nomi di scheda ed esercizi.
- Foto allegate: nella versione attuale dell'app le foto originali restano nella cartella privata dell'app anche quando elimini la scheda a cui erano allegate o scarti una bozza importata, e non c'è un comando per cancellarle una per una. Per rimuoverle definitivamente puoi cancellare i dati dell'app dalle impostazioni di sistema (su Android) oppure disinstallarla: in entrambi i casi vengono cancellati anche schede e storico.
- Chiavi API e preferenze: ogni chiave si rimuove dalle impostazioni dell'app, provider per provider; lingua e tema possono tornare a «Come il sistema». Se non usi più una chiave, revocala anche dal sito del provider.
- Tutto: disinstallando l'app il sistema operativo elimina il database e le foto. Su iPhone, però, le voci del portachiavi — chiavi API e preferenze — possono restare memorizzate anche dopo la disinstallazione e ricomparire se reinstalli l'app: per cancellare una chiave, rimuovila dalle impostazioni prima di disinstallare.
Non abbiamo copie dei tuoi dati e quindi non c'è nulla da cancellare presso di noi.
12. I tuoi diritti
Il GDPR ti riconosce i diritti di accesso, rettifica, cancellazione, limitazione, opposizione e portabilità (artt. 15-21).
Poiché i dati sono esclusivamente locali e sotto il tuo controllo diretto, questi diritti li eserciti direttamente nell'app: puoi consultare, modificare ed eliminare i tuoi contenuti senza intermediari, con i limiti descritti nella sezione 11. Non essendo in possesso di alcun tuo dato, non possiamo dar seguito a richieste di accesso o cancellazione, semplicemente perché non c'è nulla su cui agire.
Per i dati trattati dal provider AI che hai scelto, dal servizio di chat che usi o, su Android, da Google tramite ML Kit, devi rivolgerti direttamente a quei soggetti.
Se ritieni che un trattamento violi la normativa, puoi proporre reclamo al Garante per la protezione dei dati personali (www.garanteprivacy.it) o all'autorità di controllo del tuo Stato membro.
13. Minori
L'app non è indirizzata a minori di 16 anni e non raccoglie consapevolmente dati di minori. Non essendoci account né raccolta di dati, non effettuiamo verifiche dell'età. L'importazione AI automatica richiede un account presso il provider scelto, soggetto ai requisiti di età di quel servizio: la Gemini API di Google, per esempio, richiede almeno 18 anni.
14. Sicurezza
- I dati sono conservati nell'area sandbox riservata all'app, protetta dal sistema operativo.
- Le chiavi API sono nel secure storage del sistema, una per provider, e ciascuna viene inviata solo al provider a cui appartiene.
- Tutte le comunicazioni con i provider AI avvengono su HTTPS.
- Il codice sorgente è pubblico e verificabile: chiunque può controllare che l'app faccia solo ciò che è dichiarato qui.
Nessuna misura è infallibile: la protezione dei dati dipende anche dalla sicurezza del tuo dispositivo (blocco schermo, crittografia, aggiornamenti di sistema).
15. Modifiche a questa informativa
Se le funzionalità dell'app cambiano in modo da incidere sul trattamento dei dati (per esempio con l'aggiunta di nuovi provider AI), questa informativa verrà aggiornata e la data in cima al documento verrà modificata.
16. Contatti
Per domande su questa informativa: dorin@tverdohleb.dev
Per segnalazioni di sicurezza: vedi SECURITY.md — non aprire issue pubbliche.
1. In Short
Tacca is designed to work offline. There is no account, no developer server, and the app sends us no usage statistics. Your programs, workouts, photos, and notes stay on your device and are never transmitted to us.
Something leaves your device only in these cases:
- AI import with your own API key — optional, and off until you save a key: the text and photos you choose go to the provider you configured (OpenRouter, Anthropic, or Google), only when you start the import.
- AI import through your own chat — the app connects to nothing: it prepares a message and copies it to the clipboard, and you paste it into whichever chat you prefer.
- Sharing as an image — the program leaves your device only toward the app you pick in the share sheet.
- Android only, reading text from photos — Google's ML Kit library, which recognizes text on the device, sends Google diagnostic data about its own operation: never your images or the recognized text.
We do not collect personal data. We don't see it, store it, sell it, or use it for advertising.
2. Who We Are
Tacca is a personal open-source project developed and distributed by Dorin Tverdohleb (website tverdohleb.dev, source code on GitHub, Apache 2.0 license). Use of the app is governed by the Terms and Conditions.
Because the app does not transmit data to us and involves no server-side processing, we do not act as data controller for the data you enter in the app (Art. 4(7) GDPR): that data stays on your device or goes, at your request, to services you choose, and we have no way to access it. This notice is nevertheless provided for transparency and to meet app store requirements.
3. Data Stored on Your Device
The app keeps your data in its private storage area:
- Training programs — name, description, and notes; days, blocks, and exercises with their parameters (sets, reps, loads, timing, notes); "in use" or "archived" status; creation and modification dates. Local database (ObjectBox).
- Workout history — for each session: start and end, status (in progress, completed, interrupted), session notes, and the program, day, and exercise names as they were at the time; for each set: reps, weight, notes, and time. Local database.
- Photos of imported programs — the originals of the photos used for an AI import are saved at full resolution and attached to the program, where you find them as "Original images". Files in the app's private folder.
- Preferences — chosen language and theme, AI provider and model, and the version of the first-launch notice you accepted. System secure storage (iOS Keychain / Android Keystore).
- API keys — one per provider, only if you enter them. System secure storage.
While in use, the app also creates some temporary technical data, always local: the queue of sets confirmed from the lock screen (which session, exercise, and set, and the time of the tap), emptied as soon as the app applies it; temporary files for reading photos, deleted right away, and for shared images and selected photos, in temporary folders that the operating system clears.
This data is never transmitted to us, nor to any analytics, crash-reporting, or advertising service; it is not tied to an account, since the app has none; and you can view, edit, and delete it from within the app, within the limits described in section 11.
If you enable a system backup (Google Backup on Android, iCloud Backup on iOS), app data — the database, attached photos and, depending on the operating system, secure storage entries in encrypted form — may be included in that backup according to the rules of your operating system and its provider. That processing is governed by Google's and Apple's own privacy notices, not this one.
4. Permissions Requested by the App
The app only asks for the permissions needed by the features you use, and each request comes at the moment it's needed, not at install time.
- Camera — only if you choose to photograph a program to import. On iPhone the system asks for permission the first time; on Android the app opens the system Camera app and receives only the photo you take.
- Photos / Gallery — only if you choose images to import. The app receives only the images you select; depending on the system and its version, you may see a request for photo access or the system picker.
- Notifications — when you start your first workout session: they carry the timer signals while the app is in the background or the screen is off, and the notification for the session in progress.
- Alarms & reminders (Android) — may be requested together with notifications, so that the end-of-rest signal fires at the right moment even with the screen off.
The system also grants some technical permissions automatically, without asking you: internet and network state access (for AI import and, on Android, for the library described in section 8), vibration, keeping the screen on during a session, and restoring scheduled signals after the phone restarts.
The app does not request location, contacts, microphone, calendar, or advertising identifiers.
If you deny a permission, the app keeps working: you only lose that specific feature (e.g. without camera access you can still paste the program's text or type it in by hand; without notifications the timer works with the screen on).
5. Lock Screen and Notifications
During a session the app also shows the current exercise outside the app: as a Live Activity (and in the Dynamic Island) on iPhone, as an ongoing notification on Android. It contains the exercise name, the set you're on, the rest countdown, and a "Set done" button.
- This information is visible on the lock screen, even while the phone is locked, to anyone who looks at it; the "Set done" button works without unlocking the phone.
- Everything happens on the device: the Live Activity and notifications are created and updated locally by the app, with no push notification server.
- You can turn them off in the system settings (Tacca's Live Activities on iPhone, notifications or the "Sessione in corso" channel on Android): the session keeps working, just without the banner.
6. AI Import with Your Own API Key
This is the feature through which Tacca, at your request, connects to an external service. It is optional and stays disabled until you set up a key.
How it works:
- In Settings → Artificial intelligence, choose a provider among OpenRouter, Anthropic, and Google (Gemini API), enter an API key of your own, and pick the model.
- When you press "Digitize", the app sends the content to import to the chosen provider.
- If the provider is OpenRouter, the request is forwarded to the provider of the model you selected.
- The response comes back into the app as a structured program, which opens in the editor for your review. The program is not saved until you press Save; the original photos, however, are already copied into the app's private folder so they stay attached to the draft (section 11).
The "Test connection" button sends the provider a single authenticated request to check the key, with none of your content.
What is sent, exactly.
- The photos you chose, downscaled and recompressed before sending: in this step the photos' EXIF metadata (such as capture date or location, if present) is not copied.
- The text you pasted or typed.
- Any "Instructions for the AI" you add.
- The app's technical instructions: fixed prompts, in English and identical for every user, that tell the model how to return the program as structured JSON, containing no information about you, your device, or your training history.
Each photo takes two calls: in the first the model transcribes it, in the second it receives the transcription and turns it into a program. If a response is invalid, the app makes a single automatic retry, resending the previous response together with the validation error. If the selected model does not support images, photos are never transmitted at all: the text is read on-device (section 8), and only that text is sent.
In requests to OpenRouter the app identifies itself by the name "Tacca": that is information about the app, not about you.
What is never sent:
- No device or advertising identifier, and no Tacca account, since there is none.
- No data from your training history.
- No other program stored in the app.
- No personal settings or preferences.
As with any internet connection, the provider still receives the IP address the request comes from, and the API key links the requests to your account with that provider.
Who processes the data, and on what basis. The app contains no API key of ours and makes no network calls on its own behalf. The request originates from your device, with your credentials, to your account with the provider. As a result: the contractual and processing relationship is between you and the provider (and, with OpenRouter, downstream the model provider); their terms and privacy notices apply, and we recommend reading them before enabling the feature; request costs are billed to your account; and we never see, intercept, or store either the requests or the responses.
Retention and training at the providers. How long a provider keeps your content, and whether it may use it to improve its models, depends on the provider, the model, and your plan. Some services, especially free ones, allow it, including human review: for example, the free tier of the Gemini API for users outside the European Economic Area, Switzerland, and the United Kingdom, or some providers reachable through OpenRouter, which you can exclude in your OpenRouter account privacy settings. Reference documents: OpenRouter privacy policy; Anthropic's Commercial Terms and privacy policy; Google's Gemini API Additional Terms and privacy policy.
Because providers and model providers may operate outside the European Economic Area, using this feature can involve a transfer of data to third countries. This is a choice you make yourself, for each individual import.
What not to send. Photos of a paper program may inadvertently contain data you don't intend to share: your name, your coach's name, notes about health conditions or injuries. Check the image before sending it, or paste only the text you need.
API keys. Each key is stored in the operating system's secure storage (iOS Keychain / Android Keystore), separately for each provider. It is never written to the app's database, never appears in logs, is never exported, and is never transmitted to anyone other than the provider it belongs to, as an authentication header on your requests. You can remove it at any time from Settings.
7. AI Import Through Your Own Chat
"With your AI chat" gives you the same import with no key at all, and the app connects to nothing:
- you type or paste the program, or photograph it: in that case the text is read on-device (section 8) and placed in a field you can correct;
- the app prepares a message with the program's text, any instructions you add, and the instructions for converting it, and copies it to the system clipboard;
- you paste it into the AI chat you prefer and bring the reply back into the app; the app reads the clipboard only when you press "Paste from clipboard".
Photos are not sent anywhere: only the text you see in the field goes into the message, and the photos stay attached to the program on the device, as with the automatic import (section 11). You choose and use the chat, with your own account: whatever you paste into it is processed under that service's terms and privacy notice.
Keep in mind that the clipboard is managed by the operating system: other apps can read its contents, and some system features (for example Apple's Universal Clipboard) sync it with your other devices.
8. Reading Text from Photos (OCR)
When text has to be read from a photo — with a model that doesn't support images, or in the import through your own chat — recognition happens on the device: with Apple's Vision framework on iPhone, and with Google's ML Kit library, bundled with the app, on Android. The photo goes through a temporary file that is deleted right afterwards.
On Android, according to Google's documentation, ML Kit sends neither the images nor the recognized text, but it does transmit to Google, encrypted over HTTPS, diagnostic and usage data about the library itself: device manufacturer and model and OS version, app package name and version, a per-installation identifier that is not intended to identify the user or the device, performance metrics, request configuration (such as image format and resolution), events, and any error codes. Google states that it uses this data for diagnostics and usage analytics of the library and does not transfer it to third parties. We do not receive it and have no access to it.
9. Sharing a Program as an Image
From a program's detail page, "Share" draws the whole program into a PNG image — name, description, notes, days, blocks, and exercises with loads and notes — and hands it to the system share sheet, together with the program's name. The image does not contain your history, your logged weights, or the original photos.
You choose the destination (a chat, email, your photos…), and from there the image is subject to the rules of that app or service and of whoever receives it. The app keeps no copies: the file is prepared in the temporary folder, which the system clears.
10. What We Don't Do
To be explicit, Tacca does not:
- require creating an account;
- send us usage data, statistics, or crash reports, or integrate analytics or crash-reporting services (the only automatic sending of diagnostic data is ML Kit's on Android, described in section 8);
- integrate third-party SDKs for advertising, tracking, or attribution;
- use advertising identifiers (IDFA, GAID) or device fingerprinting;
- access location, contacts, or the microphone;
- embed a browser: the only external link, to the terms and conditions, opens in the system browser;
- profile users or use automated decision-making with legal effects (Art. 22 GDPR);
- sell, transfer, or share your content with third parties: programs, history, photos, and notes leave the device only when you decide so.
11. Retention and Deletion
Data stays on your device until you delete it.
- Programs and sessions: you can delete them one by one from within the app, programs from the archive and sessions from the history. Deleting a program does not delete the history linked to it, which remains viewable because it keeps the program and exercise names.
- Attached photos: in the current version of the app, the original photos remain in the app's private folder even when you delete the program they were attached to or discard an imported draft, and there is no command to delete them one by one. To remove them for good, you can clear the app's data from the system settings (on Android) or uninstall it: either way, programs and history are deleted too.
- API keys and preferences: each key can be removed from the app's settings, provider by provider; language and theme can go back to following the system. If you no longer use a key, also revoke it on the provider's website.
- Everything: uninstalling the app makes the operating system delete the database and the photos. On iPhone, however, Keychain entries — API keys and preferences — may remain stored even after uninstalling and reappear if you reinstall the app: to delete a key, remove it from Settings before uninstalling.
We hold no copies of your data, so there is nothing for us to delete on our end.
12. Your Rights
The GDPR grants you the rights of access, rectification, erasure, restriction, objection, and portability (Arts. 15-21).
Because the data is exclusively local and under your direct control, you exercise these rights directly within the app: you can view, modify, and delete your content without intermediaries, within the limits described in section 11. Since we hold none of your data, we cannot act on access or deletion requests, simply because there is nothing for us to act on.
For data processed by the AI provider you chose, by the chat service you use, or, on Android, by Google through ML Kit, you must contact those parties directly.
If you believe a processing activity violates the law, you can lodge a complaint with the Italian Data Protection Authority (www.garanteprivacy.it) or the supervisory authority of your EU member state.
13. Children
The app is not directed at children under 16 and does not knowingly collect data from minors. Since there is no account and no data collection, we do not perform age verification. The automatic AI import requires an account with the chosen provider, which is subject to that service's own age requirements: Google's Gemini API, for example, requires you to be at least 18.
14. Security
- Data is stored in the app's private sandbox area, protected by the operating system.
- API keys are kept in the system's secure storage, one per provider, and each is sent only to the provider it belongs to.
- All communication with AI providers happens over HTTPS.
- The source code is public and verifiable: anyone can check that the app does only what is declared here.
No measure is infallible: data protection also depends on the security of your own device (screen lock, encryption, system updates).
15. Changes to This Policy
If the app's features change in a way that affects data processing (for example, by adding new AI providers), this notice will be updated and the date at the top of the document will be revised. Substantial changes will be flagged inside the app.
16. Contact
For questions about this notice: dorin@tverdohleb.dev
To report a security issue: see SECURITY.md — please do not open public issues.
1. Kurz gesagt
Tacca ist darauf ausgelegt, offline zu funktionieren. Es gibt kein Konto, keinen Server des Entwicklers, und die App schickt uns keine Nutzungsstatistiken. Trainingspläne, Workouts, Fotos und Notizen bleiben auf deinem Gerät und werden nie an uns übertragen.
Etwas verlässt dein Gerät nur in diesen Fällen:
- KI-Import mit deinem eigenen API-Schlüssel — optional und deaktiviert, bis du einen Schlüssel speicherst: Der Text und die Fotos, die du auswählst, gehen an den Anbieter, den du eingerichtet hast (OpenRouter, Anthropic oder Google), und nur dann, wenn du den Import selbst startest.
- Import über deinen eigenen KI-Chat — die App verbindet sich mit nichts: Sie bereitet eine Nachricht vor und kopiert sie in die Zwischenablage, und du fügst sie selbst in den Chat deiner Wahl ein.
- Teilen als Bild — der Plan verlässt dein Gerät nur in Richtung der App, die du im Teilen-Menü auswählst.
- Nur auf Android, Texterkennung in Fotos — die Bibliothek ML Kit von Google, die den Text auf dem Gerät erkennt, sendet Google Diagnosedaten über ihre eigene Funktion: niemals deine Bilder oder den erkannten Text.
Wir erheben keine personenbezogenen Daten. Wir sehen sie nicht, speichern sie nicht, verkaufen sie nicht und nutzen sie nicht für Werbung.
2. Wer wir sind
Tacca ist ein persönliches Open-Source-Projekt, entwickelt und vertrieben von Dorin Tverdohleb (Website tverdohleb.dev, Quellcode auf GitHub, Lizenz Apache 2.0). Die Nutzung der App unterliegt den Nutzungsbedingungen.
Da die App keine Daten an uns überträgt und keine serverseitige Verarbeitung vorsieht, sind wir nicht Verantwortlicher für die Daten, die du in die App eingibst (Art. 4 Nr. 7 DSGVO): Diese Daten bleiben auf deinem Gerät oder gehen auf deinen Wunsch an Dienste, die du selbst wählst, und wir haben keinerlei Zugriff darauf. Diese Erklärung wird dennoch aus Gründen der Transparenz und zur Erfüllung der Anforderungen der App-Stores bereitgestellt.
3. Auf deinem Gerät gespeicherte Daten
Die App speichert deine Daten im privaten Speicherbereich der App:
- Trainingspläne — Name, Beschreibung und Notizen; Tage, Blöcke und Übungen mit ihren Parametern (Sätze, Wiederholungen, Gewichte, Zeiten, Notizen); Status „in Verwendung“ oder „archiviert“; Erstellungs- und Änderungsdatum. Lokale Datenbank (ObjectBox).
- Trainingsverlauf — für jede Einheit: Beginn und Ende, Status (laufend, abgeschlossen, abgebrochen), Notizen zur Einheit sowie die Namen von Plan, Tag und Übungen, wie sie zum Zeitpunkt des Trainings lauteten; für jeden Satz: Wiederholungen, Gewicht, Notizen und Uhrzeit. Lokale Datenbank.
- Fotos importierter Pläne — die Originale der Fotos, die für einen KI-Import verwendet wurden, werden in voller Auflösung gespeichert und dem Plan angehängt, wo du sie unter „Originalbilder“ findest. Dateien im privaten Ordner der App.
- Einstellungen — gewählte Sprache und gewähltes Design, KI-Anbieter und -Modell, Version des Hinweises beim ersten Start, den du akzeptiert hast. Sicherer Speicher des Systems (iOS-Schlüsselbund / Android Keystore).
- API-Schlüssel — einer pro Anbieter, nur wenn du sie selbst eingibst. Sicherer Speicher des Systems.
Während der Nutzung erzeugt die App außerdem einige temporäre technische Daten, stets lokal: die Warteschlange der auf dem Sperrbildschirm bestätigten Sätze (welche Einheit, welche Übung, welcher Satz und die Uhrzeit des Tippens), die geleert wird, sobald die App sie übernimmt; temporäre Dateien für das Lesen von Fotos, die sofort gelöscht werden, sowie für geteilte Bilder und ausgewählte Fotos, in temporären Ordnern, die das Betriebssystem bereinigt.
Diese Daten werden weder an uns noch an Analyse-, Absturzberichts- oder Werbedienste übertragen; sie sind an kein Konto gebunden, da die App keines vorsieht; du kannst sie in der App ansehen, bearbeiten und löschen, mit den in Abschnitt 11 beschriebenen Einschränkungen.
Wenn du ein System-Backup aktivierst (Google-Backup auf Android, iCloud-Backup auf iOS), können die Daten der App — die Datenbank, die angehängten Fotos und, je nach Betriebssystem, die Einträge des sicheren Speichers in verschlüsselter Form — nach den Regeln deines Betriebssystems und des jeweiligen Anbieters in dieses Backup aufgenommen werden. Diese Verarbeitung unterliegt den Datenschutzerklärungen von Google und Apple, nicht dieser.
4. Von der App angeforderte Berechtigungen
Die App fragt nur nach den Berechtigungen, die die von dir genutzten Funktionen benötigen, und jede Anfrage kommt in dem Moment, in dem sie gebraucht wird, nicht bei der Installation.
- Kamera — nur wenn du einen Plan zum Importieren fotografieren möchtest. Auf dem iPhone fragt das System beim ersten Mal nach der Erlaubnis; auf Android öffnet die App die Kamera-App des Systems und erhält nur das Foto, das du aufnimmst.
- Fotos / Galerie — nur wenn du Bilder zum Importieren auswählst. Die App erhält ausschließlich die Bilder, die du auswählst; je nach System und Version erscheint eine Anfrage für den Zugriff auf Fotos oder die Bildauswahl des Systems.
- Mitteilungen — beim Start deiner ersten Trainingseinheit: Sie dienen für die Timer-Signale, wenn die App im Hintergrund oder der Bildschirm aus ist, und für die Mitteilung der laufenden Einheit.
- Wecker und Erinnerungen (Android) — kann zusammen mit den Mitteilungen angefragt werden, damit das Signal am Ende der Pause auch bei ausgeschaltetem Bildschirm pünktlich ertönt.
Das System gewährt außerdem automatisch, ohne dich zu fragen, einige technische Berechtigungen: Zugriff auf das Internet und den Netzwerkstatus (für den KI-Import und, auf Android, für die in Abschnitt 8 beschriebene Bibliothek), Vibration, eingeschalteter Bildschirm während der Einheit und Wiederherstellung geplanter Signale nach einem Neustart des Telefons.
Die App fordert keinen Zugriff auf Standort, Kontakte, Mikrofon, Kalender oder Werbe-IDs an.
Wenn du eine Berechtigung verweigerst, funktioniert die App weiter: Du verlierst nur die jeweilige Funktion (zum Beispiel kannst du ohne Kamera den Text des Plans trotzdem einfügen oder von Hand schreiben; ohne Mitteilungen funktioniert der Timer bei eingeschaltetem Bildschirm).
5. Sperrbildschirm und Mitteilungen
Während einer Einheit zeigt die App die aktuelle Übung auch außerhalb der App an: als Live-Aktivität (und in der Dynamic Island) auf dem iPhone, als dauerhafte Mitteilung auf Android. Dort findest du den Namen der Übung, den aktuellen Satz, den Countdown der Pause und die Schaltfläche „Satz erledigt“.
- Diese Informationen sind auf dem Sperrbildschirm sichtbar, auch bei gesperrtem Telefon, für alle, die auf den Bildschirm schauen; die Schaltfläche „Satz erledigt“ funktioniert, ohne das Telefon zu entsperren.
- Alles geschieht auf dem Gerät: Die Live-Aktivität und die Mitteilungen werden von der App lokal erstellt und aktualisiert, ohne Push-Server.
- Du kannst sie in den Systemeinstellungen deaktivieren (die Live-Aktivitäten von Tacca auf dem iPhone, die Mitteilungen oder den Kanal „Sessione in corso“ auf Android): Die Einheit funktioniert trotzdem, nur ohne Banner.
6. KI-Import mit deinem eigenen API-Schlüssel
Mit dieser Funktion verbindet sich Tacca auf deinen Wunsch mit einem externen Dienst. Sie ist optional und bleibt deaktiviert, bis du einen Schlüssel einrichtest.
So funktioniert es:
- Wähle unter Einstellungen → Künstliche Intelligenz einen Anbieter aus OpenRouter, Anthropic und Google (Gemini API), gib einen eigenen API-Schlüssel ein und wähle das Modell.
- Wenn du auf „Digitalisieren“ tippst, sendet die App den zu importierenden Inhalt an den gewählten Anbieter.
- Ist der Anbieter OpenRouter, wird die Anfrage an den Anbieter des von dir gewählten Modells weitergeleitet.
- Die Antwort kommt als strukturierter Plan in die App zurück und öffnet sich im Editor zur Prüfung. Der Plan wird erst gespeichert, wenn du auf Speichern tippst; die Originalfotos werden dagegen bereits in den privaten Ordner der App kopiert, damit sie dem Entwurf angehängt bleiben (Abschnitt 11).
Die Schaltfläche „Verbindung testen“ sendet dem Anbieter eine einzige authentifizierte Anfrage, um den Schlüssel zu prüfen, ohne jeglichen Inhalt von dir.
Was genau gesendet wird.
- Die Fotos, die du ausgewählt hast, vor dem Senden verkleinert und neu komprimiert: Dabei werden die EXIF-Metadaten der Fotos (zum Beispiel Aufnahmedatum oder Standort, falls vorhanden) nicht übernommen.
- Der Text, den du eingefügt oder geschrieben hast.
- Eventuelle „Hinweise für die KI“, die du hinzufügst.
- Die technischen Anweisungen der App: feste Prompts, auf Englisch und für alle Nutzer identisch, die dem Modell erklären, wie es den Plan als strukturiertes JSON zurückgeben soll, ohne jegliche Information über dich, dein Gerät oder deine Trainings.
Jedes Foto erfordert zwei Aufrufe: Im ersten transkribiert das Modell es, im zweiten erhält es die Transkription und macht daraus einen Plan. Ist die Antwort ungültig, unternimmt die App einen einzigen automatischen neuen Versuch und sendet dabei die vorherige Antwort zusammen mit dem Validierungsfehler erneut. Unterstützt das gewählte Modell keine Bilder, werden die Fotos überhaupt nicht übertragen: Der Text wird auf dem Gerät gelesen (Abschnitt 8), und nur dieser wird gesendet.
In Anfragen an OpenRouter stellt sich die App mit dem Namen „Tacca“ vor: Das ist eine Information über die App, nicht über dich.
Was nicht gesendet wird:
- Keine Geräte- oder Werbe-ID und kein Tacca-Konto, denn es gibt keines.
- Keine Daten aus deinem Trainingsverlauf.
- Kein anderer in der App gespeicherter Plan.
- Keine persönlichen Einstellungen oder Vorlieben.
Wie bei jeder Internetverbindung erhält der Anbieter trotzdem die IP-Adresse, von der die Anfrage ausgeht, und der API-Schlüssel verknüpft die Anfragen mit deinem Konto bei ihm.
Wer die Daten verarbeitet und in welcher Rolle. Die App enthält keinen eigenen API-Schlüssel von uns und führt keine Netzwerkaufrufe auf eigene Rechnung durch. Die Anfrage geht von deinem Gerät aus, mit deinen Zugangsdaten, an dein Konto beim Anbieter. Daraus folgt: Das Vertrags- und Verarbeitungsverhältnis besteht zwischen dir und dem Anbieter (und bei OpenRouter nachgelagert dem Modellanbieter); es gelten deren Bedingungen und Datenschutzerklärungen, die du lesen solltest, bevor du die Funktion aktivierst; die Kosten der Anfragen werden deinem Konto belastet; wir sehen, erfassen und speichern weder die Anfragen noch die Antworten.
Speicherung und Training bei den Anbietern. Wie lange der Anbieter die Inhalte aufbewahrt und ob er sie zur Verbesserung seiner Modelle nutzen darf, hängt vom Anbieter, vom Modell und von deinem Tarif ab. Einige Dienste, vor allem kostenlose, sehen das vor, auch mit menschlicher Überprüfung: zum Beispiel die kostenlose Stufe der Gemini API für Nutzer außerhalb des Europäischen Wirtschaftsraums, der Schweiz und des Vereinigten Königreichs, oder einige über OpenRouter erreichbare Anbieter, die du in den Datenschutzeinstellungen deines OpenRouter-Kontos ausschließen kannst. Maßgebliche Dokumente: Datenschutzerklärung von OpenRouter; Commercial Terms und Datenschutzerklärung von Anthropic; zusätzliche Nutzungsbedingungen der Gemini API und Datenschutzerklärung von Google.
Da Anbieter und Modellanbieter außerhalb des Europäischen Wirtschaftsraums tätig sein können, kann die Nutzung dieser Funktion eine Übermittlung von Daten in Drittländer bedeuten. Diese Entscheidung triffst du selbst, bei jedem einzelnen Import.
Was du nicht senden solltest. Fotos eines Plans auf Papier können versehentlich Daten enthalten, die du nicht übermitteln möchtest: deinen Namen, den deines Trainers, Anmerkungen zu Erkrankungen oder Verletzungen. Prüfe das Bild vor dem Senden oder füge nur den Text ein, den du brauchst.
Die API-Schlüssel. Jeder Schlüssel wird im sicheren Speicher des Betriebssystems (iOS-Schlüsselbund / Android Keystore) aufbewahrt, getrennt nach Anbieter. Er wird nie in die Datenbank der App geschrieben, erscheint nicht in Logs, wird nicht exportiert und an niemanden übertragen außer an den Anbieter, zu dem er gehört, als Authentifizierungs-Header deiner Anfragen. Du kannst ihn jederzeit in den Einstellungen entfernen.
7. Import über deinen eigenen KI-Chat
Mit „Mit deinem KI-Chat“ bekommst du denselben Import ganz ohne Schlüssel, und die App verbindet sich mit nichts:
- Du schreibst oder fügst den Plan ein, oder du fotografierst ihn: In diesem Fall wird der Text auf dem Gerät gelesen (Abschnitt 8) und in ein Feld eingefügt, das du korrigieren kannst;
- die App bereitet eine Nachricht mit dem Text des Plans, deinen eventuellen Hinweisen und den Anweisungen zur Umwandlung vor und kopiert sie in die Zwischenablage des Systems;
- du selbst fügst sie in den KI-Chat deiner Wahl ein und bringst die Antwort zurück in die App; die App liest die Zwischenablage nur, wenn du auf „Aus der Zwischenablage einfügen“ tippst.
Die Fotos werden nirgendwohin gesendet: In die Nachricht gelangt nur der Text, den du im Feld siehst, und die Fotos bleiben wie beim automatischen Import dem Plan auf dem Gerät angehängt (Abschnitt 11). Den Chat wählst und nutzt du selbst, mit deinem eigenen Konto: Was du dort einfügst, wird nach den Bedingungen und der Datenschutzerklärung dieses Dienstes verarbeitet.
Beachte, dass die Zwischenablage vom Betriebssystem verwaltet wird: Andere Apps können ihren Inhalt lesen, und einige Systemfunktionen (zum Beispiel die universelle Zwischenablage von Apple) synchronisieren sie mit deinen anderen Geräten.
8. Texterkennung in Fotos (OCR)
Wenn Text aus einem Foto gelesen werden muss — bei einem Modell, das keine Bilder unterstützt, oder beim Import über deinen eigenen Chat —, erfolgt die Erkennung auf dem Gerät: mit dem Vision-Framework von Apple auf dem iPhone, mit der in die App eingebundenen Bibliothek ML Kit von Google auf Android. Das Foto durchläuft eine temporäre Datei, die unmittelbar danach gelöscht wird.
Auf Android sendet ML Kit laut der Dokumentation von Google weder die Bilder noch den erkannten Text, übermittelt Google aber, per HTTPS verschlüsselt, Diagnose- und Nutzungsdaten über die Bibliothek selbst: Hersteller und Modell des Geräts und Systemversion, Paketname und Version der App, eine Kennung pro Installation, die nicht dazu gedacht ist, den Nutzer oder das Gerät zu identifizieren, Leistungsmetriken, Konfiguration der Anfrage (zum Beispiel Format und Auflösung des Bildes), Ereignisse und eventuelle Fehlercodes. Google gibt an, diese Daten für Diagnose und Nutzungsanalyse der Bibliothek zu verwenden und sie nicht an Dritte weiterzugeben. Wir erhalten sie nicht und haben keinen Zugriff darauf.
9. Einen Plan als Bild teilen
In der Detailansicht eines Plans zeichnet „Teilen“ den gesamten Plan in ein PNG-Bild — Name, Beschreibung, Notizen, Tage, Blöcke und Übungen mit Gewichten und Notizen — und übergibt es zusammen mit dem Namen des Plans an das Teilen-Menü des Systems. Das Bild enthält weder deinen Verlauf noch die erfassten Gewichte noch die Originalfotos.
Das Ziel wählst du selbst (ein Chat, E-Mail, deine Fotos …), und von dort an unterliegt das Bild den Regeln dieser App oder dieses Dienstes und der Person, die es erhält. Die App behält keine Kopien: Die Datei wird im temporären Ordner vorbereitet, den das System bereinigt.
10. Was wir nicht tun
Um es deutlich zu sagen: Tacca
- verlangt keine Kontoerstellung;
- sendet uns keine Nutzungsdaten, Statistiken oder Absturzberichte und bindet keine Analyse- oder Absturzberichtsdienste ein (die einzige automatische Übermittlung von Diagnosedaten ist die von ML Kit auf Android, beschrieben in Abschnitt 8);
- bindet keine SDKs von Drittanbietern für Werbung, Tracking oder Attribution ein;
- verwendet keine Werbe-IDs (IDFA, GAID) und kein Geräte-Fingerprinting;
- greift nicht auf Standort, Kontakte oder Mikrofon zu;
- enthält keinen eingebauten Browser: Der einzige externe Link, zu den Nutzungsbedingungen, öffnet sich im Browser des Systems;
- erstellt keine Nutzerprofile und trifft keine automatisierten Entscheidungen mit rechtlicher Wirkung (Art. 22 DSGVO);
- verkauft, überlässt oder teilt deine Inhalte nicht mit Dritten: Pläne, Verlauf, Fotos und Notizen verlassen das Gerät nur, wenn du es entscheidest.
11. Speicherung und Löschung
Die Daten bleiben auf dem Gerät, bis du sie löschst.
- Pläne und Einheiten: Du kannst sie in der App einzeln löschen, die Pläne im Archiv und die Einheiten im Verlauf. Das Löschen eines Plans löscht nicht den zugehörigen Verlauf, der weiterhin einsehbar bleibt, weil er die Namen von Plan und Übungen speichert.
- Angehängte Fotos: In der aktuellen Version der App bleiben die Originalfotos im privaten Ordner der App, auch wenn du den Plan löschst, an den sie angehängt waren, oder einen importierten Entwurf verwirfst, und es gibt keinen Befehl, um sie einzeln zu löschen. Um sie endgültig zu entfernen, kannst du die Daten der App in den Systemeinstellungen löschen (auf Android) oder die App deinstallieren: In beiden Fällen werden auch Pläne und Verlauf gelöscht.
- API-Schlüssel und Einstellungen: Jeder Schlüssel lässt sich in den Einstellungen der App entfernen, Anbieter für Anbieter; Sprache und Design können wieder auf „Wie das System“ gestellt werden. Wenn du einen Schlüssel nicht mehr verwendest, widerrufe ihn auch auf der Website des Anbieters.
- Alles: Beim Deinstallieren der App löscht das Betriebssystem die Datenbank und die Fotos. Auf dem iPhone können die Einträge im Schlüsselbund — API-Schlüssel und Einstellungen — jedoch auch nach der Deinstallation gespeichert bleiben und wieder auftauchen, wenn du die App neu installierst: Um einen Schlüssel zu löschen, entferne ihn vor der Deinstallation in den Einstellungen.
Wir haben keine Kopien deiner Daten, daher gibt es bei uns nichts zu löschen.
12. Deine Rechte
Die DSGVO gewährt dir das Recht auf Auskunft, Berichtigung, Löschung, Einschränkung, Widerspruch und Datenübertragbarkeit (Art. 15–21).
Da die Daten ausschließlich lokal und unter deiner direkten Kontrolle sind, übst du diese Rechte direkt in der App aus: Du kannst deine Inhalte ohne Vermittler einsehen, ändern und löschen, mit den in Abschnitt 11 beschriebenen Einschränkungen. Da wir keinerlei Daten von dir besitzen, können wir Auskunfts- oder Löschanfragen nicht nachkommen, schlicht weil es nichts gibt, worauf wir handeln könnten.
Für Daten, die von dem KI-Anbieter deiner Wahl, von dem Chat-Dienst, den du nutzt, oder auf Android von Google über ML Kit verarbeitet werden, musst du dich direkt an diese wenden.
Wenn du der Meinung bist, dass eine Verarbeitung gegen geltendes Recht verstößt, kannst du Beschwerde bei der italienischen Datenschutzbehörde (www.garanteprivacy.it) oder bei der Aufsichtsbehörde deines Mitgliedstaats einlegen.
13. Minderjährige
Die App richtet sich nicht an Kinder unter 16 Jahren und erhebt wissentlich keine Daten von Minderjährigen. Da es weder Konten noch eine Datenerhebung gibt, führen wir keine Altersprüfung durch. Der automatische KI-Import erfordert ein Konto beim gewählten Anbieter, das dessen eigenen Altersanforderungen unterliegt: Die Gemini API von Google zum Beispiel setzt ein Mindestalter von 18 Jahren voraus.
14. Sicherheit
- Die Daten werden im Sandbox-Bereich der App gespeichert, der vom Betriebssystem geschützt wird.
- Die API-Schlüssel liegen im sicheren Speicher des Systems, einer pro Anbieter, und jeder wird nur an den Anbieter gesendet, zu dem er gehört.
- Die gesamte Kommunikation mit den KI-Anbietern erfolgt über HTTPS.
- Der Quellcode ist öffentlich und überprüfbar: Jeder kann kontrollieren, dass die App nur das tut, was hier angegeben ist.
Keine Maßnahme ist unfehlbar: Der Schutz der Daten hängt auch von der Sicherheit deines Geräts ab (Bildschirmsperre, Verschlüsselung, Systemupdates).
15. Änderungen dieser Erklärung
Wenn sich die Funktionen der App so ändern, dass die Verarbeitung von Daten betroffen ist (zum Beispiel durch neue KI-Anbieter), wird diese Erklärung aktualisiert und das Datum oben im Dokument geändert. Wesentliche Änderungen werden in der App angezeigt.
16. Kontakt
Bei Fragen zu dieser Erklärung: dorin@tverdohleb.dev
Um ein Sicherheitsproblem zu melden: siehe SECURITY.md — bitte keine öffentlichen Issues eröffnen.
1. En resumen
Tacca está pensada para funcionar sin conexión. No hay cuenta, no hay servidor del desarrollador y la app no nos envía estadísticas de uso. Rutinas, entrenamientos, fotos y notas se quedan en tu dispositivo y nunca se nos transmiten.
Algo sale del dispositivo solo en estos casos:
- Importación con IA con tu propia API key — opcional y desactivada hasta que guardes una clave: el texto y las fotos que elijas van al proveedor que hayas configurado (OpenRouter, Anthropic o Google), solo cuando tú inicias la importación.
- Importación a través de tu propio chat de IA — la app no se conecta a nada: prepara un mensaje y lo copia en el portapapeles, y eres tú quien lo pega en el chat que prefieras.
- Compartir como imagen — la rutina sale del dispositivo solo hacia la app que elijas en el menú de compartir.
- Solo en Android, lectura del texto de las fotos — la biblioteca ML Kit de Google, que reconoce el texto en el dispositivo, envía a Google datos de diagnóstico sobre su propio funcionamiento: nunca tus imágenes ni el texto reconocido.
No recopilamos datos personales. No los vemos, no los conservamos, no los vendemos y no los usamos para publicidad.
2. Quiénes somos
Tacca es un proyecto personal de código abierto desarrollado y distribuido por Dorin Tverdohleb (sitio tverdohleb.dev, código fuente en GitHub, licencia Apache 2.0). El uso de la app se rige por los Términos y Condiciones.
Como la app no nos transmite datos y no prevé ningún tratamiento en servidor, no actuamos como responsables del tratamiento de los datos que introduces en la app (art. 4.7 RGPD): esos datos se quedan en tu dispositivo o van, a petición tuya, a los servicios que tú eliges, y no tenemos ninguna forma de acceder a ellos. Esta política se ofrece igualmente por transparencia y para cumplir los requisitos de las tiendas de aplicaciones.
3. Datos guardados en tu dispositivo
La app conserva tus datos en el área de almacenamiento reservada a la app:
- Rutinas de entrenamiento — nombre, descripción y notas; días, bloques y ejercicios con sus parámetros (series, repeticiones, cargas, tiempos, notas); estado «en uso» o «archivada»; fechas de creación y modificación. Base de datos local (ObjectBox).
- Historial de entrenamientos — para cada sesión: inicio y fin, estado (en curso, completada, interrumpida), notas de la sesión y los nombres de rutina, día y ejercicios tal como eran en el momento del entrenamiento; para cada serie: repeticiones, peso, notas y hora. Base de datos local.
- Fotos de las rutinas importadas — los originales de las fotos usadas en una importación con IA se guardan a resolución completa y se adjuntan a la rutina, donde los encuentras como «Imágenes originales». Archivos en la carpeta privada de la app.
- Preferencias — idioma y tema elegidos, proveedor y modelo de IA, versión del aviso inicial que aceptaste. Almacenamiento seguro del sistema (llavero de iOS / Android Keystore).
- Claves API — una por proveedor, solo si las introduces tú. Almacenamiento seguro del sistema.
Durante el uso, la app crea además algunos datos técnicos temporales, siempre locales: la cola de series confirmadas desde la pantalla de bloqueo (qué sesión, ejercicio y serie, y la hora del toque), que se vacía en cuanto la app la aplica; archivos temporales para leer las fotos, que se eliminan de inmediato, y para las imágenes compartidas y las fotos seleccionadas, en carpetas temporales que el sistema operativo limpia.
Estos datos no se nos transmiten a nosotros, ni a servicios de analítica, informes de errores o publicidad; no están asociados a una cuenta, porque la app no la tiene; puedes consultarlos, modificarlos y eliminarlos desde la app, con los límites descritos en la sección 11.
Si activas una copia de seguridad del sistema (Copia de seguridad de Google en Android, copia de seguridad de iCloud en iOS), los datos de la app — la base de datos, las fotos adjuntas y, según el sistema operativo, las entradas del almacenamiento seguro en forma cifrada — pueden incluirse en esa copia según las reglas de tu sistema operativo y de su proveedor. Ese tratamiento se rige por las políticas de privacidad de Google y Apple, no por esta.
4. Permisos que solicita la app
La app solo pide los permisos necesarios para las funciones que usas, y cada solicitud llega en el momento en que hace falta, no al instalarla.
- Cámara — solo si decides fotografiar una rutina para importarla. En iPhone el sistema te pide permiso la primera vez; en Android la app abre la app Cámara del sistema y recibe solo la foto que haces.
- Fotos / Galería — solo si eliges imágenes para importar. La app recibe únicamente las imágenes que seleccionas; según el sistema y su versión, puede aparecer la solicitud de acceso a las fotos o el selector del sistema.
- Notificaciones — al iniciar tu primera sesión de entrenamiento: sirven para las señales del temporizador cuando la app está en segundo plano o la pantalla apagada, y para la notificación de la sesión en curso.
- Alarmas y recordatorios (Android) — puede solicitarse junto con las notificaciones, para que la señal de fin de descanso suene en el momento exacto incluso con la pantalla apagada.
Además, el sistema concede automáticamente, sin preguntarte, algunas autorizaciones técnicas: acceso a internet y al estado de la red (para la importación con IA y, en Android, para la biblioteca descrita en la sección 8), vibración, pantalla encendida durante la sesión y restablecimiento de las señales programadas tras reiniciar el teléfono.
La app no solicita ubicación, contactos, micrófono, calendario ni identificadores publicitarios.
Si deniegas un permiso, la app sigue funcionando: solo pierdes esa función concreta (por ejemplo, sin cámara puedes pegar el texto de la rutina o escribirla a mano; sin notificaciones el temporizador funciona con la pantalla encendida).
5. Pantalla de bloqueo y notificaciones
Durante una sesión, la app muestra el ejercicio en curso también fuera de la app: con una Actividad en Vivo (y en la Dynamic Island) en iPhone, con una notificación persistente en Android. Ahí encuentras el nombre del ejercicio, la serie en la que estás, la cuenta atrás del descanso y el botón «Serie hecha».
- Esta información es visible en la pantalla de bloqueo, incluso con el teléfono bloqueado, para cualquiera que mire la pantalla; el botón «Serie hecha» funciona sin desbloquear el teléfono.
- Todo ocurre en el dispositivo: la Actividad en Vivo y las notificaciones las crea y actualiza la app localmente, sin ningún servidor de notificaciones push.
- Puedes desactivarlas en los ajustes del sistema (las Actividades en Vivo de Tacca en iPhone, las notificaciones o el canal «Sessione in corso» en Android): la sesión funciona igual, sin el banner.
6. Importación con IA con tu propia API key
Es la función con la que Tacca, a petición tuya, se conecta a un servicio externo. Es opcional y permanece desactivada hasta que configures una clave.
Cómo funciona:
- En Ajustes → Inteligencia artificial eliges un proveedor entre OpenRouter, Anthropic y Google (Gemini API), introduces una clave API propia y eliges el modelo.
- Cuando pulsas «Digitalizar», la app envía al proveedor elegido el contenido que quieres importar.
- Si el proveedor es OpenRouter, la solicitud se reenvía al proveedor del modelo que hayas seleccionado.
- La respuesta vuelve a la app como una rutina estructurada, que se abre en el editor para que la revises. La rutina no se guarda hasta que pulsas Guardar; las fotos originales, en cambio, ya se copian en la carpeta privada de la app para quedar adjuntas al borrador (sección 11).
El botón «Probar conexión» envía al proveedor una única solicitud autenticada para verificar la clave, sin ningún contenido tuyo.
Qué se envía, exactamente.
- Las fotos que elegiste, reducidas de resolución y recomprimidas antes del envío: en este paso no se copian los metadatos EXIF de las fotos (por ejemplo, fecha de captura o ubicación, si los hay).
- El texto que pegaste o escribiste.
- Las «Indicaciones para la IA» que añadas, si las hay.
- Las instrucciones técnicas de la app: prompts fijos, en inglés e idénticos para todos los usuarios, que explican al modelo cómo devolver la rutina en formato JSON estructurado, sin ninguna información sobre ti, tu dispositivo o tus entrenamientos.
Cada foto requiere dos llamadas: en la primera el modelo la transcribe, en la segunda recibe la transcripción y la convierte en una rutina. Si la respuesta no es válida, la app hace un único nuevo intento automático, reenviando la respuesta anterior junto con el error de validación. Si el modelo seleccionado no admite imágenes, las fotos no se transmiten en absoluto: el texto se lee en el dispositivo (sección 8) y solo se envía ese texto.
En las solicitudes a OpenRouter, la app se identifica con el nombre «Tacca»: es una información sobre la app, no sobre ti.
Qué no se envía:
- Ningún identificador del dispositivo ni publicitario, y ninguna cuenta de Tacca, porque no existe.
- Ningún dato de tu historial de entrenamientos.
- Ninguna otra rutina guardada en la app.
- Ningún ajuste ni preferencia personal.
Como en cualquier conexión a internet, el proveedor recibe igualmente la dirección IP desde la que parte la solicitud, y la clave API vincula las solicitudes con tu cuenta en ese proveedor.
Quién trata los datos, y en calidad de qué. La app no contiene ninguna clave API nuestra y no realiza llamadas de red por cuenta propia. La solicitud sale de tu dispositivo, con tus credenciales, hacia tu cuenta en el proveedor. Por lo tanto: la relación contractual y de tratamiento es entre tú y el proveedor (y, con OpenRouter, más adelante el proveedor del modelo); se aplican sus condiciones y políticas de privacidad, que te recomendamos leer antes de activar la función; el coste de las solicitudes se carga en tu cuenta; nosotros no vemos, no interceptamos ni conservamos ni las solicitudes ni las respuestas.
Conservación y entrenamiento en los proveedores. Cuánto tiempo conserva el proveedor los contenidos, y si puede usarlos para mejorar sus modelos, depende del proveedor, del modelo y de tu plan. Algunos servicios, sobre todo los gratuitos, lo contemplan, incluso con revisión humana: por ejemplo, el nivel gratuito de la Gemini API para quienes se encuentran fuera del Espacio Económico Europeo, Suiza y el Reino Unido, o algunos proveedores accesibles a través de OpenRouter, que puedes excluir en los ajustes de privacidad de tu cuenta de OpenRouter. Documentos de referencia: política de privacidad de OpenRouter; Commercial Terms y política de privacidad de Anthropic; condiciones adicionales de la Gemini API y política de privacidad de Google.
Como los proveedores y los proveedores de modelos pueden operar fuera del Espacio Económico Europeo, el uso de esta función puede implicar una transferencia de datos a terceros países. Es una elección que haces tú, en cada importación.
Qué no enviar. Las fotos de una rutina en papel pueden contener sin querer datos que no quieres transmitir: tu nombre, el de tu entrenador, anotaciones sobre problemas de salud o lesiones. Revisa la imagen antes de enviarla, o pega solo el texto que necesitas.
Las claves API. Cada clave se guarda en el almacenamiento seguro del sistema operativo (llavero de iOS / Android Keystore), separada por proveedor. Nunca se escribe en la base de datos de la app, no aparece en los registros, no se exporta y no se transmite a nadie salvo al proveedor al que pertenece, como cabecera de autenticación de tus solicitudes. Puedes eliminarla en cualquier momento desde los ajustes.
7. Importación a través de tu propio chat de IA
Con «Con tu chat de IA» obtienes la misma importación sin ninguna clave, y la app no se conecta a nada:
- escribes o pegas la rutina, o la fotografías: en ese caso el texto se lee en el dispositivo (sección 8) y se coloca en un campo que puedes corregir;
- la app prepara un mensaje con el texto de la rutina, las indicaciones que añadas y las instrucciones para convertirla, y lo copia en el portapapeles del sistema;
- eres tú quien lo pega en el chat de IA que prefieras y quien trae la respuesta de vuelta a la app; la app lee el portapapeles solo cuando pulsas «Pegar del portapapeles».
Las fotos no se envían a ninguna parte: en el mensaje solo va el texto que ves en el campo, y las fotos quedan adjuntas a la rutina en el dispositivo, como en la importación automática (sección 11). El chat lo eliges y lo usas tú, con tu cuenta: lo que pegues en él se trata según las condiciones y la política de privacidad de ese servicio.
Ten en cuenta que el portapapeles lo gestiona el sistema operativo: otras apps pueden leer su contenido, y algunas funciones del sistema (por ejemplo, el Portapapeles universal de Apple) lo sincronizan con tus otros dispositivos.
8. Lectura del texto de las fotos (OCR)
Cuando hay que leer texto de una foto — con un modelo que no admite imágenes, o en la importación a través de tu chat —, el reconocimiento se hace en el dispositivo: con el framework Vision de Apple en iPhone y con la biblioteca ML Kit de Google, incluida en la app, en Android. La foto pasa por un archivo temporal que se elimina justo después.
En Android, según la documentación de Google, ML Kit no envía ni las imágenes ni el texto reconocido, pero transmite a Google, cifrados mediante HTTPS, datos de diagnóstico y estadísticas de uso de la propia biblioteca: fabricante y modelo del dispositivo y versión del sistema, nombre y versión de la app, un identificador por instalación que no está pensado para identificar al usuario ni al dispositivo, métricas de rendimiento, configuración de la solicitud (por ejemplo, formato y resolución de la imagen), eventos y posibles códigos de error. Google declara que los usa para diagnóstico y análisis de uso de la biblioteca y que no los cede a terceros. Nosotros no los recibimos ni tenemos acceso a ellos.
9. Compartir una rutina como imagen
Desde el detalle de una rutina, «Compartir» dibuja la rutina completa en una imagen PNG — nombre, descripción, notas, días, bloques y ejercicios con cargas y notas — y la pasa al menú de compartir del sistema, junto con el nombre de la rutina. La imagen no contiene tu historial, los pesos registrados ni las fotos originales.
El destino lo eliges tú (un chat, el correo, tus fotos…) y, a partir de ahí, la imagen queda sujeta a las reglas de esa app o servicio y de quien la reciba. La app no guarda copias: el archivo se prepara en la carpeta temporal, que el sistema limpia.
10. Lo que no hacemos
Para ser explícitos, Tacca no:
- requiere crear una cuenta;
- nos envía datos de uso, estadísticas ni informes de errores, ni integra servicios de analítica o de informes de errores (el único envío automático de datos de diagnóstico es el de ML Kit en Android, descrito en la sección 8);
- integra SDK de terceros para publicidad, seguimiento o atribución;
- usa identificadores publicitarios (IDFA, GAID) ni huella digital del dispositivo;
- accede a la ubicación, los contactos ni el micrófono;
- incorpora un navegador: el único enlace externo, a los términos y condiciones, se abre en el navegador del sistema;
- elabora perfiles de usuarios ni toma decisiones automatizadas con efectos jurídicos (art. 22 RGPD);
- vende, cede ni comparte tus contenidos con terceros: rutinas, historial, fotos y notas salen del dispositivo solo cuando tú lo decides.
11. Conservación y eliminación
Los datos se quedan en el dispositivo hasta que tú los eliminas.
- Rutinas y sesiones: puedes eliminarlas una a una desde la app, las rutinas desde el archivo y las sesiones desde el historial. Eliminar una rutina no elimina el historial vinculado, que sigue siendo consultable porque conserva los nombres de la rutina y de los ejercicios.
- Fotos adjuntas: en la versión actual de la app, las fotos originales se quedan en la carpeta privada de la app aunque elimines la rutina a la que estaban adjuntas o descartes un borrador importado, y no hay un comando para eliminarlas una a una. Para borrarlas definitivamente, puedes borrar los datos de la app desde los ajustes del sistema (en Android) o desinstalarla: en ambos casos se eliminan también las rutinas y el historial.
- Claves API y preferencias: cada clave se elimina desde los ajustes de la app, proveedor por proveedor; el idioma y el tema pueden volver a «Como el sistema». Si ya no usas una clave, revócala también en el sitio del proveedor.
- Todo: al desinstalar la app, el sistema operativo elimina la base de datos y las fotos. En iPhone, sin embargo, las entradas del llavero — claves API y preferencias — pueden seguir guardadas incluso después de desinstalarla y reaparecer si la vuelves a instalar: para borrar una clave, elimínala desde los ajustes antes de desinstalar.
No tenemos copias de tus datos, así que no hay nada que eliminar por nuestra parte.
12. Tus derechos
El RGPD te reconoce los derechos de acceso, rectificación, supresión, limitación, oposición y portabilidad (arts. 15-21).
Como los datos son exclusivamente locales y están bajo tu control directo, estos derechos los ejerces directamente en la app: puedes consultar, modificar y eliminar tus contenidos sin intermediarios, con los límites descritos en la sección 11. Como no tenemos ningún dato tuyo, no podemos atender solicitudes de acceso o supresión, sencillamente porque no hay nada sobre lo que actuar.
Para los datos tratados por el proveedor de IA que hayas elegido, por el servicio de chat que uses o, en Android, por Google a través de ML Kit, debes dirigirte directamente a ellos.
Si consideras que un tratamiento infringe la normativa, puedes presentar una reclamación ante la autoridad italiana de protección de datos (Garante per la protezione dei dati personali, www.garanteprivacy.it) o ante la autoridad de control de tu Estado miembro.
13. Menores
La app no está dirigida a menores de 16 años y no recopila a sabiendas datos de menores. Al no haber cuentas ni recogida de datos, no realizamos verificaciones de edad. La importación automática con IA requiere una cuenta en el proveedor elegido, sujeta a los requisitos de edad de ese servicio: la Gemini API de Google, por ejemplo, exige tener al menos 18 años.
14. Seguridad
- Los datos se guardan en el área aislada (sandbox) reservada a la app, protegida por el sistema operativo.
- Las claves API están en el almacenamiento seguro del sistema, una por proveedor, y cada una se envía solo al proveedor al que pertenece.
- Todas las comunicaciones con los proveedores de IA se realizan mediante HTTPS.
- El código fuente es público y verificable: cualquiera puede comprobar que la app hace solo lo que se declara aquí.
Ninguna medida es infalible: la protección de los datos depende también de la seguridad de tu dispositivo (bloqueo de pantalla, cifrado, actualizaciones del sistema).
15. Cambios en esta política
Si las funciones de la app cambian de forma que afecte al tratamiento de datos (por ejemplo, con la incorporación de nuevos proveedores de IA), esta política se actualizará y se modificará la fecha que aparece al principio del documento. Los cambios sustanciales se indicarán dentro de la app.
16. Contacto
Para preguntas sobre esta política: dorin@tverdohleb.dev
Para informar de un problema de seguridad: consulta SECURITY.md — no abras issues públicas.
1. En bref
Tacca est conçue pour fonctionner hors ligne. Il n'y a pas de compte, pas de serveur du développeur, et l'app ne nous envoie aucune statistique d'utilisation. Programmes, entraînements, photos et notes restent sur ton appareil et ne nous sont jamais transmis.
Quelque chose ne quitte ton appareil que dans ces cas :
- Import par IA avec ta propre clé API — facultatif et désactivé tant que tu n'as pas enregistré de clé : le texte et les photos que tu choisis sont envoyés au fournisseur que tu as configuré (OpenRouter, Anthropic ou Google), uniquement quand tu lances toi-même l'import.
- Import via ton propre chat IA — l'app ne se connecte à rien : elle prépare un message et le copie dans le presse-papiers, et c'est toi qui le colles dans le chat de ton choix.
- Partage en image — le programme ne quitte ton appareil que vers l'app que tu choisis dans le menu de partage.
- Sur Android uniquement, lecture du texte des photos — la bibliothèque ML Kit de Google, qui reconnaît le texte sur l'appareil, envoie à Google des données de diagnostic sur son propre fonctionnement : jamais tes images ni le texte reconnu.
Nous ne collectons pas de données personnelles. Nous ne les voyons pas, ne les conservons pas, ne les vendons pas et ne les utilisons pas à des fins publicitaires.
2. Qui sommes-nous
Tacca est un projet personnel open source développé et distribué par Dorin Tverdohleb (site tverdohleb.dev, code source sur GitHub, licence Apache 2.0). L'utilisation de l'app est régie par les Conditions générales.
Comme l'app ne nous transmet aucune donnée et ne prévoit aucun traitement côté serveur, nous n'agissons pas en tant que responsable du traitement des données que tu saisis dans l'app (art. 4, point 7, RGPD) : ces données restent sur ton appareil ou vont, à ta demande, vers les services que tu choisis, et nous n'avons aucun moyen d'y accéder. Cette politique est néanmoins fournie par souci de transparence et pour répondre aux exigences des boutiques d'applications.
3. Données enregistrées sur ton appareil
L'app conserve tes données dans l'espace de stockage réservé à l'app :
- Programmes d'entraînement — nom, description et notes ; jours, blocs et exercices avec leurs paramètres (séries, répétitions, charges, durées, notes) ; statut « en cours d'utilisation » ou « archivé » ; dates de création et de modification. Base de données locale (ObjectBox).
- Historique des entraînements — pour chaque séance : début et fin, statut (en cours, terminée, interrompue), notes de la séance et noms du programme, du jour et des exercices tels qu'ils étaient au moment de l'entraînement ; pour chaque série : répétitions, poids, notes et heure. Base de données locale.
- Photos des programmes importés — les originaux des photos utilisées pour un import par IA sont enregistrés en pleine résolution et joints au programme, où tu les retrouves sous « Images d'origine ». Fichiers dans le dossier privé de l'app.
- Préférences — langue et thème choisis, fournisseur et modèle d'IA, version de l'avis initial que tu as accepté. Stockage sécurisé du système (trousseau iOS / Android Keystore).
- Clés API — une par fournisseur, uniquement si tu les saisis toi-même. Stockage sécurisé du système.
Pendant l'utilisation, l'app crée aussi quelques données techniques temporaires, toujours locales : la file des séries confirmées depuis l'écran de verrouillage (quelle séance, quel exercice et quelle série, et l'heure de l'appui), vidée dès que l'app l'applique ; des fichiers temporaires pour la lecture des photos, supprimés aussitôt, ainsi que pour les images partagées et les photos sélectionnées, dans des dossiers temporaires que le système d'exploitation nettoie.
Ces données ne nous sont pas transmises, ni à aucun service d'analyse, de rapport de plantage ou de publicité ; elles ne sont liées à aucun compte, puisque l'app n'en prévoit pas ; tu peux les consulter, les modifier et les supprimer depuis l'app, dans les limites décrites à la section 11.
Si tu actives une sauvegarde du système (sauvegarde Google sur Android, sauvegarde iCloud sur iOS), les données de l'app — la base de données, les photos jointes et, selon le système d'exploitation, les entrées du stockage sécurisé sous forme chiffrée — peuvent être incluses dans cette sauvegarde selon les règles de ton système d'exploitation et de son fournisseur. Ce traitement est régi par les politiques de confidentialité de Google et d'Apple, et non par celle-ci.
4. Autorisations demandées par l'app
L'app ne demande que les autorisations nécessaires aux fonctions que tu utilises, et chaque demande arrive au moment où elle est nécessaire, pas à l'installation.
- Appareil photo — uniquement si tu choisis de photographier un programme à importer. Sur iPhone, le système te demande l'autorisation la première fois ; sur Android, l'app ouvre l'app Appareil photo du système et ne reçoit que la photo que tu prends.
- Photos / Galerie — uniquement si tu choisis des images à importer. L'app ne reçoit que les images que tu sélectionnes ; selon le système et sa version, une demande d'accès aux photos ou le sélecteur du système peut apparaître.
- Notifications — au lancement de ta première séance d'entraînement : elles servent aux signaux du minuteur quand l'app est en arrière-plan ou l'écran éteint, et à la notification de la séance en cours.
- Alarmes et rappels (Android) — peut être demandée en même temps que les notifications, pour que le signal de fin de récupération retentisse au bon moment même écran éteint.
Le système accorde en outre automatiquement, sans te le demander, quelques autorisations techniques : accès à internet et à l'état du réseau (pour l'import par IA et, sur Android, pour la bibliothèque décrite à la section 8), vibration, écran allumé pendant la séance et rétablissement des signaux programmés après un redémarrage du téléphone.
L'app ne demande pas l'accès à la localisation, aux contacts, au micro, au calendrier ni aux identifiants publicitaires.
Si tu refuses une autorisation, l'app continue de fonctionner : tu perds seulement la fonction concernée (par exemple, sans appareil photo tu peux toujours coller le texte du programme ou l'écrire à la main ; sans notifications, le minuteur fonctionne écran allumé).
5. Écran de verrouillage et notifications
Pendant une séance, l'app affiche l'exercice en cours également en dehors de l'app : avec une Activité en direct (et dans la Dynamic Island) sur iPhone, avec une notification persistante sur Android. On y trouve le nom de l'exercice, la série en cours, le compte à rebours de la récupération et le bouton « Série faite ».
- Ces informations sont visibles sur l'écran de verrouillage, même téléphone verrouillé, par quiconque regarde l'écran ; le bouton « Série faite » fonctionne sans déverrouiller le téléphone.
- Tout se passe sur l'appareil : l'Activité en direct et les notifications sont créées et mises à jour localement par l'app, sans aucun serveur de notifications push.
- Tu peux les désactiver dans les réglages du système (les Activités en direct de Tacca sur iPhone, les notifications ou le canal « Sessione in corso » sur Android) : la séance fonctionne quand même, sans bannière.
6. Import par IA avec ta propre clé API
C'est la fonction par laquelle Tacca, à ta demande, se connecte à un service externe. Elle est facultative et reste désactivée tant que tu n'as pas configuré de clé.
Comment ça marche :
- Dans Réglages → Intelligence artificielle, tu choisis un fournisseur parmi OpenRouter, Anthropic et Google (Gemini API), tu saisis une clé API qui t'appartient et tu choisis le modèle.
- Quand tu appuies sur « Numériser », l'app envoie au fournisseur choisi le contenu à importer.
- Si le fournisseur est OpenRouter, la requête est transmise au fournisseur du modèle que tu as sélectionné.
- La réponse revient dans l'app sous forme de programme structuré, qui s'ouvre dans l'éditeur pour que tu le vérifies. Le programme n'est pas enregistré tant que tu n'appuies pas sur Enregistrer ; les photos d'origine, en revanche, sont déjà copiées dans le dossier privé de l'app pour rester jointes au brouillon (section 11).
Le bouton « Tester la connexion » envoie au fournisseur une seule requête authentifiée pour vérifier la clé, sans aucun de tes contenus.
Ce qui est envoyé, exactement.
- Les photos que tu as choisies, réduites en résolution et recompressées avant l'envoi : lors de cette étape, les métadonnées EXIF des photos (par exemple la date de prise de vue ou la localisation, si elles existent) ne sont pas copiées.
- Le texte que tu as collé ou écrit.
- Les éventuelles « Instructions pour l'IA » que tu ajoutes.
- Les instructions techniques de l'app : des prompts fixes, en anglais et identiques pour tous les utilisateurs, qui expliquent au modèle comment renvoyer le programme au format JSON structuré, sans aucune information sur toi, ton appareil ou tes entraînements.
Chaque photo nécessite deux appels : dans le premier le modèle la transcrit, dans le second il reçoit la transcription et la transforme en programme. Si la réponse n'est pas valide, l'app fait une seule nouvelle tentative automatique, en renvoyant la réponse précédente avec l'erreur de validation. Si le modèle sélectionné ne prend pas en charge les images, les photos ne sont pas transmises du tout : le texte est lu sur l'appareil (section 8) et seul ce texte est envoyé.
Dans les requêtes à OpenRouter, l'app se présente sous le nom « Tacca » : c'est une information sur l'app, pas sur toi.
Ce qui n'est pas envoyé :
- Aucun identifiant de l'appareil ni publicitaire, et aucun compte Tacca, puisqu'il n'en existe pas.
- Aucune donnée de ton historique d'entraînement.
- Aucun autre programme présent dans l'app.
- Aucun réglage ni préférence personnelle.
Comme pour toute connexion à internet, le fournisseur reçoit tout de même l'adresse IP d'où part la requête, et la clé API relie les requêtes à ton compte chez lui.
Qui traite les données, et à quel titre. L'app ne contient aucune clé API à nous et n'effectue aucun appel réseau pour son propre compte. La requête part de ton appareil, avec tes identifiants, vers ton compte chez le fournisseur. Par conséquent : la relation contractuelle et de traitement est entre toi et le fournisseur (et, avec OpenRouter, en aval le fournisseur du modèle) ; leurs conditions et politiques de confidentialité s'appliquent, et nous t'invitons à les lire avant d'activer la fonction ; le coût des requêtes est facturé sur ton compte ; nous ne voyons, n'interceptons et ne conservons ni les requêtes ni les réponses.
Conservation et entraînement chez les fournisseurs. La durée pendant laquelle le fournisseur conserve les contenus, et la possibilité qu'il les utilise pour améliorer ses modèles, dépendent du fournisseur, du modèle et de ton offre. Certains services, surtout gratuits, le prévoient, y compris avec une relecture humaine : par exemple le niveau gratuit de la Gemini API pour les personnes situées hors de l'Espace économique européen, de la Suisse et du Royaume-Uni, ou certains fournisseurs accessibles via OpenRouter, que tu peux exclure dans les réglages de confidentialité de ton compte OpenRouter. Documents de référence : politique de confidentialité d'OpenRouter ; Commercial Terms et politique de confidentialité d'Anthropic ; conditions supplémentaires de la Gemini API et règles de confidentialité de Google.
Comme les fournisseurs et les fournisseurs de modèles peuvent opérer hors de l'Espace économique européen, l'utilisation de cette fonction peut entraîner un transfert de données vers des pays tiers. C'est un choix que tu fais toi-même, à chaque import.
Ce qu'il vaut mieux ne pas envoyer. Les photos d'un programme papier peuvent contenir par inadvertance des données que tu ne souhaites pas transmettre : ton nom, celui de ton coach, des annotations sur des problèmes de santé ou des blessures. Vérifie l'image avant de l'envoyer, ou colle uniquement le texte dont tu as besoin.
Les clés API. Chaque clé est conservée dans le stockage sécurisé du système d'exploitation (trousseau iOS / Android Keystore), séparément pour chaque fournisseur. Elle n'est jamais écrite dans la base de données de l'app, n'apparaît pas dans les journaux, n'est pas exportée et n'est transmise à personne d'autre que le fournisseur auquel elle appartient, comme en-tête d'authentification de tes requêtes. Tu peux la supprimer à tout moment dans les réglages.
7. Import via ton propre chat IA
Avec « Avec ton chat IA », tu obtiens le même import sans aucune clé, et l'app ne se connecte à rien :
- tu écris ou colles le programme, ou tu le photographies : dans ce cas, le texte est lu sur l'appareil (section 8) et placé dans un champ que tu peux corriger ;
- l'app prépare un message avec le texte du programme, les éventuelles instructions que tu ajoutes et les consignes pour le convertir, et le copie dans le presse-papiers du système ;
- c'est toi qui le colles dans le chat IA de ton choix et qui rapportes la réponse dans l'app ; l'app ne lit le presse-papiers que lorsque tu appuies sur « Coller depuis le presse-papiers ».
Les photos ne sont envoyées nulle part : seul le texte que tu vois dans le champ figure dans le message, et les photos restent jointes au programme sur l'appareil, comme pour l'import automatique (section 11). Le chat, c'est toi qui le choisis et l'utilises, avec ton compte : ce que tu y colles est traité selon les conditions et la politique de confidentialité de ce service.
Garde à l'esprit que le presse-papiers est géré par le système d'exploitation : d'autres apps peuvent en lire le contenu, et certaines fonctions du système (par exemple le presse-papiers universel d'Apple) le synchronisent avec tes autres appareils.
8. Lecture du texte des photos (OCR)
Quand du texte doit être lu sur une photo — avec un modèle qui ne prend pas en charge les images, ou lors de l'import via ton chat —, la reconnaissance a lieu sur l'appareil : avec le framework Vision d'Apple sur iPhone, et avec la bibliothèque ML Kit de Google, intégrée à l'app, sur Android. La photo passe par un fichier temporaire supprimé immédiatement après.
Sur Android, selon la documentation de Google, ML Kit n'envoie ni les images ni le texte reconnu, mais transmet à Google, chiffrées via HTTPS, des données de diagnostic et des statistiques d'utilisation de la bibliothèque elle-même : fabricant et modèle de l'appareil et version du système, nom et version de l'app, un identifiant par installation qui n'est pas destiné à identifier l'utilisateur ou l'appareil, des mesures de performance, la configuration de la requête (par exemple le format et la résolution de l'image), des événements et d'éventuels codes d'erreur. Google déclare les utiliser pour le diagnostic et l'analyse de l'utilisation de la bibliothèque et ne pas les transmettre à des tiers. Nous ne les recevons pas et n'y avons pas accès.
9. Partager un programme en image
Depuis le détail d'un programme, « Partager » dessine le programme entier dans une image PNG — nom, description, notes, jours, blocs et exercices avec charges et notes — et la transmet au menu de partage du système, avec le nom du programme. L'image ne contient ni ton historique, ni les poids enregistrés, ni les photos d'origine.
C'est toi qui choisis la destination (un chat, un e-mail, tes photos…) et, à partir de là, l'image est soumise aux règles de cette app ou de ce service et de la personne qui la reçoit. L'app n'en garde aucune copie : le fichier est préparé dans le dossier temporaire, que le système nettoie.
10. Ce que nous ne faisons pas
Pour être explicites, Tacca :
- n'exige pas la création d'un compte ;
- ne nous envoie ni données d'utilisation, ni statistiques, ni rapports de plantage, et n'intègre aucun service d'analyse ou de rapport de plantage (le seul envoi automatique de données de diagnostic est celui de ML Kit sur Android, décrit à la section 8) ;
- n'intègre aucun SDK tiers de publicité, de suivi ou d'attribution ;
- n'utilise ni identifiants publicitaires (IDFA, GAID) ni empreinte de l'appareil ;
- n'accède ni à la localisation, ni aux contacts, ni au micro ;
- n'intègre pas de navigateur : le seul lien externe, vers les conditions générales, s'ouvre dans le navigateur du système ;
- ne profile pas les utilisateurs et ne prend aucune décision automatisée produisant des effets juridiques (art. 22 RGPD) ;
- ne vend, ne cède ni ne partage tes contenus avec des tiers : programmes, historique, photos et notes ne quittent l'appareil que lorsque tu le décides.
11. Conservation et suppression
Les données restent sur l'appareil jusqu'à ce que tu les supprimes.
- Programmes et séances : tu peux les supprimer un par un depuis l'app, les programmes depuis l'archive et les séances depuis l'historique. Supprimer un programme ne supprime pas l'historique qui y est lié, qui reste consultable car il conserve les noms du programme et des exercices.
- Photos jointes : dans la version actuelle de l'app, les photos d'origine restent dans le dossier privé de l'app même lorsque tu supprimes le programme auquel elles étaient jointes ou que tu abandonnes un brouillon importé, et il n'existe pas de commande pour les supprimer une par une. Pour les effacer définitivement, tu peux effacer les données de l'app depuis les réglages du système (sur Android) ou la désinstaller : dans les deux cas, les programmes et l'historique sont eux aussi supprimés.
- Clés API et préférences : chaque clé se supprime depuis les réglages de l'app, fournisseur par fournisseur ; la langue et le thème peuvent revenir à « Comme le système ». Si tu n'utilises plus une clé, révoque-la aussi sur le site du fournisseur.
- Tout : en désinstallant l'app, le système d'exploitation supprime la base de données et les photos. Sur iPhone, en revanche, les entrées du trousseau — clés API et préférences — peuvent rester enregistrées même après la désinstallation et réapparaître si tu réinstalles l'app : pour effacer une clé, supprime-la dans les réglages avant de désinstaller.
Nous n'avons aucune copie de tes données, il n'y a donc rien à supprimer de notre côté.
12. Tes droits
Le RGPD te reconnaît les droits d'accès, de rectification, d'effacement, de limitation, d'opposition et de portabilité (art. 15 à 21).
Comme les données sont exclusivement locales et sous ton contrôle direct, tu exerces ces droits directement dans l'app : tu peux consulter, modifier et supprimer tes contenus sans intermédiaire, dans les limites décrites à la section 11. Ne détenant aucune de tes données, nous ne pouvons pas donner suite aux demandes d'accès ou d'effacement, tout simplement parce qu'il n'y a rien sur quoi agir.
Pour les données traitées par le fournisseur d'IA que tu as choisi, par le service de chat que tu utilises ou, sur Android, par Google via ML Kit, tu dois t'adresser directement à eux.
Si tu estimes qu'un traitement enfreint la réglementation, tu peux introduire une réclamation auprès de l'autorité italienne de protection des données (Garante per la protezione dei dati personali, www.garanteprivacy.it) ou de l'autorité de contrôle de ton État membre.
13. Mineurs
L'app ne s'adresse pas aux mineurs de moins de 16 ans et ne collecte pas sciemment de données concernant des mineurs. Comme il n'y a ni compte ni collecte de données, nous n'effectuons pas de vérification de l'âge. L'import automatique par IA nécessite un compte chez le fournisseur choisi, soumis aux exigences d'âge de ce service : la Gemini API de Google, par exemple, exige d'avoir au moins 18 ans.
14. Sécurité
- Les données sont conservées dans l'espace isolé (sandbox) réservé à l'app, protégé par le système d'exploitation.
- Les clés API se trouvent dans le stockage sécurisé du système, une par fournisseur, et chacune n'est envoyée qu'au fournisseur auquel elle appartient.
- Toutes les communications avec les fournisseurs d'IA passent par HTTPS.
- Le code source est public et vérifiable : chacun peut contrôler que l'app ne fait que ce qui est déclaré ici.
Aucune mesure n'est infaillible : la protection des données dépend aussi de la sécurité de ton appareil (verrouillage de l'écran, chiffrement, mises à jour du système).
15. Modifications de cette politique
Si les fonctions de l'app évoluent d'une manière qui affecte le traitement des données (par exemple avec l'ajout de nouveaux fournisseurs d'IA), cette politique sera mise à jour et la date en haut du document sera modifiée. Les modifications importantes seront signalées dans l'app.
16. Contact
Pour toute question sur cette politique : dorin@tverdohleb.dev
Pour signaler un problème de sécurité : consulte SECURITY.md — n'ouvre pas d'issue publique.
1. I korthet
Tacca är gjord för att fungera offline. Det finns inget konto, ingen server hos utvecklaren, och appen skickar ingen användningsstatistik till oss. Program, träningspass, foton och anteckningar stannar på din enhet och skickas aldrig till oss.
Något lämnar enheten bara i dessa fall:
- AI-import med din egen API-nyckel — valfri och avstängd tills du sparar en nyckel: texten och fotona du väljer skickas till leverantören du har konfigurerat (OpenRouter, Anthropic eller Google), och bara när du själv startar importen.
- Import via din egen AI-chatt — appen ansluter inte till någonting: den förbereder ett meddelande och kopierar det till urklipp, och det är du som klistrar in det i den chatt du föredrar.
- Dela som bild — programmet lämnar enheten bara till den app du väljer i delningsmenyn.
- Endast Android, läsning av text i foton — Googles bibliotek ML Kit, som känner igen texten på enheten, skickar diagnostikdata om sin egen funktion till Google: aldrig dina bilder eller den igenkända texten.
Vi samlar inte in personuppgifter. Vi ser dem inte, sparar dem inte, säljer dem inte och använder dem inte för reklam.
2. Vilka vi är
Tacca är ett personligt open source-projekt som utvecklas och distribueras av Dorin Tverdohleb (webbplats tverdohleb.dev, källkod på GitHub, licens Apache 2.0). Användningen av appen regleras av villkoren.
Eftersom appen inte skickar några uppgifter till oss och inte innebär någon behandling på en server är vi inte personuppgiftsansvariga för de uppgifter du för in i appen (art. 4.7 GDPR): de stannar på din enhet eller går, på din begäran, till tjänster som du själv väljer, och vi har inget sätt att komma åt dem. Denna information lämnas ändå av öppenhetsskäl och för att uppfylla appbutikernas krav.
3. Uppgifter som sparas på din enhet
Appen sparar dina uppgifter i appens privata lagringsutrymme:
- Träningsprogram — namn, beskrivning och anteckningar; dagar, block och övningar med sina parametrar (set, repetitioner, vikter, tider, anteckningar); status ”används” eller ”arkiverat”; datum för skapande och ändring. Lokal databas (ObjectBox).
- Träningshistorik — för varje pass: start och slut, status (pågår, slutfört, avbrutet), anteckningar om passet och namnen på program, dag och övningar som de var vid träningstillfället; för varje set: repetitioner, vikt, anteckningar och tid. Lokal databas.
- Foton av importerade program — originalen av fotona som användes för en AI-import sparas i full upplösning och bifogas programmet, där du hittar dem under ”Originalbilder”. Filer i appens privata mapp.
- Inställningar — valt språk och tema, AI-leverantör och modell, versionen av startmeddelandet som du har godkänt. Systemets säkra lagring (iOS-nyckelring / Android Keystore).
- API-nycklar — en per leverantör, bara om du själv anger dem. Systemets säkra lagring.
Under användningen skapar appen också vissa tillfälliga tekniska uppgifter, alltid lokalt: kön över set som bekräftats från låsskärmen (vilket pass, vilken övning och vilket set, och tidpunkten för trycket), som töms så snart appen har tillämpat den; tillfälliga filer för att läsa foton, som raderas direkt, samt för delade bilder och valda foton, i tillfälliga mappar som operativsystemet rensar.
Dessa uppgifter skickas inte till oss och inte heller till några analys-, kraschrapporterings- eller reklamtjänster; de är inte kopplade till något konto, eftersom appen inte har något; du kan visa, ändra och radera dem i appen, med de begränsningar som beskrivs i avsnitt 11.
Om du aktiverar en säkerhetskopia i systemet (Google-säkerhetskopiering på Android, iCloud-säkerhetskopiering på iOS) kan appens uppgifter — databasen, de bifogade fotona och, beroende på operativsystem, posterna i den säkra lagringen i krypterad form — ingå i den säkerhetskopian enligt reglerna för ditt operativsystem och dess leverantör. Den behandlingen regleras av Googles och Apples integritetspolicyer, inte av denna.
4. Behörigheter som appen begär
Appen ber bara om de behörigheter som behövs för de funktioner du använder, och varje förfrågan kommer när den behövs, inte vid installationen.
- Kamera — bara om du väljer att fotografera ett program för import. På iPhone ber systemet om tillstånd första gången; på Android öppnar appen systemets kameraapp och får bara det foto du tar.
- Bilder / Galleri — bara om du väljer bilder att importera. Appen får enbart de bilder du markerar; beroende på system och version kan en förfrågan om åtkomst till bilder eller systemets bildväljare visas.
- Notiser — när du startar ditt första träningspass: de används för timerns signaler när appen är i bakgrunden eller skärmen är avstängd, och för notisen om pågående pass.
- Alarm och påminnelser (Android) — kan begäras tillsammans med notiserna, så att signalen för vilans slut hörs i rätt ögonblick även när skärmen är avstängd.
Systemet ger dessutom automatiskt, utan att fråga dig, vissa tekniska behörigheter: åtkomst till internet och nätverksstatus (för AI-importen och, på Android, för biblioteket som beskrivs i avsnitt 8), vibration, skärmen påslagen under passet och återställning av schemalagda signaler efter att telefonen startats om.
Appen begär inte åtkomst till plats, kontakter, mikrofon, kalender eller reklam-ID.
Om du nekar en behörighet fortsätter appen att fungera: du förlorar bara den specifika funktionen (till exempel kan du utan kamera ändå klistra in programmets text eller skriva det för hand; utan notiser fungerar timern med skärmen påslagen).
5. Låsskärm och notiser
Under ett pass visar appen den aktuella övningen även utanför appen: som en Live-aktivitet (och i Dynamic Island) på iPhone, som en beständig notis på Android. Där finns övningens namn, vilket set du är på, nedräkningen av vilan och knappen ”Set klart”.
- Denna information är synlig på låsskärmen, även när telefonen är låst, för alla som tittar på skärmen; knappen ”Set klart” fungerar utan att du låser upp telefonen.
- Allt sker på enheten: Live-aktiviteten och notiserna skapas och uppdateras lokalt av appen, utan någon server för pushnotiser.
- Du kan stänga av dem i systeminställningarna (Taccas Live-aktiviteter på iPhone, notiserna eller kanalen ”Sessione in corso” på Android): passet fungerar ändå, bara utan banner.
6. AI-import med din egen API-nyckel
Det här är funktionen genom vilken Tacca, på din begäran, ansluter till en extern tjänst. Den är valfri och förblir avstängd tills du konfigurerar en nyckel.
Så fungerar det:
- Under Inställningar → Artificiell intelligens väljer du en leverantör bland OpenRouter, Anthropic och Google (Gemini API), anger en egen API-nyckel och väljer modell.
- När du trycker på ”Digitalisera” skickar appen innehållet som ska importeras till den valda leverantören.
- Om leverantören är OpenRouter vidarebefordras förfrågan till leverantören av den modell du har valt.
- Svaret kommer tillbaka till appen som ett strukturerat program, som öppnas i redigeraren för granskning. Programmet sparas inte förrän du trycker på Spara; originalfotona kopieras däremot redan till appens privata mapp för att förbli bifogade till utkastet (avsnitt 11).
Knappen ”Testa anslutningen” skickar en enda autentiserad förfrågan till leverantören för att kontrollera nyckeln, utan något av ditt innehåll.
Exakt vad som skickas.
- De foton du har valt, nedskalade och omkomprimerade före sändning: i det steget kopieras inte fotonas EXIF-metadata (till exempel tagningsdatum eller plats, om sådana finns).
- Den text du har klistrat in eller skrivit.
- Eventuella ”Instruktioner till AI:n” som du lägger till.
- Appens tekniska instruktioner: fasta prompter, på engelska och identiska för alla användare, som förklarar för modellen hur programmet ska returneras som strukturerad JSON, utan någon information om dig, din enhet eller dina träningspass.
Varje foto kräver två anrop: i det första transkriberar modellen det, i det andra får den transkriptionen och gör om den till ett program. Om svaret är ogiltigt gör appen ett enda automatiskt nytt försök och skickar då det tidigare svaret tillsammans med valideringsfelet. Om den valda modellen inte stöder bilder skickas fotona inte alls: texten läses på enheten (avsnitt 8) och bara den skickas.
I förfrågningar till OpenRouter presenterar sig appen med namnet ”Tacca”: det är information om appen, inte om dig.
Vad som inte skickas:
- Inget enhets- eller reklam-ID, och inget Tacca-konto, eftersom det inte finns något.
- Inga uppgifter från din träningshistorik.
- Inga andra program som finns i appen.
- Inga personliga inställningar eller preferenser.
Som vid all internetanslutning får leverantören ändå IP-adressen som förfrågan kommer ifrån, och API-nyckeln kopplar förfrågningarna till ditt konto hos leverantören.
Vem som behandlar uppgifterna, och i vilken roll. Appen innehåller ingen egen API-nyckel från oss och gör inga nätverksanrop för egen räkning. Förfrågan går från din enhet, med dina inloggningsuppgifter, till ditt konto hos leverantören. Det innebär att avtals- och behandlingsförhållandet är mellan dig och leverantören (och, med OpenRouter, i nästa led modelleverantören); deras villkor och integritetspolicyer gäller, och vi rekommenderar att du läser dem innan du aktiverar funktionen; kostnaden för förfrågningarna debiteras ditt konto; vi ser, fångar upp och sparar varken förfrågningarna eller svaren.
Lagring och träning hos leverantörerna. Hur länge leverantören sparar innehållet, och om den får använda det för att förbättra sina modeller, beror på leverantören, modellen och ditt abonnemang. Vissa tjänster, särskilt kostnadsfria, tillåter det, även med mänsklig granskning: till exempel den kostnadsfria nivån av Gemini API för den som befinner sig utanför Europeiska ekonomiska samarbetsområdet, Schweiz och Storbritannien, eller vissa leverantörer som nås via OpenRouter, som du kan utesluta i integritetsinställningarna för ditt OpenRouter-konto. Referensdokument: OpenRouters integritetspolicy; Anthropics Commercial Terms och integritetspolicy; Googles tilläggsvillkor för Gemini API och integritetspolicy.
Eftersom leverantörer och modelleverantörer kan vara verksamma utanför Europeiska ekonomiska samarbetsområdet kan användningen av denna funktion innebära en överföring av uppgifter till tredjeländer. Det är ett val du själv gör, vid varje enskild import.
Vad du inte bör skicka. Foton av ett program på papper kan av misstag innehålla uppgifter som du inte vill skicka: ditt namn, din tränares namn, anteckningar om sjukdomar eller skador. Kontrollera bilden innan du skickar den, eller klistra bara in den text du behöver.
API-nycklarna. Varje nyckel sparas i operativsystemets säkra lagring (iOS-nyckelring / Android Keystore), separat för varje leverantör. Den skrivs aldrig till appens databas, förekommer inte i loggar, exporteras inte och skickas inte till någon annan än leverantören den tillhör, som autentiseringshuvud i dina förfrågningar. Du kan ta bort den när som helst i inställningarna.
7. Import via din egen AI-chatt
Med ”Med din AI-chatt” får du samma import helt utan nyckel, och appen ansluter inte till någonting:
- du skriver eller klistrar in programmet, eller fotograferar det: då läses texten på enheten (avsnitt 8) och läggs i ett fält som du kan rätta;
- appen förbereder ett meddelande med programmets text, eventuella instruktioner som du lägger till och anvisningarna för att konvertera det, och kopierar det till systemets urklipp;
- det är du som klistrar in det i den AI-chatt du föredrar och tar med svaret tillbaka till appen; appen läser urklippet bara när du trycker på ”Klistra in från urklipp”.
Fotona skickas ingenstans: i meddelandet hamnar bara den text du ser i fältet, och fotona förblir bifogade till programmet på enheten, precis som vid den automatiska importen (avsnitt 11). Chatten väljer och använder du själv, med ditt eget konto: det du klistrar in där behandlas enligt den tjänstens villkor och integritetspolicy.
Tänk på att urklippet hanteras av operativsystemet: andra appar kan läsa innehållet, och vissa systemfunktioner (till exempel Apples Universellt urklipp) synkroniserar det med dina andra enheter.
8. Läsning av text i foton (OCR)
När text ska läsas från ett foto — med en modell som inte stöder bilder, eller vid import via din egen chatt — sker igenkänningen på enheten: med Apples ramverk Vision på iPhone och med Googles bibliotek ML Kit, som ingår i appen, på Android. Fotot passerar en tillfällig fil som raderas direkt efteråt.
På Android skickar ML Kit, enligt Googles dokumentation, varken bilderna eller den igenkända texten, men överför till Google, krypterat via HTTPS, diagnostik- och användningsdata om själva biblioteket: enhetens tillverkare och modell samt systemversion, appens paketnamn och version, en identifierare per installation som inte är avsedd att identifiera användaren eller enheten, prestandamått, förfrågans konfiguration (till exempel bildens format och upplösning), händelser och eventuella felkoder. Google uppger att uppgifterna används för diagnostik och användningsanalys av biblioteket och inte lämnas vidare till tredje part. Vi tar inte emot dem och har ingen åtkomst till dem.
9. Dela ett program som bild
I ett programs detaljvy ritar ”Dela” hela programmet i en PNG-bild — namn, beskrivning, anteckningar, dagar, block och övningar med vikter och anteckningar — och lämnar den till systemets delningsmeny, tillsammans med programmets namn. Bilden innehåller inte din historik, de registrerade vikterna eller originalfotona.
Mottagaren väljer du själv (en chatt, e-post, dina bilder …), och därifrån omfattas bilden av reglerna för den appen eller tjänsten och för den som tar emot den. Appen sparar inga kopior: filen förbereds i den tillfälliga mappen, som systemet rensar.
10. Vad vi inte gör
För att vara tydliga: Tacca
- kräver inte att du skapar ett konto;
- skickar inga användningsdata, statistik eller kraschrapporter till oss och innehåller inga analys- eller kraschrapporteringstjänster (den enda automatiska överföringen av diagnostikdata är ML Kits på Android, som beskrivs i avsnitt 8);
- innehåller inga SDK:er från tredje part för reklam, spårning eller attribuering;
- använder inte reklam-ID (IDFA, GAID) eller fingeravtryck av enheten;
- har inte åtkomst till plats, kontakter eller mikrofon;
- har ingen inbyggd webbläsare: den enda externa länken, till villkoren, öppnas i systemets webbläsare;
- profilerar inte användare och fattar inga automatiserade beslut med rättsliga följder (art. 22 GDPR);
- säljer, överlåter eller delar inte ditt innehåll med tredje part: program, historik, foton och anteckningar lämnar enheten bara när du bestämmer det.
11. Lagring och radering
Uppgifterna stannar på enheten tills du raderar dem.
- Program och pass: du kan radera dem ett i taget i appen, programmen i arkivet och passen i historiken. Att radera ett program raderar inte den historik som hör till det, som fortfarande går att visa eftersom den sparar namnen på program och övningar.
- Bifogade foton: i den nuvarande versionen av appen stannar originalfotona i appens privata mapp även när du raderar programmet de var bifogade till eller förkastar ett importerat utkast, och det finns inget kommando för att radera dem en och en. För att ta bort dem för gott kan du rensa appens data i systeminställningarna (på Android) eller avinstallera appen: i båda fallen raderas även program och historik.
- API-nycklar och inställningar: varje nyckel tas bort i appens inställningar, leverantör för leverantör; språk och tema kan återställas till ”Som systemet”. Om du inte längre använder en nyckel, återkalla den också på leverantörens webbplats.
- Allt: när du avinstallerar appen raderar operativsystemet databasen och fotona. På iPhone kan dock posterna i nyckelringen — API-nycklar och inställningar — finnas kvar även efter avinstallationen och dyka upp igen om du installerar om appen: för att radera en nyckel, ta bort den i inställningarna innan du avinstallerar.
Vi har inga kopior av dina uppgifter, så det finns inget att radera hos oss.
12. Dina rättigheter
GDPR ger dig rätt till tillgång, rättelse, radering, begränsning, invändning och dataportabilitet (art. 15–21).
Eftersom uppgifterna enbart finns lokalt och under din direkta kontroll utövar du dessa rättigheter direkt i appen: du kan visa, ändra och radera ditt innehåll utan mellanhänder, med de begränsningar som beskrivs i avsnitt 11. Eftersom vi inte har några uppgifter om dig kan vi inte tillmötesgå begäranden om tillgång eller radering, helt enkelt för att det inte finns något att agera på.
För uppgifter som behandlas av den AI-leverantör du har valt, av den chattjänst du använder eller, på Android, av Google via ML Kit, ska du vända dig direkt till dem.
Om du anser att en behandling strider mot reglerna kan du lämna in ett klagomål till den italienska dataskyddsmyndigheten (Garante per la protezione dei dati personali, www.garanteprivacy.it) eller till tillsynsmyndigheten i ditt medlemsland.
13. Minderåriga
Appen riktar sig inte till barn under 16 år och samlar inte medvetet in uppgifter om minderåriga. Eftersom det inte finns några konton eller någon datainsamling gör vi ingen åldersverifiering. Den automatiska AI-importen kräver ett konto hos den valda leverantören, som omfattas av den tjänstens egna ålderskrav: Googles Gemini API kräver till exempel att du är minst 18 år.
14. Säkerhet
- Uppgifterna lagras i appens avskilda utrymme (sandbox), som skyddas av operativsystemet.
- API-nycklarna finns i systemets säkra lagring, en per leverantör, och var och en skickas bara till den leverantör den tillhör.
- All kommunikation med AI-leverantörerna sker över HTTPS.
- Källkoden är offentlig och går att granska: vem som helst kan kontrollera att appen bara gör det som anges här.
Ingen åtgärd är ofelbar: skyddet av uppgifterna beror också på säkerheten i din egen enhet (skärmlås, kryptering, systemuppdateringar).
15. Ändringar av denna policy
Om appens funktioner ändras på ett sätt som påverkar behandlingen av uppgifter (till exempel genom att nya AI-leverantörer läggs till) uppdateras denna policy och datumet högst upp i dokumentet ändras. Väsentliga ändringar meddelas i appen.
16. Kontakt
Frågor om denna policy: dorin@tverdohleb.dev
För att rapportera ett säkerhetsproblem: se SECURITY.md — öppna inga offentliga issues.