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"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/launcher_background" />
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
|
||||
<background android:drawable="@mipmap/ic_launcher_background"/>
|
||||
<foreground android:drawable="@mipmap/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@mipmap/ic_launcher_monochrome"/>
|
||||
</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