У Zapret KVN теперь своя служба очереди обновлений и свой итог; раздел показывает числа выбранной программы теми же графиками. Пока у программы чисел нет, вместо графиков стоит строка об этом. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
105 lines
18 KiB
Markdown
105 lines
18 KiB
Markdown
<h1 align="center">Главная страница git.zapret.moe</h1>
|
||
|
||
<p align="center">Шаблоны, стили и скрипты стартовой страницы нашего Forgejo — вместе с заставкой про цифрового РКН, РКН-тян и Запрет-тян. Правки принимаются через pull request и уезжают на сайт автоматически.</p>
|
||
|
||
<p align="center">
|
||
<a href="https://git2.zapret.moe/"><img alt="Открыть сайт" src="https://img.shields.io/badge/сайт-git.zapret.moe-4fd1ff?style=for-the-badge&logo=forgejo&logoColor=white"></a>
|
||
<a href="https://git2.zapret.moe/zapretdiscordyoutube/homepage/issues"><img alt="Задачи" src="https://img.shields.io/badge/идеи_и_баги-Issues-9b7bff?style=for-the-badge&logo=forgejo&logoColor=white"></a>
|
||
<a href="https://telegram.me/bypassblock"><img alt="Telegram" src="https://img.shields.io/badge/обсудить-Telegram-2CA5E0?style=for-the-badge&logo=telegram&logoColor=white"></a>
|
||
</p>
|
||
|
||
## Главное правило
|
||
|
||
**Этот репозиторий — единственный источник правды.** Каталоги `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): горизонтальной прокрутки быть не должно.
|