Files
2026-10-11 22:24:54 +05:00

6.4 KiB
Raw Permalink Blame History

Аудит и изменения проекта НЕОН

Что проверено

  • Исходная структура проекта, 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.