Commit Graph

116 Commits

Author SHA1 Message Date
nineap d99026d13b CI: VPS_IP/DEV_VPS_IP переносит из secrets в vars
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 16:37:06 +07:00
nineap 0fa87e2d9a Фолбэк на кэш при недоступности PocketBase (Pricing/FAQ)
Pricing: при полном отказе всех запросов пробует localStorage-кэш
последнего успешного ответа вместо пустого состояния, пишет туда же при
успехе. Faq: отличает "в кэше правда пусто" от "не смогли загрузить" —
раньше оба случая показывали один и тот же текст "0 protocols found",
что вводило в заблуждение при обычном сетевом сбое.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 16:37:06 +07:00
nineap b8bf9f7337 Добавляет .env.example + чинит .gitignore (widlcard .env* его же и ронял)
.gitignore имел общий паттерн ".env*" (стандартный для Next.js) без
исключения для .env.example — сам шаблон никогда не мог быть закоммичен.
Добавлено исключение !.env.example.

docker-compose.dev-remote.yml требует ${BOT_USERNAME:?...} — жёсткая
зависимость от .env на dev VPS, нигде не задокументированная до этого.
Прод (docker-compose.yml) секретов не требует — там всё захардкожено
(публичные URL/домены, ни одного пароля/токена).
2026-07-09 15:35:10 +07:00
nineap 61755f4922 Дублирует пайплайны для Gitea Actions (.gitea/workflows/)
Build & Push Image / Build and push to GHCR (push) Failing after 1m26s
Копии .github/workflows/{build,deploy}.yml. Логин на ghcr.io — через
secrets.GHCR_TOKEN (настоящий GitHub PAT), не secrets.GITHUB_TOKEN —
автотокен Gitea валиден только для самого Gitea. Триггер workflow_run в
deploy.yml поддержан не во всех версиях Gitea Actions — см. комментарий
в файле.

