diff --git a/apps/web/app/(documents)/offer/layout.tsx b/apps/web/app/(documents)/offer/layout.tsx new file mode 100644 index 0000000..d3e52af --- /dev/null +++ b/apps/web/app/(documents)/offer/layout.tsx @@ -0,0 +1,6 @@ +import { DocumentsLayout } from '@/components/documents/layout'; +import { type PropsWithChildren } from 'react'; + +export default function Layout({ children }: Readonly) { + return {children}; +} diff --git a/apps/web/app/(documents)/offer/page.mdx b/apps/web/app/(documents)/offer/page.mdx new file mode 100644 index 0000000..cb737a7 --- /dev/null +++ b/apps/web/app/(documents)/offer/page.mdx @@ -0,0 +1,102 @@ +import { OfferLink, SupportLink } from '@/components/documents/links'; +import { env } from '@/config/env'; + +export const metadata = { + title: 'Публичная оферта', + description: 'Публичная оферта бота / мини-приложения «Запишись.онлайн» (@zapishis_online_bot)', +}; + +### Договор-оферта на использование сервиса «Запишись.онлайн» (@zapishis_online_bot) + +Настоящий документ является публичной офертой в соответствии с пунктом 2 статьи 437 Гражданского кодекса Российской Федерации и представляет собой предложение индивидуального предпринимателя (самозанятого) — далее именуемого «Администрация», заключить Договор на использование Сервиса (далее – «Договор», «Оферта») с любым физическим лицом, принявшим условия настоящей Оферты (далее – «Пользователь»). + +#### 1. Термины и определения + +1.1. Оферта — настоящий документ, постоянно размещенный в сети Интернет по адресу . + +1.2. Акцепт — полное и безоговорочное принятие условий Оферты Пользователем путем оплаты доступа через встроенный платежный бот ЮKassa в Telegram. + +1.3. Сервис — Telegram-бот и мини-приложение, позволяющее пользователям создавать и принимать заказы, управлять расписанием и взаимодействовать друг с другом без необходимости регистрации. + +1.4. Администрация — самозанятое лицо, являющееся разработчиком и правообладателем Сервиса. + +1.5. Пользователь — любое физическое лицо, использующее Сервис в личных или профессиональных целях. + +1.6. Доступ — право использования функционала Сервиса на определённый оплаченный период (например, неделя, месяц, год). + +1.7. Оплата — денежные средства, перечисленные Пользователем через платёжный бот ЮKassa в Telegram. + +#### 2. Акцепт оферты и заключение договора + +2.1. Акцептом настоящей Оферты считается оплата Пользователем доступа к Сервису любым доступным способом. + +2.2. С момента совершения оплаты Пользователь считается заключившим Договор с Администрацией на условиях, изложенных в настоящей Оферте. + +2.3. Пользователь подтверждает, что ему понятны все условия настоящей Оферты и он принимает их без ограничений. + +#### 3. Предмет договора + +3.1. Администрация предоставляет Пользователю неисключительное право (доступ) на использование функционала Сервиса в пределах оплаченного периода времени. + +3.2. Сервис предоставляется в онлайн-формате через Telegram-бота без установки дополнительного программного обеспечения. + +3.3. Пользователь получает право использовать функционал Сервиса в личных целях, в том числе для организации и планирования заказов, встреч и тренировок. + +#### 4. Порядок оплаты и использование + +4.1. Оплата производится через встроенные инструменты Telegram-бота с использованием платёжной системы ЮKassa. + +4.2. Комиссия платёжной системы включена в итоговую стоимость. Администрация не взимает дополнительных платежей. + +4.3. Доступ активируется автоматически после успешного подтверждения оплаты. + +4.4. Пользователь может продлить доступ путём повторной оплаты. Автоматическое продление не применяется. + +4.5. Возврат денежных средств возможен только в случае технических ошибок, по письменному обращению на адрес поддержки. + +#### 5. Права и обязанности сторон + +5.1. Пользователь обязуется: + +- не использовать Сервис в противоправных целях; +- не вмешиваться в работу Сервиса и не предпринимать действий, направленных на нарушение его функционирования; +- предоставлять достоверную информацию при оплате и использовании Сервиса; +- при добавлении контактов других лиц (например, клиентов, мастеров) гарантировать, что у него есть согласие этих лиц на передачу и обработку их персональных данных в рамках Сервиса; + +5.2. Администрация обязуется: + +- обеспечивать бесперебойную работу Сервиса, за исключением периодов технического обслуживания; +- обрабатывать персональные данные Пользователей в соответствии с Политикой конфиденциальности; +- принимать обращения и запросы Пользователей по вопросам работы Сервиса. 6. Ответственность сторон; + +6.1. Сервис предоставляется «как есть». Администрация не несёт ответственности за временные сбои, потерю данных или недоступность Сервиса, возникшие по причинам, не зависящим от неё. + +6.2. Пользователь несёт полную ответственность за корректность совершаемых платежей и действий, совершаемых через свой Telegram-аккаунт. + +#### 7. Обработка персональных данных + +7.1. Администрация обрабатывает персональные данные Пользователя в соответствии с Федеральным законом №152-ФЗ «О персональных данных» и Политикой конфиденциальности. + +7.2. Использование Сервиса означает согласие Пользователя на обработку его персональных данных. + +#### 8. Срок действия и расторжение договора + +8.1. Договор вступает в силу с момента оплаты доступа и действует в течение оплаченного периода. + +8.2. Пользователь может прекратить использование Сервиса в любое время без возврата оплаченных средств. + +8.3. Администрация вправе приостановить доступ в случае нарушения Пользователем условий настоящей Оферты. + +#### 9. Заключительные положения + +9.1. Настоящий Договор регулируется законодательством Российской Федерации. + +9.2. Все споры и разногласия решаются путём переговоров, а при недостижении соглашения — в судебном порядке по месту нахождения Администрации. + +9.3. Администрация оставляет за собой право изменять условия Оферты с размещением новой редакции на сайте. + +#### 10. Контакты + +Если у Вас есть вопросы по настоящему договору публичной оферты персональных данных, пожалуйста, свяжитесь с Разработчиком: + +- **Telegram:** diff --git a/apps/web/app/(documents)/offer/page.tsx b/apps/web/app/(documents)/offer/page.tsx deleted file mode 100644 index 138c692..0000000 --- a/apps/web/app/(documents)/offer/page.tsx +++ /dev/null @@ -1,242 +0,0 @@ -import { Container } from '@/components/layout'; -import { PageHeader } from '@/components/navigation'; -import { env } from '@/config/env'; - -export default function OfferPage() { - return ( - <> - - -
-

