feat: add Latin route support, Angelus/Regina Caeli streak counter, and Eastertide liturgical adjustments
All checks were successful
CI / update (push) Successful in 4m58s

- Add /fides route with Latin-only mode for all faith pages (rosary, prayers, individual prayers)
- Add LA option to language selector for faith routes
- Add Angelus/Regina Caeli streak counter with 3x daily tracking (morning/noon/evening bitmask)
- Store streak data in localStorage (offline) and MongoDB (logged-in sync)
- Show Annunciation/Coronation paintings via StickyImage with artist captions
- Switch Angelus↔Regina Caeli in header and landing page based on Eastertide
- Fix Eastertide to end at Ascension (+39 days) instead of Pentecost
- Fix Lent Holy Saturday off-by-one with toMidnight() normalization
- Fix non-reactive typedLang in faith layout
- Fix header nav highlighting: exclude angelus/regina-caeli from prayers active state
This commit is contained in:
2026-04-05 22:53:05 +02:00
parent c316cb533c
commit 6548ff5016
24 changed files with 1110 additions and 108 deletions

View File

@@ -0,0 +1,24 @@
import mongoose from 'mongoose';
const AngelusStreakSchema = new mongoose.Schema(
{
username: { type: String, required: true, unique: true },
streak: { type: Number, required: true, default: 0 },
lastComplete: { type: String, default: null }, // YYYY-MM-DD of last fully-completed day
todayPrayed: { type: Number, required: true, default: 0 }, // bitmask: 1=morning, 2=noon, 4=evening
todayDate: { type: String, default: null } // YYYY-MM-DD
},
{ timestamps: true }
);
interface IAngelusStreak {
username: string;
streak: number;
lastComplete: string | null;
todayPrayed: number;
todayDate: string | null;
}
let _model: mongoose.Model<IAngelusStreak>;
try { _model = mongoose.model<IAngelusStreak>("AngelusStreak"); } catch { _model = mongoose.model<IAngelusStreak>("AngelusStreak", AngelusStreakSchema); }
export const AngelusStreak = _model;