Mark Stratmann
ABout Background

О сайте

Почему я создал этот сайт

Почему существует этот сайт?

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

У меня запланирован SASS-проект, основанный на нескольких технологических допущениях, которые нужно протестировать ещё до попытки строить реальный проект; а персональный профильный сайт вроде этого, работающий на полноценном CMS-бэкенде, достаточно сложен, чтобы заслуживать полноценной production-сборки, и достаточно прост, чтобы не занять слишком много времени на сборку; с дополнительным преимуществом: если всё пойдёт хорошо, я получу профильный сайт, который работает быстро и станет хорошим полигоном для более технических экспериментов.

Cloudflare как цель для деплоя

Cloudflare Workers https://workers.cloudflare.com/ на первый взгляд кажутся чрезвычайно дешёвым способом развернуть сложное приложение. Бэкенд-разработка выглядит простой и надёжной, а пакет OpenNext https://opennext.js.org/ вроде бы предоставляет эффективный способ разрабатывать фронтенд на Next.js https://nextjs.org/ и деплоить в Cloudflare.

Я сомневаюсь, что этот сайт привлечёт много человеческого трафика; однако я постараюсь направить на него как можно больше трафика от веб-поиска и AI-краулеров. Так я смогу понять реальную стоимость работы загруженного сайта на платформе Cloudflare.

Сделать этот сайт сложнее, чем он должен быть

Бэкенд управления контентом (CMS)

Если честно, этот сайт в его текущем виде можно было бы наспех собрать с помощью coding agent за несколько часов; однако серьёзной системе не должен требоваться деплой, чтобы изменить базовый контент. Поэтому этот сайт использует полноценную CMS на базе Payload CMS (https://payloadcms.com/), развернутую как отдельный Cloudflare Worker.

Сам Payload использует SQL-базу данных, которую, в свою очередь, нужно развернуть как экземпляр CloudFlare D1 SQLite https://developers.cloudflare.com/d1/, и корректно управлять ею с помощью миграций, чтобы поддерживать жизненный цикл разработки.

Автоматизированные переводы

Этот сайт поддерживает 20 языков. Поскольку сайт — это простая оболочка для CMS-контента, i18n-часть во время разработки ведётся с помощью coding agent (Co-pilot и Claude Opus 4.5).

Это оставляет весь текущий и будущий CMS-контент, который нужно автоматически переводить каждый раз, когда изменяется какой-либо английский контент.

Воркер на основе очереди и Cron

Требование по переводам подразумевает достаточно сложный процесс, который:

  • Будет запускаться по таймеру Cron.
  • Определять любой контент, которому нужен новый перевод.
  • Надёжно выполнять перевод.
  • Надёжно восстанавливаться после сбоя.

Поэтому используется ещё один экземпляр CloudFlare D1 для отслеживания работ по переводам, а Cloudflare queues (https://developers.cloudflare.com/queues/) применяются с шаблоном producer-consumer на основе cron, чтобы управлять задачами и масштабировать их. Для переводов вызывается API OpenAI gpt-5.2, а AI.SDK https://ai-sdk.dev/ связывает всё воедино.

Для этого сайта это избыточно, но любая production-система, в любом масштабе, нуждается в надёжном паттерне для оркестрации фоновой обработки.

Предыдущие версии этого сайта

Я уже делал этот сайт дважды как инструмент для изучения новых технологий:

2013 - Изучение Ruby и AWS

  • Ruby on Rails v4.0.0.
  • Стилизация Bootstrap v3.
  • CoffeeScript для UI.
  • Фронтенд-паттерн Backbone Marionette VMC.
  • Развёрнут на хосте AWS.

2017 - Изучение React

  • React v16.0.0 для UI.
  • Redux и Thunk для асинхронных операций.
  • Semantic UI для стилизации.

Что дальше

Сайт корректно настроен для SEO, и нужен регулярный ритм появления нового контента, чтобы стимулировать трафик краулеров. Я буду публиковать более подробные статьи о различных технологиях и решениях, которые использованы.