Статическая страница (nginx:alpine): hero, как это работает, возможности,
тарифы подписки (снапшот subscription.fare из Mongo), соц.доказательство,
FAQ, CTA на бота-Стражника @king_gate_keeper_bot.
Статический продающий лендинг «Королевский Хап» — единственная HTML-страница, отдаётся на корне `https://khap.ru/` (главная страница домена). Презентует продукт (Telegram-бот, находящий ценовые ошибки и скидки на Wildberries), реальные тарифы подписки и ведёт пользователя оформить подписку в боте «Стражник» (`https://t.me/king_gate_keeper_bot`).
## Стек
- Один файл `index.html` — вся страница: инлайновые `<style>`/`<script>`, SVG-иконки, без внешних хотлинков на картинки. Единственная внешняя зависимость — шрифты Google Fonts (Cinzel + Manrope).
- **Docker**: `Dockerfile` — `FROM nginx:alpine`, копирует `index.html` в `/usr/share/nginx/html/`. Без стадии сборки — контент готов как есть.
- **docker-compose** — прод-запуск: сервис `khap-landing`, образ `gitea.yandex5.ru/monster/khap-landing:master`, порт хоста `5060` → контейнера `80`.
## Точки входа
- Локально: открыть `index.html` прямо в браузере, либо `docker build -t khap-landing:test . && docker run --rm -p 5060:80 khap-landing:test` → `http://localhost:5060/`.
- Прод: Docker-образ по `Dockerfile`, поднимается сервисом `khap-landing` в `docker-compose.yaml` (порт `5060:80`).
- CI/CD: `.github/workflows/docker-image.yml` — на push в `master` собирает и пушит образ в `gitea.yandex5.ru/monster/khap-landing`, затем по SSH деплоит на 192.168.1.41 (папка `docker.services/khap-landing`).
## Конфигурация
- Переменные окружения не требуются — сайт полностью статический, без бэкенда и без обращений к MongoDB в проде.
- Тарифы (`7/14/30/60 дней`, цены, описание) зашиты в `index.html` как снапшот коллекции `subscription.fare` (MongoDB `king-mongo`) на момент публикации. Источник правды по тарифам — сама БД; при изменении тарифов карточки в `index.html` нужно обновить вручную.
- Ссылка на бота (`https://t.me/king_gate_keeper_bot`) захардкожена во всех CTA-кнопках `index.html`.
- Внешняя маршрутизация: nginx на прод-хосте 192.168.1.41 отдаёт этот сервис по точному `location = /` для домена `khap.ru` (не catch-all!) — конфиг nginx живёт вне репозитория, на хосте (`docker.services/nginx/nginx/settings/site-confs/khap.ru.conf`).
## Структура директорий
```
khap-landing/
├── index.html # вся страница лендинга
├── Dockerfile # nginx:alpine + COPY index.html
├── docker-compose.yaml # сервис khap-landing, порт 5060:80
├── .github/workflows/docker-image.yml # CI: сборка образа + SSH-деплой на 192.168.1.41
├── .gitignore
├── README.md
└── AGENTS.md
```
## Паттерны добавления функциональности
- Правки контента/дизайна — прямо в `index.html` (секции: hero, "как это работает", возможности, тарифы, соц.доказательство, FAQ, футер).
- Обновление тарифов — синхронизировать секцию `#pricing` в `index.html` с актуальными данными коллекции `subscription.fare` в MongoDB (`king-mongo`, 192.168.1.43, база `subscription`).
## Известные особенности
- **Важно при изменении nginx-маршрутизации**: `location = /` на прод-хосте — точное совпадение по пути запроса, без учёта query-строки. Реальные return/callback-URL платёжных провайдеров (ЮMoney/ЮKassa/Qiwi, обрабатываются `bot/gatekeeper`/`bot/gatekeeper-payment`) используют только префикс `/payments/...`, поэтому этот сервис не пересекается с платёжными флоу. Не менять этот `location` на нестрогий/regex-catch-all — это заберёт себе трафик `/payments/*`, `/success.html`, `/donate.html` и т.п., которые должны оставаться на `gatekeeper-payment`.
- Юзернейм бота "Стражник" в других частях платформы (FAQ, `bot/wbproductinfo`, и др.) местами указан как `@king_gatekeeper_bot` (без второго подчёркивания) — это расхождение с реально используемым в этом лендинге и в `Gatekeeper.Shared/Constants.cs``@king_gate_keeper_bot`. Проверено вручную в Telegram: именно `@king_gate_keeper_bot` — живой бот "Королевский Стражник" с фото и описанием.
Продающий лендинг «Королевский Хап» — статическая страница на главной https://khap.ru, презентующая подписку на Telegram-бота и ведущая на оформление в боте «Стражник» (`@king_gate_keeper_bot`).
<title>Королевский Хап — бот для охоты за скидками на Wildberries</title>
<metaname="description"content="Бот «Королевский Хап» находит ценовые ошибки и лучшие скидки на Wildberries и присылает их вам первым в Telegram. Подключайтесь за 185 ₽.">
<metaproperty="og:title"content="Королевский Хап — бот для охоты за скидками на Wildberries">
<metaproperty="og:description"content="Мгновенные уведомления о ценовых ошибках и скидках на WB прямо в Telegram. Кнопка покупки без захода на сайт. Автовыкуп по правилам.">
<spanclass="eyebrow">👑 Бот-охотник за скидками WB</span>
<h1>Ловите <spanclass="accent">ценовые ошибки</span> и лучшие скидки Wildberries раньше всех</h1>
<pclass="lede">«Королевский Хап» сканирует Wildberries 24/7 и мгновенно присылает в Telegram товары с сильно заниженной ценой — пока их не выкупили другие.</p>
<span><svgviewBox="0 0 24 24"fill="none"><pathd="M20 6L9 17l-5-5"stroke="currentColor"stroke-width="2.4"stroke-linecap="round"stroke-linejoin="round"/></svg>Подписка от 185 ₽</span>
<span><svgviewBox="0 0 24 24"fill="none"><pathd="M20 6L9 17l-5-5"stroke="currentColor"stroke-width="2.4"stroke-linecap="round"stroke-linejoin="round"/></svg>Покупка прямо из Telegram</span>
<span><svgviewBox="0 0 24 24"fill="none"><pathd="M20 6L9 17l-5-5"stroke="currentColor"stroke-width="2.4"stroke-linecap="round"stroke-linejoin="round"/></svg>Бонусные дни за друзей</span>
<h2class="center">Чем дольше подписка — тем дешевле день</h2>
<pclass="lede center">Все тарифы включают полный доступ к боту со ссылками и кнопку покупки прямо в Telegram. Оплата и выбор тарифа — внутри бота.</p>
<divclass="pricing-grid">
<divclass="price-card reveal">
<divclass="period">7 дней</div>
<divclass="amount">185 ₽</div>
<divclass="perday">≈ 26,4 ₽ / день</div>
<ul>
<li><svgviewBox="0 0 24 24"fill="none"><pathd="M20 6L9 17l-5-5"stroke="currentColor"stroke-width="2.4"stroke-linecap="round"stroke-linejoin="round"/></svg>Доступ к боту со ссылками</li>
<li><svgviewBox="0 0 24 24"fill="none"><pathd="M20 6L9 17l-5-5"stroke="currentColor"stroke-width="2.4"stroke-linecap="round"stroke-linejoin="round"/></svg>Кнопка покупки в Telegram</li>
</ul>
<divclass="refbonus">+2 дня за приглашённого друга</div>
<li><svgviewBox="0 0 24 24"fill="none"><pathd="M20 6L9 17l-5-5"stroke="currentColor"stroke-width="2.4"stroke-linecap="round"stroke-linejoin="round"/></svg>Доступ к боту со ссылками</li>
<li><svgviewBox="0 0 24 24"fill="none"><pathd="M20 6L9 17l-5-5"stroke="currentColor"stroke-width="2.4"stroke-linecap="round"stroke-linejoin="round"/></svg>Кнопка покупки в Telegram</li>
</ul>
<divclass="refbonus">+3 дня за приглашённого друга</div>
<li><svgviewBox="0 0 24 24"fill="none"><pathd="M20 6L9 17l-5-5"stroke="currentColor"stroke-width="2.4"stroke-linecap="round"stroke-linejoin="round"/></svg>Доступ к боту со ссылками</li>
<li><svgviewBox="0 0 24 24"fill="none"><pathd="M20 6L9 17l-5-5"stroke="currentColor"stroke-width="2.4"stroke-linecap="round"stroke-linejoin="round"/></svg>Кнопка покупки в Telegram</li>
</ul>
<divclass="refbonus">+7 дней за приглашённого друга</div>
<li><svgviewBox="0 0 24 24"fill="none"><pathd="M20 6L9 17l-5-5"stroke="currentColor"stroke-width="2.4"stroke-linecap="round"stroke-linejoin="round"/></svg>Доступ к боту со ссылками</li>
<li><svgviewBox="0 0 24 24"fill="none"><pathd="M20 6L9 17l-5-5"stroke="currentColor"stroke-width="2.4"stroke-linecap="round"stroke-linejoin="round"/></svg>Кнопка покупки в Telegram</li>
</ul>
<divclass="refbonus">+15 дней за приглашённого друга</div>
<p>Перейдите в бота <ahref="https://t.me/king_gate_keeper_bot"target="_blank"rel="noopener"style="color:var(--gold);text-decoration:underline;">@king_gate_keeper_bot</a>, нажмите «Старт» и выберите тариф — оплата проходит прямо в Telegram.</p>
</details>
<details>
<summary>Какими способами можно оплатить?<spanclass="plus">+</span></summary>
<p>Банковской картой, через ЮMoney/СБП и другие способы, доступные в боте на момент оплаты. Для отдельных регионов есть альтернативные варианты — уточняйте у поддержки.</p>
</details>
<details>
<summary>Что если товар выкупят раньше меня?<spanclass="plus">+</span></summary>
<p>Ссылки уходят всем подписчикам одновременно, поэтому шанс есть у каждого — но не гарантирован. Автовыкуп по правилам повышает ваши шансы, оформляя заказ автоматически.</p>
</details>
<details>
<summary>Как работает реферальная программа?<spanclass="plus">+</span></summary>
<p>В боте есть раздел «Реф. программа» со своей ссылкой. Друг переходит по ней и нажимает «Старт» — после его оплаты вам начисляются бонусные дни подписки.</p>
</details>
<details>
<summary>Куда обращаться, если что-то не работает?<spanclass="plus">+</span></summary>
<p>Пишите в поддержку <ahref="https://t.me/king_supports"target="_blank"rel="noopener"style="color:var(--gold);text-decoration:underline;">@king_supports</a>, а подробные разборы частых вопросов есть на <ahref="https://faq.khap.ru"target="_blank"rel="noopener"style="color:var(--gold);text-decoration:underline;">faq.khap.ru</a>.</p>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.