Privacy Policy
Last updated: 2 November 2026
In short
- We keep your email address, a hash of your password, your purchases, the computer linked to your account with its rough hardware profile, which app version and platform you used each day, and how much of the hosted models and hosted speech you used.
- We do not store your transcripts, your questions, the model's answers, your audio or your screenshots.
- Payments go through Stripe. We never see your card number.
- This website sets only sign-in cookies and has no trackers. We count visits and downloads anonymously on our own server, with no cookie. See Visit and download counts.
- Our server, with its database and backups, is in the USA (New York). See Where your data is kept.
- Deleting your account deletes your data from our database at once; our backups keep it for at most 14 days.
Let Me Solo IT ("we") runs this website, the account service and the hosted models. This policy covers them and the desktop app. The Terms of Service set the rules for using them.
Data controller
The controller of your personal data under the General Data Protection Regulation (GDPR) is Taras Hevlich, a sole trader registered in the Czech Trade Register (živnostenský rejstřík), trading as Let Me Solo IT. "We" in this policy means him.
- Identification number (IČO): 30209382
- Registered address: Rostislavova 1362/24, Nusle, 140 00 Praha 4, Czech Republic
- Email, for any question or request about your data: support@letmesoloit.com
Your account
- Email address: to sign you in and to link your purchases. It is also passed to Stripe when you first buy a plan.
- Password: we store only a salted bcrypt hash of it, never the password itself.
- Account status: whether the account is active, how many computers it may link, and when you last moved the account or unlinked a computer.
- Terms acceptance: when you accepted the Terms of Service at sign-up, and which version of them (the date shown at the top of the Terms). Accounts created before we started recording this have none stored.
- Email confirmation: whether you confirmed your email address, and when we last sent you a confirmation email.
- Password changes: when your password last changed, so that sign-ins from before the change stop working.
We do not ask for or store your name, postal address or phone number.
Your computers
When you sign in from the desktop app, it links your computer to your account. For that it reads your operating system's machine id and sends only a one-way hash of it; the raw id never leaves your computer. If the machine id cannot be read, the app uses a random value it saves once in its own settings folder instead.
We store that hash with the date it was linked and the date it was last seen. It is removed when you unlink the computer, when it is signed out to make room for another computer, or when you delete your account.
When you use the desktop app, we record which app version and platform (Windows, macOS or Linux) your account used on each day, so we know who an update would affect. This record does not depend on the hardware statistics switch below. These records are kept for 35 days and are deleted with your account.
Your computer's hardware profile
After you sign in, the desktop app sends us a rough profile of your computer, unless you turn off "Share hardware and OS statistics" in the app's Privacy settings (Settings → Advanced → Privacy). It is on by default. The profile holds:
- the operating system and its major version, such as Windows 11 or macOS 15;
- the processor model and its number of cores;
- the name of the graphics card the local speech engine uses, if it uses one;
- the memory, rounded to 4, 8, 16, 32, 64 or 128 GB;
- the country you connect from, as a two-letter code. Our server looks it up from the IP address of that request in a database file on our own server, so the address is not sent to anyone else. We store only the country, never that IP address, and we do not write that address to our logs.
It never holds your computer's name, your user name, a serial number, a MAC address or a location more precise than the country. The app sends it after each sign-in, and at a start only when it has changed since the last time.
We keep the profile with each computer linked to your account, replacing that computer's profile before, and use it only to know which systems, hardware and regions to support. It is removed when you unlink the computer, when it is signed out to make room for another computer, when you sign in to another account on it, or when you delete your account. Turning the switch off stops the app from sending a new profile.
IP geolocation by DB-IP.
Sign-in tokens and licences
- Sign-in tokens last 30 minutes and are not stored on our server. They stop working when you change or reset your password.
- The desktop app and this website also get a renewal token that lasts 30 days and is replaced each time it is used; one sign-in lasts at most 90 days, however often it renews. We store only a hash of it, with its expiry and, for the desktop app, the computer it belongs to. It ends when it is used, when you sign out, when you change or reset your password, and when you unlink the computer. We keep ended tokens, with the reason they ended, so that a stolen token used again can be detected, and delete them 30 days after the whole sign-in has ended. A token used again within 60 seconds of its renewal (for example when the app quit before it saved the new one) gets the same new token once more; used again later, it ends that sign-in. A token that expired without ever being used again is kept, as a hash, until it is presented, you sign out or you delete your account.
- A one-time code from signing in to the desktop app through this website is stored as a hash, lasts 5 minutes and is deleted a day after it expired. A password reset link is stored as a hash, lasts 30 minutes and is kept until you delete your account.
- Own Key Lifetime owners get an offline licence that lets the app work for 30 days without reaching our server. It is kept by the app on your computer, not by us, and expires after 30 days unless the app renews it.
Purchases and payments
- You enter your card in the card form of Stripe, which our payment and billing pages show; the card goes straight to Stripe, and we never receive it.
- We send Stripe the plan and its price, our internal account number and your email address or Stripe customer id.
- We store, for each purchase: the plan, its status, Stripe's reference for it, whether it is set to cancel, when the paid period ends and when it ended. Ended purchases stay in your history.
- At checkout you tick a box to accept the Terms of Service. We store with the purchase which version of the Terms you accepted and Stripe's record that you ticked the box, and Stripe keeps its own record of it. We use this only as evidence of what you agreed to if a payment is disputed, and delete it with the purchase when you delete your account.
- Stripe processes your payment data under its own privacy policy and keeps its own records of your payments and invoices.
Your calls: audio, transcripts and questions
- The desktop app captures nothing until you accept its consent step. You must tell everyone on the call that an AI assistant is transcribing it.
- The app turns the audio of the call (your microphone and your computer's sound) into text with the speech engine you choose. Where that audio goes depends on the engine; see Speech-to-text below.
- On an Own Key plan, the app sends the text of each question, and any image you add, from your computer straight to the model provider you chose, under that provider's terms. It does not pass through our server.
- With credits for the hosted model, the app sends the text of each question and any image you add to our server, which passes them to the model provider we use and returns the answer. We do not store or log the questions, images or answers, and we do not send the provider your name, email or account id. We keep only the number of credits used.
- A call summary, when you ask for one, sends that chat (what was said, your typed questions and the hints) to the same model in one more request, and on a hosted plan uses credits like a hint. Clearing the chat does the same only when "Summarise a chat when clearing it" is on; it is off unless you turn it on.
- Screenshots you take are sent with your question and deleted from your disk after they are added to the chat.
- The text of documents you attach to a question is read on your computer and sent with that question to the same model; the files themselves are not uploaded. Fill from a document (Settings → Assistant) sends the text of the document you pick to that model once, to draft your About me; you review the draft before anything is saved.
- Your consent to the disclaimer is saved in the app's settings on your computer, not on our server.
Speech-to-text: where the call audio goes
Call audio becomes text either on your computer (the local engine: the audio stays there) or at a cloud speech service, which receives the audio as it is spoken (streamed) or one phrase at a time. The cloud services are our hosted speech service at letmesoloit.com, on a plan that includes it, which passes the audio to a speech-recognition provider we use, or a speech provider you set up with your own API key (the app's settings list each one by name), under that provider's terms. You pick the engine in the app's settings (Settings → Advanced → Audio → Speech-to-text); the automatic choice is the default.
The automatic choice uses our hosted speech service while your plan includes it and credits are left, for every language and on every computer, and streams the audio where the service streams. Otherwise it uses the local engine, and it falls back to the local engine when our service cannot be reached or fails. It never uses a speech provider you set up with your own key: that one is used only when you pick it. Nothing is transcribed while neither can hear, for example without our service until the local model is ready.
When the audio is streamed (to our hosted speech service where it streams, or to a speech provider you set up with your own key when you turn streaming on), the audio of a channel that is not muted or paused is sent continuously, short pauses included, from about a second before speech is heard until at most about two seconds after it was last heard; after that nothing is sent until speech is heard again. Your microphone's channel stops sooner when it hears only the call's own sound. Speech here means sound above the channel's speech threshold that the voice detector also takes for a voice, or loud enough sound alone when the voice detector cannot run. Nothing heard before a mute, a pause of the participants or a calibration is sent after it. The audio is sent once, except under the Automatic language setting, while the speech is streamed: to tell which language a phrase is in, the app sends the first eight seconds of that phrase to our hosted speech service a second time, without naming a language, and that second hearing is charged like any other audio; when a speech model is installed on your computer, it hears the same seconds too, on your computer. When the hearings agree on a new language (or one of them names it on a phrase of five seconds or more), the app sends our hosted speech service a short signal naming that language, and the service hears the audio it already received again in that language, without charging it again; the language of what was written is read on your computer, and the last language each side spoke (a language code per side) is kept on your computer as the first guess for the next call. With a language you pick, nothing is detected: the same signal goes only when you switch the language yourself, and the service hears what follows in it, with nothing heard again. Without streaming, the app sends a cloud engine only the stretches of audio in which it hears someone speak, each from a quarter of a second before the speech starts until the speaker pauses.
With the audio, the app also sends our hosted speech service, or a speech provider you set up with your own key if it takes them, a list of words to listen for: the ones in the Words to spell right field (Settings → Advanced → Audio → Speech-to-text), and nothing else: the About me of your active prompt is not read for them. At most 100 terms of at most 50 characters each and 6,000 bytes in all are sent. They help it spell names right, and they can be personal: your own name, or a client's, may be among them. They go only with the audio, never with the questions the AI answers. Our hosted speech service passes its speech-recognition provider the audio and those words, and nothing else about you or your account; it does not store or log the audio, those words or the text. A speech provider you set up with your own key receives them under its own terms. The local engine gets none.
- The local engine transcribes on your computer and sends the audio to no one, us included. If you choose the local engine, the audio is never sent to a cloud service by itself: until the local model is ready nothing is transcribed.
- A speech provider you set up with your own key: the app sends the audio, and the language you picked, from your computer straight to that provider; it does not pass through our server. Your own agreement with that provider applies, including how long it keeps the audio.
- Our hosted speech service at letmesoloit.com ("Cloud (letmesoloit.com)" in the app), on a plan that includes it: All-Inclusive or a Credit Pack, while credits are left. While you use it, the app sends the audio of the call to our server, together with the words to recognise described above, phrase by phrase or as a stream. Under Automatic, phrase by phrase it sends no language: the provider detects it, and our server works out from the text which of the app's 12 languages each finished phrase is in and tells the app, in memory only, without storing or logging it. With a language you pick, the app sends that language with each phrase (or when the stream opens), and nothing is detected. A stream opens at once in the last language of that side of the call, or in the language you picked, and carries it, so that the text is written in it; our server still reports the language it hears on each finished phrase. After a lost connection, a stream sends up to the last 4 seconds of audio again, and our server ends a stream after 120 seconds of audio in which no words were heard. Our server passes the audio and those words, and nothing else about you or your account, to a speech-recognition provider we use, which turns the audio into text, and our server returns that text to the app. We do not store or log the audio, those words or the text. While a stream runs, our server holds in memory only the words of the phrase not yet finished, and after a lost connection, for a few seconds, how many seconds it already charged, so that the audio sent again is not charged twice. We store only the credits used and the seconds of hosted speech not yet worth a whole credit.
Do not use a cloud engine on a call whose audio you are not allowed to share with that provider.
Hosted-model and hosted-speech usage
For each month of All-Inclusive and each Credit Pack we store how many credits it gave, how many are used, and when they expire. Credits pay for hosted answers and for hosted speech. Hosted speech is charged by the seconds of audio our server receives, with or without words, phrase by phrase or as a stream, at one credit per 10 seconds; the seconds not yet worth a whole credit carry over to the next phrase. Under Automatic, while the speech is streamed, the first eight seconds of a phrase are heard a second time to tell which language it is in, and that second hearing is charged like any other audio. When a speaker changes language, the service hears the audio it already has again in the new language, at no extra cost. A phrase sent on its own is charged at least the minimum the speech-recognition provider we use bills for one request, if it has one. We store those seconds until they are charged. We use this to apply your plan's limits and to bill you.
Crash reports from the desktop app
Crash reports are never sent without your say. By default an unhandled error or a crash keeps a report on your computer, and the next start asks whether to send it (Settings → Advanced → Privacy: Ask after a crash, Always send or Never). A report holds the error, the app version and your operating system: never your transcripts, prompts, API keys, file paths under your home folder, your computer's name, your IP address or your location. It holds no values from the app's memory and no trail of what you did before the error, and you can read exactly what would be sent before you send it. Sent reports go to Sentry (sentry.io), are stored in the European Union, and are processed by Sentry and its subprocessors. A build without a reporting endpoint, such as one run from the source code, keeps and sends nothing.
What the app keeps on your computer
The desktop app keeps these files on your computer only. It never uploads them.
- Chat backup: a copy of each chat (what was said, the hints, the images you sent and the names of attached documents, never their contents), so a crash or a plain close loses nothing. It is kept in your user profile (on Linux and macOS readable by your account only) and deleted 30 days after the chat ended. In Settings → Advanced → Chat history you change the days, keep every chat, turn the backup off, or delete every backup at once.
- Automatic chat export: when a chat ends (you clear it, start a new one or quit), the app writes it to the LetMeSoloIT folder in your Documents folder, as a TOML file unless you pick Markdown, HTML, PDF, plain text or a folder (Settings → Advanced → Chat history: "Export chats automatically", on by default, and "Export format"). It needs the chat backup. You can also export a chat by hand from the app's header, to a folder you choose; an HTML or PDF export holds the chat's images inside the file.
- Your own API keys, for a model or speech provider you set up yourself: stored encrypted on your computer, in a file in the app's settings folder that only your user account can read, and sent only to the provider each key belongs to, never to letmesoloit.com.
- Logs: the app writes a technical log to its log folder (Settings → Advanced → Privacy shows it). It holds no transcripts, no typed questions and no names of attached files, and shows your home folder as ~. It keeps at most about 6 MB: at 2 MB it starts a new file and keeps the two before it. It is never sent anywhere.
- The local speech model: when the local engine will hear a call, the app downloads its speech model once from Hugging Face (huggingface.co), which sees your IP address but gets no account data, checks the file and keeps it on your computer.
- Your settings, your consent to the disclaimer, and the offline licence of Own Key Lifetime.
Visit and download counts
To know how the site and the app are used, our own server counts, per day, how many pages of this website were opened (which page, the other site you came from, and your country), how many different visitors came, how many builds were downloaded and how many update checks and sign-ups there were. No analytics service and no cookie or script is involved.
We store only these totals per day: never your IP address, your browser's user agent, your account or the time of a visit. To count a visitor once a day, our server keeps a scrambled code of the IP address and user agent in its memory, never on disk, mixed with a random value that changes every day, so the code cannot be traced back to you or linked to another day. Your country is read from the IP address with a database on our server. The builds' download counts hold the platform, the version and whether the website, an install script or the app fetched them.
Downloads and updates
Downloads need no account. We keep nothing about them apart from the anonymous daily counts and the server log lines described below. They hold your IP address and user agent only for downloads and update checks your app or browser sends to our API directly, not for the website's download buttons. The app's builds and update files are delivered by GitHub, which sees the address of the computer that downloads them.
At each start, unless you turn off "Check for updates at startup" (Settings → Advanced → Updates), the app asks our server for the signed description of its latest version for your platform (Windows, macOS or Linux). That request holds only the platform, in its address, and the standard user agent of the app's web library: no account data and no token. The app checks the signature and the downloaded file before it installs anything.
Server logs
Our server writes technical logs: one line per request with its method, path, status and the address it came from, and details of errors.
- For requests your app or browser sends to our API directly, such as sign-in from the app, update checks and downloads of a given version, that address is your IP address.
- This website passes your IP address on to our API when you sign in, register, ask for a new confirmation email, ask for or use a password reset link, approve the desktop app's sign-in, or download a copy of your data. Those lines hold your IP address.
- Other pages, and downloads through the website's download buttons, reach our API from the website's own server without your address. Those lines hold that server's address, and for downloads its user agent, not yours.
- For each download or update request sent to our API directly, it also writes your user agent: the name and version string your browser or app sends.
Our code does not write your email address, password, tokens, questions or answers to the logs. For the request that sends your computer's hardware profile, the line holds no IP address at all.
Error reports from our server
When our server hits an error it does not handle, it sends an error report to Sentry (sentry.io), where it is stored in the European Union. Errors our server answers itself, such as a wrong password or a payment provider that does not answer, send no report, with one exception: a payment event from Stripe that our server could not apply, because it may leave a purchase missing from your account. That report also holds the Stripe event's id and type, so we can find the event in Stripe and apply it by hand. The report holds the type of error, where in our code it happened, the request method and the route pattern (the kind of address, without the values in it, such as your computer's ID), the time, and technical details of our server: its host name and its Python and package versions.
It never holds the actual request path, the error's message, request headers, cookies, the request body, the query string, your IP address, your email address or other account data.
Where your data is kept
One server of DigitalOcean in the USA (New York) runs this website and our API, and holds our database and its backups. Our domain's DNS is at GoDaddy, and our HTTPS certificates come from Let's Encrypt; neither receives data about you. Better Stack checks that our public pages and our API answer; it receives no data about you either.
So your account data leaves the European Union and the European Economic Area for the USA. DigitalOcean is certified under the EU-U.S. Data Privacy Framework, and that transfer relies on it. Stripe, Resend and GitHub also process data in the USA and state that they comply with the EU-U.S. Data Privacy Framework; Resend's terms add the European Commission's Standard Contractual Clauses. The hosted model provider processes the questions and images it gets in the USA under the Standard Contractual Clauses in its data processing terms. The hosted speech-recognition provider is in the USA too. To get details of these safeguards, write to support@letmesoloit.com.
Who else processes data
- DigitalOcean: hosts our server, database and backups.
- Stripe: payments, subscriptions, invoices and the card form.
- The hosted model provider: the text of each question and any image you add on a hosted plan, as described above.
- The hosted speech-recognition provider: the audio of your calls while you use our hosted speech service, to turn it into text, as described above.
- Resend: sends our confirmation and password-reset emails. It receives your email address and the email, with its link.
- Your own model provider on an Own Key plan, and your own speech provider if you set one up with your own key, under your own agreement with each.
- GitHub: delivery of downloads and updates.
- Hugging Face: delivery of the local speech model.
- GoDaddy (DNS), Let's Encrypt (certificates) and Better Stack (availability checks), with no data about you.
- Sentry: crash reports from the desktop app, only when you choose to send them, and error reports from our server, which hold no personal data except, for a payment event our server could not apply, Stripe's id for that event.
We do not sell your data or use it for advertising.
How long we keep data, and deleting it
- We keep your account data, purchases and usage records until you delete your account.
- You can delete your account at any time on your dashboard's Security page. This cancels your running Stripe subscriptions and deletes your account, purchases, linked computer and its hardware profile, tokens and usage records from our database at once.
- You can download a copy of everything we store about your account, as a JSON file, on the same page ("Download my data"), or ask for one at support@letmesoloit.com.
- Each night we back up our database to our server, and delete each backup after 14 days. So deleted data leaves the backups within 14 days, and it is never restored into our database except to recover from a failure. Before we keep backups anywhere else, this policy will name where.
- Server logs are kept by size, not by date: each part of our service keeps at most 50 MB of recent lines (5 files of 10 MB), usually a few days to a few weeks, and a new release of the service deletes them. Sign-in tokens, sign-in codes and reset links are kept as described in Sign-in tokens and licences, and the record of the app versions you used for 35 days.
- We keep the ids of the Stripe payment events we applied, which name no account. An account that lost a card dispute stays closed to new purchases. To limit abuse, our server counts requests per IP address and per email address in memory only; the counts are lost when it restarts.
- An account whose email address was never confirmed cannot sign in, so it cannot be deleted from the dashboard, and it is not deleted automatically. To have it deleted, write to support@letmesoloit.com from that address.
- Stripe keeps its own record of you as a customer and of your past payments and invoices.
- An offline licence already on your computer stays valid until it expires, at most 30 days.
Why we use your data, and your rights
We use your account, computer, purchase and usage data to provide the service you signed up for and bought (the contract with you). We use server logs, the hardware profile and the record of app versions for our legitimate interest in keeping the service secure and knowing which systems to support, and the anonymous visit and download counts for our legitimate interest in knowing how the site and the app are used. We send a desktop crash report only with your say.
- Access and a copy: "Download my data" on your dashboard's Security page gives you everything we store about your account as a JSON file.
- Deletion: "Delete account" on the same page, as described above.
- Correction, objection and restriction, or any other request: write to support@letmesoloit.com from your account's address. You can object to the hardware profile at any time by turning its switch off.
- We answer every request within one month.
- You may also complain to a data protection authority: in the Czech Republic, the Office for Personal Data Protection (Úřad pro ochranu osobních údajů, uoou.gov.cz), or the one where you live or work.
Changes to this policy
We may update this policy. The date at the top of this page shows when it last changed.
Contact
Questions about your data, or a request about it: support@letmesoloit.com.