6.4 KiB
6.4 KiB
Аудит и изменения проекта НЕОН
Что проверено
- Исходная структура проекта,
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.ymlrestored for the frontend container; Caddy is not containerized.Dockerfilerestored 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 tohttp://127.0.0.1:8080without exposing the app directly to the network. nginx.confcontains SPA fallback and a/healthzendpoint..dockerignoreexcludes build/dependency artifacts from the Docker build context.