Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,6 @@ Thumbs.db
# Vite
vite.config.js.timestamp-*
vite.config.ts.timestamp-*

# Sentry Config File
.env.sentry-build-plugin
323 changes: 322 additions & 1 deletion bun.lock

Large diffs are not rendered by default.

133 changes: 67 additions & 66 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,68 +1,69 @@
{
"name": "dev-tokiory",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"check": "svelte-check --tsconfig ./tsconfig.app.json && tsc -p tsconfig.node.json"
},
"devDependencies": {
"@eslint/compat": "^1.2.5",
"@eslint/js": "^9.18.0",
"@shikijs/transformers": "^3.3.0",
"@sveltejs/adapter-auto": "^6.0.0",
"@sveltejs/adapter-vercel": "^5.7.1",
"@sveltejs/kit": "^2.16.0",
"@sveltejs/vite-plugin-svelte": "^5.0.3",
"@tsconfig/svelte": "^5.0.4",
"@types/bun": "^1.2.10",
"@types/node": "^22.14.1",
"@types/throttle-debounce": "^5.0.2",
"@types/umami": "^2.10.0",
"@unocss/extractor-svelte": "^66.1.0-beta.12",
"@unocss/preset-icons": "^66.1.0-beta.12",
"@unocss/reset": "^66.1.0-beta.12",
"@unocss/transformer-directives": "^66.1.0-beta.12",
"autoprefixer": "^10.4.21",
"eslint": "^9.18.0",
"eslint-config-prettier": "^10.0.1",
"eslint-plugin-svelte": "^3.0.0",
"globals": "^16.0.0",
"mdsvex": "^0.12.5",
"postcss": "^8.5.3",
"postcss-import": "^16.1.0",
"prettier": "^3.4.2",
"prettier-plugin-svelte": "^3.3.3",
"svelte": "^5.23.1",
"svelte-check": "^4.1.5",
"typescript": "~5.7.2",
"typescript-eslint": "^8.20.0",
"unocss": "^66.1.0-beta.12",
"vercel": "^41.6.2",
"vite": "^6.3.1",
"vite-plugin-toml": "^0.7.0"
},
"dependencies": {
"@fontsource-variable/manrope": "^5.2.5",
"@fontsource-variable/martian-mono": "^5.2.5",
"@fontsource-variable/podkova": "^5.2.6",
"@fontsource/iosevka": "^5.2.5",
"@iconify-json/fluent-emoji": "^1.2.3",
"@iconify-json/simple-icons": "^1.2.37",
"@iconify-json/tabler": "^1.2.17",
"@iconify-json/vscode-icons": "^1.2.20",
"@telegram-apps/sdk": "^3.11.4",
"animejs": "^4.0.1",
"katex": "^0.16.22",
"medium-zoom": "^1.1.0",
"protobufjs": "^7.5.0",
"satori": "^0.12.2",
"sharp": "^0.34.1",
"shiki": "^3.3.0",
"super-sitemap": "^1.0.3",
"throttle-debounce": "^5.0.2"
}
"name": "dev-tokiory",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"check": "svelte-check --tsconfig ./tsconfig.app.json && tsc -p tsconfig.node.json"
},
"devDependencies": {
"@eslint/compat": "^1.2.5",
"@eslint/js": "^9.18.0",
"@shikijs/transformers": "^3.3.0",
"@sveltejs/adapter-auto": "^6.0.0",
"@sveltejs/adapter-vercel": "^5.7.1",
"@sveltejs/kit": "^2.16.0",
"@sveltejs/vite-plugin-svelte": "^5.0.3",
"@tsconfig/svelte": "^5.0.4",
"@types/bun": "^1.2.10",
"@types/node": "^22.14.1",
"@types/throttle-debounce": "^5.0.2",
"@types/umami": "^2.10.0",
"@unocss/extractor-svelte": "^66.1.0-beta.12",
"@unocss/preset-icons": "^66.1.0-beta.12",
"@unocss/reset": "^66.1.0-beta.12",
"@unocss/transformer-directives": "^66.1.0-beta.12",
"autoprefixer": "^10.4.21",
"eslint": "^9.18.0",
"eslint-config-prettier": "^10.0.1",
"eslint-plugin-svelte": "^3.0.0",
"globals": "^16.0.0",
"mdsvex": "^0.12.5",
"postcss": "^8.5.3",
"postcss-import": "^16.1.0",
"prettier": "^3.4.2",
"prettier-plugin-svelte": "^3.3.3",
"svelte": "^5.23.1",
"svelte-check": "^4.1.5",
"typescript": "~5.7.2",
"typescript-eslint": "^8.20.0",
"unocss": "^66.1.0-beta.12",
"vercel": "^41.6.2",
"vite": "^6.3.1",
"vite-plugin-toml": "^0.7.0"
},
"dependencies": {
"@fontsource-variable/manrope": "^5.2.5",
"@fontsource-variable/martian-mono": "^5.2.5",
"@fontsource-variable/podkova": "^5.2.6",
"@fontsource/iosevka": "^5.2.5",
"@iconify-json/fluent-emoji": "^1.2.3",
"@iconify-json/simple-icons": "^1.2.37",
"@iconify-json/tabler": "^1.2.17",
"@iconify-json/vscode-icons": "^1.2.20",
"@sentry/sveltekit": "^9",
"@telegram-apps/sdk": "^3.11.4",
"animejs": "^4.0.1",
"katex": "^0.16.22",
"medium-zoom": "^1.1.0",
"protobufjs": "^7.5.0",
"satori": "^0.12.2",
"sharp": "^0.34.1",
"shiki": "^3.3.0",
"super-sitemap": "^1.0.3",
"throttle-debounce": "^5.0.2"
}
}
9 changes: 9 additions & 0 deletions src/hooks.client.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { handleErrorWithSentry, replayIntegration } from '@sentry/sveltekit';
import * as Sentry from '@sentry/sveltekit';

