Клиентская работа · 2025–2026
GRIDLINE
Платформа начиналась как сайт на MODX, где я отвечал за frontend и CMS-часть. Летом 2026 года я полностью заменил MODX: приложение на Next.js с новой моделью данных в PostgreSQL, собственная админ-панель, self-hosted S3-хранилище для медиа и одноразовый пайплайн, перенёсший все проекты, новости, документы и файлы. Главным ограничением было SEO: каждый проиндексированный старый URL должен был продолжить работать без изменений в день переключения.
- Статус
- Пересобран на Next.js · сентябрь 2026
- Роль
- Full-stack разработчик (агентство)
- Год
- 2025–2026
- Полный стек
- 15 инструментов
UI/UX-дизайн был создан моим коллегой-дизайнером. Эти кейсы рассказывают о моей инженерной работе и реализации, а не представляют визуальный дизайн как мою авторскую работу.
Полный стек
- Next.js 16
- React 19
- TypeScript
- PostgreSQL 16
- Prisma
- better-auth
- next-intl
- TipTap
- Garage (S3)
- MapLibre GL JS
- Tailwind CSS 4
- Vitest
- Docker
- GitHub Actions
- Cloudflare Tunnel
Что умеет сайт
- Три языковые версии каталога из сотен проектов с фильтрами, поиском, карточками проектов, интерактивной картой, новостями, документами и FAQ.
- Собственная админ-панель для новостей, проектов, регионов, документов, страниц, статистики, медиа, редиректов и пользователей: черновики, автосохранение и автоматические 301 при смене slug.
- Одна запись в базе на сущность с переводимыми полями вместо отдельного ресурса MODX Babel на каждый язык. Медиа хранятся в self-hosted S3 и отдаются через приложение с генерацией превью на лету.
- Полноценный SEO-слой: canonical URL, hreflang, отдельные sitemap для каждого языка, разметка Schema.org и карта старых редиректов, приводящая любой прежний URL к цели за один переход.
Что я сделал хорошо
- Перенёс все ресурсы и медиафайлы MODX. Каждая запись хранит исходный ID из MODX, поэтому импорт повторяем и прослеживаем. Вместо нечёткого сопоставления выбрал точное соответствие по ID.
- Сохранил позиции в поиске: каждый старый URL проверен на новом приложении с условием «ноль битых редиректов», а блокеры из SEO-аудита закрыты — отсутствие canonical, неверные языковые теги, нет структурированных данных.
- Покрыл систему примерно 650 тестами на реальной базе PostgreSQL. Образ собирается в CI, сервер только скачивает версии по тегам, а откат — это смена тега.
- Аккуратно довёл production-детали: режим сайта с ограничением по времени, отключающийся без деплоя, переключатель, приглушающий языки без контента, и отсечение сканеров до маршрутизации.
Что я бы улучшил
- Добавить слой кеширования и улучшить время до первого байта теперь, когда корректность подтверждена.
- Перенести оставшиеся зашитые в код показатели статических страниц в данные, управляемые из админки.
- Закрыть контентные пробелы, ожидающие материалов от заказчика: тексты разделов на всех языках, фото этапов в карточках проектов и финальную чистку старых slug.
Виды проекта
Предыдущая версия
Кейс в том виде, в каком он был до пересборки, — сохранён как запись о том, с чего начинался проект.
2025 – Sep 2026
Сайт на MODX Revolution
Frontend / CMS-разработчик (агентство)
- MODX Revolution 3
- PHP
- pdoTools
- MIGX
- MODX TVs
- Babel
- HTML
- SCSS
- JavaScript
- MapLibre GL JS
- Vite
Я разработал frontend и CMS-часть насыщенной данными публичной платформы. Работа включала каталог проектов с фильтрами, подробные карточки, интерактивную карту, три языковых контекста, редакционные разделы и SEO-исправления, необходимые для запуска в production.
Какой была система
- Каталог проектов с поиском, фильтрами по регионам и категориям, пагинацией, статусами, рисками, прогрессом, бюджетами, сроками, этапами, результатами и документами.
- Интерактивная карта MapLibre с собственными маркерами и продуманной мобильной навигацией между картой и проектами.
- Три языковых контекста для данных проектов, навигации, новостей, документов, поиска, дат, обратных отсчётов и служебных страниц.
- Перевёл сложный публичный набор данных в управляемую редакторами модель MODX на TVs и MIGX.
- Связал фильтрацию, карту, редакционный контент и три языковые версии в одном CMS-продукте.
- Решил практические production-проблемы SEO и индексации, не оставляя их на потом.
Что я тогда хотел исправить
- Добавить более чёткий типизированный слой данных между полями MODX, PHP-хелперами и frontend-компонентами.
- Объединить повторяющиеся хелперы и обработку переводов, затем добавить автоматические тесты для поиска и комбинаций фильтров.
- Оптимизировать и упростить код внутри шаблонов для более быстрой работы сайта и избавления от технического долга.