7.9 KiB
Ponomar — Православный календарь PWA
Прогрессивное веб-приложение для православного церковного календаря, богослужебных текстов и чтений Писания.
Произведено из оригинального Java-приложения Ponomar от Александра Андреева, Юрия Шардта и Сергея Ф.
Демо: https://ponomar.atroshin.ru
Возможности
- Календарь — Просмотр сеток месяцев с литургическими днями, периодами поста, чинами и празднованиями. Поддерживает юлианский календарь с григорианскими эквивалентами.
- Service Reader — Сборка богослужебных текстов (часов, кафизм) из структурированных шаблонов с условной логикой.
- Bible Reader — Чтение Писания на 13 языках (церковнославянский, русский синодальный, KJV, Брентон, Вульгата и др.). Позиция чтения для каждой версии сохраняется между сессиями.
- Жития святых — 1203/3046 житий обогащены текстами из Четьи-Миней и Настольной книги Булгакова.
- Многоязычный интерфейс — Английский, русский, церковнославянский (со специальными шрифтами для церковнославянского).
- Цветовые схемы — Переключение между Стандартной, Тёмной, Сепия и Высокой контрастностью в настройках.
- PWA + Офлайн — Устанавливается на устройства. Предзагрузка данных (жития, календарь, переводы Библии) для офлайн-доступа через IndexedDB.
- Астрономия — Время восхода/заката и церковная фаза луны (день, тренд, освещённость) в панели дня календаря. Местоположение настраивается.
- Навигация — 3 элемента верхнего уровня (Calendar, Library, Settings) с выпадающим меню Library: Библия, Service (Часослов, Сборник, Молитвенное правило, Каноны и акафисты, Паримии, Пареклит, Ирмологий), Праздники (Минея, Постная Триодь).
Технологический стек
- TypeScript — полностью типизированный
- Vite — инструмент сборки
- Tailwind CSS v4 — CSS с утилитарными классами
- vite-plugin-pwa — PWA + service worker
Начало работы
npm install
npm run dev
Файлы данных в static/data/ отслеживаются в git. Единственный игнорируемый файл вывода — scripts/output/minei.json (33МБ источник Четьи-Миней).
Версия данных: DATA_VERSION в src/ui/app.ts управляет инвалидацией кэша. Увеличивайте её при реструктуризации данных (новые поля, перегруппированные пачки, обновлённые источники), чтобы пользователи получили свежие данные при следующей загрузке приложения.
Манифест предзагрузки: После добавления или удаления файлов данных перегенерируйте манифест:
npm run generate-manifest
Затем закоммитьте обновлённый static/data/shared/preload-manifest.json вместе с изменениями данных.
npm run build # продуктивная сборка
npm run preview # предпросмотр продуктивной сборки
QA / Валидация
npx tsc --noEmit # Проверка типов TypeScript
npm run build # Проверка сборки
npx tsx scripts/validate-data.ts # Главный валидатор
npx tsx scripts/validate-i18n.ts # Полнота i18n (en/ru/cu)
npx tsx scripts/validate-tabs.ts # Согласованность вкладок/шаблонов богослужений
npx tsx scripts/validate-menaion.ts # Валидация данных минеи
npx tsx scripts/validate-prayer-rule.ts # Валидация структуры правила молитвы
npx tsx scripts/validate-triodion.ts # Валидация периода Триоди
npx tsx scripts/validate-pentecostarion.ts # Валидация Пятидесятницы
npx tsx scripts/validate-holy-week.ts # Валидация Страстной седмицы
npx tsx scripts/validate-great-canon.ts # Валидация Великого канона
npx tsx scripts/assembler-test.ts # Интеграционные тесты сборщика богослужений
Категории литургических текстов (static/data/shared/services/)
- Triodion — 37 разделов (Масленица → Великий пост → Страстная седмица)
- Pentecostarion — 50 дней (Пасха → Все святые)
- Menaion (daily) — 367 ежедневных записей (одна на каждый день юлианского календаря)
- Menaion (feasts) — 34 неподвижных праздника с отдельными богослужениями
- Canons — Пареклит (будние дни, 8 гласов × 6 дней = 48), Осмогласник (воскресенье, 8 гласов), Великий канон
- Services — 78 богослужений с полными данными
- Horologion / Sbornik / Prayer Rule / Akathists / Parimii / Paraclete / Irmologion — коллекции суточного круга
- Lives — Жития святых (en/cu/ru, 1203/3046 с обогащённым life.text из Четьи-Миней и Булгакова)
Структура проекта
src/
core/ — Логика предметной области (календарь, пасхалия, сборка богослужений, i18n)
ui/ — Компоненты представления (приложение, календарь, библия, богослужения, настройки)
main.ts — Точка входа
scripts/ — Конвертация данных, миграция, валидация, обогащение и инструменты CLI
static/
data/ — Литургические данные в формате JSON (отслеживаются в git)
fonts/ — Шрифты для церковнославянского языка
icons/ — Иконки PWA
Лицензия
Такая же, как у оригинального Java-проекта.
Документация
- DATA_EN.md — Комплексная документация формата статических данных на английском языке
- DATA_RUS.md — Полная русская документация формата данных и процесса обогащения