006d108f549362e3030fea233af389fc03a34029
Copy button text now matches the exact guest-facing template requested — "Ваше бронирование подтверждено!", Гость/Номер для связи/Объект бронирования/Количество гостей/Дополнительные пожелания/Скидка — dropping the internal-only fields (source, who booked it) since this text gets pasted straight to the client, not kept for internal records (those still show on the on-screen summary card). New checkOutDate column (nullable — null means same-day, the common case) lets a booking span multiple days; the Google Calendar link and copy text both show the date range when set. New discount column (same shape as prepayment) feeds the new "Скидка" line. Statistics page gains a money row for the selected month: total booked, prepayments collected, amount still outstanding, and total discount given. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Gh2UXUQUVBWroWEnn1FLFG
top-reservation
Бронирования Фестиваль-Парк: создание брони, список бронирований с фильтрами, статистика по объектам за месяц. Полная замена прежнего Telegram-бота — та же логика (/book, /week, /statistic), но обычной веб-формой, со справочником объектов вместо свободного текста и кнопкой копирования сводки бронирования.
Запуск в Docker
cp .env.example .env
# заполнить ADMIN_BOOTSTRAP_EMAIL / ADMIN_BOOTSTRAP_PASSWORD в .env
docker compose up --build -d
Приложение слушает :8087. При первом старте контейнер сам применяет миграции, создаёт админ-аккаунт из .env и засеивает стартовый список объектов (Баня, Афрейм, Дом с ванной и т.д. — можно менять в Настройки → Объекты).
Локальная разработка
npm install
cp .env.example .env
npm run db:migrate
npm run bootstrap-admin
npm run seed-objects
npm run dev
Установка как приложение
Страница отдаёт manifest.webmanifest — на телефоне через «Добавить на экран Домой» (Android Chrome) или «На экран Домой» (iOS Safari) можно поставить как обычное приложение, без адресной строки браузера.
Languages
TypeScript
93%
CSS
5.9%
Dockerfile
0.8%
JavaScript
0.3%