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

Тимур Турдыев

Backend-разработчик: PHP и Laravel, Go, Python. Интеграции, IoT-телеметрия, легаси и миграции без остановки сервиса.

открыт к задачам по рекомендацииМосква, удалённов разработке с 2014

Коротко ​

Серверный код пишу с 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. Правило простое: наружу идёт то, что уже отработало в бою и понадобилось во втором проекте.

Что я утверждаю и чем это доказываю ​

У каждого утверждения есть кейс с подробностями.

  1. Пишу системы с нуля, в которых работают каждый день: на производстве каждая плата от номера до коробки, оператор только сканирует.

    Учёт производства с нуля: платы, сканер и один маршрут в коде ->
  2. Обновляю старые платформы без остановки: кабинет Waviot переехал с Zend Framework 2 и PHP 5.6 на Laminas и PHP 8.

    Кабинет и телеметрия IoT-платформы: с Zend Framework 2 на Laminas и PHP 8 ->
  3. Переношу магазины на новый движок так, что покупатели не замечают: Prime Wood переехал с MyCMS на OpenCart за два месяца.

    Магазин мебели: с самописной CMS на OpenCart за два месяца ->
  4. Убираю лишние сервисы: HES переехал внутрь сервера авторизации, фронтенд при этом не менялся.

    На один сервис меньше: перенос HES в сервер авторизации ->
  5. Меняю инструменты вместе с ростом проекта: поиск prvoffice.ru прошёл путь LIKE -> Meilisearch -> Manticore без остановки витрины.

    Магазин офисной мебели, 2022-2026 ->
  6. Строю свою платформу для магазинов: прайсы поставщиков хранятся как есть, каталог собирается из решений человека.

    Mercurio: своя платформа для интернет-магазинов ->
  7. Делаю много маленьких задач вокруг старой системы, не ломая её: экран продаж, видеораздел и портал аттестации вокруг OpenCart 2.3.

    Магазин упаковки: задачи вокруг старого OpenCart, не ломая его ->
  8. С клиентами работаю годами: mayatriza.ru веду с 2024 года, за это время три кодовые базы.

    Майятрица: калькулятор, админка и сайт, три кодовые базы за два года ->
  9. Не усложняю там, где не нужно: экран продаж Prime Wood - это PHP и cron поверх Megaplan и Mango Office.

    Экран отдела продаж: сделки из Мегаплана, звонки из Mango Office ->
  10. Серверы описаны в 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.ruLaminas · PHP 8 · MongoDB ODMКабинет для интеграторов, партнёры ставят его у себя deb-пакетом под своим брендом. В 2022 перевёл с Zend Framework 2 и PHP 5.6 на Laminas и PHP 8, дальше развиваю на месте
Новый кабинетGo · Connect/protobuf · ReactСлоистый сервис рядом со старым, старая БД кабинета переезжает по частям
Телеметрия b.waviot.ruLaminas (ZF2) · Doctrine · AMQPЦентральное приложение: не переписывается разом, его по кускам заменяет HES
HESPHP 8 · свой MVC · JWTЗамена бэкенда телеметрии на той же базе, JWT вместо сессий
Авторизация auth.waviot.ruPHP 8 · свой MVC · JWTУчётки, компании и лицензии для всех кабинетов; один JWT для соседних сервисов
Лицензии lic.waviot.ruYii2 · 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Сырьё поставщиков неизменяемо, человек правит решения, каталог - пересобираемая проекция; ядро пакетом, у клиента свой сервер
Витрины MercurioReact SSR · Manticore · imgproxyСвоя тема и своё приложение у каждого клиента, поиск и фильтры на Manticore, картинки отдаёт imgproxy

Open source ​

Организация mercurioplatform тоже моя.

  • packagist
    mercurioplatform/tables

    Декларативный Resource-класс -> admin-страница одной строкой роута: поиск, сортировка, фильтры, saved views, bulk/row actions, экспорт, prefs, history + undo. Пять сознательных точек расширения - дальше vendor:publish. Страница рендерится сервером, AJAX подгружает только корень таблицы.

    PHPLaravel 13Bootstrap 5jQuery
  • packagist
    timurturdyev/simple-settings

    Группы, кэш, автоприведение типов, пакетная запись одним upsert: невалиден хоть один ключ - не сохранится ни один. Фасад, Artisan-команды, обход кэша через fresh.

    PHP 8.2+Laravel 12/13
  • pypi
    simple-db-settings

    Порт на SQLAlchemy 2, совместимый с PHP-версией по таблице: сервис на Laravel и сервис на Python читают и пишут одни и те же настройки. TTL-кэш, инвалидация после коммита, аудит изменений с причинителем, работа на внешнем соединении.

    Python 3.11+SQLAlchemy 2pydantic
  • packagist
    timurturdyev/simple-cart

    Каждый список - один примитив с политикой из конфига. Деньги считает только корзина, через конвейер классов-корректировок: без float, без магических строк, без обязательных миграций. Написан на замену darryldecode/laravelshoppingcart.

    PHP 8.3+Laravel 12/13
  • packagist
    timurturdyev/simple-seo

    Ядро без зависимостей, слой Laravel в том же пакете. Замена artesaos/seotools: дефолты подставляются на рендере и не прилипают к странице, JSON-LD собирается коллекцией в @graph вместо одного перетираемого блока.

    PHP 8.2+Laravel 11/12

