Commit Graph
16 Commits
Author SHA1 Message Date
nunuchek 5d970be228 docs: журнал ошибок ИИ — deploy 2026-10-17 15:48:52 +03:00
nunuchek 1accf9341b chore(deploy): фиксированная подсеть и TRUSTED_PROXIES для X-Real-IP 2026-10-17 15:48:45 +03:00
nunuchek 79ab146b1d chore(deploy): Docker-образы, compose, deploy.sh, setup-nginx.sh 2026-10-17 15:48:19 +03:00
nunuchek e2d85a28ef chore: type module в корне, журнал ошибок ИИ — landing 2026-10-17 15:47:36 +03:00
nunuchek e6610f0408 feat(landing): состояния формы и ошибки отправки 2026-10-17 15:47:24 +03:00
nunuchek a5ee348df0 feat(landing): первое и последнее касание 2026-10-17 15:47:24 +03:00
nunuchek 02da483747 feat(landing): заглушка страницы с рабочей формой 2026-10-17 15:47:24 +03:00
nunuchek c2786f5894 docs: журнал ошибок ИИ — каркас, телефон, api 2026-10-17 15:42:32 +03:00
nunuchek 84463da3eb chore: игнорировать worktree'ы агентов в .claude/worktrees 2026-10-17 15:41:45 +03:00
nunuchek ea0535001c feat(api): rate-limit, honeypot, коды ошибок
rateLimit.ts: 5 запросов / 10 минут на IP в памяти, фиксированное окно,
чистка устаревших записей по ходу запросов, 429 с Retry-After. IP из
X-Real-IP только от loopback-сокета (плюс TRUSTED_PROXIES для шлюза
docker), иначе адрес сокета; в базу IP не пишем. Honeypot → 201 без
записи и уведомления. isPaused() → 503 на время восстановления базы.
Тесты на каждый код ответа из таблицы плана.
2026-10-17 15:41:04 +03:00
nunuchek c20e40c333 feat(api): уточнения в окне 10 минут
saveLead в одной IMMEDIATE-транзакции: заявка с тем же телефоном
моложе 10 минут → уточнение, если имя, интерес или комментарий
отличаются от последней версии, иначе повтор без записи. Окно от
created_at заявки, уточнения его не продлевают. Ответ 200 duplicate,
notifier получает id уточнения и список изменившихся полей.
2026-10-17 15:39:31 +03:00
nunuchek fa0964b24d feat(api): /api/lead с SQLite и миграциями
db/: better-sqlite3 по DB_PATH (WAL, foreign_keys), миграции через
PRAGMA user_version, схема leads и lead_clarifications по плану.
createApp(deps) с инъекцией базы, часов и notifier (пока no-op, зовётся
после ответа). POST /api/lead: только JSON (415), тело до 16 КБ (413),
validateLead → 400, запись → 201. index.ts: env и graceful shutdown.
2026-10-17 15:38:42 +03:00
nunuchek a2885d180c feat(shared): нормализация белорусского телефона и контракт заявки
normalizeBelarusPhone/phoneError/formatBelarusPhone: любые форматы ввода
→ +375XXXXXXXXX, коды 25/29/33/44/17, подсказки по причине ошибки.
validateLead: типы POST /api/lead, ошибки по полям, honeypot, очистка
касаний. Тесты Vitest.
2026-10-17 15:34:23 +03:00
nunuchek 04b150f3c3 chore: pnpm workspace — landing, api, shared
apps/landing: Next.js 16 (App Router, standalone), Tailwind 4, ESLint
с запретом импорта из api. apps/api: Hono + better-sqlite3, сборка tsup,
/api/health. packages/shared: исходники TS без сборки. Vitest projects.
2026-10-17 15:33:07 +03:00
nunuchek 4b880e7d9a docs: план реализации, глоссарий, ADR, журнал ошибок ИИ
План по итогам интервью (docs/plan.md), GLOSSARY.md, ADR о двух
сервисах и о боте как канале администрирования, docs/ai-log.md,
.gitignore для секретов, базы и артефактов.
2026-10-17 15:30:30 +03:00
nunuchek cc7feb97a5 Initial commit: agent skills setup
Add project skills, CLAUDE.md with Agent skills section, and
docs/agents config (local markdown issue tracker, single-context domain docs).
2026-10-17 15:29:08 +03:00