ogrechkoandClaude Sonnet 5 93d947ff42 Add client history and an internal calendar
Клиенты (/clients): every phone number that's ever booked, aggregated
— booking count, total (confirmed-only) revenue, last booking date.
Click through to /clients/[phone] for the full history, newest first,
linking back to each booking.

Календарь (/calendar): month grid (Monday-start), a dot per day for
confirmed bookings, click a day to see its agenda below with links
into each booking. getCalendarBookings() queries with a 14-day
lookback so a multi-day stay that started the previous month but
checks out into this one still shows correctly on both.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Gh2UXUQUVBWroWEnn1FLFG
2026-09-13 19:56:48 +00:00

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) можно поставить как обычное приложение, без адресной строки браузера.

S
Description
No description provided
Readme
224 KiB
0 Stars 1 Watchers 0 Forks
Languages
TypeScript 93%
CSS 5.9%
Dockerfile 0.8%
JavaScript 0.3%