- Договор-оферта на использование сервиса «Запишись.онлайн» (@zapishis_online_bot) -

-

- Настоящий документ является публичной офертой в соответствии с пунктом 2 статьи 437 - Гражданского кодекса Российской Федерации и представляет собой предложение - индивидуального предпринимателя (самозанятого) — далее именуемого «Администрация», - заключить Договор на использование Сервиса (далее – «Договор», «Оферта») с любым - физическим лицом, принявшим условия настоящей Оферты (далее – «Пользователь»). -

- -
- -

1. Термины и определения

-
-

- 1.1. Оферта — настоящий документ, постоянно размещенный в сети - Интернет по адресу {env.OFFER_URL}. -

-

- 1.2. Акцепт — полное и безоговорочное принятие условий Оферты - Пользователем путем оплаты доступа через встроенный платежный бот ЮKassa в Telegram. -

-

- 1.3. Сервис — Telegram-бот и мини-приложение, позволяющее - пользователям создавать и принимать заказы, управлять расписанием и взаимодействовать - друг с другом без необходимости регистрации. -

-

- 1.4. Администрация — самозанятое лицо, являющееся разработчиком и - правообладателем Сервиса. -

-

- 1.5. Пользователь — любое физическое лицо, использующее Сервис в - личных или профессиональных целях. -

