BioMarket ERP

PHP 8.3 Laravel 12 MySQL/MariaDB Bootstrap 5 Tailwind 4 PHPStan L9 GitHub Actions Internal system

Вътрешна операционна платформа за търговската верига BioMarket / HealthStore, изградена от нулата (от празно репозитори през октомври 2025) и заменяща таблици и ръчни процеси. Едно приложение за HR и смени, ТРЗ, склад, POS, куриери, B2B, CRM, автопарк и вътрешна поща — 220+ модела, около 470 страници, 10 сервизни домейна, 119 конзолни команди и 2 900+ комита (3 участници). Ползва се ежедневно от персонала в магазините, склада и офиса.

README: Laravel 12, PHP 8.3, Blade + Bootstrap 5 + Tailwind 4, MySQL/MariaDB, PHPStan ниво 9, Pint, ParaTest; модули: HR/график/ТРЗ, склад и наличности, продуктов каталог, POS продажби, куриери (Econt/Speedy/Box Now/PRIM), B2B портал/CRM, автопарк, обучения, checklists, документация; вътрешен, частен репозиторий.

Проблем / контекст
Верига магазини с десетки обекти и стотици служители управляваше HR, склад, ТРЗ, доставки и продажби през разпръснати Excel таблици и ръчни процеси — без единен източник на истина и с нарастващ риск от грешки при мащабиране.
Моята роля
Lead Developer & Technical Owner: проектирах и изградих системата от нулата, водя доставката за двама допълнителни разработчици (336 от 550 PR-а мои, ~90% от 599 слети PR-а минават през мен), изградих quality pipeline (GitHub Actions CI, Pint, PHPStan 9, ParaTest, проверка за SQL write извън транзакция) и поддържам продукцията от край до край: cPanel, cron и queue worker-и, ежедневни бекъпи, scheduler за 51 задачи с ежедневен имейл отчет и миграции върху живи данни. Интеграции: Еконт, Спиди, Box Now (вкл. подписани webhook-ове), PRIM, OpenCart, IMAP, Google Business, банкови файлове, Tuya IoT; контрол на достъпа по роли и категории с IP whitelisting.
Предизвикателство
Бърз растеж в зони с пари, наличности и ТРЗ без регресии и прекъсвания на споделен хостинг.
Подход / решение
Задължителен quality gate (Pint, PHPStan 9, ParaTest, audit, проверка за транзакции), сервизни класове по домейни, нощен график на задачите с отчитане на натоварването и ежедневен отчет, автоматични бекъпи и прегледан списък с изключения за наследените файлове.
Табло — обявления, предстоящи рождени дни, последни активности, календар
Табло — обявления, предстоящи рождени дни, последни активности, календар
Продажби — POS, нова поръчка, ценови листи, връщания, изплащания, ревизии
Продажби — POS, нова поръчка, ценови листи, връщания, изплащания, ревизии
Моят акаунт — нотификации, график/отпуск, задачи, чат, обучения
Моят акаунт — нотификации, график/отпуск, задачи, чат, обучения
HR — назначения, групи, бонуси, аванс, ТРЗ, HR структура
HR — назначения, групи, бонуси, аванс, ТРЗ, HR структура
Администрация — потребители, права, IP достъп, куриерски интеграции
Администрация — потребители, права, IP достъп, куриерски интеграции
Склад — доставки, маршрут, наличности, минимуми/максимуми, преместения
Склад — доставки, маршрут, наличности, минимуми/максимуми, преместения