Из Беларуси в Варну: как я собрал новый сайт школы после блокировки GitHub

Однажды можно остаться без доступа к репозиториям, на которых держалась работа, и при этом видеть, как сайты продолжают открываться. Именно так я пережил блокировку GitHub-аккаунта. Причину блокировки я не знаю и приписывать её чьему-то решению не буду. Но практический вопрос был вполне земной: как продолжить школу, если прежняя история разработки недоступна?

Из Беларуси в Варну: как я собрал новый сайт школы после блокировки GitHub

Я — Дмитрий Орлов, разработчик и основатель VibeCoding. Больше пятнадцати лет работаю в IT. Я переехал из Беларуси в Варну, Болгария. До переезда развивал онлайн-направление и очную школу в Гродно. Теперь хочу проверить интерес к обучению созданию сайтов и приложений с ИИ в Варне и онлайн по Болгарии. Новое место не превращает старый класс в «класс в Варне», а прошлые тарифы — в местные цены. Поэтому задача оказалась шире смены заголовка на сайте.

Три сайта, три разные роли

vibecoding.by был основным онлайн-сайтом: каталог программ, статьи и вход в прежнюю учебную платформу. grodno.vibecoding.by рассказывал об очной школе, наставнике и помещении в Гродно. Эти адреса работали и после потери доступа к прежним репозиториям. Они помогали вспомнить содержание и логику продукта, но не могли вернуть серверный код, базу данных или всю историю Git.

Из Беларуси в Варну: как я собрал новый сайт школы после блокировки GitHub

На гродненском сайте сохранились фотографии пространства. Я использую их как архив: они показывают, каким был очный формат в Гродно, но ничего не обещают о помещении в Болгарии.

Из Беларуси в Варну: как я собрал новый сайт школы после блокировки GitHub

Третья ссылка — новый сайт для Варны. Это результат текущей работы, а не восстановленная копия старой платформы. В нём можно изучить подход и программы, попробовать небольшую задачу и задать вопрос. Учебного кабинета, синхронизации прогресса и перенесённых аккаунтов там нет.

Инвентаризация вместо магии «восстановить всё»

Когда кажется, что «пропали все исходники», полезно разделить доступное на три части.

Публичный сайт даёт тексты, маршруты, изображения и собранный фронтенд. Он рассказывает, что видел посетитель, но не содержит скрытую часть системы. Локальная рабочая копия дала исходную точку для нового React-проекта. Резервные архивы мы сделали до дальнейших изменений: снимок файлов и Git bundle. Проверка git bundle verify подтвердила целостность доступной цепочки, но эта цепочка начиналась со снимка. Два года прежних коммитов от этого не появились.

С публичных сайтов отдельно сохранили 63 доступных файла — HTML, JavaScript, CSS, изображения и каталог. Они были полезны для сверки фактов и дизайна. Но фраза «ИИ восстановил исходники школы» была бы обманом. ИИ помог восстановить контекст и создать новый сайт на основе того, что действительно осталось.

Из Беларуси в Варну: как я собрал новый сайт школы после блокировки GitHub

Почему мы не сделали глобальный поиск и замену «Гродно» на «Варна»

Старый очный сайт содержал конкретный адрес, фотографии аудитории и суммы в белорусских рублях. При простой замене города получился бы красивый сайт с неверными обещаниями. Поэтому мы разделили факты по времени и месту: гродненские фотографии остались архивом, описание метода — основой для новой программы, а адрес, расписание, возраст и цены для Варны не появились без подтверждения.

На новом сайте четыре языка интерфейса: болгарский, русский, украинский и английский. Это не четыре языка обучения. Пока прямо указаны русский и английский. Варна — главное место проекта; онлайн по Болгарии остаётся направлением, интерес к которому я изучаю.

Внешний вид тоже изменился осмысленно. Я попросил настроение цифровой мастерской, близкое к музею компьютерных игр: тёплый фон, крупную типографику, синий, красный и жёлтый акценты. Иллюстрации показывают учебный процесс как последовательность «поставить задачу → собрать → проверить», а не изображают выдуманные работы выпускников. Отдельно появился небольшой интерактивный кот Вайб — он ведёт к мини-практике, а не притворяется AI-наставником.

Из Беларуси в Варну: как я собрал новый сайт школы после блокировки GitHub

Техническая часть: что оказалось сложнее, чем выглядело

Новый сайт работает на React, Vite и TypeScript, а опубликован на существующем проекте Cloudflare Pages. Для публичных страниц сборка заранее создаёт HTML с текстом и метаданными. Так поисковик получает содержание без ожидания клиентского JavaScript. У языковых страниц есть собственные URL, canonical и hreflang. В sitemap включены 52 разрешённых к индексации адреса; архивные материалы и служебные страницы оставлены с noindex. Это настройка доступности страниц, а не обещание поискового трафика.

Исходники теперь в GitLab. Но переход на GitLab не сделал деплой автоматически рабочим: shared CI потребовал проверку личности аккаунта и не запустил jobs. Мы отдельно проверили сборку и опубликовали результат через Wrangler. Важная деталь — Cloudflare всё ещё считал production-веткой старое имя cloudflare/first-migration, а в GitLab основной веткой стала main. При ручной публикации эту связь пришлось указать явно.

Ещё одна проблема проявилась только в среде Cloudflare Workers. Обработчик формы вызывал внешние API с fetch(..., { redirect: 'error' }). В локально проверенном Workers-рантайме этот режим не принимался. Мы заменили его на redirect: 'manual' и отдельно проверили, что ответ 3xx отвергается, а не открывается автоматически:

- redirect: 'error' + redirect: 'manual'

Это не универсальный совет менять параметр вслепую. Мы воспроизвели поведение на Wrangler 4.151.1, добавили негативные тесты с HTTP 307 и затем проверили обе формы на живом домене вымышленными контактами. Узкий случай показал, почему проходящие Node-тесты ещё не подтверждают совместимость с конкретным серверным рантаймом.

Что видно сейчас — и чего ещё нет

На skills-ai-varna.pages.dev открыты программы, статьи, руководство и мини-практика. Формы доставляют обращения, а на телефоне и компьютере есть ссылки на мессенджеры. TypeScript, production-сборка и 150 тестов прошли; опубликованную версию дополнительно проверили в браузере. Владение сайтом в Google Search Console подтверждено, но первичная обработка sitemap сообщила об ошибке, а ручной запрос индексации упёрся в дневную квоту. Показов или заявок из поиска эти действия пока не доказывают.

Подтверждённых варненских тарифов, расписания и адреса очных встреч ещё нет. Я не хочу продавать человеку место в аудитории, которую мы не объявили. Сейчас сайт помогает понять идею школы и задать вопрос; спрос мы изучаем до открытия полноценного набора.

Для меня главный вывод из этой истории такой: работающий публичный сайт не равен доступным исходникам, а новый репозиторий не возвращает старую историю. Но если честно перечислить то, что осталось, можно построить следующий этап проекта — с проверяемыми фактами, резервной копией и ясной границей между прошлой школой и новой географией.

*Я — Дмитрий Орлов, основатель VibeCoding. Этот текст подготовлен с помощью ИИ по моим пояснениям и проверенным материалам. Обложка создана ИИ; фото учебного пространства относится к Гродно. Сайты и технические результаты можно проверить по ссылкам выше.*

11