-

- 1.6. Доступ — право использования функционала Сервиса на определённый - оплаченный период (например, неделя, месяц, год). -

-

- 1.7. Оплата — денежные средства, перечисленные Пользователем через - платёжный бот ЮKassa в Telegram. -

-
- -
- -

2. Акцепт оферты и заключение договора

-
-

- 2.1. Акцептом настоящей Оферты считается оплата Пользователем доступа - к Сервису любым доступным способом. -

-

- 2.2. С момента совершения оплаты Пользователь считается заключившим - Договор с Администрацией на условиях, изложенных в настоящей Оферте. -

-

- 2.3. Пользователь подтверждает, что ему понятны все условия настоящей - Оферты и он принимает их без ограничений. -

-
- -
- -

3. Предмет договора

-
-

- 3.1. Администрация предоставляет Пользователю неисключительное право - (доступ) на использование функционала Сервиса в пределах оплаченного периода времени. -

-

- 3.2. Сервис предоставляется в онлайн-формате через Telegram-бота без - установки дополнительного программного обеспечения. -

-

- 3.3. Пользователь получает право использовать функционал Сервиса в - личных целях, в том числе для организации и планирования заказов, встреч и тренировок. -

-
- -
- -

4. Порядок оплаты и использование

-
-

- 4.1. Оплата производится через встроенные инструменты Telegram-бота с - использованием платёжной системы ЮKassa. -

-

- 4.2. Комиссия платёжной системы включена в итоговую стоимость. - Администрация не взимает дополнительных платежей. -

-

- 4.3. Доступ активируется автоматически после успешного подтверждения - оплаты. -

-

- 4.4. Пользователь может продлить доступ путём повторной оплаты. - Автоматическое продление не применяется. -

-

- 4.5. Возврат денежных средств возможен только в случае технических - ошибок, по письменному обращению на адрес поддержки. -

-
- -
- -

5. Права и обязанности сторон

-
-

- 5.1. Пользователь обязуется: -

-
    -
  • не использовать Сервис в противоправных целях;
  • -
  • - не вмешиваться в работу Сервиса и не предпринимать действий, направленных на - нарушение его функционирования; -
  • -
  • предоставлять достоверную информацию при оплате и использовании Сервиса.
  • -
  • - при добавлении контактов других лиц (например, клиентов, мастеров) гарантировать, - что у него есть согласие этих лиц на передачу и обработку их персональных данных в - рамках Сервиса. -
  • -
-

- 5.2. Администрация обязуется: -

-
    -
  • - обеспечивать бесперебойную работу Сервиса, за исключением периодов технического - обслуживания; -
  • -
  • - обрабатывать персональные данные Пользователей в соответствии с{' '} - Политикой конфиденциальности; -
  • -
  • принимать обращения и запросы Пользователей по вопросам работы Сервиса.
  • -
-
- -
- -

6. Ответственность сторон

-
-

- 6.1. Сервис предоставляется «как есть». Администрация не несёт - ответственности за временные сбои, потерю данных или недоступность Сервиса, возникшие - по причинам, не зависящим от неё. -

-

- 6.2. Пользователь несёт полную ответственность за корректность - совершаемых платежей и действий, совершаемых через свой Telegram-аккаунт. -

-
- -
- -

7. Обработка персональных данных

-
-

- 7.1. Администрация обрабатывает персональные данные Пользователя в - соответствии с Федеральным законом №152-ФЗ «О персональных данных» и{' '} - Политикой конфиденциальности. -

-

- 7.2. Использование Сервиса означает согласие Пользователя на - обработку его персональных данных. -

-
- -
- -

8. Срок действия и расторжение договора

-
-

- 8.1. Договор вступает в силу с момента оплаты доступа и действует в - течение оплаченного периода. -

-

- 8.2. Пользователь может прекратить использование Сервиса в любое - время без возврата оплаченных средств. -

