Тимур ТурдыевНаписать

кейс · 2026

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

Долгий клиент: эзотерический сайт с расчётом «майянской матрицы» по дате рождения. С 2024 года написал с нуля три кодовые базы: сайт на Laravel 11, отдельную админку на MoonShine и нынешний сайт на Laravel 13 с новым дизайном, который прорабатывал вместе с заказчицей, и своей админкой на Inertia, React и shadcn. Расчёты сверены с документами заказчицы, клипы перекодирует ffmpeg.

LaravelPHPMySQLTailwindInertiaReactshadcnMoonShineffmpeg

Что было ​

Весной 2024 ко мне пришла заказчица с авторской системой: по дате рождения считается «майянская матрица», знак календаря майя, чакры, старшие и младшие арканы, а по двум датам совместимость пары. Старый сайт на DataLife Engine и PHP 5.2 для этого не годился: формулы жили в головах и в Word-документах, а не в коде.

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

Три базы ​

2024, Laravel 11. Первый репозиторий начался с расчёта: матрица, галактическая сигнатура в трёх итерациях, композит двух дат. Осенью внешний дизайнер принёс новый дизайн и коммитил стили прямо в репозиторий сайта. Админку я в тот же месяц вынес в отдельное приложение на MoonShine 3: настройки, арканы, посты, чакры, файловый менеджер на тех же моделях, что у сайта. Так сайт и дизайнер жили в одном репозитории, а редактура контента в другом, и правки стилей не задевали админку. На сайте 41 мой коммит и 14 дизайнера, в админке 20.

2026, Laravel 13. С начала года это полностью новый сайт и новая админка, больше двухсот коммитов. Дизайнер успел нарисовать семь страниц в HTML на Materialize, и на этом стало понятно, что довести дизайн до рабочего состояния он не в силах. Пришлось садиться за дизайн самому, хотя последние годы я больше жил в бэкенде, чем во фронтенде. Разметку дизайнера я не переносил: собрал HTML, стили и логику заново, а вид прорабатывали вместе с заказчицей, страница за страницей. Расчётный движок перенёс из первой базы чистыми сервисами без базы данных: MayaDate, MayaMatrix, GalacticSignature. Перенос проверял на эталонных кинах и нашёл в старом коде ошибку для дат с 25 по 31 июля: ключи таблицы лежали как «день.месяц», а искались как «месяц.день», и ветка никогда не срабатывала. В новой базе исправил, остальные даты считаются как раньше.

Админку сначала поднял на Filament, а в сентябре заменил своей на Inertia, React и shadcn, оболочку перенёс из своего проекта mercurio. CRUD-панели не хватало: заказчице нужно было загружать тексты из Word пачкой и видеть, что изменилось.

В конце сентября мы с заказчицей остановились на пергаменте и золоте, и фронт переехал на Tailwind постранично. Новый вид показывал ей по cookie-флагу на настоящих адресах, посетители и поисковики видели прежний сайт. 2 октября новый вид стал основным, Bootstrap ушёл из сборки.

Как устроено ​

  • Тексты живут в Word у заказчицы: документ на аркан, внутри таблица по темам. Импорт читает документы как есть, жирный абзац становится подзаголовком, пословный дифф показывает, что поменялось, у каждой темы 30 версий с откатом, выгрузка обратно в Word. Повторная загрузка 22 документов даёт ноль изменений. 114 текстов отличались от оригинала только невидимыми символами, миграция их выровняла.
  • Видео: 26 клипов, около 6,5 ГБ, качаются на свой сервер командой по очереди, потому что внешние ссылки блокируются. ffmpeg делает обложку и версию 720p: клип Аркана 0 ужался с 82 до 31 МБ. retry_after очереди поднял с 90 секунд до часа, иначе длинные задачи перезапускались.
  • Матрица была тремя таблицами под три ширины экрана. Переделал в одну масштабируемую геометрию 1000x624 с координатами ячеек: помещается на любом экране, включая ноутбуки с масштабом 125%, а треугольники и «лифт» подсвечиваются формой.
  • Стили нового сайта 5,5 КБ gzip против 37,6 КБ старой сборки на Bootstrap.
  • Lighthouse после работы над скоростью в мае: desktop в среднем 90, TBT 0 мс и LCP меньше 2 с на всех девяти страницах; mobile 63 на эмуляции Slow 4G. Замер один. Позже выяснилось, что три коммита с этой работой не дошли до main, и в августе я переприменил их заново по диффу ветки.

Что вышло ​

В репозитории больше 26 тысяч строк рабочего кода, из них 6 тысяч тестов: около 435 тест-методов на раскладку страниц, SEO, доступность и расчёт. Каждую часть выкладывал на сервер заказчицы и показывал отдельно, старые страницы работали, пока их не заменяли. Заказчица правит арканы, чакры, статьи и меню сама, у редактора своя роль. Наполнение идёт: на конец сентября заполнено 356 текстов из 1360.

Вывод ​

Три базы за два года не значит, что первые две были ошибкой. Первая дала расчёт и проверила формулы. Вторая отделила редактуру от сайта, который правил дизайнер. Третья собрала всё вместе, когда стало ясно, что нужно на самом деле: не CRUD, а импорт из Word с диффом и историей. Переписывать стоит тогда, когда понял задачу лучше, чем в прошлый раз, и у меня для этого были два года наблюдений.

© 2014-2026 Тимур ТурдыевСайт и справочник работают на VPS от AdminVPS