Sentry.init({
dsn: 'https://8bfc5c41617d329f8b1f1d0ae8e96d5c@o4509690632798208.ingest.de.sentry.io/4509690700300368'
});

// If you have a custom error handler, pass it to `handleErrorWithSentry`
export const handleError = handleErrorWithSentry();
16 changes: 16 additions & 0 deletions src/hooks.server.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { sequence } from '@sveltejs/kit/hooks';
import { handleErrorWithSentry, sentryHandle } from '@sentry/sveltekit';
import * as Sentry from '@sentry/sveltekit';

Sentry.init({
dsn: 'https://8bfc5c41617d329f8b1f1d0ae8e96d5c@o4509690632798208.ingest.de.sentry.io/4509690700300368'

// uncomment the line below to enable Spotlight (https://spotlightjs.com)
// spotlight: import.meta.env.DEV,
});

// If you have custom handlers, make sure to place them after `sentryHandle()` in the `sequence` function.
export const handle = sequence(sentryHandle());

// If you have a custom error handler, pass it to `handleErrorWithSentry`
export const handleError = handleErrorWithSentry();
55 changes: 38 additions & 17 deletions src/routes/(standard)/privacy/+page.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,33 @@
import ContentLi from '@/lib/components/Content/ContentLi.svelte';
import ContentParagraph from '@/lib/components/Content/ContentParagraph.svelte';
import ContentUl from '@/lib/components/Content/ContentUl.svelte';
import Link from '@/lib/components/Link.svelte';
</script>

<div>
<ContentH1>Политика конфиденциальности</ContentH1>
<ContentParagraph>Дата публикации: 07.05.2025</ContentParagraph>
<ContentParagraph>Дата обновления: 18.07.2025</ContentParagraph>

<ContentParagraph>
Настоящая Политика конфиденциальности определяет порядок обработки и защиты информации, которую
пользователь предоставляет при использовании данного сайта.
Настоящая Политика конфиденциальности составлена в соответствии с Федеральным законом РФ от 27.07.2006 № 152-ФЗ «О персональных данных» и определяет порядок обработки и защиты информации, которую пользователь предоставляет при использовании данного сайта.
</ContentParagraph>

<ContentH2>1. Общие положения</ContentH2>
<ContentParagraph>
1.1. Владелец сайта (далее — "Администрация") уважает право пользователей на конфиденциальность.
1.1. Администрация сайта (далее — "Администрация") уважает право пользователей на конфиденциальность.
</ContentParagraph>

<ContentParagraph>
1.2. На сайте используется аналитическая система Umami, которая собирает обезличенные данные о
посещениях страниц и технические характеристики устройства пользователя.
1.2. При посещении сайта может осуществляться автоматизированный сбор технической информации для целей аналитики и обеспечения стабильной работы сайта.
</ContentParagraph>

