Тимур Турдыев
Backend-разработчик: PHP и Laravel, Go, Python. Интеграции, IoT-телеметрия, легаси и миграции без остановки сервиса.
Коротко
Серверный код пишу с 2014-го. До этого был свой интернет-магазин и SEO, поэтому в разработку пришёл, уже понимая, где бизнес теряет деньги. Сейчас основное время: продуктовая разработка в Waviot, IoT-платформе на протоколе NB-Fi, и своя платформа Mercurio для интернет-магазинов.
Обо мне
Учился сам: по документации, чужому коду и собственным ошибкам. Этот путь приучил не запоминать "как правильно", а каждый раз разбираться, почему именно так.
В код пришёл не с нуля. Сначала был свой интернет-магазин, и я знал по себе, что такое стоимость заказа, возвраты, выгрузки в маркетплейсы и почему "небольшой баг в корзине" - это деньги, а не задача в трекере. Потом SEO: техническая оптимизация, скорость, индексация, аналитика воронок. К моменту, когда сел писать код, я уже понимал, что нужно бизнесу и где он теряет, оставалось научиться чинить руками. Первой платформой стал OpenCart.
Несколько лет фрилансил: начинал с форума OpenCart, потом заказы пошли по рекомендациям. Отсюда два правила, которые держу до сих пор: код должен работать у клиента без меня, а лучшая оценка работы - когда меня советуют знакомым.
До Waviot год с небольшим вёл магазин офисной мебели Prime Wood: перенёс его с самописной CMS на OpenCart за два месяца, и он работает на этой платформе до сих пор.
С 2021 года основное время в продуктовой команде Waviot: кабинет для интеграторов, телеметрия, авторизация, лицензии, а в 2026-м своя система учёта производства, в которой с июня ведут платы по всем этапам. Laminas, Yii2 и свой PHP-MVC живут там рядом с Laravel, Go, Python и React, и всё это несколько поколений кода одной компании. Параллельно строю Mercurio, свою платформу для интернет-магазинов: прайсы поставщиков хранятся как есть, человек правит только решения, а каталог собирается из них заново в любой момент. На неё переезжают магазины моих давних клиентов, prvoffice и lpack.
Клиенты у меня в основном давние: магазин офисной мебели веду с 2022 года, mayatriza.ru с 2024-го, магазин упаковки lpack с 2025-го, к некоторым возвращаюсь с новыми задачами через годы.
Куски платформы, которые оказались полезны сами по себе, выношу в open source. Правило простое: наружу идёт то, что уже отработало в бою и понадобилось во втором проекте.
Что я утверждаю и чем это доказываю
У каждого утверждения есть кейс с подробностями.
Пишу системы с нуля, в которых работают каждый день: на производстве каждая плата от номера до коробки, оператор только сканирует.
Учёт производства с нуля: платы, сканер и один маршрут в коде ->Обновляю старые платформы без остановки: кабинет Waviot переехал с Zend Framework 2 и PHP 5.6 на Laminas и PHP 8.
Кабинет и телеметрия IoT-платформы: с Zend Framework 2 на Laminas и PHP 8 ->Переношу магазины на новый движок так, что покупатели не замечают: Prime Wood переехал с MyCMS на OpenCart за два месяца.
Магазин мебели: с самописной CMS на OpenCart за два месяца ->Убираю лишние сервисы: HES переехал внутрь сервера авторизации, фронтенд при этом не менялся.
На один сервис меньше: перенос HES в сервер авторизации ->Меняю инструменты вместе с ростом проекта: поиск prvoffice.ru прошёл путь LIKE -> Meilisearch -> Manticore без остановки витрины.
Магазин офисной мебели, 2022-2026 ->Строю свою платформу для магазинов: прайсы поставщиков хранятся как есть, каталог собирается из решений человека.
Mercurio: своя платформа для интернет-магазинов ->Делаю много маленьких задач вокруг старой системы, не ломая её: экран продаж, видеораздел и портал аттестации вокруг OpenCart 2.3.
Магазин упаковки: задачи вокруг старого OpenCart, не ломая его ->С клиентами работаю годами: mayatriza.ru веду с 2024 года, за это время три кодовые базы.
Майятрица: калькулятор, админка и сайт, три кодовые базы за два года ->Не усложняю там, где не нужно: экран продаж Prime Wood - это PHP и cron поверх Megaplan и Mango Office.
Экран отдела продаж: сделки из Мегаплана, звонки из Mango Office ->Серверы описаны в Ansible: любой можно пересобрать с нуля, и он получится таким же.
Кейсы
Разборы по фактам из истории git: что было, что решил, что вышло. Про внутренние системы Waviot без деталей, которые принадлежат компании.
- Учёт производства с нуля: платы, сканер и один маршрут в коде
Написал систему учёта плат для производства Waviot: сначала прототип на готовой админке, потом своя платформа. С июня 2026 года цех ведёт в ней каждую плату, и теперь в неё переезжает всё производство с легаси 2016 года.
Laravel 12PHP 8.5InertiaReactTypeScriptMySQLPest - Магазин упаковки: задачи вокруг старого OpenCart, не ломая его
Оптово-розничный магазин упаковки в Петербурге с учётом в 1С. За год вокруг боевого OpenCart 2.3 появились экран показателей отдела продаж, видеораздел с фоновой конвертацией, портал аттестации сотрудников, отчёт по трафику и демо новой витрины на Mercurio. Магазин при этом не останавливался.
OpenCartPHPMySQLLaravelChart.jsffmpegPythonMercurio - Майятрица: калькулятор, админка и сайт, три кодовые базы за два года
Долгий клиент: эзотерический сайт с расчётом «майянской матрицы» по дате рождения. С 2024 года написал с нуля три кодовые базы: сайт на Laravel 11, отдельную админку на MoonShine и нынешний сайт на Laravel 13 с новым дизайном, который прорабатывал вместе с заказчицей, и своей админкой на Inertia, React и shadcn. Расчёты сверены с документами заказчицы, клипы перекодирует ffmpeg.
LaravelPHPMySQLTailwindInertiaReactshadcnMoonShineffmpeg - Магазин офисной мебели, 2022-2026
Веду prvoffice.ru с нуля четвёртый год: своя админка, своя витрина, три редизайна, три этапа поиска и массовое редактирование каталога.
LaravelLivewireManticoreimgproxyMariaDB - Mercurio: своя платформа для интернет-магазинов
С 2025 года строю Mercurio: платформу, где сырьё поставщиков неизменяемо, человек правит только решения, а каталог собирается детерминированно. Два клиента, обе витрины пока на демо-стендах.
LaravelPHPPostgreSQLInertiaReactTypeScriptManticoreimgproxy1С - На один сервис меньше: перенос HES в сервер авторизации
Два самописных PHP-сервиса Waviot делили один интерфейс: экраны жили в auth, их бэкенд в HES. Перенёс HES внутрь auth так, что фронт не заметил, и закрыл один сервис с отдельным деплоем.
PHP 8MySQLRabbitMQ - Кабинет и телеметрия IoT-платформы: с Zend Framework 2 на Laminas и PHP 8
Перевёл кабинет клиентов и бэкенд телеметрии Waviot с Zend Framework 2.3 и PHP 5.6 на Laminas и PHP 8 без остановки платформы, а потом закрепил результат: PSR-12, миграции БД, Sentry.
PHP 8LaminasZend Framework 2MongoDBDoctrineSentry - Экран отдела продаж: сделки из Мегаплана, звонки из Mango Office
Для отдела продаж Prime Wood сделал экран на офисный монитор: план месяца, оплаты за день, необработанные заявки и звонки по менеджерам. PHP без фреймворка и крон, потому что этого хватало. Работу с API Mango Office потом вынес в Laravel-пакет.
PHPMegaplan APIMango Office APILaravel - Магазин мебели: с самописной CMS на OpenCart за два месяца
В одиночку перенёс prime-wood.ru с самописной MyCMS 2013 года на OpenCart, релиз перед Новым годом. Покупатели смены движка не заметили, магазин работает на этой платформе седьмой год.
OpenCartPHPMySQLSphinx1СRoistat
Стек и почему так
Всё, кроме трёх последних строк, это Waviot: у каждой части свой возраст и свой контекст, поэтому стеков несколько. Последние три строки - мои серверы и Mercurio.
| Слой | Стек | Почему так |
|---|---|---|
| Кабинет клиентов lk.waviot.ru | Laminas · PHP 8 · MongoDB ODM | Кабинет для интеграторов, партнёры ставят его у себя deb-пакетом под своим брендом. В 2022 перевёл с Zend Framework 2 и PHP 5.6 на Laminas и PHP 8, дальше развиваю на месте |
| Новый кабинет | Go · Connect/protobuf · React | Слоистый сервис рядом со старым, старая БД кабинета переезжает по частям |
| Телеметрия b.waviot.ru | Laminas (ZF2) · Doctrine · AMQP | Центральное приложение: не переписывается разом, его по кускам заменяет HES |
| HES | PHP 8 · свой MVC · JWT | Замена бэкенда телеметрии на той же базе, JWT вместо сессий |
| Авторизация auth.waviot.ru | PHP 8 · свой MVC · JWT | Учётки, компании и лицензии для всех кабинетов; один JWT для соседних сервисов |
| Лицензии lic.waviot.ru | Yii2 · RBAC · JWT + Go | Работает стабильно, развиваю без переписывания; файлы лицензий отдаёт Go-сервис из deb-пакета |
| Учёт производства | Laravel 12 · Inertia · React · TypeScript | Моя система с нуля, на бою с июня 2026: платы по отделам, сканер, брак, сдельные отчёты; приборы и гарантия на подходе |
| Сервер производства (legacy) | Python · aiohttp | Работает, пока его не заменил новый: дорабатываю без простоя |
| Вебхуки телеметрии | Python · RabbitMQ | Телеметрия из очереди -> HTTP подписчикам; сбой БД или AMQP переживается ретраями |
| CLI эксплуатации | Laravel Zero · PHAR | Один файл на сервере: перенос деревьев объектов, каналы модемов, калибровка |
| Desktop-утилиты | Go · Wails · Vue 3 | Кроссплатформенный бинарник без Electron-веса |
| Свои и клиентские серверы | Ansible · Deployer · Ubuntu LTS | Сервер описан кодом, а не историей ssh-сессий: его можно пересобрать с нуля, и после меня в нём разберётся другой человек |
| Mercurio (свой проект) | Laravel 13 · Inertia · React · PostgreSQL | Сырьё поставщиков неизменяемо, человек правит решения, каталог - пересобираемая проекция; ядро пакетом, у клиента свой сервер |
| Витрины Mercurio | React SSR · Manticore · imgproxy | Своя тема и своё приложение у каждого клиента, поиск и фильтры на Manticore, картинки отдаёт imgproxy |
Open source
Организация mercurioplatform тоже моя.
- packagistmercurioplatform/tables
Декларативный Resource-класс -> admin-страница одной строкой роута: поиск, сортировка, фильтры, saved views, bulk/row actions, экспорт, prefs, history + undo. Пять сознательных точек расширения - дальше vendor:publish. Страница рендерится сервером, AJAX подгружает только корень таблицы.
PHPLaravel 13Bootstrap 5jQuery - packagisttimurturdyev/simple-settings
Группы, кэш, автоприведение типов, пакетная запись одним upsert: невалиден хоть один ключ - не сохранится ни один. Фасад, Artisan-команды, обход кэша через fresh.
PHP 8.2+Laravel 12/13 - pypisimple-db-settings
Порт на SQLAlchemy 2, совместимый с PHP-версией по таблице: сервис на Laravel и сервис на Python читают и пишут одни и те же настройки. TTL-кэш, инвалидация после коммита, аудит изменений с причинителем, работа на внешнем соединении.
Python 3.11+SQLAlchemy 2pydantic - packagisttimurturdyev/simple-cart
Каждый список - один примитив с политикой из конфига. Деньги считает только корзина, через конвейер классов-корректировок: без float, без магических строк, без обязательных миграций. Написан на замену darryldecode/laravelshoppingcart.
PHP 8.3+Laravel 12/13 - packagisttimurturdyev/simple-seo
Ядро без зависимостей, слой Laravel в том же пакете. Замена artesaos/seotools: дефолты подставляются на рендере и не прилипают к странице, JSON-LD собирается коллекцией в @graph вместо одного перетираемого блока.
PHP 8.2+Laravel 11/12
Проекты
Свои продукты, публичные репозитории и работы под NDA.
- сайтMercurio
Своя платформа для интернет-магазинов: сырьё прайсов поставщиков хранится как есть, человек правит только решения, каталог собирается из них детерминированно. Приём прайсов профилями без кода под поставщика, поиск и фильтры на Manticore, обмен с 1С. У каждого клиента своя витрина, своя база и свой сервер, общее ядро - пакетом.
Laravel 13InertiaReactTypeScriptPostgreSQLManticore - githubtim
Утилита для терминала, которой пользуюсь каждый день: переход в проект с поиском, ssh мимо VPN, туннели через свой сервер, локальный запуск проектов. Одна команда проверяет все проекты разом: незакоммиченное, ответ сайта, сроки сертификатов и доменов, настройку почты.
GocobramacOS - githubЭкран продаж lpack
Показатели отдела продаж оптового магазина упаковки на мониторе в офисе: виджеты из 1С, графики, вкладки сменяются по кругу.
Laravel 12jQueryChart.js - githubLaravel-Mango-Office
Небольшой пакет для API облачной АТС Mango Office: сотрудники, статистика звонков, записи разговоров. Вырос из экрана продаж для Prime Wood.
PHPLaravel - githubExport-Import OpenCart + Vue
Импорт и экспорт товаров OpenCart через Vue-интерфейс без перезагрузки страницы, форматы CSV и XLS.
PHPVueOpenCart - githubopencart-dadata
Подсказки адресов и ФИО от Dadata при оформлении заказа в OpenCart: быстрее ввод, меньше ошибок в адресах.
VuePHPOpenCart - githubmy-tools-parse-message-waviot
Десктопная утилита для инженеров: разбирает ответы WAVIOT API в карточки по модемам и obis-кодам. Один бинарник без Electron-веса.
GoWailsVue 3Tailwind 4 - сайтЭкран продаж Prime Wood
Монитор отдела продаж: сделки из Megaplan и звонки из Mango Office, план месяца и доля закрытых сделок по менеджерам. PHP и cron, без фреймворка.
PHPMegaplan APIMango Office API - githubopencart-image-remover
Чистка каталога изображений OpenCart от файлов, на которые больше не ссылается ни один товар.
PHPOpenCart - githubvpn-help
Утилиты macOS против конфликта OpenVPN и AmneziaVPN: диагностика, зачистка повисших utun-интерфейсов, сброс DNS.
BashmacOS - сайтtimcode.ru
Этот сайт: резюме, кейсы и статьи, справочник по паттернам на четырёх языках с тестами, curl-режим и машиночитаемые форматы. Собирается статикой.
VitePressVueTypeScript
Справочник
Паттерны, архитектура и принципы на PHP, Go, Python и TypeScript, с тестами и примерами из практики: timcode.ru/handbook. У каждой темы код на четырёх языках с пояснениями и тестами.
Сотрудничество
Берусь за задачи, где нужно разобраться в чужом коде, связать системы или принять инженерное решение. Работаю по рекомендациям и с теми, кто понимает, что именно нужно сделать.
Интересно: интеграции между сервисами, сложная бизнес-логика, легаси без документации, высоконагруженные задачи, архитектурные решения.
Не беру: вёрстку по готовому макету, задачи "сделай как у конкурентов" и проекты без конкретной постановки.
Стоимость зависит от задачи - обсуждаем после того, как услышу, что нужно сделать.
Контакты
Быстрее всего ответ в Telegram, обычно в тот же день.
- Telegram@borodatimur
- Emailborodatimur@gmail.com
- GitHubgithub.com/TimurTurdyev
- LinkedIntimur-turdyev
Следить
Новые статьи и кейсы: RSS. Для программ и моделей: /json и /llms.txt.