Перейти до вмісту
← Назад до блогу

Сайт логістики з нуля: PHP, адмінка та бот, що читає папери

У серпні 2024 власник логістики з Дніпра показав сайт і офіс. На сайті 30 маршрутів. На стіні в офісі 400. Він правив маршрути дзвінком племіннику. Новини жили як Word на робочому столі. Водії дзвонили диспетчеру за кожним папером: ціна, вікно, док. Я запропонував одну збірку: PHP без CMS, одна адмінка для всього, що власник чіпає щодня, і Telegram-бот, що відповідає водіям із тих самих таблиць. Він спитав строк. Я сказав три тижні. Ми вийшли за 19 днів.

Скріншот адмін-дашборда 2024-08-29: таблиця маршрутів 412 рядків, модалка ціни, черга SEO-статей 8 чернеток, лог Telegram-бота 214 запитів.

Проблема в одному абзаці

Власник веде ціну за кілометр, що рухається щотижня, таблицю маршрутів, що росте щодня, та SEO-статті, що мають виходити, щоб гріти воронку. Старий сайт вимагав розробника на кожну зміну ціни. Водії вимагали людину на кожну перевірку паперів. Новини не виходили, бо чекали верстки. Потрібна збірка, де власник править сам, а водії питають бота, а не людину.

Що я зібрав

Я зібрав чистий PHP з приватною адмінкою на /admin без публічного сліду CMS. Чотири таблиці несуть бізнес: маршрути з парами міст і ціною, медіа з картинками та SEO-полями, статті зі статусом draft→published і кроном, що публікує за датою, та inbox бота, що пише кожен запит водія та відповідь. В адмінки одна сторінка на кожну річ, що власник править: маршрути, ціна за км, контакти, банер і новини. Кожне збереження пише ту саму таблицю, що читають сайт і бот. Без копій.

Публічний сайт рендерить маршрути як датасет із фільтром за містом, новини як SEO-сторінки на /articles, картинки з alt, що власник пише в адмінці. Telegram-бот читає ту саму таблицю маршрутів, відповідає ціну та вікно й падає на диспетчера, коли не знаходить сторінку. Я показую цю межу навмисно й розбираю довод у пості Glass-box AI: показую впевненість моделі щоб люди довіряли. Пізніше я додав хук OpenClaw omni-channel, щоб та сама відповідь ішла в Viber і веб-чат. Бот для водіїв виріс із того самого порядку кроків, що я даю боту лідів у пості Зберіть AI-агента, який обробляє ліди за 48 годин.

  • Адмін зберігає ціну та банер менш ніж за 30 секунд. Власник вивчив за один дзвінок.
  • Таблиця маршрутів тримає 400+ рядків без лагу пагінації, бо я рендерю фільтр на клієнті з JSON-дампу з кешем п'ять хвилин.
  • Черга статей дає власнику написати вісім чернеток у неділю й публікувати по одній на день без мене.
  • Бот закриває 70% перевірок паперів водіїв, замір на 214 запитах у перший тиждень.
  • Sitemap оновлюється на кожне збереження в адмінці, Google бачить нові маршрути без ручного кроку.

Числа, що важливі

Час зміни ціни впав із двох днів очікування розробника до 28 секунд в адмінці. Новини з нуля за три місяці до восьми відкладених постів за тиждень. Дзвінки водіїв диспетчеру впали на 31% за два тижні. Збірка коштувала один проєктний гонорар без підписки, власник веде її сам від запуску. Іноді така адмінка стає продуктом на підписці: шлях до $3K MRR розбираю у пості Мікро-SaaS для локального бізнесу: від $0 до $3K MRR за 90 днів.

Коли збірка підходить

Збірка підходить, коли власник править щодня, дані приносять гроші, і команда — одна людина плюс водії. Не підходить, коли потрібні ролі та облік складів. Тоді я беру Supabase з правилами рядків. Для логістичного столу, що живе на маршрутах, цінах і паперах, PHP з однією адмінкою та одним ботом досі виходить найшвидше.

Що б скопіював

Дай власнику одне місце правки на кожну щотижневу річ. Пиши відповідь бота з того самого рядка, що показує сайт. Постав чергу новин на тиждень. Дивись, де власник економить час першим. Це твоя наступна фіча.

Проєкт: Simple Logistics — сайт логістичної компанії

Прочитали? До справи

Ці методи я застосовую на платних проєктах. Подивіться, у скільки це обходиться.