Digital агентство полного цикла
WP PWA Generator — собственный плагин: WordPress-сайт превращается в приложение
Сайт на WordPress у владельца уже есть, приложения нет. Сделать его руками — значит написать манифест, написать service worker, нарезать полтора десятка иконок под все платформы и собрать оболочку приложения; владелец сайта этого не умеет и не должен уметь. Отдельная сложность — хостинг: composer и сборщики есть далеко не везде, а плагин обязан работать на любой площадке.
Что сделали
- Плагин собирает самостоятельное приложение в папку на этом же сайте — по умолчанию /app/, а если писать в корень нельзя, wp-content/uploads/pwa-app/. Туда кладутся index.html, service worker, manifest.webmanifest, иконки, splash-экраны, стили и скрипты; содержимое приложение берёт с этого же сайта через WP REST API.
- Первое приложение появляется само, сразу после активации: имя и описание берутся из настроек сайта, иконка — из логотипа или рисуется из первой буквы названия. Владелец открывает админку и видит работающее приложение, а не пустой экран с кнопкой.
- Оболочка для посетителя: лента материалов с подгрузкой по мере прокрутки, экран материала, выбранные страницы сайта в меню, поиск, рубрики и метки как фильтр, чтение офлайн и понятный экран «Нет сети» вместо белого пятна.
- Приглашение установить приложение: кнопка на Android и на компьютере, подсказка «Поделиться → На экран „Домой“» на iPhone и iPad.
- Приватность по умолчанию: приложение показывает только то, что REST-интерфейс отдаёт неавторизованному гостю, — закрытый и парольный контент в него не попадает.
- Иконки нарезаются из одной картинки: 48, 72, 96, 128, 144, 152, 167, 180, 192, 256, 384, 512, maskable, apple-touch и favicon, плюс девять splash-экранов под актуальные iPhone и iPad. Предпросмотр показывает иконку круглой, квадратной и maskable с безопасной зоной — до сборки, а не после.
- Шесть модулей, которые включаются галочкой и по умолчанию выключены: Web Push на собственных ключах VAPID (без Firebase и посредников), расширенный офлайн со стратегиями и лимитами по каждому виду ресурса, биометрия (замок приложения и вход по passkey), геолокация с картой на тайлах OpenStreetMap, отложенные действия с отправкой при появлении сети, генерация иконки нейросетью. Выключенный модуль не грузит в приложение ни байта своего кода.
- Раздел «Продвижение»: блок и шорткод с кнопкой установки и инструкциями под iPhone, Android и компьютер, готовая страница «Как установить», черновик новости-анонса, QR-код, который рисуется на самом сайте без обращения к чужим сервисам, и пункт меню. Всё выключено по умолчанию; страница и запись создаются по кнопке и остаются черновиками, пока владелец их не опубликует.
Стек и технологии
WordPress и PHP
- WP_Filesystem — запись собранного приложения в папку сайта
- WP REST API как единственный источник содержимого приложения
- Редактор изображений WordPress — нарезка 15 размеров иконок и 9 splash-экранов
- Запасной каталог в uploads, когда в корень писать нельзя
- Девять вкладок настроек в админке, PHP 7.4+, WordPress 5.8+
Браузерные технологии
- Service worker со стратегиями кэширования по видам ресурсов
- manifest.webmanifest и системное приглашение установки
- Web Push на своих ключах VAPID: очередь партиями, отчёт о доставке
- WebAuthn — замок приложения и вход в аккаунт по passkey, без пароля
- Background Sync — отложенное действие уезжает один раз, а не дважды
- Geolocation и карта на тайлах OpenStreetMap, без ключей и платных сервисов
Инженерное решение
- Ни одной зависимости: нет composer, npm, vendor/, node_modules/
- Ни одного обращения к CDN и ни одной чужой JS-библиотеки в собранном приложении
- Файлы из архива — ровно те, что поедут на сайт: сборщик нельзя запустить на чужом хостинге, значит его не должно быть вообще
- Каждый модуль изолирован и не подключается, пока выключен
- Лицензия GPL-2.0-or-later
Результат
Версия 0.2.0, 515,7 КБ, PHP 7.4+ и WordPress 5.8+. Плагин раздаётся бесплатно: сайт получает установку на домашний экран, чтение офлайн и push-уведомления без единого внешнего сервиса и без сборщика на хостинге.
