Milestone 0/1: shell, calendar/psalter/hours scaffold, Prime
Deploy / deploy (push) Failing after 1m8s

Client-side-first PWA (Vite/TS, no backend) per the approved plan: day-
navigable shell listing all 8 hours, Prime fully resolves via the
calendar -> psalter -> ordo pipeline, the other 7 hours are registered
but flagged not-implemented. Sanctoral/temporal calendar data uses a
day -> id indirection layer (saints, easter-offsets, fixed-date-calendar)
so reassigning a feast to a different day is a data edit, not a code
change. Docker (Caddy-serving-static) + Gitea CI workflow scaffolded to
match the eec/drip/bookshop operational pattern.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-09 15:20:06 -04:00
commit a5dc6502d7
53 changed files with 8634 additions and 0 deletions
+18
View File
@@ -0,0 +1,18 @@
# Offsets in days from Easter Sunday (0). Negative = before Easter, positive
# = after. Covers the whole Easter-anchored span: Septuagesima through the
# last Sunday of Trinitytide. A temporal-id's *name* (and hence whether it
# reads "trinitytide" or "time after pentecost") lives here as data, not as
# a compiled TS enum — see calendar/types.ts's Season type.
#
# PLACEHOLDER: only a handful of anchor points, to prove the shape. The full
# set of Sundays/ferias between anchors is content-authoring work for
# milestone 4.
offsets:
-63: septuagesima-sunday
-56: sexagesima-sunday
-49: quinquagesima-sunday
-46: ash-wednesday
0: easter-sunday
39: ascension-thursday
49: pentecost-sunday
56: trinity-sunday
+18
View File
@@ -0,0 +1,18 @@
# Fixed civil-calendar dates (MM-DD) that anchor part of the temporal cycle
# and don't move with Easter at all — unlike easter-offsets.yml.
#
# Deliberately NOT covering Advent or the Sundays after Epiphany here, even
# though they're "near" these fixed points — both have a wrinkle that isn't
# a plain fixed date:
# - Advent's start is "the Sunday nearest Nov 30" (equivalently, the 4th
# Sunday before Christmas) — a nearest-weekday-to-a-fixed-date rule, not
# a fixed date or a numeric offset.
# - Epiphanytide's *start* is fixed (Jan 6), but its *length* is secretly
# Easter-dependent: how many Sundays after Epiphany you get before
# Septuagesima cuts in varies with how early Easter falls that year —
# i.e. this file's fixed end and easter-offsets.yml's Septuagesima
# start have to arbitrate a boundary at resolution time.
# Both are milestone 4 occurrence-resolution logic, not data-file entries.
dates:
"12-25": christmas-day
"01-06": epiphany
@@ -0,0 +1,9 @@
# PLACEHOLDER — demonstrates the saint-record shape only. Not a real saint,
# not a real rank, not a real day assignment (see sanctoral-calendar.yml for
# where this id gets pointed at a day). Which day(s) point here can change
# freely without ever touching this file.
id: example-confessor
name: "Example Confessor (placeholder)"
rank: placeholder # real rank scheme is a milestone 4 decision, not made yet
common: common-of-a-confessor-not-bishop
propers: null # set to a propers id once/if this saint has a full proper
+12
View File
@@ -0,0 +1,12 @@
# Maps a calendar day (MM-DD — the sanctoral cycle repeats every civil year
# regardless of weekday, unlike the temporal cycle) to the saint-id(s)
# celebrated that day. This indirection is the whole point: to move a saint
# to a different day, edit this mapping. The saint's own record
# (data/calendar/saints/<id>.yml) never changes — it's the same record
# whichever day points at it.
#
# PLACEHOLDER: "01-01" -> example-confessor is fake data proving the shape,
# not a real calendar assignment. Real sanctoral content-authoring
# (a pre-1910-leaning calendar, per the plan) is a separate task.
days:
"01-01": [example-confessor]