Compare commits
33 Commits
b533e04ae8
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| c84b9788d9 | |||
| 4771b374ac | |||
| d55237f736 | |||
| 78b53fc248 | |||
| 38167ee385 | |||
| 3749fd0d07 | |||
| 3d415c5342 | |||
| c1ba357393 | |||
| a0df926e56 | |||
| bc2dd90e57 | |||
| adbc1d66c2 | |||
| d1f97f9efe | |||
| 9193fd27ae | |||
| ef99044b08 | |||
| 8d16a4cc51 | |||
| 21fd41f87c | |||
| b55acc0f7a | |||
| 1319ed4dfb | |||
| ef18c3bec6 | |||
| 0010306bac | |||
| a87c6b7554 | |||
| cd590bb81a | |||
| 917b3ef4f0 | |||
| e79c3242ff | |||
| 5d5819a732 | |||
| 5bdf75605b | |||
| b2e242dc71 | |||
| ae678af314 | |||
| ca3e80b314 | |||
| 9a0c6c3c3e | |||
| cdff4592d9 | |||
| 3ded20df7c | |||
| 27f084c5fb |
@@ -17,7 +17,8 @@ steps:
|
||||
username: root
|
||||
key:
|
||||
from_secret: SSH-nginx-key
|
||||
source: dist/spa/*
|
||||
source: ./dist/spa/*
|
||||
strip_components: 2
|
||||
target: /usr/share/nginx/tgCrewLanding
|
||||
rm: true
|
||||
when:
|
||||
|
||||
BIN
i18n-2.xlsm
@@ -9,11 +9,9 @@
|
||||
<meta name="msapplication-tap-highlight" content="no">
|
||||
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width<% if (ctx.mode.cordova || ctx.mode.capacitor) { %>, viewport-fit=cover<% } %>">
|
||||
|
||||
<link rel="icon" type="image/png" sizes="128x128" href="icons/favicon-128x128.png">
|
||||
<link rel="icon" type="image/png" sizes="96x96" href="icons/favicon-96x96.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="icons/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="icons/favicon-16x16.png">
|
||||
<link rel="icon" type="image/ico" href="favicon.ico">
|
||||
<link rel="icon" href="icons/favicon.svg" type="image/svg+xml">
|
||||
<link rel="icon" type="image/ico" href="icons/favicon.ico">
|
||||
<link rel="apple-touch-icon" href="icons/apple-touch-icon.png">
|
||||
</head>
|
||||
<body>
|
||||
<!-- quasar:entry-point -->
|
||||
|
||||
1056
package-lock.json
generated
21
package.json
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "projectsnodelandingpage",
|
||||
"name": "tgCrewLandingPage",
|
||||
"version": "0.0.1",
|
||||
"description": "A Quasar Project",
|
||||
"productName": "LandingPage",
|
||||
"description": "Landing Page for telegram mini app tgCrew",
|
||||
"productName": "tgCrew",
|
||||
"author": "AlexMart",
|
||||
"type": "module",
|
||||
"private": true,
|
||||
@@ -15,24 +15,25 @@
|
||||
"postinstall": "quasar prepare"
|
||||
},
|
||||
"dependencies": {
|
||||
"vue-i18n": "^11.0.0",
|
||||
"@quasar/extras": "^1.16.4",
|
||||
"quasar": "^2.16.0",
|
||||
"vue": "^3.4.18",
|
||||
"vue-i18n": "^11.0.0",
|
||||
"vue-router": "^4.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@intlify/unplugin-vue-i18n": "^4.0.0",
|
||||
"@eslint/js": "^9.14.0",
|
||||
"@intlify/unplugin-vue-i18n": "^4.0.0",
|
||||
"@quasar/app-vite": "^2.1.0",
|
||||
"@quasar/quasar-app-extension-qmarkdown": "^2.0.5",
|
||||
"@vue/eslint-config-prettier": "^10.1.0",
|
||||
"autoprefixer": "^10.4.2",
|
||||
"eslint": "^9.14.0",
|
||||
"eslint-plugin-vue": "^9.30.0",
|
||||
"globals": "^15.12.0",
|
||||
"vite-plugin-checker": "^0.9.0",
|
||||
"@vue/eslint-config-prettier": "^10.1.0",
|
||||
"postcss": "^8.4.14",
|
||||
"prettier": "^3.3.3",
|
||||
"@quasar/app-vite": "^2.1.0",
|
||||
"autoprefixer": "^10.4.2",
|
||||
"postcss": "^8.4.14"
|
||||
"vite-plugin-checker": "^0.9.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^28 || ^26 || ^24 || ^22 || ^20 || ^18",
|
||||
|
||||
|
Before Width: | Height: | Size: 63 KiB |
BIN
public/icons/android-chrome-192x192.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
public/icons/android-chrome-512x512.png
Normal file
|
After Width: | Height: | Size: 146 KiB |
BIN
public/icons/apple-touch-icon.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 859 B After Width: | Height: | Size: 705 B |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 9.4 KiB |
BIN
public/icons/favicon.ico
Normal file
|
After Width: | Height: | Size: 15 KiB |
67
public/icons/favicon.svg
Normal file
@@ -0,0 +1,67 @@
|
||||
<svg
|
||||
|
||||
viewBox="0 0 8.4666662 8.4666662"
|
||||
width="32"
|
||||
height="32"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
>
|
||||
<defs id="defs1" />
|
||||
<g id="layer1">
|
||||
<rect
|
||||
style="fill: #27A7E7 ;stroke-width:0.233149"
|
||||
id="rect5"
|
||||
width="6.9885192"
|
||||
height="0.35581663"
|
||||
x="3.114475"
|
||||
y="0.86827624"
|
||||
transform="matrix(0.77578367,0.63099897,-0.77578367,0.63099897,0,0)"
|
||||
/>
|
||||
<rect
|
||||
style="fill: #27A7E7 ;stroke-width:0.24961"
|
||||
id="rect5-7"
|
||||
width="7.4819207"
|
||||
height="0.3809379"
|
||||
x="-3.9267058"
|
||||
y="5.7988153"
|
||||
transform="matrix(-0.70756824,0.70664502,0.70756824,0.70664502,0,0)"
|
||||
/>
|
||||
<circle
|
||||
style="fill: #27A7E7 ;stroke-width:0.134869"
|
||||
id="path5-8"
|
||||
cx="1.5875"
|
||||
cy="6.8791666"
|
||||
r="1.0583333"
|
||||
/>
|
||||
<circle
|
||||
style="fill: #27A7E7 ;stroke-width:0.168586"
|
||||
id="path5-8-5"
|
||||
cx="7.1437502"
|
||||
cy="7.1437502"
|
||||
r="1.3229166"
|
||||
/>
|
||||
<circle
|
||||
style="fill: #27A7E7 ;stroke-width:0.118011"
|
||||
id="path5-8-5-1"
|
||||
cx="1.4552083"
|
||||
cy="2.5135417"
|
||||
r="0.92604166"
|
||||
/>
|
||||
<circle
|
||||
style="fill: #27A7E7 ;stroke-width:0.101152"
|
||||
id="path5-8-5-1-7"
|
||||
cx="7.1437502"
|
||||
cy="1.3229166"
|
||||
r="0.79374999"
|
||||
/>
|
||||
<circle
|
||||
style="fill: #F36D3A; stroke-width:0.23602"
|
||||
id="path5"
|
||||
cx="3.96875"
|
||||
cy="4.4979167"
|
||||
r="1.8520833"
|
||||
/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.7 KiB |
1
public/icons/site.webmanifest
Normal file
@@ -0,0 +1 @@
|
||||
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
|
||||
BIN
public/img/samolet.jpg
Normal file
|
After Width: | Height: | Size: 5.9 MiB |
@@ -31,7 +31,7 @@ export default defineConfig((ctx) => {
|
||||
// 'line-awesome',
|
||||
// 'roboto-font-latin-ext', // this or either 'roboto-font', NEVER both!
|
||||
|
||||
'roboto-font', // optional, you are not bound to it
|
||||
// 'roboto-font', // optional, you are not bound to it
|
||||
'material-icons', // optional, you are not bound to it
|
||||
],
|
||||
|
||||
@@ -94,7 +94,8 @@ export default defineConfig((ctx) => {
|
||||
|
||||
// https://v2.quasar.dev/quasar-cli-vite/quasar-config-file#framework
|
||||
framework: {
|
||||
config: {},
|
||||
config: {
|
||||
},
|
||||
|
||||
// iconSet: 'material-icons', // Quasar icon set
|
||||
// lang: 'en-US', // Quasar language pack
|
||||
|
||||
5
quasar.extensions.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"@quasar/qmarkdown": {
|
||||
"import_md": true
|
||||
}
|
||||
}
|
||||
@@ -3,5 +3,4 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
//
|
||||
</script>
|
||||
|
||||
73
src/assets/docs/Consent_to_Personal_Data_Processing_en.md
Normal file
@@ -0,0 +1,73 @@
|
||||
*This document is an English translation of the original Russian-language "Consent to Personal Data Processing" (Version 1.01 dated 15.08.2025). In the event of any disputes, the original Russian version shall take precedence, particularly for matters resolved within the jurisdiction of the Russian Federation.*
|
||||
|
||||
# Consent to Personal Data Processing
|
||||
###### Version 1.01 dated 15.08.2025
|
||||
|
||||
Pursuant to Federal Law No. 152-FZ dated 27.07.2006 "On Personal Data", acting freely, by my own will and in my own interest, and hereby confirming my legal capacity, I (hereinafter – the **User**) grant my consent to Alexey Alexandrovich Martyshkin, Individual Entrepreneur (OGRNIP 318774600262084, INN 366316608346) (hereinafter – the **Operator**) for the processing of my personal data under the following terms.
|
||||
|
||||
The following terms and definitions apply in this Consent:
|
||||
|
||||
**Bot** – An account named @tgCrewBot with URL [https://t.me/tgCrewBot](https://t.me/tgCrewBot) in the Telegram messenger, programmatically managed by the Operator via API (Application Programming Interface). The Bot provides access to the Application and supports basic interaction via inline mode.
|
||||
|
||||
**Application** – The tgCrew mini-app operating within the Telegram messenger environment as part of the Telegram Mini Apps (TMA) ecosystem, accessible through interaction with the Bot. While the Application utilizes Telegram's platform for functionality and distribution, it is exclusively developed and provided by the Operator. The Application is not a product of Telegram Messenger LLP, nor is it endorsed, supported, or legally affiliated with Telegram Messenger LLP.
|
||||
|
||||
**Personal Data (PD)** – Any information relating to an identified or identifiable natural person (data subject) (per Federal Law No. 152-FZ, Chapter 1, Article 3, Clause 1).
|
||||
|
||||
**Administrator** – A User of the Application who manages it through the Admin Panel.
|
||||
|
||||
**Administrator Account** – An account used by the Administrator to authenticate access to the Admin Panel.
|
||||
|
||||
**Admin Panel** – The Application interface for management functions, including:
|
||||
- Connecting chats to the Application (see §1.12 – Connected Chat)
|
||||
- Adding supplementary User information
|
||||
- Monitoring and processing Developer remuneration payments for Application usage.
|
||||
|
||||
**Connected Chat** – A Telegram chat where the Bot has been added with necessary access rights. The Application only processes data from Connected Chats.
|
||||
|
||||
1. This Consent is specific, informed, conscious, and unambiguous.
|
||||
|
||||
2. The User consents to the Operator's processing of their Personal Data (using automated means), including:
|
||||
|
||||
a) Collection, recording, systematization, accumulation
|
||||
b) Storage for the duration of the Administrator Account's existence, but no less than required by Russian law. Data is deleted upon Administrator Account closure, except where legally mandated (e.g., fraud prevention or court order execution)
|
||||
c) Updating (modification, correction)
|
||||
d) Retrieval, usage
|
||||
e) Transfer (provision, access) to state authorities, courts, or law enforcement agencies exclusively upon official request under Russian law
|
||||
f) Transfer (provision, access) to other Application Users within the same Connected Chat, limited to Application functionality requirements
|
||||
g) Blocking, deletion, destruction
|
||||
h) Other lawful processing activities under Russian legislation
|
||||
|
||||
3. Consent covers processing of the following User Personal Data, which may be:
|
||||
- Provided directly by the User
|
||||
- Entered by the Application Administrator (if User participates in a Connected Chat)
|
||||
- Automatically collected by the Application:
|
||||
|
||||
a) Full name (surname, given name, patronymic)
|
||||
b) Email address
|
||||
c) Contact phone number
|
||||
d) Employment details (organization, department, position/functional role)
|
||||
e) Telegram account data: Display name (First/Last name), username, user ID, profile picture, Telegram client language settings; and for Administrators: Telegram Stars transaction data (user ID, amount, transaction ID, timestamp) transmitted automatically via Telegram API
|
||||
f) Server interaction data (technical): Request IP address, request timestamp, requested URL, HTTP response code, response size (bytes), User-Agent, Referrer URL (if available)
|
||||
|
||||
4. Processing purposes:
|
||||
|
||||
a) Application authentication and identification (§§3b, 3e)
|
||||
b) Technical support and request handling (§§3a-3e)
|
||||
c) System notifications (for Administrators using email authentication) (§§3b, 3e)
|
||||
d) Processing Telegram Stars transactions (for Administrators) (§§3b, 3e)
|
||||
e) Generating contact directories within Connected Chats (§§3a-3e)
|
||||
f) Ensuring proper Application functionality (§§3a-3e)
|
||||
g) Technical maintenance and security (§§3f)
|
||||
|
||||
5. The User acknowledges that ticking the checkbox adjacent to the text: "I consent to the processing of my personal data and accept the Privacy Policy terms" in the Application interface constitutes a simple electronic signature under Russian law, confirming:
|
||||
- Review of this Consent
|
||||
- Acceptance of the Operator's Privacy Policy available at: [https://tgcrew.ru/privacy-policy](https://tgcrew.ru/privacy-policy)
|
||||
|
||||
6. This Consent becomes effective upon completion of the action specified in §5 and remains valid until withdrawal.
|
||||
|
||||
7. Withdrawal is performed by:
|
||||
- Selecting "Withdraw PD Processing Consent" in Settings (User/Admin Panel)
|
||||
- Confirming via "Confirm" in the dialog
|
||||
Withdrawal results in cessation of processing and data destruction, except as stipulated in §8.
|
||||
|
||||
8. Post-withdrawal, the Operator retains the right to continue processing Personal Data without consent where grounds exist under Clauses 2-11(Part 1, Article 6), Part 2(Article 10), and Part 2(Article 11) of Federal Law No. 152-FZ dated 27.07.2006 "On Personal Data".
|
||||
63
src/assets/docs/Consent_to_Personal_Data_Processing_ru.md
Normal file
@@ -0,0 +1,63 @@
|
||||
# Согласие на обработку персональных данных
|
||||
###### Версия 1.01 от 15.08.2025
|
||||
|
||||
В соответствии с требованиями Федерального закона от 27.07.2006 № 152-ФЗ «О персональных данных», действуя свободно, своей волей и в своем интересе, а также подтверждая свою дееспособность, я (далее -- **Пользователь**) даю свое согласие индивидуальному предпринимателю Мартышкину Алексею Александровичу (ОГРНИП 318774600262084, ИНН 366316608346) (далее -- **Оператор**) на обработку своих персональных данных на изложенных ниже условиях.
|
||||
|
||||
В настоящем Согласии используются следующие термины и определения:
|
||||
|
||||
**Бот** -- аккаунт с именем @tgCrewBot и адресом [https://t.me/tgCrewBot](https://t.me/tgCrewBot) в мессенджере Telegram, управляемый программно Оператором через API (Application Programming Interface, программный интерфейс приложений). Бот предоставляет доступ к Приложению и может использоваться для базового взаимодействия из текстовой строки (inline-mode).
|
||||
|
||||
**Приложение** -- мини-приложение tgCrew, работающее в среде мессенджера Telegram как часть экосистемы Telegram Mini Apps (TMA) и доступное через взаимодействие с Ботом. Хотя Приложение использует платформу Telegram для своего функционирования и распространения, оно разработано и предоставляется исключительно Оператором. Приложение не является продуктом компании-разработчика мессенджера Telegram, не поддерживается ею, не одобрено ею и никак не связано с ней юридически или организационно.
|
||||
|
||||
**Персональные данные (или ПДн)** -- любая информация, относящаяся к прямо или косвенно определенному или определяемому физическому лицу (субъекту персональных данных) (согласно N152-ФЗ, Глава 1, Статья 3, п. 1).
|
||||
|
||||
**Администратор** -- Пользователь Приложения, который осуществляет его управление Приложением с помощью Панели администратора.
|
||||
|
||||
**Учетная запись Администратора** - учетная запись, с помощью которой Администратор осуществляет аутентификацию для доступа к Панели администратора.
|
||||
|
||||
**Панель администратора** -- интерфейс Приложения для управления Приложением, в том числе осуществления следующих функций:
|
||||
- подключение чатов к Приложению (см. п. 1.12 – Подключенный чат);
|
||||
- внесение дополнительных информационных данных для Пользователей;
|
||||
- контроль и осуществление выплат вознаграждения Разработчику за использование Приложения.
|
||||
|
||||
**Подключенный чат** (к Приложению) -- чат в Telegram, в который добавлен Бот с необходимыми правами доступа. В Приложении доступна информация только из Подключенных чатов.
|
||||
|
||||
1. Настоящее согласие является конкретным, информированным, сознательным и однозначным.
|
||||
|
||||
2. Согласие дано Оператору на обработку персональных данных Пользователя (с использованием средств автоматизации), включающую следующие действия:
|
||||
|
||||
а) Сбор, запись, систематизация, накопление.
|
||||
б) Хранение в течение всего срока существования Учетной записи Администратора, но не менее срока, требуемого законодательством РФ. Данные удаляются при закрытии Учетной записи Администратора, за исключением случаев, предусмотренных законом (например, для предотвращения мошенничества или исполнения судебных решений).
|
||||
в) Уточнение (обновление, изменение).
|
||||
г) Извлечение, использование.
|
||||
д) Передача (предоставление, доступ) государственным органам, судам или правоохранительным структурам исключительно по официальному запросу в рамках законодательства РФ.
|
||||
е) Передачу (предоставление, доступ) другим Пользователям Приложения, имеющим общий Подключенный чат с Пользователем, в объёме, необходимом для функциональности Приложения.
|
||||
ж) Блокирование, удаление, уничтожение.
|
||||
з) Осуществление иных действий, предусмотренных законодательством РФ.
|
||||
|
||||
3. Согласие дается на обработку следующих персональных данных Пользователя, которые могут быть предоставлены самим Пользователем и (или) внесены Администратором Приложения (если Пользователь является участником Подключенного чата) и (или) автоматически собраны Приложением:
|
||||
|
||||
а) Фамилия, имя, отчество.
|
||||
б) Адрес электронной почты.
|
||||
в) Контактный телефон.
|
||||
г) Сведения о месте работы (наименование организации, структурное подразделение, должность и/или функциональная роль).
|
||||
д) Данные учетной записи в мессенджере Telegram: имя пользователя (Name, вкл. в себя - First name и Last name), псевдоним (Username), идентификатор пользователя (ID), изображение профиля (аватар), языковые настройки клиента Telegram, а также, если Пользователь является Администратором, данные транзакций Telegram Stars (идентификатор пользователя, количество Telegram Stars, идентификатор транзакции, временная метка операции), которые автоматически передаются через API Telegram.
|
||||
е) Данные о взаимодействии с серверами Приложения (технические данные): IP-адрес с которого осуществляется запрос, дата и время получения запроса сервером Приложения, запрошенный URL, HTTP-код ответа сервера Приложения, размер ответа в байтах, User-Agent (информация о браузере и операционной системе клиента), Referrer (URL страницы, с которой был сделан запрос, если доступно).
|
||||
|
||||
4. Обработка персональных данных осуществляется в следующих целях:
|
||||
|
||||
а) Идентификация и аутентификация в Приложении (пп. 3б и 3д).
|
||||
б) Предоставление технической поддержки и обработка обращений (пп. 3а-3д).
|
||||
в) Отправка системных уведомлений – если Пользователь является Администратором Приложения и использует электронную почту для аутентификации (пп. 3б и 3д).
|
||||
г) Обработка платежных транзакций через Telegram Stars, в случае если Пользователь является Администратором Приложения (пп. 3б и 3д).
|
||||
д) Формирование адресной книги контактов в рамках Подключенных чатов (пп. 3а-3д).
|
||||
е) Обеспечение корректной работы функционала Приложения (пп. 3а-3д).
|
||||
ж) Технические: профилактика технических сбоев и обеспечение безопасности (пп. 3е).
|
||||
|
||||
5. Я выражаю согласие на квалификацию проставления символа «V» (галочки) в чек-боксе интерфейса Приложения рядом с текстом: «Я даю Согласие на обработку своих персональных данных и принимаю условия Политики конфиденциальности» в качестве простой электронной подписи, удостоверяющей факт ознакомления и согласия с условиями настоящего Согласия и Политики конфиденциальности Оператора, размещенной в Приложении и в открытом доступе в сети Интернет по адресу: [https://tgcrew.ru/privacy-policy]( https://tgcrew.ru/privacy-policy).
|
||||
|
||||
6. Настоящее согласие вступает в силу с момента его предоставления путем совершения действий, указанных в пункте 5 настоящего Согласия, и действует до момента отзыва.
|
||||
|
||||
7. Отзыв настоящего Согласия осуществляется путем нажатия на кнопку «Отозвать согласие на обработку ПДн» и последующим нажатием в открывшемся диалоге кнопки «Подтвердить». Кнопка «Отозвать согласие на обработку ПДн» размещена в разделе Настройки (как для Пользовательской части, так и для Панели Администратора). Отзыв Согласия влечет прекращение обработки персональных данных и их уничтожение, за исключением случаев, предусмотренных пунктом 8 настоящего Согласия.
|
||||
|
||||
8. В случае отзыва настоящего согласия Оператор вправе продолжить обработку персональных данных Пользователя без его согласия при наличии оснований, предусмотренных пунктами 2-11 части 1 статьи 6, частью 2 статьи 10 и частью 2 статьи 11 Федерального закона от 27.07.2006 № 152-ФЗ «О персональных данных».
|
||||
162
src/assets/docs/Privacy-Policy_en.md
Normal file
@@ -0,0 +1,162 @@
|
||||
*This document is an English adaptation of the Privacy Policy originally drafted in Russian. In the event of any disputes subject to resolution in courts of the Russian Federation, the Russian-language version shall prevail.*
|
||||
|
||||
# Privacy Policy
|
||||
###### Version 1.01 dated 15.08.2025
|
||||
|
||||
This Privacy Policy describes the scope of data (including personal data) collection from Users of the Application by the Developer, explains the purposes of such collection, and outlines processing methods.
|
||||
|
||||
## 1. Terms and Definitions
|
||||
1.1. **Bot** – The Telegram account "@tgCrewBot" ([https://t.me/tgCrewBot](https://t.me/tgCrewBot)), programmatically managed by the Developer via Telegram’s API. The Bot provides access to the Application and supports basic inline-mode interaction.
|
||||
|
||||
1.2. **Application** – The Telegram Mini App (TMA) "tgCrew", operating within Telegram’s ecosystem and accessible via the Bot. Though hosted on Telegram’s platform, the Application is developed and provided solely by the Developer. It is not a product of, endorsed by, or legally affiliated with Telegram FZ-LLC. Access requires acceptance of the Terms of Use and this Privacy Policy.
|
||||
|
||||
1.3. **Website** – The official site [https://tgcrew.ru](https://tgcrew.ru), hosting Application documentation and information.
|
||||
|
||||
1.4. **Terms of Use** – The current version available at [https://tgcrew.ru/terms-of-use](https://tgcrew.ru/terms-of-use) and within the Application. In case of discrepancies, the in-Application version prevails. Contractual relations commence upon in-Application acceptance.
|
||||
|
||||
1.5. **Privacy Policy** – This document governing the collection, storage, and processing of User data (including personal data). An integral annex to the Terms of Use. The current version is at [https://tgcrew.ru/privacy-policy](https://tgcrew.ru/privacy-policy) and in the Application. In-Application information prevails in conflicts. Consent is obtained via in-Application acceptance.
|
||||
|
||||
1.6. **Developer** – Individual Entrepreneur Martyshkin Alexey Alexandrovich (OGRNIP 318774600262084, INN 366316608346, Russian Federation).
|
||||
|
||||
1.7. **User** – An individual, legal entity, or authorized representative accepting the Terms of Use and Privacy Policy within the Application.
|
||||
|
||||
1.8. **Administrator** – A User managing the Application via the Admin Panel.
|
||||
|
||||
1.9. **Administrator Account** – Authentication credentials for Admin Panel access.
|
||||
|
||||
1.10. **Chat Participant** – A member of a Connected Chat who may not be an Application User.
|
||||
|
||||
1.11. **Admin Panel** – The Application interface for:
|
||||
- Connecting chats to the Application (see §1.12);
|
||||
- Adding supplemental User data;
|
||||
- Managing Developer remuneration payments.
|
||||
|
||||
1.12. **Connected Chat** – A Telegram chat where the Bot is added with necessary permissions. Only data from Connected Chats is processed.
|
||||
|
||||
1.13. **Application Use** – User actions to view/utilize Application functionality via online interfaces.
|
||||
|
||||
1.14. **Developer’s Representatives** – Persons engaged by the Developer for Application development/support.
|
||||
|
||||
1.15. **Personal Data (PD)** – Any information relating to an identified/identifiable natural person (Federal Law No. 152-FZ, Art. 3.1).
|
||||
|
||||
1.16. **Personal Data Processing** – Any operation(s) performed with PD, including collection, recording, storage, alteration, retrieval, use, transfer, anonymization, blocking, or destruction (Federal Law No. 152-FZ, Art. 3.3).
|
||||
|
||||
1.17. **Operator** – A legal/natural person organizing and/or processing PD, defining processing purposes and scope (Federal Law No. 152-FZ, Art. 3.2).
|
||||
|
||||
1.18. **Automated PD Processing** – PD processing via computer technology (Federal Law No. 152-FZ, Art. 3.4).
|
||||
|
||||
1.19. **PD Provision** – Disclosure of PD to specific person(s) (Federal Law No. 152-FZ, Art. 3.6).
|
||||
|
||||
1.20. **Cross-Border PD Transfer** – Transfer of PD to foreign authorities/entities (Federal Law No. 152-FZ, Art. 3.11).
|
||||
|
||||
1.21. **PD Destruction** – Actions rendering PD irrecoverable (Federal Law No. 152-FZ, Art. 3.8).
|
||||
|
||||
## 2. General Provisions
|
||||
2.1. This Policy governs solely the Developer-User relationship. It does not replace Telegram’s Privacy Policy.
|
||||
|
||||
2.2. This Policy complies with:
|
||||
- Federal Law No. 152-FZ "On Personal Data" (27.07.2006);
|
||||
- Section "4. Privacy" of Telegram’s "Bot Platform Developer Terms of Service".
|
||||
|
||||
2.3. The Developer acts as the **Operator** for PD processing.
|
||||
|
||||
## 3. Acceptance of this Policy
|
||||
3.1. Acceptance occurs by ticking "☑️ I consent to the processing of my personal data and accept the Privacy Policy" within the Application.
|
||||
|
||||
3.2. Application Use implies consent to data collection from Connected Chats (§§4.2-4.4).
|
||||
|
||||
3.3. Non-acceptance requires immediate cessation of Application Use.
|
||||
|
||||
## 4. Data Collection and Processing
|
||||
4.1. Essential User data is required for Application access.
|
||||
|
||||
4.2. **Collected Personal Data**:
|
||||
4.2.1. Automatically collected via Telegram API:
|
||||
- Username, Telegram ID, profile picture, language settings, Telegram Stars transaction data (Administrators only).
|
||||
- Technical data: IP address, request timestamp, requested URL, HTTP status, response size, User-Agent, Referrer.
|
||||
|
||||
4.2.2. **Administrator-provided**:
|
||||
- Email (if used for authentication).
|
||||
|
||||
4.2.3. **Administrator-supplied Chat Participant data** (via Admin Panel):
|
||||
- Full name, phone number, email, employment details.
|
||||
*The Developer ensures lawful processing but assumes no liability for data accuracy. Administrators must secure legal grounds for PD submission. Data is visible only to Users sharing a Connected Chat. Users may request data correction/deletion from Administrators.*
|
||||
|
||||
4.2.4. **User-provided data** (e.g., support requests):
|
||||
- Full name, phone number, email, employment details.
|
||||
|
||||
4.3. **Cookies**: Only HttpOnly cookies (mitigating XSS risks) are used.
|
||||
|
||||
4.4. **Chat Monitoring**: The Bot tracks events in Connected Chats (message/file changes). Relevant data is stored.
|
||||
|
||||
4.5. **User-Input Data Storage**: Project/company/task/meeting details.
|
||||
|
||||
4.6. **Non-Storage**: Chat/files are stored exclusively within Telegram.
|
||||
|
||||
4.7. **No Additional Collection**: Only data specified in §4.2 is collected.
|
||||
|
||||
## 5. Data Collection Purposes
|
||||
5.1. Purposes include:
|
||||
- User identification/authentication (§4.2.1a, 4.2.2);
|
||||
- Technical support (§4.2.1, 4.2.2, 4.2.4);
|
||||
- Administrator notifications (§4.2.1a, 4.2.2);
|
||||
- Telegram Stars transactions (§4.2.1a);
|
||||
- Connected Chat contact management (§4.2.1a, 4.2.3);
|
||||
- Application functionality (§4.2, 4.4);
|
||||
- Security/technical maintenance (§4.2.1b, 4.3).
|
||||
|
||||
5.2. Data is used solely for these purposes, unless required by Russian law or compatible purposes. New purposes trigger User notification.
|
||||
|
||||
5.3. PD processing is **automated**.
|
||||
|
||||
## 6. Data Security
|
||||
6.1. Technical/organizational measures ensure PD confidentiality, integrity, and protection against loss/theft/unauthorized access.
|
||||
|
||||
6.2. Measures include SSL encryption for data transmission.
|
||||
|
||||
6.3. Only authorized Developer personnel access PD. Representatives have no PD access. Security protocols are periodically reviewed.
|
||||
|
||||
## 7. Data Transfer
|
||||
7.1. No third-party transfers except to courts/state bodies when legally mandated.
|
||||
|
||||
7.2. The Developer will not sell/exchange PD without explicit consent.
|
||||
|
||||
7.3. **Data Localization**: All servers reside in Russia. **No cross-border transfers**.
|
||||
|
||||
## 8. User Rights
|
||||
8.1. PD subject rights include:
|
||||
- **Access**: PD copies provided within 30 calendar days.
|
||||
- **Rectification**: Correction via Application functionality, Administrator request, or direct contact.
|
||||
- **Erasure**: Deletion requests honored where legally permissible. Account closure triggers automatic deletion, except where retention is legally required (e.g., fraud prevention, legal obligations).
|
||||
- **Consent Withdrawal**: Withdrawal does not affect pre-withdrawal processing lawfulness.
|
||||
|
||||
8.2. Rights are not absolute and may be balanced against the Developer’s legal obligations/legitimate interests. Refusals include justification.
|
||||
|
||||
## 9. Data Retention
|
||||
9.1. PD is retained only as necessary for collection purposes.
|
||||
|
||||
9.2. Standard retention period: Duration of the Administrator Account.
|
||||
|
||||
9.3. Post-account closure retention occurs only if mandated by Russian law.
|
||||
|
||||
9.4. Extended retention applies for legal compliance, fraud prevention, or dispute resolution.
|
||||
|
||||
## 10. Policy Amendments
|
||||
10.1. The Developer may revise this Policy without prior notice. The revision date will be updated.
|
||||
|
||||
10.2. Users should periodically review the Policy on the Website or in the Application.
|
||||
|
||||
10.3. Continued Application Use after revisions implies acceptance.
|
||||
|
||||
## 11. Miscellaneous
|
||||
11.1. Queries regarding Policy interpretation: Contact the Developer at [a-mart@ya.ru](mailto:a-mart@ya.ru).
|
||||
|
||||
11.2. Contact details (§12) may be used for Policy-related matters.
|
||||
|
||||
## 12. Developer Contact Information
|
||||
**Individual Entrepreneur Martyshkin Alexey Alexandrovich**
|
||||
Legal address: 111394, Russia, Moscow, Perovskaya St., 66, Bldg. 3, Apt. 187
|
||||
OGRNIP: 318774600262084
|
||||
INN: 366316608346
|
||||
Phone: +7 (926) 339-04-25
|
||||
Email: [a-mart@ya.ru](mailto:a-mart@ya.ru)
|
||||
172
src/assets/docs/Privacy-Policy_ru.md
Normal file
@@ -0,0 +1,172 @@
|
||||
# Политика конфиденциальности
|
||||
###### Версия 1.01 от 15.08.2025
|
||||
В настоящей Политике конфиденциальности Разработчик предоставляет информацию о пределах сбора данных (в том числе персональных) Пользователей в Приложении, объясняет причины их сбора и способы их использования.
|
||||
|
||||
## 1. Термины и определения
|
||||
1.1. **Бот** -- аккаунт с именем @tgCrewBot и адресом [https://t.me/tgCrewBot](https://t.me/tgCrewBot) в мессенджере Telegram, управляемый программно Разработчиком через API (Application Programming Interface, программный интерфейс приложений). Бот предоставляет доступ к Приложению и может использоваться для базового взаимодействия из текстовой строки (inline-mode).
|
||||
|
||||
1.2. **Приложение** -- мини-приложение tgCrew, работающее в среде мессенджера Telegram как часть экосистемы Telegram Mini Apps (TMA) и доступное через взаимодействие с Ботом. Хотя Приложение использует платформу Telegram для своего функционирования и распространения, оно разработано и предоставляется исключительно Разработчиком. Приложение не является продуктом компании-разработчика мессенджера Telegram, не поддерживается ею, не одобрено ею и никак не связано с ней юридически или организационно. Функционал Приложения доступен только после принятия Пользовательского соглашения и Политики конфиденциальности.
|
||||
|
||||
1.3. **Сайт** -- веб-сайт, расположенный по адресу: [https://tgcrew.ru](https://tgcrew.ru), на котором размещается информация о Приложении и его документация.
|
||||
|
||||
1.4. **Пользовательское соглашение** -- документ, актуальная (текущая) версия которого размещается на Сайте по ссылке [https://tgcrew.ru/terms-of-use](https://tgcrew.ru/terms-of-use), а также в Приложении. Если между текстом Пользовательского соглашения, размещенным на Сайте, и текстом, доступным в Приложении, возникают расхождения, то приоритет имеет текст, доступный в Приложении. Договорные отношения между Разработчиком и Пользователем возникают только после принятия Пользовательского соглашения внутри Приложения.
|
||||
|
||||
1.5. **Политика конфиденциальности** -- настоящий документ, регулирующий порядок сбора, хранения и обработки данных (в том числе персональных) Пользователя, введенных им в ходе процедуры регистрации, использования Приложения, а также иных данных. Является неотъемлемым приложением к Пользовательскому соглашению. Актуальная (текущая) версия Политики конфиденциальности размещается на Сайте по ссылке [https://tgcrew.ru/privacy-policy](https://tgcrew.ru/privacy-policy), а также в Приложении. Если между информацией о Политике конфиденциальности, размещенной на Сайте, и информацией, доступной в Приложении, возникают расхождения, то приоритет имеет информация, доступная в Приложении. Согласие на обработку данных в рамках Политики конфиденциальности предоставляется Пользователем внутри Приложения.
|
||||
|
||||
1.6. **Разработчик** -- индивидуальный предприниматель Мартышкин Алексей Александрович (ИП Мартышкин А.А.), ОГРНИП 318774600262084, ИНН 366316608346 (Российская Федерация).
|
||||
|
||||
1.7. **Пользователь** -- физическое лицо, индивидуальный предприниматель, юридическое лицо или их уполномоченный представитель, принявшее условия Пользовательского соглашения и Политики конфиденциальности путем их явного подтверждения внутри интерфейса Приложения.
|
||||
|
||||
1.8. **Администратор** -- Пользователь Приложения, который осуществляет его управление Приложением с помощью Панели администратора.
|
||||
|
||||
1.9. **Учетная запись Администратора** - учетная запись, с помощью которой Администратор осуществляет аутентификацию для доступа к Панели администратора.
|
||||
|
||||
1.10. **Участник чата** -- участник Подключенного чата, который может не являться Пользователем Приложения.
|
||||
|
||||
1.11. **Панель администратора** -- интерфейс Приложения для управления Приложением, в том числе осуществления следующих функций:
|
||||
- подключение чатов к Приложению (см. п. 1.12 – Подключенный чат);
|
||||
- внесение дополнительных информационных данных для Пользователей;
|
||||
- контроль и осуществление выплат вознаграждения Разработчику за использование Приложения.
|
||||
|
||||
1.12. **Подключенный чат** (к Приложению) -- чат в Telegram, в который добавлен Бот с необходимыми правами доступа. В Приложении доступна информация только из Подключенных чатов.
|
||||
|
||||
1.13. **Использование Приложения** -- совершение Пользователем действий по просмотру и (или) использованию доступного функционала Приложения посредством воспроизводимых онлайн-интерфейсов на экране устройства Пользователя.
|
||||
|
||||
1.14. **Представители Разработчика** -- круг лиц, привлекаемых Разработчиком в рамках разработки и поддержки Приложения, действующие от имени и (или) по поручению Разработчика.
|
||||
|
||||
1.15. **Персональные данные (или ПДн)** -- любая информация, относящаяся к прямо или косвенно определенному или определяемому физическому лицу (субъекту персональных данных) (согласно N152-ФЗ, Глава 1, Статья 3, п. 1).
|
||||
|
||||
1.16. **Обработка персональных данных** -- любое действие (операция) или совокупность действий (операций), совершаемых с использованием средств автоматизации или без использования таких средств с персональными данными, включая сбор, запись, систематизацию, накопление, хранение, уточнение (обновление, изменение), извлечение, использование, передачу (распространение, предоставление, доступ), обезличивание, блокирование, удаление, уничтожение персональных данных (согласно N152-ФЗ, Глава 1, Статья 3, п. 3).
|
||||
|
||||
1.17. **Оператор** -- государственный орган, муниципальный орган, юридическое или физическое лицо, самостоятельно или совместно с другими лицами организующие и (или) осуществляющие обработку персональных данных, а также определяющие цели обработки персональных данных, состав персональных данных, подлежащих обработке, действия (операции), совершаемые с персональными данными (согласно N152-ФЗ, Глава 1, Статья 3, п. 2).
|
||||
|
||||
1.18. **Автоматизированная обработка персональных данных** -- обработка персональных данных с помощью средств вычислительной техники (согласно N152-ФЗ, Глава 1, Статья 3, п. 4).
|
||||
|
||||
1.19. **Предоставление персональных данных** -- действия, направленные на раскрытие персональных данных определенному лицу или определенному кругу лиц (согласно N152-ФЗ, Глава 1, Статья 3, п. 6).
|
||||
|
||||
1.20. **Трансграничная передача персональных данных** -- передача персональных данных на территорию иностранного государства органу власти иностранного государства, иностранному физическому лицу или иностранному юридическому лицу (согласно N152-ФЗ, Глава 1, Статья 3, п. 11).
|
||||
|
||||
1.21. **Уничтожение персональных данных** -- действия, в результате которых становится невозможным восстановить содержание персональных данных в информационной системе персональных данных и (или) в результате которых уничтожаются материальные носители персональных данных (согласно N152-ФЗ, Глава 1, Статья 3, п. 8).
|
||||
|
||||
## 2. Общие положения
|
||||
2.1. Настоящая Политика конфиденциальности регулирует исключительно отношения между Разработчиком и Пользователем. Она не может регулировать отношения между мессенджером Telegram (далее - Telegram) и его пользователями и не заменяет Политику конфиденциальности Telegram.
|
||||
|
||||
2.2. Настоящая Политика конфиденциальности составлена согласно требованиям:
|
||||
- Федерального закона от 27.07.2006. № 152-ФЗ «О персональных данных».
|
||||
- Требованиям раздела «4. Privacy» документа «Telegram Bot Platform Developer Terms of Service» от компании Telegram FZ-LLC (разработчик мессенджера Telegram).
|
||||
|
||||
2.3. Разработчик выступает в роли Оператора при Обработке персональных данных Пользователей Приложения.
|
||||
|
||||
## 3. Прием условий настоящей Политики конфиденциальности
|
||||
3.1. Свидетельством полного и безоговорочного принятия условий настоящей Политики конфиденциальности (акцептом), является осуществление процедуры принятия Политики конфиденциальности путем проставления символа «V» (галочки) в чек-боксе интерфейса Приложения рядом с текстом: «Я даю Согласие на обработку своих персональных данных и принимаю условия Политики конфиденциальности» на соответствующих экранах в Приложении.
|
||||
|
||||
3.2. Использование Приложения означает согласие Пользователя на сбор и обработку информации из Подключенных чатов в соответствии с Политикой конфиденциальности (см. пп. 4.2-4.4).
|
||||
|
||||
3.3. В случае, если Пользователь не согласен с условиями Политики конфиденциальности, он обязан немедленно покинуть Приложение и не начинать/прекратить Использование Приложения.
|
||||
|
||||
## 4. Сбор и обработка данных
|
||||
4.1. Чтобы предоставить Пользователю доступ к Приложению, ему необходимо предоставить Разработчику доступ к важной информации о себе.
|
||||
|
||||
4.2. Персональные данные, собираемые Приложением
|
||||
|
||||
4.2.1. Приложение в автоматическом режиме собирает следующие данные Пользователей, которые могут быть определены как Персональные данные:
|
||||
|
||||
а) Данные предоставляемые Telegram через API: имя пользователя (Name, вкл. в себя First name и Last name), псевдоним (Username), идентификатор пользователя (ID), изображение профиля (аватар), языковые настройки клиента Telegram, данные транзакций Telegram Stars (только для Администратора).
|
||||
б) Данные о взаимодействии Пользователя с серверами Приложения (технические данные): IP-адрес с которого осуществляется запрос, дата и время получения запроса сервером Приложения, запрошенный URL, HTTP-код ответа сервера Приложения, размер ответа в байтах, User-Agent (информация о браузере и операционной системе клиента), Referrer (URL страницы, с которой был сделан запрос, если доступно).
|
||||
|
||||
4.2.2. Администратор предоставляет:
|
||||
- адрес электронной почты, если используется аутентификация в Приложении с ее использованием.
|
||||
|
||||
4.2.3. Администратор в Панели администратора может указать данные для каждого участника Подключенного чата, которые могут быть определены как Персональные данные:
|
||||
- фамилия, имя, отчество;
|
||||
- контактный телефон;
|
||||
- адрес электронной почты;
|
||||
- сведения о месте работы (наименование организации, структурное подразделение, должность и (или) функциональная роль).
|
||||
|
||||
Разработчик не несет ответственности за корректность и точность указанных данных, но как Оператор обеспечивает законность их обработки. Администратор обязан обеспечить наличие правовых оснований для предоставления персональных данных Пользователей в соответствии с применимым законодательством (в случае указания реальных данных).
|
||||
Предоставление указанных данных о Пользователе в Приложении, которые могут быть определены как Персональные данные, другим Пользователям, осуществляется только для Пользователей, имеющих общий Подключенный чат. Принимая данную Политику конфиденциальности, Пользователь согласен с таким предоставлением его данных. При необходимости, пользователь может обратиться к Администратору для удаления или изменения выше указанных данных.
|
||||
|
||||
4.2.4. Пользователи при обращении к Разработчику (например, при запросе в техническую поддержку Приложения) вправе предоставить любые следующие данные, которые могут быть определены как Персональные данные:
|
||||
- фамилия, имя, отчество;
|
||||
- контактный телефон;
|
||||
- адрес электронной почты;
|
||||
- сведения о месте работы (наименование организации, структурное подразделение, должность и (или) функциональная роль).
|
||||
|
||||
4.3. Приложение при создании и поддержания http-соединения использует HttpOnly cookie-файлы, которые не доступны из JavaScript через свойства Document.cookie API и используются для снижения риска XSS (Cross-Site Scripting - «межсайтовый скриптинг»). Другие cookie-файлы не устанавливаются и не используются.
|
||||
|
||||
4.4. Приложение с помощью Бота отслеживает события в Подключенных чатах (такие как добавление/изменение/удаление сообщений, добавление/удаление файлов и т.п.). При необходимости для реализации функционала Приложения – эти изменения фиксируются в базе данных Приложения.
|
||||
|
||||
4.5. Приложение хранит данные, которые Пользователи вводят в Приложении, в том числе:
|
||||
- данные проектов (имя, описание, логотип),
|
||||
- данные компаний (название, адрес, контактный телефон, веб-сайт и т.п.),
|
||||
- данные задач и совещаний (описание, дата и время и т.п.).
|
||||
|
||||
4.6. Разработчик не хранит на своих серверах файлы из чатов, задач и совещаний (хранение осуществляется внутри Telegram).
|
||||
|
||||
4.7. Приложение не собирает на стороне Пользователя никакую дополнительную информацию, которая может быть определена как Персональные данные, кроме той, что указана в п. 4.2, а также не осуществляет анализ информации, которая доступна ему в чатах.
|
||||
|
||||
## 5. Цели сбора данных
|
||||
5.1. Сбор данных осуществляется со следующими целями:
|
||||
- Идентификация и аутентификация Пользователей в Приложении (пп. 4.2.1а и 4.2.2).
|
||||
- Предоставление технической поддержки и обработка обращений (пп. 4.2.1, 4.2.2 и 4.2.4).
|
||||
- Отправка системных уведомлений Администратору (пп. 4.2.1а и 4.2.2).
|
||||
- Обработка платежных транзакций через Telegram Stars (пп. 4.2.1а).
|
||||
- Формирование адресной книги контактов в рамках Подключенных чатов (пп. 4.2.1а и 4.2.3).
|
||||
- Обеспечение корректной работы функционала Приложения (пп. 4.2 и 4.4).
|
||||
- Технические: направленные на профилактику технических сбоев и обеспечение безопасности (пп. 4.2.1б и 4.3).
|
||||
|
||||
5.2. Разработчик обязуется собирать и использовать данные Пользователя только для вышеуказанных целей, за исключением случаев, когда сбор и использование данных необходим для других целей, совместимых с первоначальной целью сбора данных, или когда это предусмотрено законодательством Российской Федерации. Если Разработчику потребуется использовать данные Пользователя для других целей, не упомянутых выше, Разработчик обязан уведомить Пользователя и разъяснить правовые основания для такого сбора.
|
||||
|
||||
5.3. Обработка персональных данных Пользователей осуществляется Разработчиком с использованием средств автоматизации.
|
||||
|
||||
## 6. Защита данных
|
||||
6.1. Разработчик внедрил ряд технических, организационных и административных мер для обеспечения конфиденциальности, целостности, доступности и неприкосновенности и защиты Ваших данных (в том числе ПДн) от потери, кражи, несанкционированного доступа, неправомерного использования, изменения или уничтожения.
|
||||
|
||||
6.2. Эти меры включают, помимо прочего, внедрение современных технологий безопасности: технологию Secure Sockets Layered (SSL) для обеспечения полного шифрования данных Пользователя и их безопасной передачи через Интернет.
|
||||
|
||||
6.3. Только уполномоченный персонал Разработчика имеет доступ к Персональным данным Пользователей, и этот персонал обязан относиться к Персональным данным как к конфиденциальным. Представители Разработчика не получают доступа к данным Пользователей (в том числе персональным). Меры безопасности могут периодически пересматриваться в соответствии с юридическими и техническими изменениями.
|
||||
|
||||
## 7. Передача данных
|
||||
7.1. Разработчик не осуществляет передачу данных (в том числе ПДн), полученных от Пользователей, третьим лицам, кроме случаев предоставления данных судам и(или) государственным органам и(или) правоохранительным органам в случаях, когда это требуется законами и нормативными актами.
|
||||
|
||||
7.2. Разработчик гарантирует Пользователю, что не будет продавать, обменивать или передавать ваши данные (в том числе ПДн) третьим лицам без вашего явного согласия.
|
||||
|
||||
7.3. Все сервера Приложения находятся на территории Российской Федерации. Трансграничная передача персональных данных не осуществляется.
|
||||
|
||||
## 8. Права пользователей
|
||||
8.1. Основные права Пользователя как субъекта Персональных данных включают:
|
||||
- **Право на доступ к Персональным данным.** Пользователь может запросить у Разработчика предоставление ему копии своих Персональных данных, к которым у Разработчика есть доступ. Разработчик предоставляет такую информацию Пользователю в разумные сроки (не более 30 календарных дней).
|
||||
- **Право на исправление Персональных данных.** Пользователь может потребовать от Разработчика исправить или обновить любые свои Персональные данные. Пользователь может сделать это с помощью соответствующей функциональности Приложения, запросив Администратора или связавшись с нами напрямую. Разработчик оставляет за собой право отказывать в персональной помощи в случаях, когда исправление Персональных данных доступно через функциональность Приложения или с помощью Администратора.
|
||||
- **Право на удаление Персональных данных.** Пользователь может потребовать от Разработчика удалить свои Персональные данные, с учетом применимого законодательства. В некоторых случаях Приложение автоматически удалит Персональные данные при закрытии Учетной записи в Приложении. Если Пользователь закрывает свою Учетную запись, Разработчик не будет использовать его Персональные данные для каких-либо дальнейших целей, а также передавать их третьим лицам, за исключением случаев, предусмотренных законом. Разработчик не всегда сможет выполнить запрос Пользователя на удаление по конкретным юридическим причинам, о которых будет сообщено Пользователю при наличии соответствующих оснований (например, если обработка необходима для достижения целей, предусмотренных законом, для исполнения судебного акта, для осуществления прав и законных интересов Разработчика или третьих лиц).
|
||||
- **Право на отзыв согласия.** В той мере, в какой обработка Персональных данных Пользователя основана исключительно на его согласии, Пользователь может отозвать свое согласие в любое время. Это не повлияет на правомерность любой обработки, которая была осуществлена до отзыва. Любые действия по обработке, не основанные на согласии Пользователя, останутся незатронутыми.
|
||||
|
||||
8.2. Ни одно из прав не является абсолютным, что означает, что они, как правило, должны быть взвешены против собственных юридических обязательств Разработчика, а также его законных интересов и интересов третьих лиц. Если будет принято решение отклонить запрос Пользователя, то Разработчик проинформирует его об этом вместе с причинами такого решения.
|
||||
|
||||
## 9. Хранение данных
|
||||
9.1. Разработчик хранит данные (в том числе ПДн) Пользователя не дольше, чем это необходимо для цели их сбора или обработки (с последующим удалением).
|
||||
|
||||
9.2. Как правило, Разработчик хранит данные (в том числе ПДн) на протяжении всего срока существования Учетной записи Администратора.
|
||||
|
||||
9.3. В случаях, предусмотренных применимым законодательством, Персональные данные могут храниться после закрытия Учетной записи Администратора в течение периода, установленного такими законами.
|
||||
|
||||
9.4. Разработчик может хранить данные (в том числе ПДн) Пользователя в течение более длительного периода, если это требуется соответствующими законами и нормативными актами. Разработчик может сохранять некоторые данные (в том числе ПДн) Пользователя после закрытия Учетной записи Администратора для предотвращения мошенничества, обеспечивая, чтобы лица, пытающиеся совершить мошенничество, не могли избежать обнаружения, просто закрыв учетную запись и открыв новую, а также для выполнения юридических обязательств Разработчика.
|
||||
|
||||
## 10. Изменения в Политике конфиденциальности
|
||||
10.1. Настоящая Политика конфиденциальности может быть пересмотрена, обновлена и(или) изменена в любое время без предварительного уведомления по усмотрению Разработчика. Если такие изменения будут внесены, дата обновления настоящей Политики конфиденциальности будет отображена на первой странице Политики конфиденциальности.
|
||||
|
||||
10.2. Пользователю рекомендуется самостоятельно и регулярно отслеживать изменения Политики конфиденциальности, путем ознакомления с актуальной версией Политики конфиденциальности на Сайте или в Приложении.
|
||||
|
||||
10.3. После публикации обновленной версии Политики конфиденциальности дальнейшее использование Приложения считается принятием условий обновленной Политики конфиденциальности.
|
||||
|
||||
## 11. Прочие положения
|
||||
11.1. Если какие-либо положения настоящей Политики конфиденциальности остались неясными, Разработчик готов разъяснить ее положения. Для этого свяжитесь с Разработчиком по адресу электронной почты [a-mart@ya.ru](mailto:a-mart@ya.ru).
|
||||
|
||||
11.2. Пользователь может использовать контактные данные, приведенные в разделе 12, по любой причине, предусмотренной настоящей Политикой.
|
||||
|
||||
## 12. Контактная информация и реквизиты Разработчика
|
||||
Индивидуальный предприниматель Мартышкин Алексей Александрович
|
||||
Юридический адрес: 111394, Российская Федерация, г. Москва, ул. Перовская, д. 66, к.3, кв. 187
|
||||
ОГРНИП 318774600262084
|
||||
ИНН 366316608346
|
||||
Телефон: +7 (926)339-04-25
|
||||
Электронная почта: [a-mart@ya.ru](mailto:a-mart@ya.ru)
|
||||
153
src/assets/docs/Terms_of_use_en.md
Normal file
@@ -0,0 +1,153 @@
|
||||
*This document is an English adaptation of the Terms of Use originally drafted in Russian. In the event of any disputes subject to resolution in courts of the Russian Federation, the Russian-language version shall prevail.*
|
||||
|
||||
# Terms of Use
|
||||
###### Version 1.01 dated 15.08.2025
|
||||
|
||||
This Terms of Use constitutes a Public Offer by Individual Entrepreneur Martyshkin A.A. (IE Martyshkin A.A.) addressed to any individual, individual entrepreneur, and/or legal entity under the terms specified herein.
|
||||
|
||||
## 1. Terms and Definitions
|
||||
1.1. **Bot** — An account named @tgCrewBot located at [https://t.me/tgCrewBot](https://t.me/tgCrewBot) within the Telegram messenger, programmatically managed by the Developer via API (Application Programming Interface). The Bot provides access to the Application and supports basic interaction via inline mode.
|
||||
|
||||
1.2. **Application** — The tgCrew mini-application operating within the Telegram messenger as part of the Telegram Mini Apps (TMA) ecosystem, accessible via interaction with the Bot. While the Application utilizes Telegram’s platform for operation and distribution, it is developed and provided solely by the Developer. The Application is not a product of Telegram Messenger LLP, is not endorsed, supported, or affiliated with it legally or organizationally. Functionality requires acceptance of this Terms of Use and the Privacy Policy.
|
||||
|
||||
1.3. **Website** — The web platform located at: [https://tgcrew.ru](https://tgcrew.ru), hosting information and documentation about the Application.
|
||||
|
||||
1.4. **Terms of Use** — This document, the current version of which is published on the Website at [https://tgcrew.ru/terms-of-use](https://tgcrew.ru/terms-of-use) and within the Application. In case of discrepancies between the Website and Application versions, the Application version prevails. Contractual relations commence upon acceptance within the Application.
|
||||
|
||||
1.5. **Privacy Policy** — The document governing the collection, storage, and processing of User data (including personal data) entered during registration, application use, or otherwise. It is an integral annex to this Terms of Use. The current version resides at [https://tgcrew.ru/privacy-policy](https://tgcrew.ru/privacy-policy) and within the Application. The Application version prevails in case of discrepancies. Consent under the Privacy Policy is granted within the Application.
|
||||
|
||||
1.6. **Developer** — Individual Entrepreneur Martyshkin Alexey Alexandrovich (IE Martyshkin A.A.), OGRNIP (Primary State Registration Number of Individual Entrepreneur) 318774600262084, TIN (Taxpayer Identification Number) 366316608346 (Russian Federation).
|
||||
|
||||
1.7. **User** — An individual, individual entrepreneur, legal entity, or authorized representative accepting this Terms of Use and Privacy Policy via explicit confirmation within the Application interface.
|
||||
|
||||
1.8. **Administrator** — A User managing the Application via the Admin Panel.
|
||||
|
||||
1.9. **Administrator Account** — The account used by the Administrator to authenticate and access the Admin Panel.
|
||||
|
||||
1.10. **Chat Participant** — A participant in a Connected Chat who may not be an Application User.
|
||||
|
||||
1.11. **Admin Panel** — The Application interface for management functions, including:
|
||||
- Connecting chats to the Application (see 1.12 – Connected Chat);
|
||||
- Adding supplementary User information;
|
||||
- Managing payments to the Developer.
|
||||
|
||||
1.12. **Connected Chat** — A Telegram chat where the Bot has been added with necessary permissions. The Application only processes data from Connected Chats.
|
||||
|
||||
1.13. **Application Use** — Actions performed by the User to view and/or utilize Application functionality via online interfaces rendered on the User’s device.
|
||||
|
||||
1.14. **Developer’s Representatives** — Parties engaged by the Developer for development and support, acting on behalf of the Developer.
|
||||
|
||||
1.15. **Tariff Plan** — The Developer’s offering to the Administrator for Application use, including functionality and remuneration. Tariffs are described on the Website and in the Application. Tariffs may be modified by the Developer no more than once per 3 (three) months. The Application version prevails in case of discrepancies.
|
||||
|
||||
## 2. Subject Matter of the Terms of Use
|
||||
2.1. This Terms of Use grants the User the right to use the Application under the terms herein.
|
||||
|
||||
2.2. Use within Telegram may require User account registration.
|
||||
|
||||
## 3. User Warranties and Representations
|
||||
3.1. By accepting these Terms, the User warrants:
|
||||
3.1.1. They are at least 18 years old (or the age of majority in their jurisdiction) and capable of fulfilling obligations under these Terms.
|
||||
3.1.2. Application use is permitted under their jurisdiction’s laws. If prohibited, use must cease immediately.
|
||||
3.1.3. They have read and fully understand these Terms and the Privacy Policy.
|
||||
3.1.4. Use will comply with applicable laws.
|
||||
3.1.5. They will take reasonable steps to secure their Telegram account. Loss of Administrator Account access requires immediate notification to the Developer at [a-mart@ya.ru](mailto:a-mart@ya.ru) and cooperation to resolve the issue.
|
||||
3.1.6. If warranties (3.1.1-3.1.5) are breached, the User must cease use immediately and notify the Developer. The Developer may suspend or terminate access.
|
||||
|
||||
3.2. Use is prohibited if warranties are not met.
|
||||
|
||||
## 4. Acceptance of Offer
|
||||
4.1. Full acceptance is evidenced by checking "✔ I accept the Terms of Use" within the Application interface.
|
||||
|
||||
4.2. Use implies consent to data processing from Connected Chats per the Privacy Policy.
|
||||
|
||||
4.3. Actions within the Application constitute legally binding conclusive acts. Logs from the Developer’s database serve as primary evidence of such actions in disputes.
|
||||
|
||||
4.4. Non-acceptance requires immediate cessation of use.
|
||||
|
||||
## 5. Term
|
||||
5.1. Effective upon acceptance until obligations are fulfilled or termination occurs.
|
||||
5.2. Access termination ends these Terms.
|
||||
|
||||
## 6. Application Description
|
||||
6.1. Provided "AS IS" and "AS AVAILABLE". No warranties (fitness, availability, defect-free operation) are provided.
|
||||
6.2. Allows Administrators via the Admin Panel to consolidate data from Telegram chats by adding the Bot.
|
||||
6.3. Participants can track chat data (files, tasks, meetings) via the Application.
|
||||
6.4. Users access data only from their participating Connected Chats.
|
||||
6.5. Bot access requires explicit addition by a chat admin with appropriate rights.
|
||||
|
||||
## 7. Remuneration Procedure
|
||||
7.1. Payments are made solely via the Admin Panel per the Tariff Plan.
|
||||
7.2. Telegram Stars are the exclusive payment method.
|
||||
7.3. Administrators transfer Stars to the Application’s internal balance. Daily deductions occur per Tariff (~00:00 UTC+3).
|
||||
7.4. Unused Stars refund:
|
||||
- Only upon termination of use.
|
||||
- Requires email notification to [a-mart@ya.ru](mailto:a-mart@ya.ru) with Administrator ID.
|
||||
- Processed within 30 calendar days post-Developer confirmation.
|
||||
- Not applicable if balance <100 Stars or technically infeasible.
|
||||
7.5. Chat Participants use the Application free of charge.
|
||||
7.6. Suspected incorrect deductions must be reported immediately to [a-mart@ya.ru](mailto:a-mart@ya.ru). Developer will investigate within 10 business days.
|
||||
7.7. Developer bears no responsibility for Telegram Stars payment system operations.
|
||||
7.8. Telegram Stars are not stored funds; solely for Developer remuneration.
|
||||
7.9. Insufficient balance may suspend functionality until replenishment (notification via Bot/email).
|
||||
|
||||
## 8. Liability
|
||||
8.1. Developer may conduct maintenance, potentially causing downtime. Advance notice (24h+) for extended planned outages.
|
||||
8.2. Developer may modify/restrict functionality at any time (except Tariffs (1.15) and material Terms changes (13.1)).
|
||||
8.3. Developer and Representatives bear no liability for losses (direct, indirect, consequential) arising from use.
|
||||
8.4. User is solely responsible for Telegram account security. Actions under their account are deemed theirs.
|
||||
8.5. User Prohibitions:
|
||||
- Reverse engineer, decompile, disassemble the Application.
|
||||
- Create derivative works.
|
||||
- Remove/hide Developer’s intellectual property notices.
|
||||
8.6. No malware introduction, scraping, or unauthorized automated access.
|
||||
8.7. No unauthorized access attempts or DDoS attacks. Violations result in immediate termination and legal reporting.
|
||||
8.8. No illegal, obscene, offensive, or rights-infringing use.
|
||||
8.9. User responsible for own IT setup.
|
||||
8.10. Developer may suspend/terminate access for suspected Terms breaches or reputational harm.
|
||||
8.11. Access may be terminated for Privacy Policy or legal violations.
|
||||
8.12. For terminations under 8.10-8.11, Developer may retain unused Stars as penalty/compensation if permitted by Russian law.
|
||||
8.13. Developer not liable for content processed/displayed via the Application or User actions in chats. Users bear content legality responsibility.
|
||||
8.14. Developer may terminate the Application entirely, notifying Administrators 30+ days in advance. Unused Stars will be refunded per 7.4.
|
||||
|
||||
## 9. Intellectual Property
|
||||
9.1. Developer grants a limited, non-exclusive, non-transferable, revocable license to use the Application. All rights not expressly granted are reserved. License terminates automatically upon Terms termination.
|
||||
9.2. Global intellectual property rights belong solely to the Developer. Rights are licensed, not sold.
|
||||
|
||||
## 10. Force Majeure
|
||||
10.1. Parties exempt from liability for force majeure (natural disasters, war, government actions, telecom failures, etc.).
|
||||
10.2. Performance deadlines extended for the force majeure duration (max 30 calendar days).
|
||||
10.3. Force majeure exceeding 30 days triggers negotiations for alternatives or termination without damages.
|
||||
|
||||
## 11. Severability
|
||||
11.1. Invalidity of any provision does not affect the validity of others. Invalid provisions shall be replaced by valid ones reflecting the original intent as closely as possible.
|
||||
11.2. Invalidity does not affect Sections 7 (Remuneration), 9 (IP), 12 (Governing Law), 15.4 (Indemnification), and 15.6 (No Waiver).
|
||||
|
||||
## 12. Governing Law and Dispute Resolution
|
||||
12.1. Governed by and construed under the laws of the Russian Federation. Unforeseen matters resolved under Russian law.
|
||||
12.2. Disputes resolved via negotiation/email (mandatory pre-trial claim procedure). Unresolved disputes after 30 calendar days subject to litigation in Moscow, Russia.
|
||||
|
||||
## 13. Amendments
|
||||
13.1. Developer may amend these Terms by publishing the revised version on the Website/Application. Changes effective the day after publication. User must review amendments regularly.
|
||||
13.2. User may reject amendments, implying cessation of use.
|
||||
|
||||
## 14. Assignment
|
||||
14.1. Developer may assign rights/obligations without User consent. User may not assign without Developer’s prior written consent.
|
||||
14.2. Developer’s assignment does not release it from pre-assignment liabilities unless otherwise agreed or required by law.
|
||||
|
||||
## 15. Final Provisions
|
||||
15.1. Russian language version prevails over translations.
|
||||
15.2. Notices to Developer: [a-mart@ya.ru](mailto:a-mart@ya.ru) or methods specified in App/Website. Developer notices deemed received 1 day after publishing/sending.
|
||||
15.3. Personal data processed per the Privacy Policy (integral annex).
|
||||
15.4. User indemnifies Developer for losses (including legal costs) arising from User’s breach of Terms, law, or third-party rights.
|
||||
15.5. Entire Terms supersedes prior arrangements.
|
||||
15.6. Developer’s inaction on breach does not waive future rights.
|
||||
15.7. No agency, partnership, joint venture, or franchise relationship created.
|
||||
15.8. Compatibility with all devices/OS/Telegram versions not guaranteed.
|
||||
|
||||
## 16. Developer Contact & Details
|
||||
**Individual Entrepreneur Martyshkin Alexey Alexandrovich**
|
||||
Legal Address: 111394, Russian Federation, Moscow, Perovskaya St., 66, Bldg. 3, Apt. 187
|
||||
OGRNIP 318774600262084
|
||||
TIN 366316608346
|
||||
Phone: +7 (926) 339-04-25
|
||||
Email: [a-mart@ya.ru](mailto:a-mart@ya.ru)
|
||||
197
src/assets/docs/Terms_of_use_ru.md
Normal file
@@ -0,0 +1,197 @@
|
||||
# Пользовательское соглашение
|
||||
###### Версия 1.01 от 15.08.2025
|
||||
|
||||
Текст настоящего Пользовательского соглашения является публичной офертой ИП Мартышкин А.А. и адресован любому физическому лицу, индивидуальному предпринимателю и (или) юридическому лицу на изложенных в нём условиях.
|
||||
|
||||
## 1. Термины и определения
|
||||
1.1. **Бот** -- аккаунт с именем @tgCrewBot и адресом [https://t.me/tgCrewBot](https://t.me/tgCrewBot) в мессенджере Telegram, управляемый программно Разработчиком через API (Application Programming Interface, программный интерфейс приложений). Бот предоставляет доступ к Приложению и может использоваться для базового взаимодействия из текстовой строки (inline-mode).
|
||||
|
||||
1.2. **Приложение** -- мини-приложение tgCrew, работающее в среде мессенджера Telegram как часть экосистемы Telegram Mini Apps (TMA) и доступное через взаимодействие с Ботом. Хотя Приложение использует платформу Telegram для своего функционирования и распространения, оно разработано и предоставляется исключительно Разработчиком. Приложение не является продуктом компании-разработчика мессенджера Telegram, не поддерживается ею, не одобрено ею и никак не связано с ней юридически или организационно. Функционал Приложения доступен только после принятия Пользовательского соглашения и Политики конфиденциальности.
|
||||
|
||||
1.3. **Сайт** -- веб-сайт, расположенный по адресу: [https://tgcrew.ru](https://tgcrew.ru), на котором размещается информация о Приложении и его документация.
|
||||
|
||||
1.4. **Пользовательское соглашение** -- настоящий документ, актуальная (текущая) версия которого размещается на Сайте по ссылке [https://tgcrew.ru/terms-of-use](https://tgcrew.ru/terms-of-use), а также в Приложении. Если между текстом Пользовательского соглашения, размещенным на Сайте, и текстом, доступным в Приложении, возникают расхождения, то приоритет имеет текст, доступный в Приложении. Договорные отношения между Разработчиком и Пользователем возникают только после принятия Пользовательского соглашения внутри Приложения.
|
||||
|
||||
1.5. **Политика конфиденциальности** -- документ, регулирующий порядок сбора, хранения и обработки данных (в том числе персональных) Пользователя, введенных им в ходе процедуры регистрации, использования Приложения, а также иных данных. Является неотъемлемым приложением к Пользовательскому соглашению. Актуальная (текущая) версия Политики конфиденциальности размещается на Сайте по ссылке [https://tgcrew.ru/privacy-policy](https://tgcrew.ru/privacy-policy), а также в Приложении. Если между информацией о Политике конфиденциальности, размещенной на Сайте, и информацией, доступной в Приложении, возникают расхождения, то приоритет имеет информация, доступная в Приложении. Согласие на обработку данных в рамках Политики конфиденциальности предоставляется Пользователем внутри Приложения.
|
||||
|
||||
1.6. **Разработчик** -- индивидуальный предприниматель Мартышкин Алексей Александрович (ИП Мартышкин А.А.), ОГРНИП 318774600262084, ИНН 366316608346 (Российская Федерация).
|
||||
|
||||
1.7. **Пользователь** -- физическое лицо, индивидуальный предприниматель, юридическое лицо или их уполномоченный представитель, принявшее условия Пользовательского соглашения и Политики конфиденциальности путем их явного подтверждения внутри интерфейса Приложения.
|
||||
|
||||
1.8. **Администратор** -- Пользователь Приложения, который осуществляет его управление Приложением с помощью Панели администратора.
|
||||
|
||||
1.9. **Учетная запись Администратора** - учетная запись, с помощью которой Администратор осуществляет аутентификацию для доступа к Панели администратора.
|
||||
|
||||
1.10. **Участник чата** -- участник Подключенного чата, который может не являться Пользователем Приложения.
|
||||
|
||||
1.11. **Панель администратора** -- интерфейс Приложения для управления Приложением, в том числе осуществления следующих функций:
|
||||
- подключение чатов к Приложению (см. п. 1.12 – Подключенный чат);
|
||||
- внесение дополнительных информационных данных для Пользователей;
|
||||
- контроль и осуществление выплат вознаграждения Разработчику за использование Приложения.
|
||||
|
||||
1.12. **Подключенный чат** (к Приложению) -- чат в Telegram, в который добавлен Бот с необходимыми правами доступа. В Приложении доступна информация только из Подключенных чатов.
|
||||
|
||||
1.13. **Использование Приложения** -- совершение Пользователем действий по просмотру и (или) использованию доступного функционала Приложения посредством воспроизводимых онлайн-интерфейсов на экране устройства Пользователя.
|
||||
|
||||
1.14. **Представители Разработчика** -- круг лиц, привлекаемых Разработчиком в рамках разработки и поддержки Приложения, действующие от имени и (или) по поручению Разработчика.
|
||||
|
||||
1.15. **Тариф** -- предложение, сформированное Разработчиком для Администратора по использованию Приложения, которое включает, в том числе: функциональность и вознаграждение Разработчика за использование Приложения. Описание Тарифа/Тарифов доступны на Сайте и в Приложении. Тарифы могут изменяться Разработчиком не чаще одного раза в 3 (Три) месяца. Если между информацией о Тарифе/Тарифах, размещенной на Сайте, и информацией, доступной в Приложении, возникают расхождения, то приоритет имеет информация, доступная в Приложении.
|
||||
|
||||
## 2. Предмет Пользовательского соглашения
|
||||
2.1. Настоящее Пользовательское соглашение предоставляет Пользователю право использовать Приложение на условиях, определенных в данном документе.
|
||||
|
||||
2.2. Для использования Приложения в мессенджере Telegram (далее - Telegram) от Пользователя может потребоваться регистрация учетной записи.
|
||||
|
||||
## 3. Гарантии и заверения Пользователя
|
||||
3.1. Принимая данное Пользовательское соглашение, Пользователь гарантирует:
|
||||
|
||||
3.1.1. Достиг возраста 18 лет (а также возраста совершеннолетия в своей стране проживания) и что не существует обстоятельств, препятствующих Пользователю в полном объеме исполнять свои обязательства по данному Пользовательскому соглашению.
|
||||
|
||||
3.1.2. Законодательство страны проживания Пользователя разрешает использование Приложения. В случае запрета Пользователь обязан немедленно прекратить использование.
|
||||
|
||||
3.1.3. Полностью ознакомился с текстом Пользовательского соглашения и Политикой конфиденциальности, понимает их условия и принимает их в полном объеме.
|
||||
|
||||
3.1.4. Использование Приложения будет осуществляться в рамках применимого законодательства.
|
||||
|
||||
3.1.5. Пользователь принимает разумные меры для сохранения контроля над своей учетной записью Telegram. В случае утраты доступа к учетной записи, используемой для управления Приложением в роли Администратора, Пользователь обязан незамедлительно уведомить Разработчика по электронной почте [a-mart@ya.ru](mailto:a-mart@ya.ru) и сотрудничать для разрешения ситуации.
|
||||
|
||||
3.1.6. При прекращении соответствия гарантиям (пп. 3.1.1-3.1.5) Пользователь обязан немедленно прекратить использование Приложения и уведомить Разработчика. В этом случае Разработчик вправе приостановить или прекратить доступ Пользователя к Приложению (путем блокировки Учетной записи Администратора).
|
||||
|
||||
3.2. Пользователь не вправе использовать Приложение, если не соответствует гарантиям в п. 3.1.
|
||||
|
||||
## 4. Прием оферты
|
||||
4.1. Свидетельством полного и безоговорочного принятия условий настоящего Пользовательского соглашения (акцептом), является осуществление процедуры принятия Пользовательского соглашения путем проставления символа «V» (галочки) в чек-боксе интерфейса Приложения рядом с текстом: «Я принимаю Пользовательское соглашение» на соответствующих экранах в Приложении.
|
||||
|
||||
4.2. Использование Приложения означает согласие Пользователя на сбор и обработку информации из Подключенных чатов в соответствии с Политикой конфиденциальности.
|
||||
|
||||
4.3. Все действия, совершенные в рамках функциональности Приложения Пользователем, признаются Разработчиком и таким Пользователем как конклюдентные действия, порождающие соответствующие юридические последствия. При этом Пользователь соглашается с тем, что основным доказательством совершения или несовершения определенного действия с использованием интерфейсов Приложения может служить для Разработчика предоставление выписки из своей базы данных о наличии информации, зафиксированной путем логирования (сохранения истории) действий такого лица (или иным аналогичным способом). В случае спора такая информация предоставляется в выбранной Разработчиком форме и признается исчерпывающим доказательством действий, указанных в настоящем пункте.
|
||||
|
||||
4.4. В случае, если Пользователь не согласен с условиями Пользовательского соглашения, он обязан немедленно покинуть Приложение и не начинать/прекратить Использование Приложения.
|
||||
|
||||
## 5. Срок действия Пользовательского соглашения
|
||||
5.1. Пользовательское соглашение действует с момента акцепта Пользователем до полного исполнения обязательств Сторонами или прекращения этого соглашения.
|
||||
|
||||
5.2. Досрочное прекращение доступа к Приложению влечет прекращение действия Пользовательского соглашения.
|
||||
|
||||
## 6. Описание Приложения
|
||||
6.1. Пользователь признает и соглашается с тем, что функциональность Приложения предоставляется "КАК ЕСТЬ" и "ПО МЕРЕ ДОСТУПНОСТИ" ("AS IS" и "AS AVAILABLE"), без каких-либо гарантий, включая гарантии в отношении коммерческой ценности, пригодности для конкретных целей, постоянной доступности и т.п. Разработчик не гарантирует безошибочную работу Приложения, соответствие его функциональности ожиданиям Пользователя, а также отсутствие дефектов, вирусов или иных вредоносных компонентов.
|
||||
|
||||
6.2. Приложение позволяет Администратору с помощью Панели администратора объединять информацию из разных чатов Telegram путем добавления Бота в эти чаты. После добавления Бота (с предварительно настроенными в Приложении необходимыми правами) в чат, Бот получает доступ ко всем сообщениям в этом чате и сводит полученную информацию в базу данных Приложения.
|
||||
|
||||
6.3. Участники Подключенных чатов могут с помощью графического интерфейса Приложения отслеживать информацию из этих чатов, такую как: загруженные файлы, поставленные задачи и назначенные совещания, а также видеть перечень подключенных чатов.
|
||||
|
||||
6.4. Пользователю в Приложении доступна информация только из тех чатов, участником которых он является и которые были подключены к Приложению Администратором.
|
||||
|
||||
6.5. Доступ Бота к сообщениям в чате осуществляется исключительно после его явного добавления в чат участником, обладающим необходимыми правами администратора чата в Telegram (владелец чата или администратор с соответствующими правами), и предоставления Боту этих прав администратора чата.
|
||||
|
||||
## 7. Порядок и способы выплаты вознаграждения
|
||||
7.1. Выплата вознаграждения Разработчику производится только в Панели администратора Приложения, согласно Тарифу.
|
||||
|
||||
7.2. Единственным способом выплаты вознаграждения Разработчику является использование внутренней валюты Telegram (Telegram Stars).
|
||||
|
||||
7.3. Администратор перечисляет (переводит) Telegram Stars на внутренний баланс в Приложении, откуда происходит выплата (списание) вознаграждения Разработчику на ежедневной основе, согласно Тарифу (ориентировочное время списания 00:00 UTC +3:00, Европа/Москва).
|
||||
|
||||
7.4. Возврат неизрасходованных Telegram Stars с баланса Приложения:
|
||||
- Возможен только при прекращении использования Приложения (отказ от Пользовательского соглашения).
|
||||
- Требует уведомления Разработчика по электронной почте [a-mart@ya.ru](mailto:a-mart@ya.ru) с указанием идентификатора учетной записи Telegram Администратора.
|
||||
- Осуществляется Разработчиком в течение 30 календарных дней с момента подтверждения Разработчиком возможности и размера возврата.
|
||||
- Не производится, если остаток менее 100 Telegram Stars или возврат технически невозможен со стороны платежной системы Telegram.
|
||||
|
||||
7.5. Участники чата осуществляют Использование Приложения – бесплатно.
|
||||
|
||||
7.6. По вопросам предположительно некорректных или ошибочных списаний Администратор должен незамедлительно сообщить Разработчику по электронной почте [a-mart@ya.ru](mailto:a-mart@ya.ru). Разработчик обязуется рассмотреть обращение в разумный срок, обычно не превышающий 10 (Десять) рабочих дней.
|
||||
|
||||
7.7. Разработчик не контролирует и не несет ответственности за работу платежной системы Telegram Stars.
|
||||
|
||||
7.8. Разработчик не предоставляет услуги хранения средств. Telegram Stars, переведенные на баланс Приложения, не являются банковским вкладом или иным финансовым инструментом и предназначены исключительно для оплаты вознаграждения Разработчику в соответствии с Тарифом.
|
||||
|
||||
7.9. В случае недостаточного баланса Telegram Stars на счету Администратора в Приложении для ежедневного списания, функционал Приложения может быть частично приостановлен до пополнения баланса. Администратор будет уведомлен о необходимости пополнения баланса через сообщение от Бота или по электронной почте (в зависимости от способа аутентификации).
|
||||
|
||||
## 8. Ответственность сторон
|
||||
8.1. Разработчик вправе проводить технические и иные работы, направленные на улучшение и (или) изменение функциональности Приложения. В период проведения таких работ Приложение может быть недоступно полностью или частично. Разработчик по возможности будет уведомлять Пользователей о длительных плановых работах через Приложение и (или) Сайт не менее чем за 24 часа.
|
||||
|
||||
8.2. Разработчик оставляет за собой право изменять, модифицировать или вводить дополнительные ограничения по своему усмотрению в любое время без предварительного уведомления, за исключением изменений Тарифов (п. 1.1) и существенных изменений условий настоящего Пользовательского соглашения (п. 13.1).
|
||||
|
||||
8.3. Разработчик и его Представители не несут ответственности за любые убытки (прямые, косвенные, упущенная выгода), возникшие в связи с использованием Приложения.
|
||||
|
||||
8.4. Пользователь самостоятельно несет ответственность за сохранность и конфиденциальность данных своей учетной записи в Telegram. Все действия, осуществленные с использованием учетной записи Пользователя, считаются осуществленными Пользователем. Пользователь самостоятельно несет ответственность перед третьими лицами за все действия, совершенные с использованием учетной записи Пользователя. Разработчик не несет ответственности за несанкционированное использование учетной записи Пользователя третьими лицами.
|
||||
|
||||
8.5. Пользователю запрещается:
|
||||
- декомпилировать, дизассемблировать, осуществлять реверс-инжиниринг, реконструировать исходный код Приложения или пытаться получить его иными способами;
|
||||
- создавать производные работы на основе Приложения;
|
||||
- удалять, скрывать или изменять уведомления об интеллектуальной собственности Разработчика в Приложении.
|
||||
|
||||
8.6. Пользователь не должен злоупотреблять Приложением путем умышленного внедрения вирусов, троянов, червей, логических бомб или иного вредоносного или технологически опасного материала. Пользователь не должен использовать любого рода роботов, пауков (spider), скрапинг страниц или иные автоматические устройства, алгоритмы, методологии или аналогичные ручные процессы для копирования, мониторинга, получения или доступа к любой части Приложения, для попытки получения любой информации или материалов любыми средствами, которые специально не доступны через Приложение.
|
||||
|
||||
8.7. Пользователь не должен пытаться получить несанкционированный доступ к любой части или функции Приложения, вычислительным устройствам (серверам), на которых хранится Приложение. Пользователь не должен атаковать Приложение посредством атаки типа "отказ в обслуживании" (denial-of-service) или распределенной атаки типа "отказ в обслуживании" (distributed denial-of-service attack). Разработчик имеет право сообщить о любом таком нарушении в соответствующие правоохранительные органы и будет сотрудничать с этими органами, раскрывая им личность Пользователя. В случае такого нарушения право Пользователя на использование Приложения немедленно прекращается.
|
||||
|
||||
8.8. Пользователь не может использовать Приложение для любых целей, запрещенных настоящим Пользовательским соглашением, или которые являются незаконными, неприличными или оскорбительными, или для побуждения к совершению любой деятельности, нарушающей права любых третьих лиц, или любой незаконной деятельности.
|
||||
|
||||
8.9. Пользователь несет ответственность за настройку своих информационных технологий, компьютерных программ и платформы для доступа к Приложению.
|
||||
|
||||
8.10. Разработчик вправе приостановить или досрочно прекратить доступ Пользователя к Использованию Приложения, если у Разработчика есть основания полагать, что использование Приложения осуществляется или будет осуществляться Пользователем с нарушением настоящего Пользовательского соглашения, или Пользователь, по усмотрению Разработчика, совершает действия, наносящие или могущие нанести ущерб репутации Разработчика или безопасности Приложения.
|
||||
|
||||
8.11. Разработчик имеет право прекратить доступ к Приложению при нарушении Политики конфиденциальности или законодательства.
|
||||
|
||||
8.12. В случае прекращения доступа Пользователя к Приложению по основаниям, указанным в пп. 8.10 и 8.11, Разработчик вправе удержать неиспользованный остаток Telegram Stars на балансе в качестве штрафной санкции или компенсации ущерба, если нарушение Пользователя повлекло убытки для Разработчика и это предусмотрено применимым законодательством.
|
||||
|
||||
8.13. Разработчик не несет ответственности за контент (сообщения, файлы, данные), обрабатываемый, передаваемый или отображаемый через Приложение, а также за действия Пользователей в подключенных чатах. Ответственность за законность контента и соответствие его правилам Telegram возлагается на Пользователей.
|
||||
|
||||
8.14. Разработчик оставляет за собой право прекратить предоставление доступа к Приложению всем Пользователям, полностью прекратить работу Приложения или его существенных функций, уведомив об этом всех Администраторов не менее чем за 30 (Тридцать) календарных дней через Приложение, Бота и (или) по электронной почте на адрес, связанный с их Учетной записью Администратора. В этом случае Администраторам будет произведен возврат неизрасходованного остатка Telegram Stars в соответствии с п. 7.4.
|
||||
|
||||
## 9. Интеллектуальная собственность
|
||||
9.1. При условии соблюдения Пользователем Пользовательского соглашения, Разработчик предоставляет Пользователю ограниченную, неисключительную, непередаваемую по сублицензии, отзывную, не подлежащую передаче лицензию на доступ к Приложению. Любые права, прямо не предоставленные в данном разделе, сохраняются за Разработчиком. Лицензия автоматически прекращается без уведомления при прекращении действия настоящего Пользовательского соглашения.
|
||||
|
||||
9.2. Все права на интеллектуальную собственность в отношении Приложения по всему миру принадлежат Разработчику, и права на Приложение лицензированы (не проданы) Пользователю. Пользователь не имеет никаких прав на интеллектуальную собственность в отношении Приложения или на них, за исключением права использовать их в соответствии с настоящим Пользовательским соглашением.
|
||||
|
||||
## 10. Обстоятельства непреодолимой силы (форс-мажор)
|
||||
10.1. Стороны освобождаются от ответственности при наступлении обстоятельств непреодолимой силы (стихийные бедствия, войны, решения госорганов, телекоммуникационные сбои и т.п.).
|
||||
|
||||
10.2. Срок исполнения обязательств отодвигается на время действия форс-мажора, но не более чем на 30 (Тридцать) календарных дней.
|
||||
|
||||
10.3. При форс-мажоре длительностью более 30 дней Стороны проводят переговоры об альтернативных решениях или расторжении Пользовательского соглашения без возмещения убытков.
|
||||
|
||||
## 11. Разделимость положений
|
||||
11.1. Пользователь и Разработчик соглашаются с тем, что если какая-либо часть настоящего Пользовательского соглашения или Политики конфиденциальности будет признана компетентным судом недействительной или не подлежащей защите, полностью или частично, то только такая часть настоящего Пользовательского соглашения или Политики конфиденциальности, которая объявлена недействительной или не подлежащей защите, будет считаться недействительной в данной юрисдикции, и только в той части, в которой она была признана таковой, и это не повлияет на действительность или возможность защиты в каком-либо аспекте и в любой юрисдикции других частей настоящего Пользовательского соглашения или Политики конфиденциальности, которые остаются в полной силе и действии. При этом такие недействительные положения подлежат замене положениями, максимально близкими по смыслу к исходным, которые будут признаны действительными в соответствующей юрисдикции, и подлежат применению в измененной форме (в том числе к уже установленным правоотношениям).
|
||||
|
||||
11.2. Признание какого-либо положения недействительным или неисполнимым не затрагивает действительность или исполнимость положений разделов 7 (Порядок и способы выплаты вознаграждения), 9 (Интеллектуальная собственность), 12 (Применимое право и разрешение споров), 15.4 (Возмещение убытков) и 15.6 (Бездействие).
|
||||
|
||||
## 12. Применимое право и разрешение споров
|
||||
12.1. Настоящее Пользовательское соглашение регулируется и толкуется в соответствии с законодательством Российской Федерации. Вопросы, не урегулированные Пользовательским соглашением, подлежат разрешению в соответствии с законодательством Российской Федерации.
|
||||
|
||||
12.2. Все споры Сторон по настоящему Пользовательскому соглашению подлежат разрешению путем переписки и переговоров с использованием обязательного досудебного (претензионного) порядка. В случае невозможности достичь согласия между Сторонами путем переговоров в течение 30 (Тридцати) календарных дней с момента получения другой Стороной письменной претензии, направленной в соответствии с п. 15.2 настоящего Пользовательского соглашения, рассмотрение спора должно быть передано любой заинтересованной Стороной в суд по месту государственной регистрации Разработчика (Российская Федерация, г. Москва).
|
||||
|
||||
## 13. Порядок изменения Пользовательского соглашения
|
||||
13.1. Настоящее Пользовательское соглашение (включая дополнения) могут быть изменены Разработчиком с уведомлением Пользователя посредством размещения новой редакции изменяемого Пользовательского соглашения на Сайте или Приложении. Внесенные Разработчиком изменения в Пользовательском соглашении, вступают в силу в день, следующий за днем опубликования таких изменений на Сайте или в Приложении (смотря что наступит раньше). Пользователь обязуется самостоятельно проверять настоящее Пользовательское соглашение на предмет внесенных изменений. Неосуществление Пользователем действий по ознакомлению не может служить основанием для неисполнения Пользователем своих обязательств и несоблюдения Пользователем ограничений, установленных настоящим Пользовательским соглашением. Разработчик рекомендует Пользователям регулярно знакомиться с актуальной редакцией Пользовательского соглашения.
|
||||
|
||||
13.2. Пользователь вправе отказаться от принятия изменений и дополнений в настоящее Пользовательское соглашение, что означает отказ Пользователя от использования всех предоставленных ему ранее прав.
|
||||
|
||||
## 14. Уступка прав (требований)
|
||||
14.1. Разработчик может уступить или передать права по настоящему Пользовательскому соглашению и (или) Политике конфиденциальности полностью или частично любому физическому или юридическому лицу в любое время с согласия Пользователя или без такового. Пользователь не вправе уступать или передавать какие-либо права и обязательства, вытекающие из Пользовательского соглашения или Политики конфиденциальности, без предварительного письменного согласия Разработчика, и любая уступка или передача прав, совершенная Пользователем без такого согласия, будет недействительной.
|
||||
|
||||
14.2. Уступка Разработчиком прав по настоящему Соглашению третьему лицу не освобождает Разработчика от ответственности перед Пользователем за исполнение обязательств по настоящему Соглашению, возникших до момента уступки, если иное не согласовано с Пользователем или не предусмотрено законодательством.
|
||||
|
||||
## 15. Заключительные положения
|
||||
15.1. Настоящее Пользовательское соглашение составлено на русском языке. В случае возникновения противоречий между русской версией и любыми переводами, приоритет имеет русская версия.
|
||||
|
||||
15.2. Все уведомления, запросы и претензии в связи с настоящим Пользовательским соглашением или использованием Приложения направляются Пользователем Разработчику по электронной почте [a-mart@ya.ru](mailto:a-mart@ya.ru) или иными способами, явно указанными Разработчиком в Приложении или на Сайте. Уведомления Разработчика Пользователю считаются направленными надлежащим образом, если они размещены в Приложении и (или) на Сайте и (или) отправлены на контактный адрес электронной почты (при наличии), связанный с учетной записью Администратора в Telegram и считаются полученными Пользователем на следующий день после их размещения и (или) отправки.
|
||||
|
||||
15.3. Разработчик осуществляет обработку персональных данных Пользователей исключительно в порядке и целях, определенных Политикой конфиденциальности, являющейся неотъемлемой частью настоящего Пользовательского соглашения.
|
||||
|
||||
15.4. Пользователь обязуется возместить Разработчику любые убытки (включая судебные издержки и разумные расходы на юридические услуги), понесенные Разработчиком в связи с нарушением Пользователем настоящего Пользовательского соглашения, законодательства или прав третьих лиц при использовании Приложения, включая убытки, возникшие в результате нарушения Пользователем прав третьих лиц (в том числе права на интеллектуальную собственность и права на конфиденциальность) при использовании Приложения.
|
||||
|
||||
15.5. Настоящее Пользовательское соглашение представляет собой полное соглашение между Пользователем и Разработчиком в отношении использования Приложения и заменяет собой все предыдущие устные или письменные договоренности и понимания между Сторонами по данному предмету (при их наличии).
|
||||
|
||||
15.6. Бездействие со стороны Разработчика в случае нарушения Пользователем положений настоящего Пользовательского соглашения не лишает Разработчика права предпринять соответствующие действия для защиты своих интересов в будущем, а также не означает отказа от своих прав в случае последующих подобных или сходных нарушений.
|
||||
|
||||
15.7. Настоящее Пользовательское соглашение не создает агентских, партнерских, совместных отношений или отношений франчайзинга между Пользователем и Разработчиком.
|
||||
|
||||
15.8. Разработчик не гарантирует совместимость Приложения со всеми устройствами, операционными системами и версиями мессенджера Telegram.
|
||||
|
||||
## 16. Контактная информация и реквизиты Разработчика
|
||||
Индивидуальный предприниматель Мартышкин Алексей Александрович
|
||||
Юридический адрес: 111394, Российская Федерация, г. Москва, ул. Перовская, д. 66, к.3, кв. 187
|
||||
ОГРНИП 318774600262084
|
||||
ИНН 366316608346
|
||||
Телефон: +7 (926)339-04-25
|
||||
Электронная почта: [a-mart@ya.ru](mailto:a-mart@ya.ru)
|
||||
@@ -1,15 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 356 360">
|
||||
<path
|
||||
d="M43.4 303.4c0 3.8-2.3 6.3-7.1 6.3h-15v-22h14.4c4.3 0 6.2 2.2 6.2 5.2 0 2.6-1.5 4.4-3.4 5 2.8.4 4.9 2.5 4.9 5.5zm-8-13H24.1v6.9H35c2.1 0 4-1.3 4-3.8 0-2.2-1.3-3.1-3.7-3.1zm5.1 12.6c0-2.3-1.8-3.7-4-3.7H24.2v7.7h11.7c3.4 0 4.6-1.8 4.6-4zm36.3 4v2.7H56v-22h20.6v2.7H58.9v6.8h14.6v2.3H58.9v7.5h17.9zm23-5.8v8.5H97v-8.5l-11-13.4h3.4l8.9 11 8.8-11h3.4l-10.8 13.4zm19.1-1.8V298c0-7.9 5.2-10.7 12.7-10.7 7.5 0 13 2.8 13 10.7v1.4c0 7.9-5.5 10.8-13 10.8s-12.7-3-12.7-10.8zm22.7 0V298c0-5.7-3.9-8-10-8-6 0-9.8 2.3-9.8 8v1.4c0 5.8 3.8 8.1 9.8 8.1 6 0 10-2.3 10-8.1zm37.2-11.6v21.9h-2.9l-15.8-17.9v17.9h-2.8v-22h3l15.6 18v-18h2.9zm37.9 10.2v1.3c0 7.8-5.2 10.4-12.4 10.4H193v-22h11.2c7.2 0 12.4 2.8 12.4 10.3zm-3 0c0-5.3-3.3-7.6-9.4-7.6h-8.4V307h8.4c6 0 9.5-2 9.5-7.7V298zm50.8-7.6h-9.7v19.3h-3v-19.3h-9.7v-2.6h22.4v2.6zm34.4-2.6v21.9h-3v-10.1h-16.8v10h-2.8v-21.8h2.8v9.2H296v-9.2h2.9zm34.9 19.2v2.7h-20.7v-22h20.6v2.7H316v6.8h14.5v2.3H316v7.5h17.8zM24 340.2v7.3h13.9v2.4h-14v9.6H21v-22h20v2.7H24zm41.5 11.4h-9.8v7.9H53v-22h13.3c5.1 0 8 1.9 8 6.8 0 3.7-2 6.3-5.6 7l6 8.2h-3.3l-5.8-8zm-9.8-2.6H66c3.1 0 5.3-1.5 5.3-4.7 0-3.3-2.2-4.1-5.3-4.1H55.7v8.8zm47.9 6.2H89l-2 4.3h-3.2l10.7-22.2H98l10.7 22.2h-3.2l-2-4.3zm-1-2.3l-6.3-13-6 13h12.2zm46.3-15.3v21.9H146v-17.2L135.7 358h-2.1l-10.2-15.6v17h-2.8v-21.8h3l11 16.9 11.3-17h3zm35 19.3v2.6h-20.7v-22h20.6v2.7H166v6.8h14.5v2.3H166v7.6h17.8zm47-19.3l-8.3 22h-3l-7.1-18.6-7 18.6h-3l-8.2-22h3.3L204 356l6.8-18.5h3.4L221 356l6.6-18.5h3.3zm10 11.6v-1.4c0-7.8 5.2-10.7 12.7-10.7 7.6 0 13 2.9 13 10.7v1.4c0 7.9-5.4 10.8-13 10.8-7.5 0-12.7-3-12.7-10.8zm22.8 0v-1.4c0-5.7-4-8-10-8s-9.9 2.3-9.9 8v1.4c0 5.8 3.8 8.2 9.8 8.2 6.1 0 10-2.4 10-8.2zm28.3 2.4h-9.8v7.9h-2.8v-22h13.2c5.2 0 8 1.9 8 6.8 0 3.7-2 6.3-5.6 7l6 8.2h-3.3l-5.8-8zm-9.8-2.6h10.2c3 0 5.2-1.5 5.2-4.7 0-3.3-2.1-4.1-5.2-4.1h-10.2v8.8zm40.3-1.5l-6.8 5.6v6.4h-2.9v-22h2.9v12.3l15.2-12.2h3.7l-9.9 8.1 10.3 13.8h-3.6l-8.9-12z" />
|
||||
<path fill="#050A14"
|
||||
d="M188.4 71.7a10.4 10.4 0 01-20.8 0 10.4 10.4 0 1120.8 0zM224.2 45c-2.2-3.9-5-7.5-8.2-10.7l-12 7c-3.7-3.2-8-5.7-12.6-7.3a49.4 49.4 0 00-9.7 13.9 59 59 0 0140.1 14l7.6-4.4a57 57 0 00-5.2-12.5zM178 125.1c4.5 0 9-.6 13.4-1.7v-14a40 40 0 0012.5-7.2 47.7 47.7 0 00-7.1-15.3 59 59 0 01-32.2 27.7v8.7c4.4 1.2 8.9 1.8 13.4 1.8zM131.8 45c-2.3 4-4 8.1-5.2 12.5l12 7a40 40 0 000 14.4c5.7 1.5 11.3 2 16.9 1.5a59 59 0 01-8-41.7l-7.5-4.3c-3.2 3.2-6 6.7-8.2 10.6z" />
|
||||
<path fill="#00B4FF"
|
||||
d="M224.2 98.4c2.3-3.9 4-8 5.2-12.4l-12-7a40 40 0 000-14.5c-5.7-1.5-11.3-2-16.9-1.5a59 59 0 018 41.7l7.5 4.4c3.2-3.2 6-6.8 8.2-10.7zm-92.4 0c2.2 4 5 7.5 8.2 10.7l12-7a40 40 0 0012.6 7.3c4-4.1 7.3-8.8 9.7-13.8a59 59 0 01-40-14l-7.7 4.4c1.2 4.3 3 8.5 5.2 12.4zm46.2-80c-4.5 0-9 .5-13.4 1.7V34a40 40 0 00-12.5 7.2c1.5 5.7 4 10.8 7.1 15.4a59 59 0 0132.2-27.7V20a53.3 53.3 0 00-13.4-1.8z" />
|
||||
<path fill="#00B4FF"
|
||||
d="M178 9.2a62.6 62.6 0 11-.1 125.2A62.6 62.6 0 01178 9.2m0-9.2a71.7 71.7 0 100 143.5A71.7 71.7 0 00178 0z" />
|
||||
<path fill="#050A14"
|
||||
d="M96.6 212v4.3c-9.2-.8-15.4-5.8-15.4-17.8V180h4.6v18.4c0 8.6 4 12.6 10.8 13.5zm16-31.9v18.4c0 8.9-4.3 12.8-10.9 13.5v4.4c9.2-.7 15.5-5.6 15.5-18v-18.3h-4.7zM62.2 199v-2.2c0-12.7-8.8-17.4-21-17.4-12.1 0-20.7 4.7-20.7 17.4v2.2c0 12.8 8.6 17.6 20.7 17.6 1.5 0 3-.1 4.4-.3l11.8 6.2 2-3.3-8.2-4-6.4-3.1a32 32 0 01-3.6.2c-9.8 0-16-3.9-16-13.3v-2.2c0-9.3 6.2-13.1 16-13.1 9.9 0 16.3 3.8 16.3 13.1v2.2c0 5.3-2.1 8.7-5.6 10.8l4.8 2.4c3.4-2.8 5.5-7 5.5-13.2zM168 215.6h5.1L156 179.7h-4.8l17 36zM143 205l7.4-15.7-2.4-5-15.1 31.4h5.1l3.3-7h18.3l-1.8-3.7H143zm133.7 10.7h5.2l-17.3-35.9h-4.8l17 36zm-25-10.7l7.4-15.7-2.4-5-15.1 31.4h5.1l3.3-7h18.3l-1.7-3.7h-14.8zm73.8-2.5c6-1.2 9-5.4 9-11.4 0-8-4.5-10.9-12.9-10.9h-21.4v35.5h4.6v-31.3h16.5c5 0 8.5 1.4 8.5 6.7 0 5.2-3.5 7.7-8.5 7.7h-11.4v4.1h10.7l9.3 12.8h5.5l-9.9-13.2zm-117.4 9.9c-9.7 0-14.7-2.5-18.6-6.3l-2.2 3.8c5.1 5 11 6.7 21 6.7 1.6 0 3.1-.1 4.6-.3l-1.9-4h-3zm18.4-7c0-6.4-4.7-8.6-13.8-9.4l-10.1-1c-6.7-.7-9.3-2.2-9.3-5.6 0-2.5 1.4-4 4.6-5l-1.8-3.8c-4.7 1.4-7.5 4.2-7.5 8.9 0 5.2 3.4 8.7 13 9.6l11.3 1.2c6.4.6 8.9 2 8.9 5.4 0 2.7-2.1 4.7-6 5.8l1.8 3.9c5.3-1.6 8.9-4.7 8.9-10zm-20.3-21.9c7.9 0 13.3 1.8 18.1 5.7l1.8-3.9a30 30 0 00-19.6-5.9c-2 0-4 .1-5.7.3l1.9 4 3.5-.2z" />
|
||||
<path fill="#00B4FF"
|
||||
d="M.5 251.9c29.6-.5 59.2-.8 88.8-1l88.7-.3 88.7.3 44.4.4 44.4.6-44.4.6-44.4.4-88.7.3-88.7-.3a7981 7981 0 01-88.8-1z" />
|
||||
<path fill="none" d="M-565.2 324H-252v15.8h-313.2z" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.4 KiB |
@@ -1,10 +1,10 @@
|
||||
<template>
|
||||
<div class="flex row items-center no-wrap">
|
||||
<div
|
||||
class="flex row items-center no-wrap logo-component"
|
||||
>
|
||||
<svg
|
||||
class="iconcolor q-mr-sm"
|
||||
class="iconcolor"
|
||||
viewBox="0 0 8.4666662 8.4666662"
|
||||
width="32"
|
||||
height="32"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -13,7 +13,8 @@
|
||||
<defs id="defs1" />
|
||||
<g id="layer1">
|
||||
<rect
|
||||
style="fill:var(--icon-color);stroke-width:0.233149"
|
||||
class="fill-brand"
|
||||
style="stroke-width:0.233149"
|
||||
id="rect5"
|
||||
width="6.9885192"
|
||||
height="0.35581663"
|
||||
@@ -22,7 +23,8 @@
|
||||
transform="matrix(0.77578367,0.63099897,-0.77578367,0.63099897,0,0)"
|
||||
/>
|
||||
<rect
|
||||
style="fill:var(--icon-color);stroke-width:0.24961"
|
||||
class="fill-brand"
|
||||
style="stroke-width:0.24961"
|
||||
id="rect5-7"
|
||||
width="7.4819207"
|
||||
height="0.3809379"
|
||||
@@ -31,28 +33,32 @@
|
||||
transform="matrix(-0.70756824,0.70664502,0.70756824,0.70664502,0,0)"
|
||||
/>
|
||||
<circle
|
||||
style="fill:var(--icon-color);stroke-width:0.134869"
|
||||
class="fill-brand"
|
||||
style="stroke-width:0.134869"
|
||||
id="path5-8"
|
||||
cx="1.5875"
|
||||
cy="6.8791666"
|
||||
r="1.0583333"
|
||||
/>
|
||||
<circle
|
||||
style="fill:var(--icon-color);stroke-width:0.168586"
|
||||
class="fill-brand"
|
||||
style="stroke-width:0.168586"
|
||||
id="path5-8-5"
|
||||
cx="7.1437502"
|
||||
cy="7.1437502"
|
||||
r="1.3229166"
|
||||
/>
|
||||
<circle
|
||||
style="fill:var(--icon-color);stroke-width:0.118011"
|
||||
class="fill-brand"
|
||||
style="stroke-width:0.118011"
|
||||
id="path5-8-5-1"
|
||||
cx="1.4552083"
|
||||
cy="2.5135417"
|
||||
r="0.92604166"
|
||||
/>
|
||||
<circle
|
||||
style="fill:var(--icon-color);stroke-width:0.101152"
|
||||
class="fill-brand"
|
||||
style="stroke-width:0.101152"
|
||||
id="path5-8-5-1-7"
|
||||
cx="7.1437502"
|
||||
cy="1.3229166"
|
||||
@@ -68,47 +74,47 @@
|
||||
</g>
|
||||
</svg>
|
||||
|
||||
<span class="text-h4 text-bold q-pr-xs" style="color: var(--logo-color-bg-white);">
|
||||
tgвыфвыф
|
||||
<span
|
||||
class="text-brand"
|
||||
style="margin-right: 0.075em;"
|
||||
>
|
||||
tg
|
||||
</span>
|
||||
|
||||
<span class="text-h4 text-brand text-bold q-pa-0">
|
||||
Projects
|
||||
<span class="text-brand2 text-bold">
|
||||
Crew
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
body {
|
||||
background: white;
|
||||
margin: 0rem;
|
||||
min-height: 100vh;
|
||||
font-family: Futura, sans-serif;
|
||||
<style lang="scss" scoped>
|
||||
.logo-component {
|
||||
svg {
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
margin-right: 0.125em;
|
||||
}
|
||||
|
||||
span {
|
||||
line-height: 1;
|
||||
}
|
||||
}
|
||||
|
||||
#canvas {
|
||||
position: absolute;
|
||||
display: block;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.iconcolor {
|
||||
--icon-color: var(--logo-color-bg-white);
|
||||
.fill-brand {
|
||||
fill: $brand;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
100%,
|
||||
0% {
|
||||
fill: $light-green-14;
|
||||
fill: $brand2;
|
||||
}
|
||||
60% {
|
||||
fill: $green-14;
|
||||
fill: $brand2;
|
||||
opacity: 0.8;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,25 +7,35 @@
|
||||
<q-list separator>
|
||||
<q-expansion-item
|
||||
group="FAQgroup"
|
||||
v-for="item in 5"
|
||||
v-for="item in 8"
|
||||
:key="item"
|
||||
switch-toggle-side
|
||||
header-class="text-h5"
|
||||
header-class="text-h6"
|
||||
expand-icon="mdi-plus"
|
||||
expanded-icon="mdi-close"
|
||||
expand-icon-class="text-brand2"
|
||||
class="fix-icon-color"
|
||||
>
|
||||
<template #header="{ expanded }">
|
||||
<div :class="expanded ? 'text-brand' : ''" class="w100">
|
||||
<div :class="expanded ? 'text-primary' : ''" class="w100">
|
||||
{{ $t('faq__question_' + item) }}
|
||||
</div>
|
||||
</template>
|
||||
<q-card>
|
||||
<q-card-section class="text-h6">
|
||||
<q-card-section class="text-grey-8">
|
||||
{{ $t('faq__answer_' + item) }}
|
||||
</q-card-section>
|
||||
</q-card>
|
||||
</q-expansion-item>
|
||||
</q-list>
|
||||
<div class="text-h6 text-primary q-py-md" align="center">
|
||||
{{ $t('faq__description') }}
|
||||
<a
|
||||
href="mailto:a-mart@ya.ru"
|
||||
style="text-decoration: none; color: inherit"
|
||||
>
|
||||
a-mart@ya.ru
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</slide-template>
|
||||
</template>
|
||||
@@ -35,11 +45,10 @@
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.custom-expansion.q-expansion-item--collapsed :deep(.q-item__section--side .q-icon) {
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
.custom-expansion.q-expansion-item--expanded :deep(.q-item__section--side .q-icon) {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
<style scoped lang="scss">
|
||||
.q-expansion-item--expanded.fix-icon-color:deep(i) {
|
||||
color: $primary;
|
||||
transition: transform 0.3s ease;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -1,57 +1,60 @@
|
||||
<template>
|
||||
<div class="q-pa-md w100 flex justify-between">
|
||||
<div class="flex column q-mx-lg justify-center">
|
||||
<div class="w100 flex justify-between bg-grey-11 text-caption q-pa-md q-gutter-y-md">
|
||||
<div class="flex column col-12 col-sm">
|
||||
<base-logo class="text-body1 q-pb-sm"/>
|
||||
<div class="flex items-center">
|
||||
<q-icon name="mdi-map-marker-outline" color="brand" class="q-pr-sm"/>
|
||||
<span>{{ $t('footer__contacts_location') }}</span>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<q-icon name="mdi-phone-outline" color="brand" class="q-pr-sm" />
|
||||
<span>+7 (926) 339-04-25</span>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<q-icon name="mdi-email-outline" color="brand" class="q-pr-sm"/>
|
||||
<a
|
||||
href="mailto:a-mart@ya.ru"
|
||||
style="text-decoration: none; color: inherit"
|
||||
>
|
||||
a-mart@ya.ru
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex column col-12 col-sm">
|
||||
<span class="text-body1 text-bold">
|
||||
{{ $t('footer__docs') }}
|
||||
</span>
|
||||
<div
|
||||
v-for="item in Docs"
|
||||
:key="item.id"
|
||||
class="text-caption"
|
||||
>
|
||||
<a
|
||||
:href="item.href"
|
||||
target="_blank"
|
||||
style="text-decoration: none; color: inherit"
|
||||
class="text-h6"
|
||||
style="text-decoration: underline; color: inherit"
|
||||
>
|
||||
{{ $t(item.name) }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex column q-mx-lg">
|
||||
<div class="text-h6 bold">
|
||||
{{ $t('footer__contacts_ip') }}
|
||||
</div>
|
||||
<div class="text-caption">
|
||||
{{ $t('footer__contacts_ip_detail') }}
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<q-icon name="mdi-map-marker-outline" color="brand" class="q-pr-sm"/>
|
||||
<span>{{ $t('footer__contacts_location') }}</span>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<q-icon name="mdi-phone-outline" color="brand" class="q-pr-sm" />
|
||||
<span>+7 (926) 339-04-25</span>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<q-icon name="mdi-email-outline" color="brand" class="q-pr-sm"/>
|
||||
<a
|
||||
href="mailto:a-mart@ya.ru"
|
||||
style="text-decoration: none; color: inherit"
|
||||
>
|
||||
a-mart@ya.ru
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="flex column col-12 col-sm">
|
||||
<div class="text-grey">
|
||||
{{ $t('footer__description_user_data') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
|
||||
const Docs = [
|
||||
{ id: 1, name: 'footer__doc_terms_of_use', href: '' },
|
||||
{ id: 2, name: 'footer__doc_privacy_policy', href: '' }
|
||||
]
|
||||
import BaseLogo from 'components/BaseLogo.vue';
|
||||
const Docs = [
|
||||
{ id: 1, name: 'footer__doc_terms_of_use', href: '/terms-of-use' },
|
||||
{ id: 2, name: 'footer__doc_privacy_policy', href: '/privacy-policy' }
|
||||
]
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,19 +1,16 @@
|
||||
<template>
|
||||
<div
|
||||
class="flex w100 q-pa-lg text-white relative-position"
|
||||
:class="!isAlignTop ? 'justify-center' : 'justify-around vert-height'"
|
||||
class="flex w100 text-white relative-position vert-height"
|
||||
:class="isAlignTop ? 'justify-center' : 'justify-end'"
|
||||
style="background-image: url('/img/samolet.jpg'); background-size: cover; height: 100vh;"
|
||||
>
|
||||
<svg v-if ="isAlignTop" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="none">
|
||||
<polygon fill="white" points="0,0 55,0 45,101 0,101"/>
|
||||
</svg>
|
||||
<mesh-background v-if ="isAlignTop" style="z-index: -2"/>
|
||||
<div
|
||||
ref="slogan"
|
||||
class="flex items-center"
|
||||
>
|
||||
<div
|
||||
class="flex column justify-center q-pa-lg q-ma-lg q-gutter-y-md no-wrap bg-transperant"
|
||||
style="max-width: 400px; "
|
||||
class="flex bg-white column justify-center q-pa-lg q-ma-lg q-gutter-y-md no-wrap bg-transperant"
|
||||
style="max-width: 400px; border-radius: 12px; opacity: 0.8"
|
||||
:style="!isAlignTop ? 'text-align : center' : ''"
|
||||
>
|
||||
<div class="text-h5 text-grey">
|
||||
@@ -21,16 +18,16 @@
|
||||
</div>
|
||||
<div class="text-h4 text-brand">
|
||||
{{ $t('banner__slogan_body') }}
|
||||
<span class="text-no-wrap">
|
||||
<q-icon dense name="telegram" style="color: #27a7e7"/>
|
||||
<span style="color: #27a7e7">Telegram</span>
|
||||
<span class="text-no-wrap" color="primary">
|
||||
<q-icon dense name="telegram"/>
|
||||
<span>Telegram</span>
|
||||
</span>
|
||||
|
||||
</div>
|
||||
<div>
|
||||
<q-btn
|
||||
size="lg"
|
||||
color="brand"
|
||||
color="brand2"
|
||||
class="q-mt-xl"
|
||||
>
|
||||
<div class="flex items-center no-wrap">
|
||||
@@ -41,25 +38,12 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
ref="image"
|
||||
class="text-red flex"
|
||||
>
|
||||
<img
|
||||
src="/img/1.png"
|
||||
class="q-ma-lg"
|
||||
style="object-fit: scale-down;"
|
||||
/>
|
||||
|
||||
</div>
|
||||
<q-resize-observer @resize="checkAlign"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
import meshBackground from 'components/meshBackground.vue'
|
||||
|
||||
const slogan = ref(null)
|
||||
const image = ref(null)
|
||||
|
||||
47
src/components/MarkdownViewver.vue
Normal file
@@ -0,0 +1,47 @@
|
||||
<template>
|
||||
<q-markdown
|
||||
:src="markdownContent"
|
||||
no-heading-anchor-links
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed } from 'vue'
|
||||
|
||||
const props = defineProps({
|
||||
locale: {
|
||||
type: String,
|
||||
required: true
|
||||
},
|
||||
documentName: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
})
|
||||
|
||||
// Импорт всех Markdown-файлов как raw-строк
|
||||
const mdFiles = import.meta.glob('assets/docs/*.md', {
|
||||
query: '?raw',
|
||||
import: 'default',
|
||||
eager: true
|
||||
})
|
||||
|
||||
const markdownContent = computed(() => {
|
||||
const baseLang = props.locale.split('-')[0].toLowerCase()
|
||||
|
||||
// Формируем имена файлов
|
||||
const localizedFileName = `${props.documentName}_${baseLang}.md`
|
||||
const fallbackFileName = `${props.documentName}_en.md`
|
||||
|
||||
// Находим пути к файлам
|
||||
const filePaths = Object.keys(mdFiles)
|
||||
const localizedPath = filePaths.find(path => path.endsWith(localizedFileName))
|
||||
const fallbackPath = filePaths.find(path => path.endsWith(fallbackFileName))
|
||||
|
||||
// Возвращаем контент в порядке приоритета
|
||||
if (localizedPath) return mdFiles[localizedPath]
|
||||
if (fallbackPath) return mdFiles[fallbackPath]
|
||||
|
||||
return `# Document load error\n> Missing files for ${props.documentName}`
|
||||
})
|
||||
</script>
|
||||
@@ -1,77 +1,104 @@
|
||||
<template>
|
||||
<slide-template title="price__title">
|
||||
<q-card
|
||||
class="flex column justify-center q-my-md items-center q-gutter-y-md"
|
||||
style="max-width: 400px"
|
||||
>
|
||||
<div class="flex column items-center">
|
||||
<div class="flex text-h6">
|
||||
<telegram-star color="gold" size="24px"/>
|
||||
<span class="q-ml-sm" style="text-decoration: line-through;">2</span>
|
||||
<span class="text-bold text-red">0</span>
|
||||
<span>- {{ $t('price__chat_per_day') }}</span>
|
||||
<div ref="container" class="w100 flex no-wrap">
|
||||
<q-resize-observer @resize="updateWidth" />
|
||||
<div class="w100 flex justify-center" v-if="containerWidth > 800">
|
||||
<q-card
|
||||
v-for="(item, idx) in tariff"
|
||||
:key="idx"
|
||||
class="q-pa-md q-ma-sm flex items-center column"
|
||||
style="width: 20%"
|
||||
>
|
||||
<price-section-item
|
||||
:name="item.name"
|
||||
:chats-qty="item.chatsQty"
|
||||
:price="item.price"
|
||||
/>
|
||||
</q-card>
|
||||
</div>
|
||||
<div class="flex items-center">
|
||||
<q-badge color="red" class="q-mr-sm">100% OFF</q-badge>
|
||||
<span>{{ $t('price__sale_date') }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<q-card
|
||||
flat
|
||||
class="bg-grey-3"
|
||||
style="border-radius: 12px;"
|
||||
>
|
||||
<q-item>
|
||||
<q-item-section avatar>
|
||||
<telegram-star color="gold" size="48px"/>
|
||||
</q-item-section>
|
||||
<q-item-section>
|
||||
<q-item-label class="text-grey">
|
||||
{{ $t('price__stars_pay') }}
|
||||
</q-item-label>
|
||||
<q-item-label class="text-h6">
|
||||
Telegram Stars
|
||||
</q-item-label>
|
||||
<q-item-label class="text-grey">
|
||||
{{ $t('price__stars_description') }}
|
||||
</q-item-label>
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
</q-card>
|
||||
|
||||
<q-list class="q-my-none q-pa-md">
|
||||
<q-item
|
||||
v-for="item in priceItems"
|
||||
:key="item.id"
|
||||
dense
|
||||
<q-carousel
|
||||
v-else
|
||||
v-model="slide"
|
||||
transition-prev="scale"
|
||||
transition-next="scale"
|
||||
swipeable
|
||||
animated
|
||||
navigation
|
||||
padding
|
||||
height="225px"
|
||||
control-color="primary"
|
||||
class="w100"
|
||||
>
|
||||
<q-item-section avatar>
|
||||
<q-avatar text-color="brand">
|
||||
<q-icon v-if="item.icon" :name="item.icon" size="md"/>
|
||||
<span v-else class="text-bold">{{ item.text }}</span>
|
||||
</q-avatar>
|
||||
</q-item-section>
|
||||
<q-item-section>
|
||||
{{ $t(item.label)}}
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
</q-list>
|
||||
<q-carousel-slide
|
||||
v-for="(item, idx) in tariff"
|
||||
:key="idx"
|
||||
:name="item.name"
|
||||
class="flex justify-center q-pt-lmdq-pa-none q-ma-none"
|
||||
>
|
||||
<price-section-item
|
||||
:name="item.name"
|
||||
:chats-qty="item.chatsQty"
|
||||
:price="item.price"
|
||||
/>
|
||||
</q-carousel-slide>
|
||||
</q-carousel>
|
||||
</div>
|
||||
|
||||
<div class="q-ma-md" align="center" style="max-width: 60%;">
|
||||
{{ $t('price__tariff_description') }}
|
||||
</div>
|
||||
|
||||
<q-card
|
||||
flat
|
||||
class="bg-grey-3"
|
||||
style="border-radius: 12px;"
|
||||
>
|
||||
<q-item>
|
||||
<q-item-section avatar>
|
||||
<telegram-star color="gold" size="48px"/>
|
||||
</q-item-section>
|
||||
<q-item-section>
|
||||
<q-item-label class="text-grey">
|
||||
{{ $t('price__stars_pay') }}
|
||||
</q-item-label>
|
||||
<q-item-label class="text-h6">
|
||||
Telegram Stars
|
||||
</q-item-label>
|
||||
<q-item-label class="text-grey">
|
||||
{{ $t('price__stars_description') }}
|
||||
</q-item-label>
|
||||
</q-item-section>
|
||||
</q-item>
|
||||
</q-card>
|
||||
|
||||
</slide-template>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import telegramStar from 'components/TelegramStar.vue'
|
||||
import { ref } from 'vue'
|
||||
import SlideTemplate from 'components/SlideTemplate.vue'
|
||||
import PriceSectionItem from 'components/PriceSectionItem.vue'
|
||||
import telegramStar from 'components/TelegramStar.vue'
|
||||
|
||||
const priceItems = [
|
||||
{ id: 1, icon: 'mdi-all-inclusive', label: 'price_unlimited_users' },
|
||||
{ id: 2, icon: 'mdi-all-inclusive', label: 'price_unlimited_projects' },
|
||||
{ id: 3, text: '5', label: 'price_free_chats' },
|
||||
{ id: 4, icon: 'mdi-lifebuoy', label: 'price_support' }
|
||||
const tariff = [
|
||||
{ id: 1, name: 'TEST', price: null, chatsQty: 5 },
|
||||
{ id: 2, name: 'START', price: 1000, chatsQty: 15 },
|
||||
{ id: 3, name: 'PRO', price: 5000, chatsQty: 40 },
|
||||
{ id: 4, name: 'VIP', price: 12000, chatsQty: null }
|
||||
]
|
||||
|
||||
const containerWidth = ref(0)
|
||||
const cardWidth=ref(175)
|
||||
|
||||
const updateWidth = ({ width }) => {
|
||||
containerWidth.value = width
|
||||
cardWidth.value = width < 1200 ? 250 : 175
|
||||
}
|
||||
|
||||
const slide = ref(tariff[0].name)
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
42
src/components/PriceSectionItem.vue
Normal file
@@ -0,0 +1,42 @@
|
||||
<template>
|
||||
<div class="flex column items-center">
|
||||
<div class="text-h5 text-primary text-bold">
|
||||
{{ name }}
|
||||
</div>
|
||||
|
||||
<div class="flex items-center" style="min-height: 50px;">
|
||||
<div v-if="price" class="flex column items-center">
|
||||
<div class="flex no-wrap items-center">
|
||||
<telegram-star color="gold" size="24px" class="q-mr-xs"/>
|
||||
<span class="text-h4">{{ price }}</span>
|
||||
</div>
|
||||
<span class="text-caption">{{ $t('price__per_month') }}</span>
|
||||
</div>
|
||||
<div v-else class="text-bold text-h5">
|
||||
{{ $t('price__free_tax') }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="flex items-center q-pt-md" style="min-height: 50px;">
|
||||
<div class="flex no-wrap items-center">
|
||||
<span v-if="chatsQty" class="text-brand2 text-bold text-h5">
|
||||
{{ chatsQty }}
|
||||
</span>
|
||||
<q-icon v-else name="mdi-all-inclusive" size="md" color="brand2"/>
|
||||
<span class="q-pl-sm">
|
||||
{{ $t('price__chats')}}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import telegramStar from 'components/TelegramStar.vue'
|
||||
|
||||
defineProps({
|
||||
name: String,
|
||||
price: Number,
|
||||
chatsQty: Number
|
||||
})
|
||||
</script>
|
||||
@@ -1,87 +1,77 @@
|
||||
<template>
|
||||
<slide-template title="problem__title">
|
||||
<div ref="container" class="w100">
|
||||
<slide-template>
|
||||
<div ref="container" class="w100 flex no-wrap q-pt-lg">
|
||||
<q-resize-observer @resize="updateWidth" />
|
||||
<div
|
||||
v-for="(row, rowIndex) in rows"
|
||||
:key="rowIndex"
|
||||
class="row q-py-none"
|
||||
:class="rowClass(row.length)"
|
||||
>
|
||||
<div
|
||||
v-for="(item, itemIndex) in row"
|
||||
:key="itemIndex"
|
||||
class="flex-item"
|
||||
:style="itemStyle(row.length)"
|
||||
<div class="w100 flex justify-center" v-if="containerWidth > 800">
|
||||
<q-card
|
||||
v-for="(item, idx) in problems"
|
||||
:key="idx"
|
||||
class="q-pa-md q-ma-sm"
|
||||
>
|
||||
<problem-section-item
|
||||
:icon="item.icon"
|
||||
:title="item.title"
|
||||
:description="item.description"
|
||||
style="overflow: hidden; min-width: 200px; max-width: 100%"
|
||||
style="overflow: hidden;"
|
||||
:style="{ width: cardWidth + 'px' }"
|
||||
/>
|
||||
</div>
|
||||
</q-card>
|
||||
</div>
|
||||
|
||||
<q-carousel
|
||||
v-else
|
||||
v-model="slide"
|
||||
transition-prev="scale"
|
||||
transition-next="scale"
|
||||
swipeable
|
||||
animated
|
||||
navigation
|
||||
padding
|
||||
height="300px"
|
||||
control-color="primary"
|
||||
class="w100"
|
||||
>
|
||||
<q-carousel-slide
|
||||
v-for="(item, idx) in problems"
|
||||
:key="idx"
|
||||
:name="item.title"
|
||||
class="flex justify-center q-pa-none q-ma-none"
|
||||
>
|
||||
<problem-section-item
|
||||
:icon="item.icon"
|
||||
:title="item.title"
|
||||
:description="item.description"
|
||||
style="overflow: hidden; min-width: 100px; max-width: 200px;"
|
||||
/>
|
||||
</q-carousel-slide>
|
||||
</q-carousel>
|
||||
</div>
|
||||
</slide-template>
|
||||
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, computed } from 'vue'
|
||||
import { ref } from 'vue'
|
||||
import ProblemSectionItem from 'components/ProblemSectionItem.vue'
|
||||
import SlideTemplate from 'components/SlideTemplate.vue'
|
||||
|
||||
const problems = [
|
||||
{ id: 1, icon: 'mdi-account-group-outline', title: 'problem__address_book', description: 'problem__address_book_description' },
|
||||
{ id: 2, icon: 'mdi-clipboard-outline', title: 'problem__task_manager', description: 'problem__task_manager_description' },
|
||||
{ id: 2, icon: 'mdi-clipboard-outline', title: 'problem__tasks', description: 'problem__tasks_description' },
|
||||
{ id: 3, icon: 'mdi-calendar-month', title: 'problem__meeting', description: 'problem__meeting_description' },
|
||||
{ id: 4, icon: 'mdi-folder-open-outline', title: 'problem__files', description: 'problem__files_description' },
|
||||
{ id: 5, icon: 'mdi-lock-outline', title: 'problem__privacy', description: 'problem__privacy_description' }
|
||||
]
|
||||
|
||||
const baseWidth = 250
|
||||
const containerWidth = ref(0)
|
||||
const cardWidth = ref(175)
|
||||
|
||||
const updateWidth = ({ width }) => {
|
||||
containerWidth.value = width
|
||||
cardWidth.value = width < 1200 ? 250 : 175
|
||||
}
|
||||
|
||||
const maxPerRow = computed(() => {
|
||||
return Math.max(1, Math.floor(containerWidth.value / baseWidth))
|
||||
})
|
||||
|
||||
const rows = computed(() => {
|
||||
const total = problems.length
|
||||
const maxRow = maxPerRow.value
|
||||
|
||||
if (maxRow >= total) return [problems]
|
||||
|
||||
const rowCount = Math.ceil(total / maxRow)
|
||||
const baseItems = Math.floor(total / rowCount)
|
||||
const extra = total % rowCount
|
||||
const result = []
|
||||
|
||||
let start = 0
|
||||
for (let i = 0; i < rowCount; i++) {
|
||||
const take = baseItems + (i < extra ? 1 : 0)
|
||||
result.push(problems.slice(start, start + take))
|
||||
start += take
|
||||
}
|
||||
|
||||
return result
|
||||
})
|
||||
|
||||
const rowClass = (count) => {
|
||||
return count === 1 ? 'justify-center' : 'justify-between'
|
||||
}
|
||||
|
||||
const itemStyle = (count) => {
|
||||
return {
|
||||
flex: `0 0 ${100 / count}%`,
|
||||
maxWidth: `${100 / count}%`
|
||||
}
|
||||
}
|
||||
const slide = ref(problems[0].title)
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
<template>
|
||||
<div class="flex column items-center q-pa-md q-ma-md">
|
||||
<div class="flex column items-center">
|
||||
<div>
|
||||
<q-avatar
|
||||
color="brand"
|
||||
text-color="white"
|
||||
:icon
|
||||
font-size="65px"
|
||||
size="100px"
|
||||
font-size="45px"
|
||||
size="75px"
|
||||
class="q-my-md"
|
||||
/>
|
||||
</div>
|
||||
<div class="text-bold text-h4">
|
||||
<div class="text-bold text-h5" align="center">
|
||||
{{ $t(title) }}
|
||||
</div>
|
||||
<div class="text-h6 text-grey-8" style="max-width: 250px; text-align: center;">
|
||||
<div class="text-grey-8 q-pt-sm" style="text-align: center;">
|
||||
{{ $t(description) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
<template>
|
||||
<div class="flex column no-wrap">
|
||||
<div class="flex w100 justify-center text-h4 q-mt-md text-bold q-pa-md text-grey">
|
||||
<div class="flex column no-wrap q-mt-lg">
|
||||
<div
|
||||
v-if="title"
|
||||
class="flex w100 justify-center text-h4 q-mt-md text-bold q-pa-md text-grey"
|
||||
align="center"
|
||||
>
|
||||
{{ $t(title) }}
|
||||
</div>
|
||||
<div class="flex w100 justify-center q-pb-md column items-center">
|
||||
|
||||
@@ -1,145 +0,0 @@
|
||||
<template>
|
||||
<div
|
||||
id="background-canvas-wrapper"
|
||||
class="flex fit column"
|
||||
style="background-color: #00c853; opacity:0.65"
|
||||
>
|
||||
<canvas id="canvas" class="fit"/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { onMounted } from 'vue'
|
||||
|
||||
onMounted(() => {
|
||||
const canvasBody = document.getElementById("canvas")
|
||||
const drawArea = canvasBody.getContext("2d")
|
||||
|
||||
const opts = {
|
||||
particleColor: "rgb(255,255,255)",
|
||||
lineColor: "rgb(200,200,200)",
|
||||
particleAmount: 50,
|
||||
defaultSpeed: 0.1,
|
||||
variantSpeed: 1,
|
||||
defaultRadius: 3,
|
||||
variantRadius: 2,
|
||||
linkRadius: 200
|
||||
}
|
||||
|
||||
const delay = 200
|
||||
let tid
|
||||
const rgb = opts.lineColor.match(/\d+/g)
|
||||
let w
|
||||
let h
|
||||
const particles = []
|
||||
|
||||
function resizeReset () {
|
||||
w = canvasBody.width = window.innerWidth
|
||||
h = canvasBody.height = window.innerHeight
|
||||
}
|
||||
|
||||
function deBouncer () {
|
||||
clearTimeout(tid)
|
||||
tid = setTimeout(function() {
|
||||
resizeReset()
|
||||
}, delay)
|
||||
}
|
||||
|
||||
function checkDistance (x1, y1, x2, y2) {
|
||||
return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2))
|
||||
}
|
||||
|
||||
function setup () {
|
||||
|
||||
resizeReset()
|
||||
for (let i = 0; i < opts.particleAmount; i++){
|
||||
particles.push(new Particle())
|
||||
}
|
||||
window.requestAnimationFrame(loop)
|
||||
}
|
||||
|
||||
function loop() {
|
||||
window.requestAnimationFrame(loop)
|
||||
drawArea.clearRect(0, 0, w, h)
|
||||
for (let i = 0; i < particles.length; i++){
|
||||
particles[i].update()
|
||||
particles[i].draw()
|
||||
}
|
||||
for (let i = 0; i < particles.length; i++){
|
||||
linkPoints(particles[i], particles)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function linkPoints (point1, hubs){
|
||||
for (let i = 0; i < hubs.length; i++) {
|
||||
const distance = checkDistance(point1.x, point1.y, hubs[i].x, hubs[i].y)
|
||||
const opacity = 1 - distance / opts.linkRadius
|
||||
if (opacity > 0) {
|
||||
drawArea.lineWidth = 0.5
|
||||
drawArea.strokeStyle = `rgba(${rgb[0]}, ${rgb[1]}, ${rgb[2]}, ${opacity})`
|
||||
drawArea.beginPath()
|
||||
drawArea.moveTo(point1.x, point1.y)
|
||||
drawArea.lineTo(hubs[i].x, hubs[i].y)
|
||||
drawArea.closePath()
|
||||
drawArea.stroke()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Particle () {
|
||||
this.x = Math.random() * w
|
||||
this.y = Math.random() * h
|
||||
this.speed = opts.defaultSpeed + Math.random() * opts.variantSpeed
|
||||
this.directionAngle = Math.floor(Math.random() * 360)
|
||||
this.color = opts.particleColor
|
||||
this.radius = opts.defaultRadius + Math.random() * opts. variantRadius
|
||||
this.vector = {
|
||||
x: Math.cos(this.directionAngle) * this.speed,
|
||||
y: Math.sin(this.directionAngle) * this.speed
|
||||
};
|
||||
this.update = function(){
|
||||
this.border();
|
||||
this.x += this.vector.x
|
||||
this.y += this.vector.y
|
||||
};
|
||||
this.border = function(){
|
||||
if (this.x >= w || this.x <= 0) {
|
||||
this.vector.x *= -1;
|
||||
}
|
||||
if (this.y >= h || this.y <= 0) {
|
||||
this.vector.y *= -1;
|
||||
}
|
||||
if (this.x > w) this.x = w
|
||||
if (this.y > h) this.y = h
|
||||
if (this.x < 0) this.x = 0
|
||||
if (this.y < 0) this.y = 0
|
||||
}
|
||||
this.draw = function(){
|
||||
drawArea.beginPath()
|
||||
drawArea.arc(this.x, this.y, this.radius, 0, Math.PI*2)
|
||||
drawArea.closePath()
|
||||
drawArea.fillStyle = this.color
|
||||
drawArea.fill()
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener("resize", function(){ deBouncer() })
|
||||
resizeReset()
|
||||
setup()
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<style>
|
||||
#background-canvas-wrapper {
|
||||
position: absolute !important;
|
||||
display: block;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: -1;
|
||||
margin: 0;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
</style>
|
||||
@@ -1,9 +1,17 @@
|
||||
.text-brand {
|
||||
color: $green-14 !important;
|
||||
color: $brand !important;
|
||||
}
|
||||
|
||||
.bg-brand {
|
||||
background: $green-14 !important;
|
||||
background: $brand !important;
|
||||
}
|
||||
|
||||
.text-brand2 {
|
||||
color: $brand2 !important;
|
||||
}
|
||||
|
||||
.bg-brand2 {
|
||||
background: $brand2 !important;
|
||||
}
|
||||
|
||||
$base-width: 100;
|
||||
@@ -12,6 +20,16 @@ $base-width: 100;
|
||||
$base-width: $base-width - 10;
|
||||
}
|
||||
|
||||
body, html, #q-app {
|
||||
font-family: $typography-font-family;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
* {
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
:root {
|
||||
--body-width: 1200px;
|
||||
--logo-color-bg-white: grey;
|
||||
@@ -21,3 +39,8 @@ $base-width: 100;
|
||||
max-width: var(--body-width) !important;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'myFont';
|
||||
src: url(./fonts/Inter-Regular.woff2);
|
||||
}
|
||||
|
||||
BIN
src/css/fonts/Inter-Regular.woff2
Normal file
@@ -12,7 +12,7 @@
|
||||
// to match your app's branding.
|
||||
// Tip: Use the "Theme Builder" on Quasar's documentation website.
|
||||
|
||||
$primary : #1976D2;
|
||||
$primary : #3390ec;
|
||||
$secondary : #26A69A;
|
||||
$accent : #9C27B0;
|
||||
|
||||
@@ -23,3 +23,8 @@ $positive : #21BA45;
|
||||
$negative : #C10015;
|
||||
$info : #31CCEC;
|
||||
$warning : #F2C037;
|
||||
|
||||
$brand: #3390ec;
|
||||
$brand2: #F36D3A;
|
||||
|
||||
$typography-font-family : 'myFont', Roboto !default;
|
||||
|
||||
@@ -1 +1 @@
|
||||
export default { EN: 'EN', RU: 'RU', '': '', main__how_it_works: 'How it works?', main__price: 'Price', main__faq: 'FAQ', main__contacts: 'Contacts', banner__slogan_prepend: 'banner__slogan_prepend', banner__slogan_body: 'banner__slogan_body', banner__main_btn: 'Join!', problem__title: 'problem__title', problem__address_book: 'problem__address_book', problem__address_book_description: 'problem__address_book_description', problem__task_manager: 'problem__task_manager', problem__task_manager_description: 'problem__task_manager_description', problem__meeting: 'problem__meeting', problem__meeting_description: 'problem__meeting_description', problem__files: 'problem__files', problem__files_description: 'problem__files_description', problem__privacy: 'problem__privacy', problem__privacy_description: 'problem__privacy_description', how_it_works__title: 'how_it_works__title', how_works__step1: 'Step 1', how_works__step1_description: 'how_works__step1_description', how_works__step2: 'Step 2', how_works__step2_description: 'how_works__step2_description', how_works__step3: 'Step 3 (optional)', how_works__step3_description: 'how_works__step3_description', how_works__step4: 'Done!', how_works__step4_description: 'how_works__step3_description', how_works__step_user: 'User', how_works__step_admin: 'Administrator', price__title: 'Price', price__chat_per_day: 'price__chat_per_day', price__sale_date: 'price__sale_date', price__stars_pay: 'price__stars_pay', price__stars_description: 'price__stars_description', price_unlimited_users: 'Unlimited users', price_unlimited_projects: 'Unlimited projects', price_free_chats: 'price_free_chats', price_support: 'Support', FAQ__title: 'FAQ', faq__question_1: 'faq__question_1', faq__answer_1: 'faq__answer_1', faq__question_2: 'faq__question_2', faq__answer_2: 'faq__answer_2', faq__question_3: 'faq__question_3', faq__answer_3: 'faq__answer_3', faq__question_4: 'faq__question_4', faq__answer_4: 'faq__answer_4', faq__question_5: 'faq__question_5', faq__answer_5: 'faq__answer_5', footer__doc_terms_of_use: 'Term of use', footer__doc_privacy_policy: 'Privacy Policy', footer__contacts_ip: 'Individual Entrepreneur/Sole Proprietor Martyshkin Alexey Alexandrovich', footer__contacts_ip_detail: 'PSRNSP 318774600262084, ITN 366316608346', footer__contacts_location: 'Russia, Moscow/Voronezh' }
|
||||
export default { EN: 'EN', RU: 'RU', '': '', main__how_it_works: 'How it works?', main__price: 'Tariff', main__faq: 'FAQ', main__contacts: 'Contacts', banner__slogan_prepend: 'More than just chats', banner__slogan_body: 'Your project\'s workspace in', banner__main_btn: 'Fly', problem__address_book: 'Address Book', problem__address_book_description: 'No more guessing who\'s who.', problem__tasks: 'Tasks', problem__tasks_description: 'Did you agree on something? Lock it in!', problem__meeting: 'Meeting', problem__meeting_description: 'A meeting or a conference call — schedule it right in the chat.', problem__files: 'Files', problem__files_description: 'No need to remember which chat had that file — everything is in one place now.', problem__privacy: 'Access Rights', problem__privacy_description: 'Users can only see information from the chats they are in.', how_it_works__title: 'How it works?', how_works__step1: 'Step 1', how_works__step1_description: 'Create a new project or select an existing one', how_works__step2: 'Step 2', how_works__step2_description: 'Attach a chat to the app', how_works__step3: 'Step 3 (Optional)', how_works__step3_description: 'Set up the address book', how_works__step4: 'Done!', how_works__step4_description: 'Access via the button in the pinned message', how_works__step_user: 'User', how_works__step_admin: 'Administrator', price__title: 'Tariff', price__per_month: 'per month', price__free_tax: 'FREE', price__chats: 'chats', price__stars_pay: 'Payment via', price__stars_description: 'Telegram\'s internal currency', price__tariff_description: 'All plans include full functionality: an unlimited number of users, projects, tasks, and meetings.', FAQ__title: 'Frequently Asked Questions (FAQ)', faq__question_1: 'Who is this app for?', faq__answer_1: 'If you actively communicate on projects in Telegram chats, this app will create a unified information space for you, where you can also connect contractors.', faq__question_2: 'Can I buy a subscription directly, without using Telegram Stars?', faq__answer_2: 'Unfortunately, that\'s not possible. We use Telegram Stars as the only payment system for mini-apps—this is a rule of the platform itself.', faq__question_3: 'Why does the bot need chat admin rights?', faq__answer_3: 'To help you! For the core functions to work—collecting files, creating meeting and task notifications right in the chat—the bot needs rights to read messages and manage messages. This is standard practice for functional bots. We guarantee that your data is confidential and is not shared with third parties (learn more in our Privacy Policy).', faq__question_4: 'Where are my files and data stored?', faq__answer_4: 'Your files and messages remain in your Telegram chats on Telegram\'s servers. We do not store them ourselves. The app merely organizes them, providing convenient search and display.', faq__question_5: 'Why are some contacts in the address book not fully displayed?', faq__answer_5: 'The contact information (name, position, phone, email) is entered into the system by your project\'s administrator. However, for this full data to be displayed to other participants, the user themselves must give their consent upon first launching the app. This is a requirement of personal data protection laws. Thus, you will only see the information that the administrator has added to your book and that the user has permitted to be shown.', faq__question_6: 'What happens if I remove the bot from a chat or stop tracking?', faq__answer_6: 'The app will stop receiving new messages and files from that chat. All previously collected information will remain in your history and will be available for search, but it will no longer update. This is convenient when a project is completed but its archive needs to be preserved.', faq__question_7: 'Can one chat be linked to several projects at once?', faq__answer_7: 'No, one chat can only be linked to one project. This helps maintain order and avoids confusing participants. But you can easily switch between all projects you have access to—even from different administrators.', faq__question_8: 'Can participants of one project see data from another?', faq__answer_8: 'No, all projects are completely independent. This is done for your confidentiality. Information from one project (chats, files, tasks, contacts) never leaks into another. Moreover, the same user can appear in different projects in different roles and from different companies. When switching between projects, you only see the information relevant to the selected project.', faq__description: 'Still have questions? We\'re here to help:', footer__docs: 'App documents', footer__doc_terms_of_use: 'Term of use', footer__doc_privacy_policy: 'Privacy Policy', footer__contacts_location: 'Russia, Moscow/Voronezh', footer__description_user_data: 'The site does not collect user data, use cookies, or track user activity.' }
|
||||
@@ -1,8 +1,15 @@
|
||||
<template>
|
||||
<q-layout view="lHr lpr lFr" class="bg-transparent">
|
||||
<q-header class="main-content text-grey glass">
|
||||
<div ref="headerContainer" class="flex q-ma-md justify-between no-wrap items-center">
|
||||
<base-logo ref="logo"/>
|
||||
<q-layout view="lHr lpr lFr" class="bg-transparent relative-position">
|
||||
<q-header
|
||||
class="main-content q-py-sm"
|
||||
:class="isHeroScroll ? 'text-white bg-transparent' : 'text-grey glass'"
|
||||
reveal
|
||||
>
|
||||
<div
|
||||
ref="headerContainer"
|
||||
class="flex q-mx-md justify-between no-wrap items-center"
|
||||
>
|
||||
<base-logo ref="logo" class="text-h6"/>
|
||||
<div
|
||||
ref="menuContainer"
|
||||
class="row items-center q-ml-md no-wrap"
|
||||
@@ -12,7 +19,7 @@
|
||||
ref="buttonsContainer"
|
||||
:class="{ 'invisible absolute': !showFullMenu }"
|
||||
class="flex row no-wrap"
|
||||
>
|
||||
>
|
||||
<q-btn
|
||||
v-for="item in menuItems"
|
||||
:key="item.id"
|
||||
@@ -20,7 +27,7 @@
|
||||
no-caps
|
||||
@click="scrollToElement(item.ref)"
|
||||
ref="menuButtons"
|
||||
>
|
||||
>
|
||||
<span class="text-no-wrap">{{ $t(item.title) }}</span>
|
||||
</q-btn>
|
||||
</div>
|
||||
@@ -31,7 +38,11 @@
|
||||
icon="menu"
|
||||
@click="showDrawer = !showDrawer"
|
||||
/>
|
||||
<q-btn outline color="primary" class="q-ml-sm">
|
||||
<q-btn
|
||||
outline
|
||||
:color="isHeroScroll ? 'white' : 'primary'"
|
||||
class="q-ml-sm"
|
||||
>
|
||||
<div class="flex items-center no-wrap">
|
||||
<span class="text-bold">{{ locale.split('-')[0] }}</span>
|
||||
</div>
|
||||
@@ -80,13 +91,14 @@
|
||||
<q-page-container
|
||||
class="main-content q-pa-none q-ma-none bg-transparent"
|
||||
>
|
||||
<q-scroll-observer axis="vertical" @scroll="updateHeaderStyle"/>
|
||||
<q-page class="column">
|
||||
<hero-banner/>
|
||||
<hero-banner class="q-pa-none" style="margin-top: -58px;" id='hero_banner'/>
|
||||
<problem-section/>
|
||||
<how-works-section id='how_works'/>
|
||||
<price-section id='price'/>
|
||||
<faq-section id='FAQ'/>
|
||||
<footer-section id='contacts' class="bg-grey-14 text-white"/>
|
||||
<footer-section id='contacts'/>
|
||||
</q-page>
|
||||
</q-page-container>
|
||||
</q-layout>
|
||||
@@ -103,6 +115,12 @@
|
||||
import FaqSection from 'components/FAQSection.vue'
|
||||
import FooterSection from 'components/FooterSection.vue'
|
||||
|
||||
const isHeroScroll = ref(true)
|
||||
|
||||
const updateHeaderStyle = (e) => {
|
||||
isHeroScroll.value = e.position.top <= 5
|
||||
}
|
||||
|
||||
const showDrawer = ref(false)
|
||||
|
||||
const menuItems = [
|
||||
|
||||
51
src/pages/DocPage.vue
Normal file
@@ -0,0 +1,51 @@
|
||||
<template>
|
||||
<div
|
||||
class="flex justify-center bg-grey-11"
|
||||
style="height: 100vh"
|
||||
>
|
||||
<q-layout container style="max-width: 800px !important">
|
||||
<q-page-container>
|
||||
<q-page class="flex w100 column">
|
||||
<div >
|
||||
<div
|
||||
class="main-content flex items-center column w100 bg-white q-px-lg q-pb-xl"
|
||||
>
|
||||
<base-logo
|
||||
class="q-pa-md text-h4 cursor-pointer"
|
||||
@click="router.push({ name: 'main' })"
|
||||
/>
|
||||
<markdown-viewver
|
||||
v-if="documentName"
|
||||
:locale
|
||||
:documentName
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<q-page-scroller position="bottom-right" :scroll-offset="300" :offset="[18, 18]">
|
||||
<q-btn fab icon="mdi-arrow-up" color="brand2"/>
|
||||
</q-page-scroller>
|
||||
</q-page>
|
||||
</q-page-container>
|
||||
</q-layout>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue'
|
||||
import BaseLogo from 'components/BaseLogo.vue'
|
||||
import MarkdownViewver from 'components/MarkdownViewver.vue'
|
||||
import { useRoute, useRouter } from 'vue-router'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
const { locale } = useI18n({ useScope: 'global' })
|
||||
|
||||
const documentName = ref(null)
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
|
||||
onMounted(() => {
|
||||
documentName.value = route.name === 'terms'
|
||||
? 'Terms_of_use'
|
||||
: 'Privacy-Policy'
|
||||
})
|
||||
|
||||
</script>
|
||||
@@ -1,13 +0,0 @@
|
||||
<template>
|
||||
<q-page class="flex flex-center">
|
||||
<img
|
||||
alt="Quasar logo"
|
||||
src="~assets/quasar-logo-vertical.svg"
|
||||
style="width: 200px; height: 200px"
|
||||
>
|
||||
</q-page>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
//
|
||||
</script>
|
||||
@@ -1,14 +1,19 @@
|
||||
const routes = [
|
||||
{
|
||||
name: 'main',
|
||||
path: '/',
|
||||
component: () => import('layouts/MainLayout.vue'),
|
||||
children: [
|
||||
{ path: '', component: () => import('pages/IndexPage.vue') }
|
||||
]
|
||||
component: () => import('layouts/MainLayout.vue')
|
||||
},
|
||||
{
|
||||
name: 'privacy-policy',
|
||||
path: '/privacy-policy',
|
||||
component: () => import('pages/DocPage.vue')
|
||||
},
|
||||
{
|
||||
name: 'terms',
|
||||
path: '/terms-of-use',
|
||||
component: () => import('pages/DocPage.vue')
|
||||
},
|
||||
|
||||
// Always leave this as last one,
|
||||
// but you can also remove it
|
||||
{
|
||||
path: '/:catchAll(.*)*',
|
||||
component: () => import('pages/ErrorNotFound.vue')
|
||||
|
||||