482 lines
23 KiB
HTML
482 lines
23 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
||
<meta name="theme-color" content="#0d0e11" />
|
||
<meta name="robots" content="index,follow" />
|
||
<title>Vojo — Privacy Policy</title>
|
||
<style>
|
||
:root {
|
||
--bg: #0d0e11;
|
||
--panel: #181a20;
|
||
--surface: #21232b;
|
||
--text: #e6e6e9;
|
||
--text-strong: #f4f4f6;
|
||
--muted: rgba(230, 230, 233, 0.62);
|
||
--faint: rgba(230, 230, 233, 0.38);
|
||
--divider: rgba(255, 255, 255, 0.08);
|
||
--fleet: #9580ff;
|
||
--fleet-soft: #a59cff;
|
||
color-scheme: dark;
|
||
}
|
||
*,
|
||
*::before,
|
||
*::after {
|
||
box-sizing: border-box;
|
||
}
|
||
html,
|
||
body {
|
||
margin: 0;
|
||
padding: 0;
|
||
background: var(--bg);
|
||
color: var(--text);
|
||
font-family: -apple-system, 'SF Pro Text', 'Inter', system-ui, sans-serif;
|
||
-webkit-font-smoothing: antialiased;
|
||
text-rendering: optimizeLegibility;
|
||
}
|
||
body {
|
||
min-height: 100vh;
|
||
line-height: 1.7;
|
||
font-size: 16px;
|
||
}
|
||
|
||
.frame {
|
||
max-width: 680px;
|
||
margin: 0 auto;
|
||
padding: 56px 28px 120px;
|
||
}
|
||
|
||
header.doc {
|
||
padding-bottom: 28px;
|
||
margin-bottom: 40px;
|
||
border-bottom: 1px solid var(--divider);
|
||
}
|
||
|
||
.brand {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 9px;
|
||
margin-bottom: 22px;
|
||
color: var(--muted);
|
||
font-size: 13px;
|
||
letter-spacing: 0.2px;
|
||
}
|
||
.brand-dot {
|
||
width: 8px;
|
||
height: 8px;
|
||
border-radius: 99px;
|
||
background: var(--fleet);
|
||
}
|
||
.brand-name {
|
||
color: var(--text-strong);
|
||
font-weight: 600;
|
||
}
|
||
.brand-sep {
|
||
color: var(--faint);
|
||
}
|
||
|
||
h1 {
|
||
font-size: 34px;
|
||
line-height: 1.15;
|
||
font-weight: 600;
|
||
margin: 0 0 10px;
|
||
letter-spacing: -0.6px;
|
||
color: var(--text-strong);
|
||
}
|
||
.effective {
|
||
color: var(--muted);
|
||
font-size: 14px;
|
||
margin: 0;
|
||
}
|
||
|
||
.lang-switch {
|
||
display: inline-flex;
|
||
margin-top: 24px;
|
||
font-size: 13px;
|
||
color: var(--muted);
|
||
}
|
||
.lang-switch button {
|
||
appearance: none;
|
||
-webkit-appearance: none;
|
||
background: transparent;
|
||
border: 0;
|
||
padding: 4px 0;
|
||
font: inherit;
|
||
color: var(--muted);
|
||
cursor: pointer;
|
||
transition: color 0.15s ease;
|
||
}
|
||
.lang-switch button:hover {
|
||
color: var(--text);
|
||
}
|
||
.lang-switch button[aria-pressed='true'] {
|
||
color: var(--text-strong);
|
||
font-weight: 600;
|
||
}
|
||
.lang-switch .sep {
|
||
padding: 0 10px;
|
||
color: var(--faint);
|
||
user-select: none;
|
||
}
|
||
|
||
h2 {
|
||
font-size: 20px;
|
||
font-weight: 600;
|
||
margin: 44px 0 12px;
|
||
letter-spacing: -0.2px;
|
||
color: var(--text-strong);
|
||
scroll-margin-top: 24px;
|
||
}
|
||
|
||
p {
|
||
margin: 0 0 14px;
|
||
color: var(--text);
|
||
}
|
||
ul {
|
||
margin: 0 0 18px;
|
||
padding-left: 22px;
|
||
}
|
||
ul li {
|
||
margin: 8px 0;
|
||
padding-left: 4px;
|
||
}
|
||
ul li::marker {
|
||
color: var(--faint);
|
||
}
|
||
ul li b,
|
||
p b {
|
||
color: var(--text-strong);
|
||
font-weight: 600;
|
||
}
|
||
|
||
a {
|
||
color: var(--fleet-soft);
|
||
text-decoration: none;
|
||
border-bottom: 1px solid rgba(165, 156, 255, 0.35);
|
||
transition: color 0.15s ease, border-color 0.15s ease;
|
||
}
|
||
a:hover {
|
||
color: #c0b9ff;
|
||
border-bottom-color: rgba(192, 185, 255, 0.7);
|
||
}
|
||
|
||
section[hidden] {
|
||
display: none;
|
||
}
|
||
section > h2:first-of-type {
|
||
margin-top: 0;
|
||
}
|
||
|
||
footer.doc {
|
||
margin-top: 64px;
|
||
padding-top: 24px;
|
||
border-top: 1px solid var(--divider);
|
||
font-size: 13px;
|
||
color: var(--faint);
|
||
display: flex;
|
||
justify-content: space-between;
|
||
align-items: center;
|
||
gap: 12px;
|
||
flex-wrap: wrap;
|
||
}
|
||
footer.doc .copy {
|
||
font-family: ui-monospace, 'JetBrains Mono', monospace;
|
||
}
|
||
footer.doc a {
|
||
color: var(--muted);
|
||
border-bottom-color: transparent;
|
||
}
|
||
footer.doc a:hover {
|
||
color: var(--text);
|
||
border-bottom-color: var(--divider);
|
||
}
|
||
|
||
@media (max-width: 560px) {
|
||
.frame {
|
||
padding: 36px 20px 96px;
|
||
}
|
||
h1 {
|
||
font-size: 28px;
|
||
}
|
||
h2 {
|
||
font-size: 18px;
|
||
margin: 36px 0 10px;
|
||
}
|
||
body {
|
||
font-size: 15.5px;
|
||
line-height: 1.65;
|
||
}
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div class="frame">
|
||
<header class="doc">
|
||
<div class="brand">
|
||
<span class="brand-dot" aria-hidden="true"></span>
|
||
<span class="brand-name">Vojo</span>
|
||
<span class="brand-sep">·</span>
|
||
<span>Legal</span>
|
||
</div>
|
||
|
||
<h1 data-i18n-h1>Privacy Policy</h1>
|
||
<p class="effective" data-i18n-effective>Effective 13 May 2026</p>
|
||
|
||
<div class="lang-switch" role="group" aria-label="Language">
|
||
<button type="button" data-lang="en" aria-pressed="true">English</button>
|
||
<span class="sep" aria-hidden="true">/</span>
|
||
<button type="button" data-lang="ru" aria-pressed="false">Русский</button>
|
||
</div>
|
||
</header>
|
||
|
||
<section lang="en" data-lang="en">
|
||
<h2>How Vojo works</h2>
|
||
<p>
|
||
Vojo is a chat app built on the open
|
||
<a href="https://matrix.org" rel="noopener">Matrix</a> protocol, maintained by the Vojo
|
||
Project, an independent developer. Your messages, profile and rooms live on a Matrix
|
||
server. By default that's <code>vojo.chat</code>, which we run. You can also sign in to
|
||
any other Matrix server you trust — if you do, the operator of that server holds your
|
||
data, not us. We try to keep this short; if anything is unclear, write to
|
||
<a href="mailto:vojochatdev@gmail.com">vojochatdev@gmail.com</a>.
|
||
</p>
|
||
|
||
<h2>What we hold, and why</h2>
|
||
<p>
|
||
To run the app we keep your account and profile, the messages and rooms you send and
|
||
receive, the media you share, and basic technical data such as your IP address and
|
||
connection times. Your device also caches messages and keys locally so you can read
|
||
offline and stay signed in.
|
||
</p>
|
||
|
||
<p>
|
||
We process this to deliver and sync your messages and to ring your phone for calls —
|
||
that's our agreement with you. We keep limited logs to fight spam and abuse, which is our
|
||
legitimate interest. Optional features run only if you turn them on, with your consent. We
|
||
don't advertise, run analytics in the app, sell your data or profile you.
|
||
</p>
|
||
|
||
<p>
|
||
You can turn on end-to-end encryption per chat. It isn't on by default: in a chat without
|
||
it, our server can see message content. With it on, we can see who's talking and when, but
|
||
not what's said. Voice and video calls are encrypted between participants and may pass
|
||
through our servers in transit; we don't record or store them.
|
||
</p>
|
||
|
||
<h2>Vojo AI</h2>
|
||
<p>
|
||
Vojo AI is an optional assistant. You don't have to use it — but if you start a one-to-one
|
||
chat with it, every message you send in that chat is forwarded to third-party AI providers
|
||
to write the reply: Grok by xAI (USA) and Google's Gemini (USA). In a group chat, only
|
||
messages that mention it are sent. If a reply needs current information, your question may
|
||
also be sent to Google Search to look it up. Each provider handles your text under its own
|
||
privacy policy. By using Vojo AI you agree to your messages being sent to these providers
|
||
to generate replies. Because they are in the United States, this transfers that content
|
||
outside the EU; the transfer relies on your explicit consent to this optional feature.
|
||
Replies are AI-generated and can be confidently wrong, so treat them as a first draft and
|
||
please don't send secrets. You can read the providers' policies at
|
||
<a href="https://x.ai/legal/privacy-policy" rel="noopener">x.ai/legal/privacy-policy</a>
|
||
and
|
||
<a href="https://ai.google.dev/gemini-api/terms" rel="noopener"
|
||
>ai.google.dev/gemini-api/terms</a
|
||
>.
|
||
</p>
|
||
|
||
<h2>Who else is involved</h2>
|
||
<p>
|
||
Push notifications go through Google so your phone can wake and ring. For encrypted chats
|
||
the notification carries only the routing info needed to fetch the message locally; for
|
||
unencrypted chats it may include a short preview. Signing up loads a Google
|
||
human-verification check (reCAPTCHA), and Google sees that interaction. If you choose to
|
||
connect another network you use, such as a messenger you already have an account on, your
|
||
messages with it pass through bridge infrastructure we run, and that network sees them too
|
||
— none of this is on unless you turn it on.
|
||
</p>
|
||
|
||
<p>
|
||
Our servers are hosted in the European Union. Some of the above sends data to providers
|
||
outside the EU. Apart from the Vojo AI transfer described above (which relies on your
|
||
consent), those transfers are covered by Standard Contractual Clauses, or by an adequacy
|
||
framework where the recipient is certified under one; a copy of the relevant safeguards,
|
||
and the current list of providers, is available on request at the address above.
|
||
</p>
|
||
|
||
<h2>Permissions on your phone</h2>
|
||
<p>
|
||
On Android we ask for the microphone (used only during calls), notifications, permission
|
||
to show and keep calls running over the lock screen, and network access. That's it — we
|
||
don't touch your contacts, photo library, SMS, precise location or call log.
|
||
</p>
|
||
|
||
<h2>How long we keep things, and your rights</h2>
|
||
<p>
|
||
Your messages and account stay on your Matrix server until you delete them or ask us to
|
||
deactivate the account. There is no in-app delete button yet: to have your account
|
||
deleted, email <a href="mailto:vojochatdev@gmail.com">vojochatdev@gmail.com</a> with your
|
||
<code>@username:vojo.chat</code> ID (the steps and details are at
|
||
<a href="https://vojo.chat/delete-account">vojo.chat/delete-account</a>). We complete
|
||
deletion within about thirty days. Server access logs are kept no longer than thirty days.
|
||
Data cached on your device is removed when you uninstall Vojo or clear its data in your
|
||
phone's settings.
|
||
</p>
|
||
|
||
<p>
|
||
If you live in the EU/EEA (and in many places elsewhere the law is similar), you can ask
|
||
us to show, correct, export or delete your data, restrict or stop a particular use, or
|
||
withdraw a consent you've given — and you can complain to your local data-protection
|
||
authority. Email the address at the top. Vojo isn't aimed at anyone under 16, and we don't
|
||
knowingly collect children's data. The current version of this policy always lives at
|
||
<a href="https://vojo.chat/privacy">vojo.chat/privacy</a>; if we change it in a way that
|
||
affects you, we'll update the date above and flag it in the app.
|
||
</p>
|
||
</section>
|
||
|
||
<section lang="ru" data-lang="ru" hidden>
|
||
<h2>Как устроено Vojo</h2>
|
||
<p>
|
||
Vojo — чат-приложение на открытом протоколе
|
||
<a href="https://matrix.org" rel="noopener">Matrix</a>, его поддерживает проект Vojo,
|
||
независимый разработчик. Ваши сообщения, профиль и комнаты хранятся на Matrix-сервере. По
|
||
умолчанию это <code>vojo.chat</code>, который держим мы. Вы можете войти и на любой другой
|
||
Matrix-сервер, которому доверяете — тогда вашими данными распоряжается оператор того
|
||
сервера, а не мы. Стараемся писать коротко; если что-то непонятно — напишите на
|
||
<a href="mailto:vojochatdev@gmail.com">vojochatdev@gmail.com</a>.
|
||
</p>
|
||
|
||
<h2>Что мы храним и зачем</h2>
|
||
<p>
|
||
Чтобы приложение работало, мы храним ваш аккаунт и профиль, отправленные и полученные
|
||
сообщения и комнаты, прикреплённые медиафайлы и базовые технические данные — IP-адрес и
|
||
время обращений. На самом устройстве хранится локальный кэш сообщений и ключей, чтобы
|
||
читать офлайн и не входить заново.
|
||
</p>
|
||
|
||
<p>
|
||
Эти данные мы обрабатываем, чтобы доставлять и синхронизировать сообщения и звонить на ваш
|
||
телефон при входящем вызове — это часть нашего соглашения с вами. Ограниченные логи мы
|
||
ведём для борьбы со спамом и злоупотреблениями — это наш законный интерес. Дополнительные
|
||
функции работают только если вы их включили, по вашему согласию. Мы не показываем рекламу,
|
||
не ведём аналитику в приложении, не продаём данные и не профилируем вас.
|
||
</p>
|
||
|
||
<p>
|
||
Сквозное шифрование можно включить для каждого чата отдельно. По умолчанию оно выключено:
|
||
в чате без него содержимое сообщений видит наш сервер. Когда оно включено, мы видим, кто и
|
||
когда переписывается, но не само содержимое. Голосовые и видеозвонки шифруются между
|
||
участниками и в пути могут проходить через наши серверы; мы их не записываем и не храним.
|
||
</p>
|
||
|
||
<h2>Vojo AI</h2>
|
||
<p>
|
||
Vojo AI — необязательный ассистент. Пользоваться им необязательно, но если вы начнёте с
|
||
ним личный чат, каждое отправленное в этом чате сообщение передаётся сторонним
|
||
ИИ-сервисам, чтобы составить ответ: Grok от xAI (США) и Google Gemini (США). В групповом
|
||
чате отправляются только те сообщения, где его упомянули. Если для ответа нужна свежая
|
||
информация, ваш вопрос может также уйти в Google Поиск. Каждый сервис обрабатывает ваш
|
||
текст по своей политике конфиденциальности. Пользуясь Vojo AI, вы соглашаетесь, что ваши
|
||
сообщения отправляются этим сервисам для генерации ответов. Поскольку они находятся в США,
|
||
при этом содержимое передаётся за пределы ЕС; основанием для передачи служит ваше явное
|
||
согласие на эту необязательную функцию. Ответы генерирует ИИ, и он может уверенно
|
||
ошибаться — считайте их черновиком и не отправляйте секреты. Политики сервисов можно
|
||
прочитать на
|
||
<a href="https://x.ai/legal/privacy-policy" rel="noopener">x.ai/legal/privacy-policy</a> и
|
||
<a href="https://ai.google.dev/gemini-api/terms" rel="noopener"
|
||
>ai.google.dev/gemini-api/terms</a
|
||
>.
|
||
</p>
|
||
|
||
<h2>Кто ещё в этом участвует</h2>
|
||
<p>
|
||
Push-уведомления идут через Google, чтобы телефон проснулся и зазвонил. Для зашифрованных
|
||
чатов уведомление несёт только маршрутную информацию, по которой сообщение подгружается
|
||
локально; для незашифрованных в нём может быть короткий предпросмотр. При регистрации
|
||
загружается проверка Google, что вы человек (reCAPTCHA), и Google видит это
|
||
взаимодействие. Если вы решите подключить другую сеть, которой пользуетесь, например
|
||
мессенджер, где у вас уже есть аккаунт, сообщения с ней проходят через мостовую
|
||
инфраструктуру, которую держим мы, и сама сеть тоже их видит — без вашего включения это не
|
||
работает.
|
||
</p>
|
||
|
||
<p>
|
||
Наши серверы размещены в Европейском союзе. Часть перечисленного отправляет данные
|
||
сервисам за пределами ЕС. Кроме передачи в Vojo AI, описанной выше (она основана на вашем
|
||
согласии), эти передачи покрыты Стандартными договорными положениями (SCC) или рамочным
|
||
соглашением об адекватности, если получатель в нём сертифицирован; копию соответствующих
|
||
гарантий и актуальный список сервисов можно запросить по адресу выше.
|
||
</p>
|
||
|
||
<h2>Разрешения на телефоне</h2>
|
||
<p>
|
||
На Android приложение запрашивает микрофон (только во время звонка), уведомления, право
|
||
показывать и удерживать звонок поверх экрана блокировки и доступ к сети. И всё — мы не
|
||
обращаемся к контактам, фотогалерее, SMS, точной геолокации и журналу вызовов.
|
||
</p>
|
||
|
||
<h2>Сколько мы храним и ваши права</h2>
|
||
<p>
|
||
Сообщения и аккаунт хранятся на Matrix-сервере, пока вы их не удалите или не попросите
|
||
деактивировать аккаунт. Кнопки удаления в приложении пока нет: чтобы удалить аккаунт,
|
||
напишите на <a href="mailto:vojochatdev@gmail.com">vojochatdev@gmail.com</a> и укажите
|
||
свой ID вида <code>@username:vojo.chat</code> (шаги и подробности — на
|
||
<a href="https://vojo.chat/delete-account">vojo.chat/delete-account</a>). Удаление мы
|
||
выполняем примерно за тридцать дней. Журналы доступа на сервере хранятся не дольше
|
||
тридцати дней. Кэш на устройстве удаляется, когда вы удаляете Vojo или очищаете его данные
|
||
в настройках телефона.
|
||
</p>
|
||
|
||
<p>
|
||
Если вы живёте в ЕС/ЕЭЗ (во многих странах закон работает похоже), вы можете попросить
|
||
показать, исправить, выгрузить или удалить ваши данные, ограничить или прекратить
|
||
конкретное использование, отозвать данное ранее согласие — и пожаловаться в местный
|
||
надзорный орган по защите данных. Напишите на адрес в начале. Vojo не рассчитан на лиц
|
||
младше 16 лет, и мы сознательно не собираем данные детей. Актуальная версия этой политики
|
||
всегда доступна по адресу <a href="https://vojo.chat/privacy">vojo.chat/privacy</a>; если
|
||
мы изменим её так, что это вас затронет, обновим дату вверху и отметим это в приложении.
|
||
</p>
|
||
</section>
|
||
|
||
<footer class="doc">
|
||
<span class="copy">© Vojo Project · 2026</span>
|
||
<a href="https://vojo.chat">vojo.chat</a>
|
||
</footer>
|
||
</div>
|
||
|
||
<script>
|
||
(function () {
|
||
var buttons = document.querySelectorAll('.lang-switch button');
|
||
var sections = document.querySelectorAll('section[data-lang]');
|
||
var h1 = document.querySelector('[data-i18n-h1]');
|
||
var eff = document.querySelector('[data-i18n-effective]');
|
||
var H1 = { en: 'Privacy Policy', ru: 'Политика конфиденциальности' };
|
||
var EFF = { en: 'Effective 13 May 2026', ru: 'Действует с 13 мая 2026 г.' };
|
||
function setLang(lang) {
|
||
buttons.forEach(function (b) {
|
||
b.setAttribute('aria-pressed', String(b.dataset.lang === lang));
|
||
});
|
||
sections.forEach(function (s) {
|
||
s.hidden = s.dataset.lang !== lang;
|
||
});
|
||
if (h1 && H1[lang]) h1.textContent = H1[lang];
|
||
if (eff && EFF[lang]) eff.textContent = EFF[lang];
|
||
document.documentElement.lang = lang;
|
||
document.title =
|
||
lang === 'ru' ? 'Vojo — Политика конфиденциальности' : 'Vojo — Privacy Policy';
|
||
try {
|
||
localStorage.setItem('vojo-privacy-lang', lang);
|
||
} catch (e) {}
|
||
}
|
||
buttons.forEach(function (b) {
|
||
b.addEventListener('click', function () {
|
||
setLang(b.dataset.lang);
|
||
});
|
||
});
|
||
var stored = null;
|
||
try {
|
||
stored = localStorage.getItem('vojo-privacy-lang');
|
||
} catch (e) {}
|
||
setLang(stored || 'en');
|
||
})();
|
||
</script>
|
||
</body>
|
||
</html>
|