<ContentParagraph>
1.3. Umami не использует cookies и не сохраняет полные IP-адреса.
1.3. Сайт использует аналитическую систему Umami для сбора обезличенных данных о посещениях страниц и технических характеристиках устройства пользователя.
</ContentParagraph>
<ContentParagraph>
1.4. Для мониторинга ошибок и повышения стабильности сайта используется сервис Sentry, предоставляемый Functional Software, Inc.
</ContentParagraph>
<ContentParagraph>
1.5. Мы не собираем и не обрабатываем персональные данные пользователей в понимании законодательства РФ, за исключением случаев их добровольного предоставления пользователем.
</ContentParagraph>

<ContentH2>2. Состав собираемой информации</ContentH2>
Expand All @@ -35,26 +39,43 @@
<ContentLi>Тип устройства и браузера</ContentLi>
<ContentLi>Разрешение экрана</ContentLi>
<ContentLi>Примерное географическое местоположение (на основе IP без его хранения)</ContentLi>
<ContentLi>Данные об ошибках, включая stack traces, URL страниц и параметры запросов (через Sentry)</ContentLi>
</ContentUl>

<ContentH2>3. Цель сбора данных</ContentH2>
<ContentParagraph>
Сбор обезличенных статистических данных необходим для анализа производительности сайта и его
улучшения.
Сбор технических и обезличенных данных осуществляется исключительно для анализа производительности сайта, выявления и устранения ошибок, а также для обеспечения информационной безопасности.
</ContentParagraph>

<ContentH2>4. Использование сервиса Sentry</ContentH2>
<ContentParagraph>
Sentry собирает технические данные, такие как тип устройства, браузера, URL страниц, а также информацию об ошибках (stack traces, параметры запросов). Эти данные помогают выявлять и устранять проблемы в работе сайта.
</ContentParagraph>
<ContentParagraph>
Мы стремимся минимизировать передачу любых данных, которые могут содержать личную информацию. Обработка данных осуществляется в соответствии с <Link href="https://sentry.io/privacy/">Политикой конфиденциальности Sentry</Link>. Данные защищены соответствующими техническими и организационными мерами.
</ContentParagraph>

<ContentH2>5. Хранение и защита информации</ContentH2>
<ContentParagraph>
Данные хранятся на серверах Администрации или её технических партнёров (Umami, Sentry). Доступ к данным ограничен и защищён техническими средствами. Применяются меры для предотвращения несанкционированного доступа.
</ContentParagraph>

<ContentH2>4. Хранение и защита информации</ContentH2>
<ContentH2>6. Трансграничная передача данных</ContentH2>
<ContentParagraph>
Данные хранятся на сервере Администрации или его технического партнёра. Доступ к данным защищён
техническими и организационными мерами.
В отдельных случаях данные могут обрабатываться на серверах, расположенных за пределами Российской Федерации, включая страны, не обеспечивающие адекватный уровень защиты персональных данных. Такая передача осуществляется исключительно в рамках обеспечения работы сайта.
</ContentParagraph>

<ContentH2>5. Контакты</ContentH2>
<ContentH2>7. Права пользователей</ContentH2>
<ContentParagraph>
Пользователи имеют право запрашивать информацию о характере собираемых данных, а также обращаться с вопросами и запросами, связанными с конфиденциальностью.
</ContentParagraph>

<ContentH2>8. Контакты</ContentH2>
<ContentParagraph>
Если у вас есть вопросы, вы можете связаться с Администрацией:
</ContentParagraph>
<ContentParagraph
>Администратор: Шило Даниил Вадимович<br />
Адрес электронной почты: <a href="mailto:tokiory.work@gmail.com">tokiory.work@gmail.com</a>
<ContentParagraph>
Администратор: Шило Даниил Вадимович<br />
Email: <Link href="mailto:tokiory.work@gmail.com">tokiory.work@gmail.com</Link>
</ContentParagraph>
</div>
7 changes: 7 additions & 0 deletions vite.config.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { sentrySvelteKit } from '@sentry/sveltekit';
import { sveltekit } from '@sveltejs/kit/vite';
import extractorSvelte from '@unocss/extractor-svelte';
import { fileURLToPath } from 'node:url';
Expand Down Expand Up @@ -27,6 +28,12 @@ export default defineConfig({
]
},
plugins: [
sentrySvelteKit({
sourceMapsUploadOptions: {
org: 'devtokiory',
project: 'dev-tokiory'
}
}),
unocss({
extractors: [extractorSvelte()]
}),
Expand Down