Лендинг GetBox: getbox.ne-nas.ru
Репо: IncludeSpecial/GetBoxLanding
Приложение: IncludeSpecial/GetBox
npm install
npm run devnpm run build # typecheck → vite build → пререндер страниц
npm run previewПроверки (их же запускает CI на каждый PR):
npm run lint
npm run format:check # npm run format — исправить
npm run typecheckРусская версия — /, /privacy, /cookies, /terms; английская — те же пути с префиксом /en.
При сборке scripts/prerender.mjs рендерит каждую страницу в статический HTML со своими title/description/OG и hreflang, и генерирует sitemap.xml. Новые страницы добавляются в src/routes.ts.
При первом заходе на русскую страницу из нерусскоязычного браузера сайт переключается на /en (кроме ботов). Выбор в переключателе RU/EN запоминается.
Тексты лендинга повторяют README приложения (RU / EN). Когда в GetBox появляются новые возможности, обновите:
| Что | Где |
|---|---|
| Карточки «Возможности», «Безопасно по умолчанию», FAQ | src/content.ts |
| Короткие строки (hero, навигация, кнопки) | src/i18n.ts |
| Политика конфиденциальности — что делает приложение | src/legal/content.ts |
| Скриншоты | npm run sync:screenshots && npm run images |
Числа в блоке статистики (программы в каталоге, профили, категории) подтягиваются при сборке из data/*.json репозитория GetBox; если он недоступен, блок просто скрывается.
Список берётся из GitHub Releases: релиз с *-portable.exe появляется на сайте сам, черновики и pre-release (канал «Бета») пропускаются.
- Кнопка «Скачать» ведёт прямо на exe последнего релиза; старые версии — в блоке «Предыдущие версии».
- «Что нового в vX» — описание релиза (секция
CHANGELOG.mdприложения), разбитое по заголовкам###. - SHA256 — содержимое
GetBox-<версия>-portable.exe.sha256из релиза (с 1.3.0) с кнопкой «Скопировать». Файл читается на сервере (в/api/releasesи при сборке): браузеру GitHub его не отдаёт из-за CORS, поэтому в запасном режиме показывается ссылка на файл.
Как данные попадают на страницу:
- При сборке
scripts/prerender.mjsвстраивает релизы в HTML — кнопка работает сразу, без JavaScript. - В браузере страница обновляет список через
api/releases.ts— функцию Vercel с кэшем на CDN 10 минут (не упираемся в лимит GitHub 60 запросов/час на IP; можно задатьGITHUB_TOKENв переменных Vercel). Если она недоступна — напрямую из GitHub. Ответ кэшируется в localStorage на 10 минут. - Workflow
release-syncраз в час сравнивает версию в HTML живого сайта с последним релизом и, если они разошлись, вызывает Deploy Hook Vercel — сайт пересобирается со свежими данными.
Настройка пересборки: Vercel → Project → Settings → Git → Deploy Hooks → создать хук для main → добавить его в секреты этого репозитория как VERCEL_DEPLOY_HOOK_URL. Без секрета workflow только пишет в лог, что версия отстаёт.
Чтобы сайт обновлялся сразу после релиза, а не в течение часа, добавьте в конец jobs.release.steps файла release.yml приложения шаг (нужен токен с правом repo на GetBoxLanding в секрете LANDING_DISPATCH_TOKEN):
- name: Update landing
env:
LANDING_TOKEN: ${{ secrets.LANDING_DISPATCH_TOKEN }}
if: env.LANDING_TOKEN != ''
shell: bash
run: >
curl -fsS -X POST
-H "Authorization: Bearer $LANDING_TOKEN"
-H "Accept: application/vnd.github+json"
https://api.github.com/repos/IncludeSpecial/GetBoxLanding/dispatches
-d '{"event_type":"getbox-release"}'Бинарники в репозиторий не кладём — /download/* перенаправляется на GitHub Releases.
Скриншоты интерфейса берутся из docs/screenshots/ репозитория GetBox:
npm run sync:screenshots # скачать с GitHub (ветка main)
node scripts/sync-app-screenshots.mjs ../GetBox # или из локального клона
npm run images # WebP: полный размер и -960 в public/screenshots/Список кадров — SCREENSHOTS в scripts/sync-app-screenshots.mjs, вкладки блока «Интерфейс» — src/components/Showcase.tsx.
assets-src/brand/getbox-logo.svg— логотип (Fluent-плитка с открытой коробкой и стрелкой),getbox-logo-small.svg— упрощённый вариант для 16–20 px (фавикон). В React он же —src/components/Logo.tsx; при правках меняйте оба.- Тот же логотип стоит в приложении (
data/logo.svgв репозитории GetBox, из него собирается иконка exe). - Картинки для превью ссылок —
public/og.jpg(RU) иpublic/og-en.jpg(EN), 1200×630. Шаблон —assets-src/brand/og.html, пересобрать:npm run og(нужен Chromium из Playwright илиCHROME_PATH).
Import GetBoxLanding → Framework: Vite → npm run build → dist → getbox.ne-nas.ru.
vercel.json: cleanUrls (отдаёт privacy.html по /privacy), редирект /download/* и кэш-заголовки для ассетов. Неизвестные пути отдают 404.
Vercel Web Analytics (без cookie) подключён в src/main.tsx. Чтобы данные пошли, включите Analytics в настройках проекта на Vercel.