← Все ТЗ
📱 PWA + Web Push Notifications
План для всего портфеля — PWA работает на bestonline, следующий шаг Web Push
📅 Идея от 23.04.2026🎯 Для 6 сайтов
1 ✅ Что уже работает (bestonline preview)
manifest.json с корректным start_url
- Service Worker (
sw.js) с network-first для HTML
- Иконки 192/512 + maskable
- Кастомная плашка install снизу через 15 сек (Chrome/Android)
- iOS-инструкция — «Поделиться → На экран Домой»
- LocalStorage dismiss (не показываем неделю после отказа)
2 Что даст Web Push travel-бизнесу
| Сценарий | Пример уведомления |
| Горящий тур по направлению | 🔥 Новый тур в Турцию 5★ от 42 900 ₽ — −35% на сегодня |
| Снижение цены на просмотренный отель | Rixos Premium Belek стал дешевле на 12 000 ₽ |
| Напоминание о брони | Ваш тур стартует через 7 дней — чек-лист готовности |
| Виза истекает | За 3 месяца до поездки — напомним про визу |
| Новый сезон | Сезон Мальдив стартует — лучшие цены сейчас |
| Срочное (форс-мажор) | Изменение в расписании — свяжитесь с менеджером |
3 Архитектура
Пользователь → разрешает уведомления (browser permission)
↓
Service Worker (sw.js) подписан на Push
↓
Endpoint сохраняется в БД (Supabase)
↓
Когда событие (горящий тур, снижение цены):
Backend отправляет Web Push через VAPID
↓
Service Worker ловит event → показывает уведомление
4 Технический стек
- VAPID keys — public/private пара (один раз генерируем)
- Backend endpoint — Cloudflare Worker или Supabase Edge Function
- БД — Supabase таблица
push_subscriptions
- Push service — Web Push Protocol → браузерные push-сервисы
- Библиотека —
web-push (Node.js) или pywebpush (Python)
- Frontend — запрос permission → subscribe → отправить endpoint на backend
5 Типы подписок (topics)
| Topic | Что |
hot-tours-{country} | Горящие туры по стране |
price-drop-{hotel_id} | Снижение цены конкретного отеля |
booking-reminders | Напоминания по бронированию |
newsletter-weekly | Еженедельный дайджест |
visa-reminders | Для evisa24 |
Пользователь сам выбирает на какие топики подписаться — не спамим.
6 Правовое
- ✅ Подписка всегда opt-in (явное разрешение)
- ✅ Отписка одним кликом (в каждом уведомлении + настройках)
- ✅ ФЗ-152 — храним endpoint не как ПДн (анонимный токен)
- 🟡 Чёткая политика в
/privacy-policy
7 По сайтам портфеля
| Сайт | Приоритет | Тематика пушей |
| bestonline-tour.ru | 🔴 P1 | Горящие туры, снижения цен, сезоны |
| evisa24.ru | 🟠 P2 | Статус заявки, напоминания |
| ayurtour.ru | 🟡 P3 | Новые туры, акции |
| panchakarma-india.ru | 🟡 P3 | Сезоны, программы |
| viza-india.ru | 🟢 P4 | Изменения в визовых правилах |
| visa-russian.com | 🟢 P4 | EN-уведомления для иностранцев |
8 Порядок внедрения
🟢 Фаза 1 — MVP (1-2 недели)
- Сгенерировать VAPID keys (single command)
- Создать Supabase таблицу
push_subscriptions
- Написать Cloudflare Worker API — subscribe/unsubscribe
- Обновить
sw.js для обработки push events
- Добавить UI permission-запрос (после 2-го визита)
- Тестовое уведомление «Спасибо за подписку!»
🟡 Фаза 2 — Интеграция (2-3 недели)
- Интеграция с горящими турами (trigger при появлении)
- Price-drop подписка через wishlist
- Панель управления подписками у пользователя
🔵 Фаза 3 — Масштабирование
- Admin-панель для массовой рассылки (осторожно)
- Analytics — открываемость, CTR, отписки
- A/B тестирование текстов
9 Риски и ограничения
- Спам-риск — 1 неправильное уведомление → отписка + негатив. Строгая модерация триггеров
- Тихие часы — 22:00–08:00 не отправляем (обязательно)
- Частота — максимум 2-3 пуша в неделю на пользователя
- iOS ограничения — Safari поддерживает Web Push только с iOS 16.4+ и только если PWA установлена на домашний экран
10 Оценка
- VAPID keys: 5 минут (разово)
- Supabase schema: 1 час
- Backend API: 1-2 дня
- Frontend integration: 1 день
- Testing: 2-3 дня
Итого MVP: ~1 неделя
11 Связанные документы
Обновлено 24.04.2026 · PWA работает, Push — следующий шаг