Records the discussion on distributing this as an installable package for new clients: .deb was considered and rejected (per-client interactive config — domain, bot token, TLS, a frontend build step — fights debconf/ postinst rather than fitting it), Docker Compose picked as the direction if this gets built. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
6.4 KiB
6.4 KiB
TODO — ідеї на майбутнє
Не заплановані задачі, а бэклог ідей, які варто розглянути пізніше, якщо буде запит від замовника. Нічого звідси не потрібно робити зараз.
CRM-можливості (система зараз — "CRM-lite" для одного закладу)
Вже є: картка клієнта з історією замовлень (/admin/customers),
розсилка всім клієнтам (/admin/broadcast), статистика (повторні
клієнти, топ-товари, виручка), промокоди з умовами, два рівні доступу
адмінки (admin/manager, bober_bbq/admin/authz.py). Чого немає —
і що можна додати точково, без переробки системи, якщо знадобиться:
- Нотатки по клієнту — вільне текстове поле на картці клієнта
(
/admin/customers/<id>) для приміток персоналу ("любить гострий соус", "просив передзвонити"). Найпростіша реалізація: нова таблицяcustomer_notes(customer_telegram_id, text, created_by, created_at) або простоTelegramUser.admin_noteтекстове поле. - Теги/сегменти клієнтів (напр. «VIP», «неактивний 30+ днів»,
«часто скасовує») — для фільтрації в
/admin/customersі, головне, для розсилки не всім одразу, а конкретному сегменту. - Сегментована розсилка — зараз
/admin/broadcastшле повідомлення всім клієнтам одразу (за винятком walk-in/гостей, вже виключені). Додати фільтр за сегментом/тегом, датою останнього замовлення, типом замовлень (тільки доставка/самовивіз) тощо. - Гнучкіші ролі персоналу — зараз лише
admin(повний доступ) іmanager(без частини налаштувань/постачальників). Можна додати, напр., роль «лише перегляд замовлень» для кухні/офіціантів без доступу до налаштувань і фінансів. - Розсилка поза Telegram (email/SMS) — зараз єдиний канал
сповіщень і розсилки — Telegram-бот; клієнт без Telegram (гість,
див.
docs/API.md) розсилку взагалі не отримує. Додавання email вимагає SMTP-налаштувань і поля email на замовленні/клієнті; SMS — окрема вартість, раніше свідомо відхилено замовником. - Воронка/ліди — якщо колись знадобляться попередні заявки (наприклад, для кейтерингу чи корпоративних замовлень) окремо від звичайного меню — зараз такого етапу немає, кожне замовлення одразу є фінальним.
- Глибша аналітика — LTV клієнта, retention/cohort-графіки,
динаміка по днях тижня/годинах. Зараз
/admin/statisticsдає зведені цифри за період, без часових рядів чи прогнозів.
Технічні TODO
- Postgres-бекапи — див.
docs/DEPLOYMENT.md, розділ "⚠️ TODO перед реальним переходом: автоматичні бекапи не підтримують Postgres".
Пакування для інсталяції новим клієнтам
Зараз є provision_client.sh — автоматизує розгортання нового клієнта,
але тільки на вже підготовленому Linux VPS (python3.11, nginx,
certbot, nodejs мають бути встановлені вручну заздалегідь, крок 1
docs/DEPLOYMENT.md). Це не самодостатній "пакет для інсталу".
.deb-пакет — розглянули й відхилили. Дебіан-пакети добре підходять для "поставив і забув" софту без інтерактивного налаштування. У нас навпаки: кожному клієнту потрібен свій домен, Telegram bot-token, назва закладу, TLS-сертифікат і збірка фронтенду (npm run build) — усе це довелось би тягнути через незручніdebconf-запитання іpostinst-скрипти, які по суті дублювали бprovision_client.sh, тільки жорсткішим і складнішим у підтримці способом.- Docker / Docker Compose — обраний напрямок. Multi-service (бот +
вебапка + nginx, за потреби Postgres) + конфігурація через
.env— саме для цього Compose і придуманий, і працює на будь-якому Linux (і навіть Windows через WSL), а не лише Debian/Ubuntu зapt. Мінус: не відчувається "нативним" для адміна, який звик доapt install— але оновлення/відкат/перенесення на інший сервер значно простіші, ніж з.deb. - Обсяг роботи, якщо братись:
Dockerfileдля Flask-застосунку й бота (спільний образ чи два окремих — треба вирішити), окремий крок збіркиwebapp/(multi-stage build, щоб не тягнути node в прод-образ),docker-compose.ymlзі змінними з.env, і окремо подумати про TLS (Let's Encrypt всередині контейнера чи залишити nginx+certbot на хості, як зараз).