Create and publish a Docker image / build-and-push-image (push) Successful in 1m18s
- Убрать scroll-reveal на IntersectionObserver: секции стартовали с opacity:0 и оставались невидимыми, если JS не успевал/не отрабатывал (подтверждено на полностраничном скриншоте — большие блоки контента были полностью невидимы). - "Wildberries" в hero-заголовке рендерился шрифтом Cinzel (нет кириллицы, поэтому кириллический текст уже шёл через Georgia-фоллбэк), а латиница в Cinzel выглядит капителью — визуально WILDBERRIES. Принудительно применяем тот же Georgia-фоллбэк к этому слову. - Плавающий бейдж "-86% к цене" перекрывал текст второго бабла в мокапе телефона — сдвинут под нижнюю границу карточки, как у парного бейджа "Хап найден!" сверху.
5.4 KiB
5.4 KiB
AGENTS.md — khap-landing
Статический продающий лендинг «Королевский Хап» — единственная 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(MongoDBking-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. - Юзернейм бота "Стражник" —
@king_gate_keeper_bot(проверено вручную в Telegram: живой бот "Королевский Стражник" с фото и описанием). Ранее в других частях платформы (FAQ,bot/wbproductinfo, и др.) местами был указан ошибочный@king_gatekeeper_bot(без второго подчёркивания) — расхождение исправлено.