initial site

This commit is contained in:
merrow committed 2026-10-11 22:24:54 +05:00
commit da5b259d06
167 files changed
+34157

No files matched your search

+65
View File
@@ -0,0 +1,65 @@
# Аудит и изменения проекта НЕОН
## Что проверено
- Исходная структура проекта, `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.