A guided 33-day Marian consecration progressive web app (PWA) for daily prayer and reflection. Built with vanilla JavaScript ES modules, zero build tools, and zero dependencies.
- Four consecration modes — Traditional (St. Louis de Montfort), Contemporary, Lite, and St. Joseph
- Daily prayer reader — scripture passages, meditations, prayers, and litanies rendered from modular JSON files
- Catch-up system — summarised readings for missed days so you can stay on track
- Streak tracker — a discreet counter and optional calendar view of completed days
- Liturgical calendar — suggested start dates calculated to finish on major Marian feast days
- Light / dark theme — respects system preference, overridable with the 🌞/🌛 button
- Daily reminders — optional browser push notifications via the 🔔/🔕 button
- PWA install — installable on desktop and mobile via the ⬇️ button
- Offline-capable — service worker caches all shell assets and prayer content
- Accessible — WCAG AA contrast, full keyboard navigation, screen-reader labels throughout
- Bible reference tooltips — Logos Reftagger integration for inline scripture hover cards
| Layer | Choice |
|---|---|
| Language | Vanilla JavaScript (ES modules, no transpilation) |
| Styling | Plain CSS with custom properties |
| State | localStorage with a namespaced state module |
| Routing | Hash-based client-side router |
| Offline | Service Worker (Cache API) |
| Notifications | Web Notifications API + Service Worker messaging |
| Speech | Web Speech API (SpeechSynthesis) |
| Bible refs | Logos Reftagger (external script, graceful offline fallback) |
| Icons | Static PNG (192 × 192, 512 × 512, maskable 512 × 512) |
No build step required. Serve the project root with any static file server:
npx serve .Then open http://localhost:3000 in your browser.
Alternatively, use Python's built-in server:
python3 -m http.server 3000Note: The service worker requires HTTPS or
localhost. Most static servers onlocalhostwork out of the box.
Prayer files live under prayers/<mode>/day-NN.json and conform to the schema in prayers/schema.json. There are 132 files in total (4 modes × 33 days).
To contribute or correct prayer content, edit the relevant JSON file and open a pull request. Each file requires:
day— integer 1–33title— day title stringtheme— one-sentence themesections— array ofprayer,scripture,meditation, orlitanyobjectscatchupSummary— 2–4 sentence summary for the catch-up view
See prayers/schema.json for the full JSON Schema (draft-07).
The app is a static site with no server-side logic. Deploy to any static host (Netlify, GitHub Pages, Cloudflare Pages, etc.). All hosts listed serve index.html for the root path by default, which is all that is required.