feat: Add privacy policy page and associated styles for user data transparency
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<background android:drawable="@color/launcher_background" />
|
<background android:drawable="@mipmap/ic_launcher_background"/>
|
||||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||||
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
<monochrome android:drawable="@mipmap/ic_launcher_monochrome"/>
|
||||||
</adaptive-icon>
|
</adaptive-icon>
|
||||||
128
public/privacy.css
Normal file
128
public/privacy.css
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
@font-face {
|
||||||
|
font-family: "Manrope";
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: swap;
|
||||||
|
src: url("fonts/manrope-400.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
@font-face {
|
||||||
|
font-family: "Manrope";
|
||||||
|
font-weight: 700;
|
||||||
|
font-display: swap;
|
||||||
|
src: url("fonts/manrope-700.ttf") format("truetype");
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
color-scheme: light;
|
||||||
|
--primary: #6750a4;
|
||||||
|
--surface: #fef7ff;
|
||||||
|
--on-surface: #1d1b20;
|
||||||
|
--on-surface-variant: #49454f;
|
||||||
|
--container: #f3edf7;
|
||||||
|
--outline-variant: #cac4d0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
:root {
|
||||||
|
color-scheme: dark;
|
||||||
|
--primary: #d0bcff;
|
||||||
|
--surface: #141218;
|
||||||
|
--on-surface: #e6e0e9;
|
||||||
|
--on-surface-variant: #cac4d0;
|
||||||
|
--container: #211f26;
|
||||||
|
--outline-variant: #49454f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
background: var(--surface);
|
||||||
|
color: var(--on-surface);
|
||||||
|
font: 400 1rem/1.6 "Manrope", system-ui, sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
main {
|
||||||
|
max-width: 44rem;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 2.5rem 1rem 4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
display: flex;
|
||||||
|
gap: 1rem;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
header img {
|
||||||
|
flex: none;
|
||||||
|
border-radius: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 {
|
||||||
|
margin: 0;
|
||||||
|
font-size: clamp(1.5rem, 5vw, 2rem);
|
||||||
|
line-height: 1.2;
|
||||||
|
}
|
||||||
|
|
||||||
|
h2 {
|
||||||
|
margin: 0 0 0.5rem;
|
||||||
|
font-size: 1.15rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.meta {
|
||||||
|
margin: 0.25rem 0 0;
|
||||||
|
color: var(--on-surface-variant);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.lead {
|
||||||
|
font-size: 1.075rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section {
|
||||||
|
margin-top: 1rem;
|
||||||
|
padding: 1.25rem;
|
||||||
|
border-radius: 20px;
|
||||||
|
background: var(--container);
|
||||||
|
}
|
||||||
|
|
||||||
|
section p:last-child,
|
||||||
|
section ul:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
p,
|
||||||
|
ul {
|
||||||
|
margin: 0 0 0.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul {
|
||||||
|
padding-left: 1.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dt {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd {
|
||||||
|
margin: 0 0 0.75rem;
|
||||||
|
color: var(--on-surface-variant);
|
||||||
|
}
|
||||||
|
|
||||||
|
dd:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: var(--primary);
|
||||||
|
overflow-wrap: anywhere;
|
||||||
|
}
|
||||||
88
public/privacy.html
Normal file
88
public/privacy.html
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="ru">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Политика конфиденциальности — Расписание ПГУ</title>
|
||||||
|
<meta name="description" content="Политика конфиденциальности приложения «Расписание ПГУ»: какие данные обрабатываются и где они хранятся.">
|
||||||
|
<link rel="icon" href="icon.svg" type="image/svg+xml">
|
||||||
|
<link rel="stylesheet" href="privacy.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<main>
|
||||||
|
<header>
|
||||||
|
<img src="icon-192.png" alt="" width="56" height="56">
|
||||||
|
<div>
|
||||||
|
<h1>Политика конфиденциальности</h1>
|
||||||
|
<p class="meta">Приложение «Расписание ПГУ» · редакция от 20 октября 2026 г.</p>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<p class="lead">«Расписание ПГУ» показывает расписание занятий Полоцкого государственного университета. Приложение не требует регистрации и не собирает персональные данные. Здесь описано, какие данные всё же обрабатываются и зачем.</p>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2>Кто отвечает за приложение</h2>
|
||||||
|
<p>Разработчик — Захар Тимошенко, частное лицо. Приложение не является официальным приложением университета. По любым вопросам о данных пишите на <a href="mailto:vp1984tanki@gmail.com">vp1984tanki@gmail.com</a>.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2>Что хранится на вашем устройстве</h2>
|
||||||
|
<p>Эти данные остаются только на устройстве и не передаются разработчику:</p>
|
||||||
|
<ul>
|
||||||
|
<li>выбранная группа, подгруппа, скрытые занятия и недавние группы;</li>
|
||||||
|
<li>копии расписаний для работы без интернета;</li>
|
||||||
|
<li>настройки приложения: тема, напоминания, виджеты;</li>
|
||||||
|
<li>в веб-версии — Word-файлы, которые вы импортировали сами.</li>
|
||||||
|
</ul>
|
||||||
|
<p>Чтобы удалить эти данные, очистите данные приложения в настройках Android или удалите приложение. В веб-версии очистите данные сайта в браузере. Если в Android включено резервное копирование, система может сохранять настройки приложения в вашем аккаунте Google по правилам Google.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2>Что передаётся на сервер</h2>
|
||||||
|
<p>Приложение загружает расписание с сервера разработчика. Сервер получает документы из публичного каталога университета. В запросах передаются только параметры расписания: документ, группа, дата, а при поиске — имя преподавателя или номер аудитории.</p>
|
||||||
|
<p>Как и любой веб-сервер, он видит IP-адрес устройства. Адрес используется только для ограничения числа запросов и защиты от перегрузки. Он хранится в оперативной памяти несколько минут и не записывается в журналы.</p>
|
||||||
|
<p>Word-файлы, которые вы импортируете в веб-версии, обрабатываются в памяти сервера. Временные файлы удаляются сразу после разбора.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2>Чего в приложении нет</h2>
|
||||||
|
<ul>
|
||||||
|
<li>учётных записей и входа;</li>
|
||||||
|
<li>аналитики, рекламы и рекламных идентификаторов;</li>
|
||||||
|
<li>сторонних SDK для отслеживания и отчётов о сбоях;</li>
|
||||||
|
<li>доступа к контактам, местоположению, камере, микрофону и файлам устройства.</li>
|
||||||
|
</ul>
|
||||||
|
<p>Данные не продаются и не передаются третьим лицам.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2>Разрешения Android</h2>
|
||||||
|
<dl>
|
||||||
|
<dt>Интернет</dt>
|
||||||
|
<dd>Загрузка и обновление расписания.</dd>
|
||||||
|
<dt>Уведомления</dt>
|
||||||
|
<dd>Напоминания о парах и сообщения об изменениях в расписании. Их можно отключить в любой момент.</dd>
|
||||||
|
<dt>Запуск при загрузке устройства</dt>
|
||||||
|
<dd>Восстановление напоминаний после перезагрузки.</dd>
|
||||||
|
<dt>Точные будильники</dt>
|
||||||
|
<dd>Необязательно. Напоминания приходят точно ко времени, если вы разрешите это в настройках системы.</dd>
|
||||||
|
</dl>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2>Безопасность</h2>
|
||||||
|
<p>Обмен данными с сервером идёт по HTTPS. Ссылки «Поделиться расписанием» содержат только документ и группу. Подгруппа и скрытые занятия по ссылке не передаются.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2>Дети</h2>
|
||||||
|
<p>Приложение рассчитано на студентов и не предназначено для детей младше 13 лет. Персональные данные детей не собираются.</p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section>
|
||||||
|
<h2>Изменения политики</h2>
|
||||||
|
<p>Если обработка данных изменится, эта страница будет обновлена, а дата редакции вверху изменится.</p>
|
||||||
|
</section>
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user