Back to Blog

Building Eortologio Offline Database: Yearly Greek Nameday Calendars from Orthodox Pascha

Emmanouil Athanasopoulos2 min read409 words
Node.jsOpen DataOrthodox CalendarGitHub ActionsAutomation

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, and movingNamedays fields for clients that only need feast offsets.
  • Yearly GitHub Releases: Cron on 1 January (plus manual dispatch) publishes eortologio-YYYY.json and a minified twin under tag YYYY.
  • 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_dispatch year 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.