Skip to content

artembolotov/gdeya-web

Repository files navigation

гдеЯ?

Сниппет-генератор для показа разного контента в зависимости от геолокации пользователя. Работает без бэкенда и без базы данных — вся логика на клиенте.

Принцип работы

В HTML-элемент вшиваются два варианта контента, оба закодированы (XOR + base64) и нечитаемы в исходнике страницы.

При загрузке loader.v1.js делает один HEAD-запрос на /geo/ru:

  • 200 — пользователь за пределами РФ → декодируется и показывается data-gdeya-intl
  • 403 / таймаут (1.5 с) — пользователь в РФ → декодируется и показывается data-gdeya-ru

Геоблокировка /geo/ru для российских IP настраивается на стороне CDN. На origin-сервере лежит пустой файл, который отдаёт 200 всем — CDN перехватывает запрос и возвращает 403 для РФ.

Структура

gdeya/
├── index.html        # генератор сниппетов (UI)
├── loader.v1.js      # клиентский скрипт
├── geo/
│   └── ru            # пустой файл-маркер
├── CNAME
└── README.md

Использование

1. Подключить скрипт (один раз на страницу)

<script src="https://gdeya.bolotov.dev/loader.v1.js" defer></script>

2. Вставить сниппет в нужное место

<div data-gdeya-ru="..." data-gdeya-intl="..."></div>

Значения атрибутов генерируются на gdeya.bolotov.dev.

Обфускация

Контент кодируется XOR с фиксированным ключом и упаковывается в base64. Ключ вшит в loader.v1.js. Это не криптостойкое шифрование — цель в том, чтобы контент не читался при беглом просмотре исходного кода страницы.

Инфраструктура

  • Origin: GitHub Pages
  • CDN: проксирует gdeya.bolotov.dev, обеспечивает геоблокировку

CORS настраивается на стороне CDN.

Деплой

git push

CDN подхватывает изменения при следующем cache miss.

About

Сниппет-генератор для показа разного контента для России и остального мира.

Topics

Resources

License

Stars

Watchers

Forks

Contributors