Нужно завести в Gitea секрет GHCR_TOKEN (write:packages) + все остальные
секреты, что уже есть в GitHub Actions (отдельное хранилище).
2026-07-09 14:28:25 +07:00
nineap f14d20d727 pnpm: копировать файлы вместо hardlink-стора (.npmrc)
pnpm по умолчанию хардлинкает пакеты из общего стора (next сам хардлинкает
dist/api/*.js на dist/esm/api/*.js). При переносе слоя node_modules через
registry и разворачивании containerd/overlayfs на dev-хосте пара
хардлинков может разойтись по разным слоям — overlayfs не находит второй
конец линка и падает с "no such file or directory". package-import-method=copy
убирает хардлинки в node_modules целиком.
2026-07-08 23:31:51 +07:00
nineap 31368fdc17 Dockerfile: чинит cache-busting шаг под alpine (busybox grep без -P)
Builder-стейдж — node:20-alpine, там busybox grep, не понимающий -P/\K
(перловый lookbehind). Локально с GNU grep всё работало, в CI на alpine
падало с exit 2 ещё до sed. Извлекает ENGINE_VERSION чистым POSIX sed
вместо grep -oP.
2026-07-08 23:21:04 +07:00
nineap 32b4460b66 Локализует лендинг на 10 языков + RTL для арабского и персидского
Добавляет zh-CN, fa, ar, tr, uk, be, vi, uz словари (170 ключей, идентичная
вложенная структура) к существующим en/ru. lib/locales.ts — единый источник
списка локалей/дефолтной локали/RTL-набора вместо захардкоженного ["en","ru"]
в proxy.ts. language-switcher.tsx: переключение языка резало только
двухбуквенные коды регэкспом (/^\/[a-z]{2}/), из-за чего zh-CN никогда не
матчился и путь задваивался — заменено на honest-поиск по списку locales.

app/[lang]/layout.tsx — dir="rtl"/"ltr" на <html> по локали (SSR, в отличие
от реактивного клиентского переключения в netrunner-app). Header.tsx/
Footer.tsx — разбитое на три <span> имя бренда визуально переворачивалось
Flexbox'ом под dir=rtl ("VPNrunnerNet"), исправлено через dir="ltr" на
самом враппере.

BlogPreview/Faq/Pricing и обе blog-страницы: fallback на *_en-коллекцию
PocketBase, если для языка ещё нет переведённого контента (FAQ-ответы,
детали тарифов, посты блога не тянутся автоматически — это отдельный от
статических словарей CMS-контент), плюс i18n-ключи period1m/period6m/
period1y вместо захардкоженных ru/en-подписей периодов в Pricing.tsx.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-08 22:53:37 +07:00
nineap 0d1cd042bb Переносит FAQ в конец главной страницы
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-08 22:53:17 +07:00
nineap 142e1c6fd4 cursor and matrix update 2026-07-07 18:49:09 +07:00
nineap f02124eb1d Наполнить /docs реальным контентом вместо визуальной заглушки
Раздел документации на сайте (documents_ru/documents_en в PocketBase)
содержал только два обрубленных стаб-документа. Добавлен полный набор
из 12 документов на русском и английском (Core/Security/Network/Legal),
технически сверенных с реальной реализацией протокола (NRXP, ChaCha20-
Poly1305, X25519, TLS-маскировка под JA3/JA4) и с моделью сессий
(HttpOnly-cookie, ротация refresh-токенов) — не маркетинговые обещания,
а описание того, что фактически работает в коде.

Юридические документы (Privacy/Terms/Refund) содержат явные плейсхолдеры
для реквизитов оператора сервиса — сервис ещё не зарегистрирован ни в
одной юрисдикции, поэтому не полагаться на них как на итоговый текст
без замены плейсхолдеров.

scripts/seed-docs.mjs — идемпотентный скрипт наполнения PocketBase
(upsert по title, с alias-картой под старые названия стабов); ничего не
записывает без --apply и без PB_ADMIN_EMAIL/PB_ADMIN_PASSWORD в
окружении — админ-доступ к CMS нигде не хардкожен.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-05 20:25:10 +07:00
nineap 6b5dbe16d1 matrix cache fix 2026-07-05 20:01:53 +07:00
nineap 5f9d607d07 Обновить dev ACCOUNT_ORIGIN/API_URL под Caddy на 443 вместо 8443
netrunner-backend dev теперь проксирует Caddy на стандартный порт 443
(VPN-нода, ранее занимавшая его, перенесена на другой порт) — Telegram
Login Widget в браузере требует именно этот порт.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-05 20:00:15 +07:00
nineap 0dd19ceda2 glass update 2026-07-05 03:42:57 +07:00
nineap e568ac76b8 matrix update 2026-07-04 22:40:12 +07:00
nineap df0ed8862c Point dev at the backend's new HTTPS (Caddy) origin, not plain :8080
netrunner-backend's dev stand now terminates TLS via Caddy on :8443
(needed for Telegram Web Apps, which require https://, and its session
cookies are Secure again to match prod). Updated ACCOUNT_ORIGIN/API_URL
here to match — a plain-HTTP fetch to :8080 would no longer receive a
cookie the browser is willing to store.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 19:37:08 +07:00
nineap b1afeb692f dev-remote: use dev.netrunner-vpn.com instead of a bare IP
Telegram Login Widget refuses to run on a raw IP ("Bot domain invalid")
— BotFather's /setdomain only accepts an actual domain name. Switched
every browser-facing URL in the dev compose (ACCOUNT_ORIGIN, API_URL,
PB_PUBLIC_URL, NEXT_PUBLIC_*) to dev.netrunner-vpn.com, which needs a DNS
A-record pointing at 45.76.161.137.

Also dropped the silent BOT_USERNAME fallback to the prod bot's handle —
that fallback is exactly how this surfaced: a prod bot has the prod
domain registered in BotFather, so serving its widget from the dev host
was guaranteed to fail. BOT_USERNAME is now a required env var with a
loud error instead of a quiet wrong default.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 18:48:30 +07:00
nineap 899c54e1fc Unify auth with backend cookie sessions; add dev-deploy pipeline
Auth: drop localStorage session token entirely, talk to netrunner-backend
via credentials:"include" HttpOnly cookies shared over the common parent
domain, and redirect to the account subdomain (ЛК) after login instead of
a dead local /profile route.

Config: NEXT_PUBLIC_* values used by client components (API_URL,
ACCOUNT_ORIGIN, BOT_USERNAME, PB_URL) get inlined into the JS bundle at
image build time and can't be overridden by docker-compose environment at
container start. Moved these reads into server components (page.tsx) and
thread them down as props, so one built image can genuinely serve both
prod and dev by config alone.

CI/CD: split the old single auto-deploy-to-prod workflow into build.yml
(build+push on every push to main) and deploy.yml with deploy-dev (auto,
same VPS as netrunner-backend's dev environment) and deploy-prod (manual
dispatch only) — mirrors netrunner-backend's pipeline shape. Added
docker-compose.dev-remote.yml pointing at the dev backend.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 15:26:28 +07:00
nineap afc148478a build fix 2026-07-03 14:27:10 +07:00
nineap 7175a2b450 proxy speedtest update 2026-07-03 14:20:07 +07:00
nineap 052a4081b3 social links 2026-07-03 13:15:39 +07:00
nineap c04194bb85 docs 2026-07-02 23:13:24 +07:00
nineap 31f354d9ca new cursor, speedtest at another page, remove rubbish 2026-05-11 20:22:27 +07:00
nineap 3bf53a90fd matrix fix final 2026-05-11 18:57:44 +07:00
nineap 4d2e961308 matrix fix 2026-05-11 17:31:02 +07:00
nineap d79a9679d1 deploy and dockerfile updates 2026-05-11 15:37:44 +07:00
nineap 136e738027 worker fix eyes scale 2026-05-11 15:31:52 +07:00
nineap 262806eb55 doom and eyes fixes 2026-05-11 15:12:26 +07:00
nineap 197f0419d7 deploy and cache fixes 2026-05-08 15:49:28 +07:00
nineap 16c071bd5d 404 fix 2026-05-08 15:01:01 +07:00
nineap 3fe8e8977a next config update 2026-05-03 17:36:28 +07:00
nineap e6ed43f1ca ws proxy dockerfile update 2026-05-03 17:09:24 +07:00
nineap 2b28bee41e compose update 2026-05-03 16:59:59 +07:00
nineap 8fd225a971 compose update 2026-05-03 16:46:10 +07:00
nineap 1a17837990 deploy update 2026-05-03 16:44:43 +07:00
nineap 36f75eb454 localization updates, terminal errors, etc 2026-05-03 16:36:21 +07:00
nineap c425f484b4 deploy fix 2026-05-03 16:16:39 +07:00
nineap 9b29b21d22 deploy fix 2026-05-03 16:16:03 +07:00
nineap 7f7be5b0ca deploy fix 2026-05-03 16:14:18 +07:00
nineap 5fc4d05d54 speedtest and ai for toxic comment moderate 2026-05-03 16:12:56 +07:00
nineap 602631e4bd web speedtest fixes 2026-05-03 14:07:28 +07:00
nineap ce77d9e4e3 web speedtest 2026-05-03 14:02:06 +07:00
nineap 4a5b0da421 matrix update 2026-04-30 17:31:50 +07:00
nineap 8c81706e8e redesign eyes 2026-04-30 01:59:37 +07:00
nineap 297ed4d9c0 four custom cursors 2026-04-29 23:00:34 +07:00
nineap d20b0dcaa4 dockerfile fix 2026-04-29 19:46:03 +07:00
nineap 1e2504ec5b eyes redesign 2026-04-29 19:26:05 +07:00
nineap 24656c6763 pricing update 2026-04-28 13:40:56 +07:00
nineap ff18e70bdb import update 2026-04-28 12:37:21 +07:00
nineap e3617b69eb import update 2026-04-28 12:31:54 +07:00
nineap 48aff24b9b update matrix visual style 2026-04-28 12:22:29 +07:00