-

- 8.3. Администрация вправе приостановить доступ в случае нарушения - Пользователем условий настоящей Оферты. -

-
- -
- -

9. Заключительные положения

-
-

- 9.1. Настоящий Договор регулируется законодательством Российской - Федерации. -

-

- 9.2. Все споры и разногласия решаются путём переговоров, а при - недостижении соглашения — в судебном порядке по месту нахождения Администрации. -

-

- 9.3. Администрация оставляет за собой право изменять условия Оферты с - размещением новой редакции на сайте. -

-
- -
- -

10. Контакты

-

- Если у Вас есть вопросы по настоящему договору публичной оферты персональных данных, - пожалуйста, свяжитесь с Разработчиком: -

- - -
-
-
- - ); -} diff --git a/apps/web/app/(documents)/privacy/page.mdx b/apps/web/app/(documents)/privacy/page.mdx index f55039d..6d2748a 100644 --- a/apps/web/app/(documents)/privacy/page.mdx +++ b/apps/web/app/(documents)/privacy/page.mdx @@ -1,4 +1,4 @@ -import { SupportLink } from '@/components/documents/support-link'; +import { SupportLink } from '@/components/documents/links'; import { env } from '@/config/env'; export const metadata = { @@ -7,9 +7,9 @@ export const metadata = { 'Политика конфиденциальности бота / мини-приложения «Запишись.онлайн» (@zapishis_online_bot)', }; -# Политика конфиденциальности бота / мини-приложения «Запишись.онлайн» (@zapishis_online_bot) +### Политика конфиденциальности бота / мини-приложения «Запишись.онлайн» (@zapishis_online_bot) -## 1. Термины и определения +#### 1. Термины и определения 1. **Telegram** – Telegram Messenger Inc. (платформа, на которой работает бот и мини-приложение). 2. **Платформа** – экосистема ботов и мини-приложений Telegram. @@ -18,7 +18,7 @@ export const metadata = { 5. **Пользователь** – лицо, использующее Сторонний сервис через свою учетную запись Telegram (далее — «Вы»). 6. **Политика** – настоящий документ, регулирующий отношения между Разработчиком и Пользователем в части сбора и обработки персональных данных. -## 2. Общие положения +#### 2. Общие положения 2.1. Настоящая Политика регулирует исключительно отношения между Разработчиком и Пользователем. Она не заменяет и не изменяет Политику конфиденциальности Telegram: [https://telegram.org/privacy](https://telegram.org/privacy). @@ -28,7 +28,7 @@ export const metadata = { 2.4. Если Вы не согласны с условиями Политики — прекратите использование Сервиса. -## 3. Отказ от ответственности +#### 3. Отказ от ответственности 3.1. Сторонний сервис является независимым приложением и не поддерживается, не одобряется и не аффилирован с Telegram (за исключением использования API и инфраструктуры Telegram). @@ -43,7 +43,7 @@ export const metadata = { 3.6. Любая информация, которую Вы делаете общедоступной самостоятельно (через профиль Telegram, публичные сообщения и т.п.), может стать доступна другим пользователям и не подпадает под защиту настоящей Политики в части конфиденциальности этой общедоступной информации. -## 4. Сбор персональных данных +#### 4. Сбор персональных данных 4.1. Telegram по умолчанию предоставляет сторонним сервисам ограниченный набор данных о Пользователе — подробнее: [https://telegram.org/privacy#6-bot-messages](https://telegram.org/privacy#6-bot-messages). @@ -55,7 +55,7 @@ export const metadata = { 4.5. Пользователь может передавать данные третьих лиц (например, контактные данные клиентов или мастеров) для использования в Сервисе. При этом пользователь гарантирует, что эти лица дали согласие на обработку их персональных данных в рамках Сервиса. -## 5. Какие данные мы собираем и как используем +#### 5. Какие данные мы собираем и как используем 5.1. Разработчик запрашивает, собирает и обрабатывает только те данные, которые необходимы для корректной работы функций Сервиса, в частности: @@ -74,7 +74,7 @@ export const metadata = { > **Важно:** детальные платёжные данные (реквизиты карт и т.д.) не хранятся у Разработчика — их обрабатывает платёжный оператор (ЮKassa) и Telegram-платежный бот. -## 6. Передача данных третьим лицам +#### 6. Передача данных третьим лицам 6.1. Разработчик не передаёт персональные данные третьим лицам, за исключением следующих случаев: @@ -85,7 +85,7 @@ export const metadata = { 6.2. Разработчик не продаёт и не передаёт персональные данные для рекламных целей третьим лицам без Вашего отдельного согласия. -## 7. Защита и хранение данных +#### 7. Защита и хранение данных 7.1. Разработчик применяет разумные технические и организационные меры для защиты персональных данных (использование надежного VPS, ограничения доступа, резервное копирование и т.п.). @@ -93,7 +93,7 @@ export const metadata = { 7.3. Данные хранятся на серверах, указанных Разработчиком. Если используются внешние сервисы/облачные хранилища — это будет указано в соответствующих местах Политики или сообщения при сборе данных. -## 8. Права и обязанности сторон +#### 8. Права и обязанности сторон 8.1. Права Разработчика: @@ -120,17 +120,17 @@ export const metadata = { - предоставлять точную и актуальную информацию; - не использовать Сервис в нарушении законодательства и условий Telegram. -## 9. Реклама и использование данных для аналитики +#### 9. Реклама и использование данных для аналитики 9.1. На текущем этапе Разработчик не использует персональные данные для демонстрации таргетированной рекламы третьих лиц без явного согласия Пользователя. 9.2. Разработчик может собирать агрегированную (анонимную) статистику использования Сервиса для улучшения функционала. -## 10. Изменения Политики +#### 10. Изменения Политики 10.1. Разработчик вправе вносить изменения в настоящую Политику. Все изменения публикуются на этой странице и вступают в силу с момента публикации. -## 11. Контакты +#### 11. Контакты Если у Вас есть вопросы по Политике конфиденциальности или запросы в отношении персональных данных, пожалуйста, свяжитесь с Разработчиком: diff --git a/apps/web/components/documents/support-link.tsx b/apps/web/components/documents/links.tsx similarity index 58% rename from apps/web/components/documents/support-link.tsx rename to apps/web/components/documents/links.tsx index dc618eb..51af51c 100644 --- a/apps/web/components/documents/support-link.tsx +++ b/apps/web/components/documents/links.tsx @@ -1,5 +1,13 @@ import { env } from '@/config/env'; +export function OfferLink() { + return ( + + {env.OFFER_URL} + + ); +} + export function SupportLink() { return ( diff --git a/apps/web/mdx-components.tsx b/apps/web/mdx-components.tsx index 796ddf1..2671759 100644 --- a/apps/web/mdx-components.tsx +++ b/apps/web/mdx-components.tsx @@ -1,5 +1,4 @@ import { type MDXComponents } from 'mdx/types'; -import Image from 'next/image'; import Link from 'next/link'; /** @@ -26,21 +25,6 @@ const components: MDXComponents = { ); }, - - h1: ({ children }) =>

{children}

, - - h2: ({ children }) =>

{children}

, - - // 🖼 Обработка картинок через next/image - img: (props) => ( - {props.alt - ), }; /** diff --git a/packages/ui/package.json b/packages/ui/package.json index 222de60..2a831fc 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -40,6 +40,7 @@ "@radix-ui/react-select": "^2.1.4", "@radix-ui/react-slot": "^1.1.1", "@repo/typescript-config": "workspace:*", + "@tailwindcss/typography": "^0.5.19", "@types/react": "catalog:", "autoprefixer": "catalog:", "class-variance-authority": "^0.7.1", diff --git a/packages/ui/tailwind.config.ts b/packages/ui/tailwind.config.ts index f4a8143..1acfe4c 100644 --- a/packages/ui/tailwind.config.ts +++ b/packages/ui/tailwind.config.ts @@ -1,3 +1,4 @@ +import typography from '@tailwindcss/typography'; import { type Config } from 'tailwindcss'; import tailwindcssAnimate from 'tailwindcss-animate'; @@ -10,7 +11,7 @@ const config = { '../../packages/ui/src/**/*.{ts,tsx}', ], darkMode: ['class'], - plugins: [tailwindcssAnimate], + plugins: [tailwindcssAnimate, typography], prefix: '', theme: { container: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 96ec3ab..aaaf858 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,7 +11,7 @@ catalogs: version: 3.13.8 '@types/node': specifier: ^20 - version: 20.19.4 + version: 20.17.8 '@types/react': specifier: ^19.1.11 version: 19.1.11 @@ -23,7 +23,7 @@ catalogs: version: 2.2.2 autoprefixer: specifier: ^10.4.20 - version: 10.4.21 + version: 10.4.20 dayjs: specifier: ^1.11.3 version: 1.11.13 @@ -35,7 +35,7 @@ catalogs: version: 9.21.0 graphql: specifier: ^16.9.0 - version: 16.11.0 + version: 16.9.0 husky: specifier: ^9.1.7 version: 9.1.7 @@ -44,13 +44,13 @@ catalogs: version: 9.0.2 lint-staged: specifier: ^15.2.10 - version: 15.5.2 + version: 15.2.10 lucide-react: specifier: ^0.462.0 version: 0.462.0 postcss: specifier: ^8.4.49 - version: 8.5.6 + version: 8.4.49 postcss-load-config: specifier: ^6.0.1 version: 6.0.1 @@ -68,19 +68,19 @@ catalogs: version: 19.1.1 tailwindcss: specifier: ^3.4.15 - version: 3.4.17 + version: 3.4.15 typescript: specifier: ^5.7 - version: 5.8.3 + version: 5.7.2 vite-tsconfig-paths: specifier: ^5.1.4 version: 5.1.4 vitest: specifier: ^2.1.8 - version: 2.1.9 + version: 2.1.8 zod: specifier: ^3.24.1 - version: 3.25.71 + version: 3.24.1 importers: @@ -521,6 +521,9 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../typescript-config + '@tailwindcss/typography': + specifier: ^0.5.19 + version: 0.5.19(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@24.0.10)(typescript@5.8.3))) '@types/react': specifier: 'catalog:' version: 19.1.11 @@ -3139,6 +3142,11 @@ packages: '@swc/helpers@0.5.15': resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + '@tailwindcss/typography@0.5.19': + resolution: {integrity: sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==} + peerDependencies: + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1' + '@tanstack/query-core@5.64.1': resolution: {integrity: sha512-978Wx4Wl4UJZbmvU/rkaM9cQtXXrbhK0lsz/UZhYIbyKYA8E4LdomTwyh2GHZ4oU0BKKoDH4YlKk2VscCUgNmg==} @@ -7149,6 +7157,10 @@ packages: peerDependencies: postcss: ^8.2.14 + postcss-selector-parser@6.0.10: + resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} + engines: {node: '>=4'} + postcss-selector-parser@6.1.2: resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} @@ -11724,6 +11736,11 @@ snapshots: dependencies: tslib: 2.8.1 + '@tailwindcss/typography@0.5.19(tailwindcss@3.4.17(ts-node@10.9.2(@types/node@24.0.10)(typescript@5.8.3)))': + dependencies: + postcss-selector-parser: 6.0.10 + tailwindcss: 3.4.17(ts-node@10.9.2(@types/node@24.0.10)(typescript@5.8.3)) + '@tanstack/query-core@5.64.1': {} '@tanstack/react-query@5.64.1(react@19.1.1)': @@ -16936,6 +16953,11 @@ snapshots: postcss: 8.5.6 postcss-selector-parser: 6.1.2 + postcss-selector-parser@6.0.10: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0