Клиентам быть!
Наш проект: площадка для русскоязычных во Вьетнаме

VoxViet: взяли чужой сайт, закрыли дыры, перевезли и пересобрали за шесть недель

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

VoxViet — наш второй проект: площадка для русскоязычных, которые живут во Вьетнаме или собираются туда. Аренда и продажа жилья, транспорт и туры, услуги, форум, база знаний про визы и жизнь в шести городах. Сайт написала другая команда, и к нам он пришёл работающим, но не готовым к людям. Живой сайт — voxviet.com, в подвале — наша подпись.

Что было на входе

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

Робот каждый час публиковал заголовки вьетнамского новостного сайта — 13 547 страниц, 63 % так и остались на вьетнамском, и все были открыты поисковикам. Для молодого домена это минус, а не плюс. Наша оценка готовности: инфраструктура 6 из 10, код 5 из 10, продукт 2 из 10.

Сначала — безопасность и индекс

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

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

Переезд и выкатка одной командой

Сайт жил на сервере прежней команды: четыре процесса Node под pm2, переменные в разных файлах, секрет планировщика открытым текстом. Сняли полную копию — код, базу, 13 550 загруженных файлов, настройки — сверили по числу файлов и таблиц и перевезли на свой сервер в Docker. Перед сайтом Cloudflare, фото и ночные копии базы — во внешнем хранилище.

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

Конвейер выкатки: проверки → сборка → миграции → перезапуск → откат, если сайт не поднялся.
Конвейер выкатки: проверки → сборка → миграции → перезапуск → откат, если сайт не поднялся.

Дизайн-система вместо разнобоя

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

Каждый заход проверялся замером: доступность 1,00 по Lighthouse на ключевых страницах, страница не прыгает при загрузке, скорость не хуже, чем была до.

Блог, форум, услуги, новости — четыре раздела на одних блоках: шапка, подзаголовок, крошки, меню.
Блог, форум, услуги, новости — четыре раздела на одних блоках: шапка, подзаголовок, крошки, меню.

Три языка — по-настоящему

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

Словарь при этом не грузится целиком: страница получает только свои разделы — 41–47 КБ на публичных страницах вместо 150 КБ везде.

Главная на русском, английском и вьетнамском.
Главная на русском, английском и вьетнамском.

Контент, которому можно верить

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

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

Телефон — основной экран

Экспат открывает сайт с телефона — в такси, в кафе, в очереди за визой. Каждая страница проверяется на ширине 375 пикселей: меню, формы, таблицы цен, карты, которые не перехватывают прокрутку пальцем. Автотесты гоняют сценарии в Chromium, Firefox и в мобильном профиле.

С телефона: город, статья о визах, цены на размещение.
С телефона: город, статья о визах, цены на размещение.

Результат

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

Это и есть «разработка под ключ», как мы её понимаем: не только написать код, но принять чужой проект, честно сказать, что с ним, и довести до состояния, когда правка выезжает на сайт за семь минут и ничего не ломает.

Другие работы

Разработка
Платформа услуг для бизнеса, кабинет клиента

Личный кабинет с тарифами, оплатой и выгрузкой заявок в Битрикс24

Кабинет клиента с ролями, командой, тарифами и оплатой, записями и расшифровками звонков и передачей заявок в Битрикс24 и amoCRM — от первого экрана до боя за месяц.

Подробнее →
Разработка
Платформа защиты интернет-трафика для организаций

Мониторинг и алерты: о сбое узнаём раньше клиента

Одиннадцать узлов в нескольких странах на двух дашбордах и алерты в Telegram: от «упал порт» до «адрес начали фильтровать» — инцидент закрывается за минуты, а не после жалобы клиента.

Подробнее →
Разработка
Платформа защиты интернет-трафика для организаций

Служба поддержки в одном окне: чат на сайте и Telegram в тикетах

Обращения из чата на сайте и из Telegram-бота — в одной очереди с ответственными, статусами и отчётами по времени ответа. Ничего не теряется в личных переписках, данные не покидают сервер платформы.

Подробнее →

Разберём похожую задачу

Оставьте номер — перезвоним и расскажем, как эта работа ляжет на вашу задачу: что понадобится на входе, сколько займёт и что будет на выходе.

Разговор ни к чему не обязывает.