Главная страница git.zapret.moe: шаблон, стили и картинки. Правки — через pull request, деплой автоматический.
  • CSS 37.4%
  • JavaScript 36.7%
  • Go Template 21.6%
  • Python 2.8%
  • Shell 1.5%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
loop-uh 655d1d6f38 Подвал: ссылки на вики — wiki2.zapret.moe
wiki.zapret.moe в России блокируют по имени, а переписывание имён в nginx
на зеркалах git касается только имён git. Ссылки подвала на вики ведут на
рабочее имя.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 16:58:35 -04:00
deploy Прототип WebGL-рига РКН-тян (?gl): арт натянут на сетку, кости гнут руки от тела и запястья, когти сжимаются, пряди качаются — без дыр и двоения; веса из вырезанных слоёв (tools/rig-weights.py); rig.js и rig/ в хеше версии ассетов 2026-09-28 17:45:06 +03:00
public Homepage: "Где сайт открывается" section — the git and wiki addresses with charts and a check from your own device 2026-10-19 18:03:10 -04:00
templates Подвал: ссылки на вики — wiki2.zapret.moe 2026-10-24 16:58:35 -04:00
tools РКН-тян на новом арте: основа без рук + отдельные руки от плеча — замах когтями и удар к зрителю по очереди (CSS для всех); WebGL-риг (?gl) из частей: кисть гнётся, когти смыкаются в ударе, пряди качаются 2026-09-28 18:53:02 +03:00
.gitignore Главная: новый дизайн с заставкой-презентацией, картинки из репозиториев проектов, зеркальная выкладка 2026-09-27 20:18:38 +03:00
README.md «Кто сейчас на связи»: переключатель программы — Zapret 2 GUI и Zapret KVN 2026-10-10 00:02:37 +03:00

Главная страница git.zapret.moe

Шаблоны, стили и скрипты стартовой страницы нашего Forgejo — вместе с заставкой про цифрового РКН, РКН-тян и Запрет-тян. Правки принимаются через pull request и уезжают на сайт автоматически.

Открыть сайт Задачи Telegram

Главное правило

Этот репозиторий — единственный источник правды. Каталоги templates/ и public/ выкладываются в custom/ Forgejo целиком: всё, чего нет в git, при следующей выкладке удаляется. Править файлы прямо на сервере бесполезно — правка проживёт максимум до следующего коммита.

Что где лежит

