update privacy
This commit is contained in:
parent
c0658c38ec
commit
a334612734
1 changed files with 423 additions and 341 deletions
|
|
@ -1,373 +1,449 @@
|
|||
<!doctype html>
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<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;
|
||||
: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;
|
||||
}
|
||||
*, *::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;
|
||||
h1 {
|
||||
font-size: 28px;
|
||||
}
|
||||
h2 {
|
||||
font-size: 18px;
|
||||
margin: 36px 0 10px;
|
||||
}
|
||||
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 .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 .15s ease, border-color .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; }
|
||||
font-size: 15.5px;
|
||||
line-height: 1.65;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="frame">
|
||||
|
||||
<header class="doc">
|
||||
</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>
|
||||
<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>
|
||||
<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>
|
||||
</header>
|
||||
|
||||
<section lang="en" data-lang="en">
|
||||
<p>This is the privacy policy for <b>Vojo</b>, a chat app built on the open
|
||||
<a href="https://matrix.org" rel="noopener">Matrix</a> protocol. It's maintained by
|
||||
the Vojo Project, an independent developer. If you have questions about anything
|
||||
here, write to <a href="mailto:vojochatdev@gmail.com">vojochatdev@gmail.com</a>.</p>
|
||||
<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>
|
||||
|
||||
<p>We try to keep this short and readable. If something is unclear, ask.</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>
|
||||
|
||||
<h2>How Vojo works, briefly</h2>
|
||||
<p>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 is the one holding your
|
||||
data, not us.</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>
|
||||
|
||||
<h2>What we hold and what we use it for</h2>
|
||||
<p>To make the app work we keep the obvious things: your account, the messages and
|
||||
rooms you send and receive, the media you share, and basic technical data (IP
|
||||
address, connection times) generated when your device talks to our servers. Your
|
||||
device also caches messages and keys locally so you can read them offline and stay
|
||||
signed in.</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>
|
||||
|
||||
<p>Direct conversations are end-to-end encrypted by default. In an encrypted room
|
||||
we can see who's talking to whom and when, but not what they're saying. In an
|
||||
unencrypted room we see the content too.</p>
|
||||
|
||||
<p>Voice calls are encrypted between participants. When your device can't reach the
|
||||
other side directly, the audio is relayed through our infrastructure on its way
|
||||
through — we don't record it and we don't keep it.</p>
|
||||
|
||||
<p>We use this data to run the service: deliver messages, sync your devices, ring
|
||||
your phone for incoming calls, keep limited logs to fight abuse and spam. That's
|
||||
the whole list. No advertising, no analytics, no resale, no profiling.</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>
|
||||
<ul>
|
||||
<li><b>Our hosting provider.</b> The
|
||||
<a href="https://www.hostinger.com" rel="noopener">Hostinger</a>
|
||||
infrastructure carrying <code>vojo.chat</code> sits in the European Union.</li>
|
||||
<li><b>Google's push service.</b> Push notifications go through Google so your
|
||||
phone can wake up and ring or buzz. For end-to-end encrypted chats the
|
||||
notification only carries the routing info needed to fetch the message
|
||||
locally — the content stays on your Matrix server. For unencrypted chats
|
||||
Google may see a short preview (who, where, snippet). This is the only
|
||||
routine reason data leaves the EU; we rely on the Standard Contractual
|
||||
Clauses for that transfer.</li>
|
||||
<li><b>Bot checks.</b> Signing up, and a couple of optional features, briefly
|
||||
load a third-party "are you a human" check. That provider sees your
|
||||
interaction with the puzzle and is governed by its own privacy policy.</li>
|
||||
<li><b>Optional bridges.</b> If you choose to connect Telegram, Discord or
|
||||
WhatsApp through Vojo, your messages with those networks have to pass
|
||||
through bridge infrastructure we run, and the network itself sees them
|
||||
too. None of this turns on unless you opt in.</li>
|
||||
</ul>
|
||||
<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 (only used during calls); notifications
|
||||
(so we can show you messages and ring for calls); permission to show calls over
|
||||
the lock screen and to keep a call running with the screen off; and network access.
|
||||
That's it. We don't touch your address book, photo library, SMS, precise location
|
||||
or call log.</p>
|
||||
<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</h2>
|
||||
<p>Your messages and account stay on your Matrix server until you delete them or
|
||||
ask us to deactivate the account. Deletion is processed within about thirty days.
|
||||
Server access logs are kept for no more than thirty days and then rotated out.</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>Data cached on your device goes away when you uninstall Vojo or clear its data
|
||||
in your phone's settings. Signing out ends your session but doesn't always scrub
|
||||
every cached message immediately — the cleanest reset is an uninstall.</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>
|
||||
|
||||
<h2>Your rights</h2>
|
||||
<p>If you live in the EU/EEA (and in many other places the law works similarly),
|
||||
you can ask us to show you what we hold, fix something that's wrong, delete your
|
||||
data, hand it over in a portable form, or stop a particular use. You can also
|
||||
withdraw any consent you've given for optional features, and complain to your
|
||||
local data-protection authority if you think we're handling things badly. Email
|
||||
the address at the top and we'll take it from there.</p>
|
||||
<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>Kids, changes, contact</h2>
|
||||
<p>Vojo isn't aimed at anyone under 16, and we don't knowingly collect data from
|
||||
children. If we change this policy in a way that actually affects you, we'll
|
||||
update the date above and try to flag it inside the app. The current version
|
||||
always lives at <a href="https://vojo.chat/privacy">vojo.chat/privacy</a>. For
|
||||
anything else: <a href="mailto:vojochatdev@gmail.com">vojochatdev@gmail.com</a>.</p>
|
||||
</section>
|
||||
<h2>Что мы храним и зачем</h2>
|
||||
<p>
|
||||
Чтобы приложение работало, мы храним ваш аккаунт и профиль, отправленные и полученные
|
||||
сообщения и комнаты, прикреплённые медиафайлы и базовые технические данные — IP-адрес и
|
||||
время обращений. На самом устройстве хранится локальный кэш сообщений и ключей, чтобы
|
||||
читать офлайн и не входить заново.
|
||||
</p>
|
||||
|
||||
<section lang="ru" data-lang="ru" hidden>
|
||||
<p>Это политика конфиденциальности <b>Vojo</b> — чат-приложения на открытом
|
||||
протоколе <a href="https://matrix.org" rel="noopener">Matrix</a>. Его поддерживает
|
||||
проект Vojo, независимый разработчик. Если по тексту возникают вопросы — пишите
|
||||
на <a href="mailto:vojochatdev@gmail.com">vojochatdev@gmail.com</a>.</p>
|
||||
<p>
|
||||
Эти данные мы обрабатываем, чтобы доставлять и синхронизировать сообщения и звонить на ваш
|
||||
телефон при входящем вызове — это часть нашего соглашения с вами. Ограниченные логи мы
|
||||
ведём для борьбы со спамом и злоупотреблениями — это наш законный интерес. Дополнительные
|
||||
функции работают только если вы их включили, по вашему согласию. Мы не показываем рекламу,
|
||||
не ведём аналитику в приложении, не продаём данные и не профилируем вас.
|
||||
</p>
|
||||
|
||||
<p>Постарались уложиться в нормальный читаемый объём. Если что-то непонятно —
|
||||
спрашивайте.</p>
|
||||
<p>
|
||||
Сквозное шифрование можно включить для каждого чата отдельно. По умолчанию оно выключено:
|
||||
в чате без него содержимое сообщений видит наш сервер. Когда оно включено, мы видим, кто и
|
||||
когда переписывается, но не само содержимое. Голосовые и видеозвонки шифруются между
|
||||
участниками и в пути могут проходить через наши серверы; мы их не записываем и не храним.
|
||||
</p>
|
||||
|
||||
<h2>Как устроено</h2>
|
||||
<p>Ваши сообщения, профиль и список комнат живут на Matrix-сервере. По умолчанию
|
||||
это <code>vojo.chat</code>, который держим мы. Вы можете войти на любой другой
|
||||
Matrix-сервер, которому доверяете — если так, оператором ваших данных будет тот
|
||||
сервер, не мы.</p>
|
||||
|
||||
<h2>Что у нас лежит и зачем</h2>
|
||||
<p>Чтобы приложение работало, у нас лежат предсказуемые вещи: ваш аккаунт, ваши
|
||||
сообщения и комнаты, медиа, и базовые технические данные (IP, время запросов),
|
||||
которые возникают, когда устройство разговаривает с нашими серверами. На самом
|
||||
устройстве лежит локальный кэш сообщений и ключей — чтобы можно было читать
|
||||
офлайн и не входить заново каждый раз.</p>
|
||||
|
||||
<p>Личные переписки по умолчанию защищены end-to-end шифрованием. В зашифрованной
|
||||
комнате мы видим, кто кому пишет и когда, но не видим, что именно. В
|
||||
незашифрованных комнатах мы видим и содержимое.</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>
|
||||
<ul>
|
||||
<li><b>Наш хостинг.</b>
|
||||
<a href="https://www.hostinger.com" rel="noopener">Hostinger</a> держит
|
||||
инфраструктуру <code>vojo.chat</code> в Европейском союзе.</li>
|
||||
<li><b>Push-сервис Google.</b> Push-уведомления идут через Google, чтобы
|
||||
телефон проснулся и зазвонил. Для зашифрованных переписок уведомление
|
||||
несёт только маршрутную информацию, нужную для того чтобы подгрузить
|
||||
сообщение локально — содержимое остаётся на Matrix-сервере. Для
|
||||
незашифрованных Google может видеть короткий предпросмотр (кто, где,
|
||||
фрагмент). Это единственный регулярный случай, когда данные выходят за
|
||||
пределы ЕС; передача идёт по Стандартным договорным условиям Европейской
|
||||
комиссии.</li>
|
||||
<li><b>Капча.</b> При регистрации и в паре дополнительных функций ненадолго
|
||||
подгружается сторонняя проверка «вы не робот». Этот провайдер видит ваше
|
||||
взаимодействие с капчей и регулируется собственной политикой.</li>
|
||||
<li><b>Опциональные мосты.</b> Если вы решите подключить Telegram, Discord
|
||||
или WhatsApp через Vojo, сообщения с этими сетями неизбежно проходят
|
||||
через мостовую инфраструктуру, которую держим мы, и сама сеть тоже их
|
||||
видит. Без вашего явного действия это не включается.</li>
|
||||
</ul>
|
||||
<p>
|
||||
Push-уведомления идут через Google, чтобы телефон проснулся и зазвонил. Для зашифрованных
|
||||
чатов уведомление несёт только маршрутную информацию, по которой сообщение подгружается
|
||||
локально; для незашифрованных в нём может быть короткий предпросмотр. При регистрации
|
||||
загружается проверка Google, что вы человек (reCAPTCHA), и Google видит это
|
||||
взаимодействие. Если вы решите подключить другую сеть, которой пользуетесь, например
|
||||
мессенджер, где у вас уже есть аккаунт, сообщения с ней проходят через мостовую
|
||||
инфраструктуру, которую держим мы, и сама сеть тоже их видит — без вашего включения это не
|
||||
работает.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
Наши серверы размещены в Европейском союзе. Часть перечисленного отправляет данные
|
||||
сервисам за пределами ЕС. Кроме передачи в Vojo AI, описанной выше (она основана на вашем
|
||||
согласии), эти передачи покрыты Стандартными договорными положениями (SCC) или рамочным
|
||||
соглашением об адекватности, если получатель в нём сертифицирован; копию соответствующих
|
||||
гарантий и актуальный список сервисов можно запросить по адресу выше.
|
||||
</p>
|
||||
|
||||
<h2>Разрешения на телефоне</h2>
|
||||
<p>На Android приложение просит: микрофон (используется только во время звонка);
|
||||
уведомления (чтобы показывать сообщения и звонки); право показывать звонок поверх
|
||||
локскрина и держать его при выключенном экране; доступ к сети. И всё. Мы не
|
||||
трогаем адресную книгу, фотогалерею, SMS, точную геолокацию и журнал вызовов.</p>
|
||||
<p>
|
||||
На Android приложение запрашивает микрофон (только во время звонка), уведомления, право
|
||||
показывать и удерживать звонок поверх экрана блокировки и доступ к сети. И всё — мы не
|
||||
обращаемся к контактам, фотогалерее, SMS, точной геолокации и журналу вызовов.
|
||||
</p>
|
||||
|
||||
<h2>Сколько мы это храним</h2>
|
||||
<p>Сообщения и аккаунт лежат на Matrix-сервере до тех пор, пока вы их не
|
||||
удалите или не попросите деактивировать аккаунт. Удаление обрабатывается в
|
||||
течение тридцати дней. Журналы доступа на сервере хранятся не более тридцати
|
||||
дней, затем уходят на ротацию.</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 или очищаете его данные в
|
||||
настройках телефона. Выход из аккаунта прекращает сессию, но не всегда подчищает
|
||||
весь кэш сразу — самый чистый способ обнулиться — это переустановка.</p>
|
||||
<p>
|
||||
Если вы живёте в ЕС/ЕЭЗ (во многих странах закон работает похоже), вы можете попросить
|
||||
показать, исправить, выгрузить или удалить ваши данные, ограничить или прекратить
|
||||
конкретное использование, отозвать данное ранее согласие — и пожаловаться в местный
|
||||
надзорный орган по защите данных. Напишите на адрес в начале. Vojo не рассчитан на лиц
|
||||
младше 16 лет, и мы сознательно не собираем данные детей. Актуальная версия этой политики
|
||||
всегда доступна по адресу <a href="https://vojo.chat/privacy">vojo.chat/privacy</a>; если
|
||||
мы изменим её так, что это вас затронет, обновим дату вверху и отметим это в приложении.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<h2>Ваши права</h2>
|
||||
<p>Если вы живёте в ЕС/ЕЭЗ (а во многих других местах закон работает похоже), вы
|
||||
можете попросить нас показать, что у нас лежит, поправить неверное, удалить,
|
||||
отдать в переносимом виде, остановить конкретное использование. Можно отозвать
|
||||
согласие на дополнительные функции и пожаловаться в местный надзорный орган, если
|
||||
кажется, что мы что-то делаем не так. Напишите на адрес сверху, и пойдём
|
||||
разбираться.</p>
|
||||
|
||||
<h2>Дети, изменения, контакты</h2>
|
||||
<p>Vojo не рассчитан на людей младше 16 лет, и мы сознательно не собираем данные
|
||||
детей. Если что-то поменяется так, что это вас реально касается, обновим дату в
|
||||
начале и постараемся отметить это в самом приложении. Текущая версия всегда
|
||||
лежит по адресу <a href="https://vojo.chat/privacy">vojo.chat/privacy</a>. По
|
||||
любым другим вопросам:
|
||||
<a href="mailto:vojochatdev@gmail.com">vojochatdev@gmail.com</a>.</p>
|
||||
</section>
|
||||
|
||||
<footer class="doc">
|
||||
<footer class="doc">
|
||||
<span class="copy">© Vojo Project · 2026</span>
|
||||
<a href="https://vojo.chat">vojo.chat</a>
|
||||
</footer>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
(function () {
|
||||
<script>
|
||||
(function () {
|
||||
var buttons = document.querySelectorAll('.lang-switch button');
|
||||
var sections = document.querySelectorAll('section[data-lang]');
|
||||
var h1 = document.querySelector('[data-i18n-h1]');
|
||||
|
|
@ -375,26 +451,32 @@
|
|||
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.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); });
|
||||
b.addEventListener('click', function () {
|
||||
setLang(b.dataset.lang);
|
||||
});
|
||||
});
|
||||
var stored = null;
|
||||
try { stored = localStorage.getItem('vojo-privacy-lang'); } catch (e) {}
|
||||
try {
|
||||
stored = localStorage.getItem('vojo-privacy-lang');
|
||||
} catch (e) {}
|
||||
setLang(stored || 'en');
|
||||
})();
|
||||
</script>
|
||||
|
||||
</body>
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue