§01
Обзор
- Что это: одностраничное приложение для операторов колл-центра и CRM — выбор категории, поиск товаров, сборка корзины, модификаторы, рекомендованные товары, итоговая сумма. Работает поверх Bitrix24 (поля
ID,NAME,UF_QUANTITY— userfields Bitrix24). Данные тянутся из внешнего API. - Тип / статус / роль: web-app (внутренний инструмент) / maintained / solo (44 из 45 коммитов — пользователь; 1 — деплой из-под root).
- Активный период: 2021-10-10 → 2025-12-19. Старая история (2021) — легаси; актуальный продукт — декабрьский (2025) rewrite
5217b80 Modernize CRM Cart: Next.js 16, TypeScript, shadcn/ui.
§02
Стек
- Языки: TypeScript (strict).
- Фреймворки/библиотеки: Next.js 16 (App Router, Turbopack), React 19, TanStack Query v5, @tanstack/react-virtual (виртуализация списков), Zustand v5 (стор корзины/UI), shadcn/ui (Radix), Tailwind 3, axios, currency.js (деньги), latin-to-cyrillic + convert-layout (транслитерация/раскладка для поиска), lucide-react.
- Инфра/деплой: PM2 (
ecosystem.config.js, порт 8082, nvm node 20, cwd/home/davr/chopar/crm_cart), сервер choparpizza.uz. Bun + yarn (оба лок-файла). - Данные: внешний REST API; бэкенд — CRM Bitrix24.
- Заметный тулинг: shadcn/ui (components.json).
§03
Что реализовано
Старые сообщения — мусор («asd», «dsad», «sss»); у декабрьского rewrite — чистые.
- Модернизация на Next 16 + shadcn/ui (
5217b80) — полный rewrite легаси-версии. - Поиск с транслитерацией и конвертацией раскладки (
3bf9ee1 translit, см.hooks/use-products.ts). - Виртуализированный список товаров (
components/products/product-list.tsx). - Корзина с модификаторами (
5af701a ability to remove modifier,c3c454e stock,6a0d6aa fix of stop text). - Рекомендованные товары (
bfc5359 related products). - Фикс PM2/деплоя (4 коммита: путь к node v20.19.0, cwd, запуск next через node).
- Объём: 45 коммитов, ~44 от пользователя. Активность короткими всплесками; главный всплеск — декабрьский rewrite 2025.
§04
Технические челленджи
- Виртуализация списка товаров (
product-list.tsx,@tanstack/react-virtual):useVirtualizer({ count, estimateSize: () => 44, overscan: 8 })с абсолютным позиционированием строк внутри 520px скролл-контейнера. → производительный рендеринг большого каталога без лагов; понимание виртуализации. - Умный поиск с транслитерацией и переключением раскладки (
hooks/use-products.ts):convert-layout/ru+latin-to-cyrillic—product.NAME.includes(translit(lowerSearch)), так что оператор находит товар, даже набирая латиницей или в неправильной раскладке клавиатуры (частая боль для RU/UZ-ввода). → продуманный UX под доменную локаль. - Оптимистичные обновления корзины (
stores/cart-store.ts, Zustand):optimisticIncrement/Decrement/Remove+ флагisUpdating— мгновенный отклик UI до подтверждения сервером (декремент с гардомUF_QUANTITY > 1). → паттерн optimistic UI поверх CRM-бэкенда. - Денежные расчёты через
currency.js(без float-артефактов). - Интеграция с Bitrix24 (
UF_*userfields) — адаптация UI-стора под схему CRM.
§05
AI-разработка
- Найдено сессий: 0 для точного пути. Локально есть
.claude/(настройки) — проект, вероятно, разрабатывался с Claude Code, но сессии не сохранены в профиле пользователя (или удалены / находятся на другой машине). - Что делалось с AI: косвенно — декабрьский rewrite на Next 16/shadcn с чистыми сообщениями коммитов выглядит AI-assisted, но прямых сессий нет.
- Без данных сессий — никаких выводов о AI-воркфлоу.
§06
Достижения и метрики
- Solo-инструмент, переписанный на современном стеке (Next 16 / React 19 / TanStack / Zustand / shadcn).
- 3 конкретных инженерных приёма в небольшом объёме: виртуализация, поиск с транслитерацией, optimistic UI.
- Реальное продакшн-использование (PM2, CRM Bitrix24 сети Restaurant chain (UZ)).
- Скромный масштаб (одностраничный инструмент, ~5 групп компонентов).