Проекты ​

Свои продукты, публичные репозитории и работы под NDA.

  • сайт
    Mercurio

    Своя платформа для интернет-магазинов: сырьё прайсов поставщиков хранится как есть, человек правит только решения, каталог собирается из них детерминированно. Приём прайсов профилями без кода под поставщика, поиск и фильтры на Manticore, обмен с 1С. У каждого клиента своя витрина, своя база и свой сервер, общее ядро - пакетом.

    Laravel 13InertiaReactTypeScriptPostgreSQLManticore
  • github
    tim

    Утилита для терминала, которой пользуюсь каждый день: переход в проект с поиском, ssh мимо VPN, туннели через свой сервер, локальный запуск проектов. Одна команда проверяет все проекты разом: незакоммиченное, ответ сайта, сроки сертификатов и доменов, настройку почты.

    GocobramacOS
  • github
    Экран продаж lpack

    Показатели отдела продаж оптового магазина упаковки на мониторе в офисе: виджеты из 1С, графики, вкладки сменяются по кругу.

    Laravel 12jQueryChart.js
  • github
    Laravel-Mango-Office

    Небольшой пакет для API облачной АТС Mango Office: сотрудники, статистика звонков, записи разговоров. Вырос из экрана продаж для Prime Wood.

    PHPLaravel
  • github
    Export-Import OpenCart + Vue

    Импорт и экспорт товаров OpenCart через Vue-интерфейс без перезагрузки страницы, форматы CSV и XLS.

    PHPVueOpenCart
  • github
    opencart-dadata

    Подсказки адресов и ФИО от Dadata при оформлении заказа в OpenCart: быстрее ввод, меньше ошибок в адресах.

    VuePHPOpenCart
  • github
    my-tools-parse-message-waviot

    Десктопная утилита для инженеров: разбирает ответы WAVIOT API в карточки по модемам и obis-кодам. Один бинарник без Electron-веса.

    GoWailsVue 3Tailwind 4
  • сайт
    Экран продаж Prime Wood

    Монитор отдела продаж: сделки из Megaplan и звонки из Mango Office, план месяца и доля закрытых сделок по менеджерам. PHP и cron, без фреймворка.

    PHPMegaplan APIMango Office API
  • github
    opencart-image-remover

    Чистка каталога изображений OpenCart от файлов, на которые больше не ссылается ни один товар.

    PHPOpenCart
  • github
    vpn-help

    Утилиты macOS против конфликта OpenVPN и AmneziaVPN: диагностика, зачистка повисших utun-интерфейсов, сброс DNS.

    BashmacOS
  • сайт
    timcode.ru

    Этот сайт: резюме, кейсы и статьи, справочник по паттернам на четырёх языках с тестами, curl-режим и машиночитаемые форматы. Собирается статикой.

    VitePressVueTypeScript

Справочник ​

Паттерны, архитектура и принципы на PHP, Go, Python и TypeScript, с тестами и примерами из практики: timcode.ru/handbook. У каждой темы код на четырёх языках с пояснениями и тестами.

Сотрудничество ​

Берусь за задачи, где нужно разобраться в чужом коде, связать системы или принять инженерное решение. Работаю по рекомендациям и с теми, кто понимает, что именно нужно сделать.

Интересно: интеграции между сервисами, сложная бизнес-логика, легаси без документации, высоконагруженные задачи, архитектурные решения.

Не беру: вёрстку по готовому макету, задачи "сделай как у конкурентов" и проекты без конкретной постановки.

Стоимость зависит от задачи - обсуждаем после того, как услышу, что нужно сделать.

Контакты ​

Быстрее всего ответ в Telegram, обычно в тот же день.

Следить ​

Новые статьи и кейсы: RSS. Для программ и моделей: /json и /llms.txt.

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