Файл Зачем
templates/home.tmpl разметка главной: заставка-презентация, шапка, пульс, «кто на связи», арсенал, инструменты, сборки, поддержка
templates/custom/header.tmpl вставляется в <head> каждой страницы: фавиконки и site.css
templates/custom/footer.tmpl полоса ссылок на вики внизу каждой страницы
templates/user/auth/signup_inner.tmpl регистрация без почты
templates/user/dashboard/dashboard.tmpl лента вошедшего пользователя; при /?date=home вместо неё рисует главную (вошедшим Forgejo всегда отдаёт на / ленту). При обновлении Forgejo сверить с оригиналом
templates/custom/extra_links.tmpl пункт «Главная» в верхнем меню для вошедших
public/assets/zapret-moe/home.css стили главной; подключается только из home.tmpl, на другие страницы не влияет
public/assets/zapret-moe/intro.css, intro.js заставка-история: 25 слайдов в трёх актах, главы, пауза, короткий режим и саундтрек (Web Audio). Слайды нарисованы в координатах 1600×900
public/assets/zapret-moe/chars/art-*.webp сюжетные арты для заставки: штамп, сращивание кабеля, поражение и победа
public/assets/zapret-moe/home.js заставка, синтезированная музыка к ней (Web Audio, без файлов) и «Пульс разработки»
public/assets/zapret-moe/rig.js, rig/*.json прототип WebGL-рига персонажей: части (основа без рук и отдельные руки) натянуты на сетки, кости гнут кисти, когти и пряди без дыр и двоения. Пока включается только адресом с ?gl (выключается ?gl=0); без WebGL и при «меньше движения» работают обычные CSS-слои
tools/rig-weights.py строит веса костей рига из вырезанных слоёв рук и прядей: tools/rig-weights.py rkn
public/assets/zapret-moe/site.css то немногое, что нужно на всех страницах
public/assets/zapret-moe/fonts/ Unbounded и Onest (OFL), кириллица и латиница
public/assets/zapret-moe/chars/ РКН-тян и Запрет-тян, нарезанные на слои для анимации. У РКН-тян (rkn2-*) основа нарисована без рук, а руки — отдельные слои с опорой в плече, поэтому они поворачиваются свободно. Координаты слоёв — в системе 1600×900, точки вращения прописаны в разметке ригов в home.tmpl
public/assets/zapret-moe/shot-gui.webp скриншот Zapret 2 GUI — единственная картинка, которой нет в репозитории проекта
public/assets/img/ логотип и фавиконки всего сайта
public/robots.txt правила для поисковиков
deploy/zapret-homepage-sync.sh скрипт выкладки, который крутится на сервере
deploy/zapret-homepage-stats.py + .service/.timer раз в полчаса считает коммиты, релизы и скачивания для «Пульса» и пишет public/assets/zapret-moe-stats/stats.json
tools/preview.sh локальный предпросмотр в настоящем Forgejo

«Пульс разработки»

Статистику считает deploy/zapret-homepage-stats.py на сервере, а не браузер каждого посетителя:

  • коммиты — прямо из git-репозиториев организаций zapretdiscordyoutube, zapretkvn, zastogram (зеркала пропускаются). В форках с чужой историей (Telegram, MTProxy) засчитываются только коммиты наших авторов — тех, кто коммитил в наши собственные репозитории; боты не считаются;
  • релизы и скачивания — из базы Forgejo, только публичные репозитории;
  • закрытые репозитории входят в общие группы, их названия наружу не попадают.

Файл stats.json не лежит в git: скрипт выкладки специально сохраняет каталог zapret-moe-stats при зеркалировании. Если файла нет, главная строит график по публичному heatmap API.

«Кто сейчас на связи»

Раздел под «Пульсом» показывает, сколько программ запущено прямо сейчас и на каких они версиях. Каждая программа с автообновлением (Zapret 2 GUI начиная с версии 21.1.7.121) держит одно соединение со службой очереди обновлений и называет ей свою версию — эти соединения и считаются.

  • Числа считает сервер, а не браузер: служба zapret-update-wait на хосте раз в минуту складывает итог в файл, который nginx отдаёт по адресу /api/zapret/stats.json. Исходники службы — в закрытом репозитории сборки (another/update_wait_service.py, another/update_wait_stats.py).
  • В файле только числа: программ на связи по версиям, разных пользователей за сутки, ряд «на связи» за сутки, скорость расхождения версий. Адреса не хранятся — разные пользователи считаются приближённым счётчиком.
  • Раздел живой: период графика переключается (сутки, неделя, месяц), каналы Stable и Dev включаются и выключаются, всё остальное откликается на наведение, без щелчка: график показывает числа в точке под курсором, отрезок полосы версий (или строка под ней) — всплывающую подсказку о версии, строка выпуска в блоке «как расходились версии» — его кривую. С клавиатуры то же самое делает фокус, на телефоне — касание. Всё, что есть в подсказках, написано и без них: в строках под полосой версий и в таблице под графиком по дням.
  • Живая сценка: сервер в середине, вокруг программы, тонкая нить — открытое соединение. По нитям бегут вопросы «есть новее?» и ответы — столько, сколько сервер насчитал за последнюю минуту (requests_min); рядом — счётчики потока и строки того, что программа посылает. Число точек, доля прежних версий и занятых — настоящие; какая именно точка спросила — условность. Сценка стоит, пока раздел не на экране, и не движется при «меньше движения».
  • «Чем заняты программы»: полоса и список — окно открыто, в трее, игра или видео на весь экран, проверка сети, подбор стратегии — и у скольких включён обход. Это слова самих программ (online.activity, online.running), считаются общим числом; в сценке программы в трее — приглушённые точки.
  • Раздача по ступеням: лестница «5% → 25% → все» показывает, какая ступень открыта, сколько программ версию получили, сколько обновились и вышли на связь и сколько сообщили о неудаче; остановленная раздача подписана причиной.
  • Обновления: график «сервер разрешил / обновились / не удалось», время от разрешения до запуска новой версии, отметки ступеней на кривой выпуска и отрезок кривой (10 минут, час, всё время). Таблицы сортируются щелчком по заголовку.
  • Графики появляются плавно один раз — когда раздел попал на экран — и когда человек сам что-то переключил; при ежеминутном обновлении чисел они не дёргаются.
  • У двух каналов две краски — синий акцент страницы и янтарь (--zw-stable, --zw-dev в home.css). Пара проверена на различимость при нарушениях цветового зрения; не меняйте её на глаз. То же относится к паре «обновились / не удалось» (--zw-done, --zw-fail).
  • Программ две, итогов два: переключатель «Zapret 2 GUI / Zapret KVN» берёт числа из /api/zapret/stats.json или /api/zapret/kvn/stats.json (у KVN своя служба очереди zapret-kvn-update-wait). Подписи, которые у программ разные («обход включён» / «подключение включено»), лежат в PRODUCTS в home.js.
  • Если файла нет или в нём пусто, раздел на странице не показывается. Если пусто у программы, которую человек выбрал сам, вместо графиков стоит строка о том, что чисел ещё нет.
  • Разметка — #zpm-live в home.tmpl, стили .zw-* в home.css, код — блок «На связи» в home.js.

Картинки проектов не копируются

Обложки берутся прямо из репозиториев проектов — ровно те файлы, что показаны в их README:

  • ZaStoGram — zastogram/ZaStoGram_desktop/media/branch/dev/docs/assets/zastogram-overview.webp
  • Magisk Zapret 2 — zapretdiscordyoutube/magisk-zapret2/media/branch/main/docs/assets/zapret2-control-ui.webp
  • Zapret KVN — zapretkvn/ZapretKVN-android/media/branch/main/docs/assets/zapret-kvn-android-overview.webp
  • эмблема сообщества — аватар организации, /zapretdiscordyoutube.png

Поменяли обложку в проекте — главная показывает новую сама. Если переименовываете файл или ветку в проекте, поправьте ссылку в home.tmpl.

Как предложить правку

  1. Нажмите Fork и клонируйте свою копию.
  2. Правьте файлы. Разметка — HTML внутри Go-шаблона: конструкции в двойных фигурных скобках ({{AppSubUrl}}, {{if .IsSigned}}) подставляют адрес сервера и состояние входа, их не трогайте. @ASSETS_VER@ в ссылках на CSS и JS сервер заменяет хешем файлов — тоже оставьте как есть.
  3. Проверьте результат: tools/preview.sh скачает Forgejo той же версии, что на сервере, и поднимет главную на http://127.0.0.1:3999/. Шаблоны рендерятся по-настоящему, так что синтаксическая ошибка видна сразу.
  4. Откройте pull request в main.

Как правка попадает на сайт

В контейнере Forgejo раз в две минуты запускается deploy/zapret-homepage-sync.sh. Если в main новый коммит, он:

  1. собирает templates/ и public/ из этого коммита во временный каталог и подставляет в @ASSETS_VER@ хеш home.css, home.js и site.css. Поэтому правка CSS/JS меняет шаблоны и перезапускает Forgejo на пару секунд, а замена картинки — нет;
  2. атомарно подменяет каталоги в custom/, прошлую версию откладывает для отката;
  3. если изменились шаблоны — перезапускает Forgejo и проверяет, что главная и регистрация отвечают. Пока Forgejo остановлен ночным бэкапом, выкладка откладывается. Не отвечает — возвращает прошлую версию и больше не выкладывает этот коммит, пока в main не появится новый.

После правки файлов из deploy/ их нужно вручную поставить в контейнер (/usr/local/sbin/ для скриптов, /etc/systemd/system/ для юнитов): скрипт выкладки себя не обновляет.

Правила оформления

  • Палитра — тушь, бумага и одна краска: почти чёрный фон, тёплый белый текст, синий акцент --acc. Переменные — в начале home.css. Цвет на странице несут арты, а не интерфейс.
  • Без рамок и без неона. Блоки стоят прямо на странице: никаких карточек со скруглённой обводкой, пилюль-бейджей, свечений (box-shadow: 0 0 …), градиентного текста и цветных пятен на фоне. Группируем отступами, выравниванием и размером шрифта; тонкая линейка допустима только внутри списка.
  • Метафоры — из сетей и IT, а не из быта: пакеты, провода, соединения, терминал. Сборки — досмотр на ТСПУ: слева поддельный SNI и шум байтов (что видит цензор), рамка со сканером, справа настоящий релиз, по проводам едут пакеты, «Как присоединиться» — TCP-рукопожатие, доверие к сборке — вывод терминала. Картонные коробки, бумажные чеки и прочие «предметы» сюда не подходят.
  • Одна залитая кнопка на блок (.zb-main), остальные действия — ссылки со стрелкой (.zb).
  • Никаких внешних ресурсов. Шрифты, скрипты и картинки со сторонних сайтов не подключаем: страница должна открываться у людей, которым заблокирована половина интернета.
  • Анимации — на CSS и SVG. JavaScript только как улучшение: без него страница полностью работает, заставка просто не показывается.
  • Уважайте prefers-reduced-motion: для таких пользователей заставки нет, движение выключено.
  • Проверяйте на узком экране (390 px): горизонтальной прокрутки быть не должно.