History & research
Bible Timeline
A chronology search engine that makes calendar choices, interpretive assumptions, and timing constraints explicit.
Technologies: Crystal · Constraint solving · CSPICE
Stage: Research software; chronology model under active refinement
Chronology as a constraint problem
I’m building a research tool for exploring Biblical chronology. It models relationships among events, calendar systems, ages, and reigns, then searches for combinations that satisfy the selected timing constraints.
The engine is written in Crystal. Its modeled timeline connects the creation and patriarchal accounts with the Exodus, temple construction, the monarchy, and later historical anchors. It produces candidate timelines with day-level dates and machine-readable output.
The emphasis is on making the assumptions inspectable. A surviving candidate is a chronology consistent with a particular set of choices; the search does not turn those choices into a uniquely established historical conclusion.
Making interpretation part of the model
Calendar selection, age reckoning, reign boundaries, and overlapping reigns can change the dates implied by the same set of passages. The engine represents alternative readings as explicit parameters instead of hiding one interpretation inside the implementation.
A chronology uses a continuous absolute day index for arithmetic, while exposing the calendar dates for each era. That lets the model handle a calendar change at the Exodus without losing continuity between the two sides.
Astronomical calculations provide another comparison point. The project integrates CSPICE and DE441 ephemeris data to evaluate astronomical anchors alongside the textual timing constraints.
Searching without keeping every possibility
The engine uses depth-first search and backtracking. It chooses parameters, derives the events that can already be calculated, and rejects a branch as soon as a relevant constraint fails.
The order matters. A cheap check that rules out many possibilities belongs early in the search; an expensive calculation should wait until it has a viable candidate to evaluate. Long chains of ages or reigns can also be represented as aggregate span domains, reducing unnecessary intermediate states.
The implementation includes bounded caches, search telemetry, and process-level sharding. These support profiling and larger runs while keeping memory use and work allocation visible.
A research tool I can question
The engine enumerates surviving candidates, exports timelines and summaries, and supports audits of individual interpretation families. The model continues to change as I refine constraints and compare the implications of different readings.
This project combines my interest in Biblical history with the engineering work of domain modeling, calendar arithmetic, search, and performance analysis. The useful result is an explanation of what a candidate depends on, as well as the dates it produces.