diff --git a/README.md b/README.md index 9630330..79c264e 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,10 @@ Лендинг «недельный календарь / штамп даты»: Кварта — «четвёртая», обжарка по четвергам; ассортимент свёрстан как этикетки пачек. Кнопки предзаполняют форму, на мобиле — липкая CTA. Форма уходит в отдельный сервис api: проверка белорусского телефона (любой ввод → `+375XXXXXXXXX`, одна функция на клиенте и сервере), повтор с того же номера в течение 10 минут дописывается к заявке как уточнение, сохраняются первое и последнее касание (utm, yclid, fbclid, referrer, страницы входа и отправки), rate-limit, honeypot, понятные ошибки с «позвоните». Заявки менеджер видит в теме Telegram-группы, сбои — в соседней теме «Система»; бэкапы базы каждый день уходят администратору в личку, восстановление — кнопкой в боте. 184 теста Vitest. +Так заявки выглядят у менеджера в теме «Kvarta Cafe: Заявки»: интерес, телефон в едином формате, источник и путь по странице; повтор с того же номера приходит уточнением к заявке (#2), а не новой заявкой. + +Заявки и уточнение в Telegram-теме «Kvarta Cafe: Заявки» + Стек: pnpm workspace — `apps/landing` (Next.js 16, Tailwind 4), `apps/api` (Hono, better-sqlite3), `packages/shared` (телефон и контракт заявки). Почему два сервиса — `docs/adr/0001`. **Почему SQLite.** Один процесс и один файл в volume: проверка «есть ли заявка с этим номером за 10 минут» и запись идут в одной транзакции, и двойной клик не даёт дубля; бэкап — копия файла; база не зависит от Telegram — если он недоступен, заявка ждёт в очереди и уходит позже (так и случилось вживую при настройке). Внешняя БД для десятков заявок в день — лишняя движущаяся часть. diff --git a/docs/telegram-leads.png b/docs/telegram-leads.png new file mode 100644 index 0000000..5426c99 Binary files /dev/null and b/docs/telegram-leads.png differ