# Аудит и изменения проекта НЕОН ## Что проверено - Исходная структура проекта, `package.json`, TypeScript-конфигурация и Vite-конфигурация. - Страница меню и все три набора данных: авторский чай, пивная карта, барное меню. - Все 57 файлов в `public/menu` и `public/menu/manifest.json`. - Поиск по проекту на предмет старого реестра изображений и неиспользуемых ссылок. - TypeScript-проверка и самотест движка миксов. ## Что изменено ### Фотографии меню Создан единый `src/data/menuPhotos.ts` с привязкой по `id` позиции меню. - 51 из 51 текущих позиций меню имеют привязанные фотографии. - Все 51 файла реально существуют в `public/menu`. - Для авторского чая использованы соответствующие изображения из того же набора; названия файлов исторически отличаются от текущих названий позиций. - 6 файлов из `public/menu` намеренно не привязаны: это изображения, которым в текущем каталоге нет соответствующей позиции (`photo`, два кальяна и три прочих позиции/сборы). Старый `src/data/menuImages.ts` удалён: он ссылался на несуществующие пути `images/tea` и `images/beer` и содержал неиспользуемые fallback-цепочки. ### Карточки меню - Фото добавлены непосредственно в существующие карточки без смены базовой стилистики. - Добавлена lazy-loading загрузка изображений. - При ошибке загрузки карточка автоматически возвращается к исходной иконке. - Кнопка `В корзину` интегрирована в существующую карточку. ### Корзина и управление количеством `src/components/MenuCart.tsx` и `src/pages/MenuPage.tsx` получили косметический рефакторинг UX. - На карточке позиции вместо однонаправленной кнопки теперь используется `В корзину`, а после добавления — полноценный степпер `− / количество / +`. - Уменьшение количества из меню сразу действует на выбранного гостя и удаляет позицию при снижении количества до нуля. - Выбор активного гостя в меню переведён с выпадающего списка на компактные переключатели. - В корзине количество гостей задаётся степпером 1–12, без громоздкого select. - Активный гость в корзине выбирается отдельными кнопками; новые позиции из меню попадают выбранному гостю. - Позиции по-прежнему группируются по гостям, но карточки стали компактнее и понятнее; перераспределение позиции между гостями сохранено. - Итоговая сумма, копирование заказа, очистка, `Esc`, блокировка прокрутки и хранение в `localStorage` сохранены. - Заказ никуда автоматически не отправляется — это рабочий список для оформления у официанта. ### Очистка проекта - Из моделей `teaMenu`, `beerMenu`, `barMenu` убраны старые поля/импорты изображений, которые больше не нужны. - Удалена дублирующаяся папка `public/images/menu`: приложение её не использовало, а сами актуальные фото находятся в `public/menu`. - Контейнерный Caddy удалён: Caddy работает на уровне хоста. - Docker-инфраструктура приложения возвращена отдельным `docker-compose.yml` + `Dockerfile`; HTTPS и доменная маршрутизация остаются на хостовом Caddy. - В контейнере используется nginx только как HTTP-сервер для собранного Vite `dist`. - `src/index.css`, `package.json` и `package-lock.json` не изменялись. ## Проверка - Статически проверены изменённые файлы и связи между карточками меню, активным гостем и корзиной. - `docker-compose.yml` и `Dockerfile` физически присутствуют в финальном архиве. - Полный `vite build` в этой среде не удалось выполнить: пакетные зависимости из `package-lock.json` не удалось восстановить через npm из-за недоступного registry/cache-пакета, поэтому результат сборки здесь не выдаётся за проверенный. - Финальный архив не содержит `node_modules` и `dist`; зависимости и production-сборка должны создаваться в целевой среде. ## Docker runtime - `docker-compose.yml` restored for the frontend container; Caddy is not containerized. - `Dockerfile` restored as a multi-stage build: Node builds the Vite app, nginx serves the resulting static files. - The app is published only on `127.0.0.1:8080`, so host-level Caddy can reverse-proxy to `http://127.0.0.1:8080` without exposing the app directly to the network. - `nginx.conf` contains SPA fallback and a `/healthz` endpoint. - `.dockerignore` excludes build/dependency artifacts from the Docker build context.