Building Eortologio Offline Database: Yearly Greek Nameday Calendars from Orthodox Pascha
The Motivation Behind the Project
Greek name days (εορτές) mix fixed calendar dates with movable feasts anchored to Orthodox Pascha. The Eortologio mobile app already computes this entirely offline—Meeus/Jones/Butcher Julian Easter converted to Gregorian, plus dozens of Pascha-relative nameday rules and fixed JSON datasets. To share that calendar with other clients without shipping the full app logic, I carved the same calculation into a standalone Node.js builder that emits one GitHub Release per year, following the same zero-hosting pattern as my anime and media offline databases.
Core Features and Design Goals
- App-Parity Calculation: Ports the Eortologio mobile engine—Orthodox Pascha, movable namedays (Χλόη, Θεόδωροι, Πάσχα names, Γιώργος/Μάρκος transfer, Αγίων Πάντων, Προπάτορες), and fixed namedays/holidays JSON.
- Full-Year Day Array: Generates 365/366 day records with celebrating names, saints, and holidays for every Gregorian date in the target year.
- Pascha & Movable Index: Top-level
pascha,movableFeasts, andmovingNamedaysfields for clients that only need feast offsets. - Yearly GitHub Releases: Cron on 1 January (plus manual dispatch) publishes
eortologio-YYYY.jsonand a minified twin under tagYYYY. - Zero Runtime Hosting: Large calendars stay out of git; consumers download from Releases CDN, same pattern as anime-offline-database.
Deep Dive: How It Works Under the Hood
Movable Greek namedays are not a simple lookup table: St. George and St. Mark transfer after late Pascha, Χλόη falls on the first Sunday on or after February 13, and Αγίων Πάντων carries a large non-calendar name list fifty-six days after Easter. By keeping one shared calculation module and feeding it fixed datasets copied from the app, the yearly builder stays in lockstep with what users see in Eortologio—without scraping or maintaining a remote nameday API.
Technical Implementation
- Mirrored Meeus/Jones/Butcher Pascha with calendar-day arithmetic so CI (UTC) and local builds agree on civil dates.
- Structured release assets with schema metadata, year tag, and statistics-rich release notes for discoverability.
- Configured
workflow_dispatchyear input so historical or next-year calendars can be regenerated on demand.
Architecture Overview
GitHub Actions checks out the repo, resolves the target year, runs node build_database.js (fixed JSON + Pascha engine → dist/), then creates or updates a GitHub Release tagged YYYY with minified and pretty JSON via gh release.
The Technology Stack
Node.js, GitHub Actions, and the Eortologio app's Orthodox calendar / nameday logic.
Final Reflections
When mobile apps already own correct domain logic, the cheapest open dataset is often that same engine packaged as a scheduled release pipeline—not a new API or scraped mirror.