An accurate, cited, offline atlas of the biblical historical record.
From Creation through the patriarchs, the exodus, the kings and prophets, the battles of the Old Testament, the birth and ministry of Jesus, and the travels of the apostles.
Journeys is an accurate, cited, offline atlas of the historical record in the Bible. It bridges Scripture, ancient geography, and archaeology with a denominationally neutral stance.
One TypeScript codebase ships three ways:
- Web — static client-side PWA, instant loading, no API keys
- iOS — native app packaged via Capacitor with TestFlight distribution
- Android — native app packaged via Capacitor for the Google Play Store
- 132 archaeological & historical sites mapped across the Mediterranean and Near East
- 18 interactive journeys tracing routes from Abraham to Paul and Peter
- 154 stop-by-stop accounts with historical notices and scripture references
- 9 historical travel corridors (Roman surveyed roads, trade routes, sea lanes)
- 89 dated historical figures (prophets, judges, kings of Israel & Judah, foreign rulers, apostles)
- 60 miracle accounts (all 37 recorded miracles of Jesus + apostolic miracles in Acts)
- 38 Old Testament battles & conquests synchronized with ancient Near Eastern records
- 30 archaeological finds & 9 extra-biblical witnesses
- 1,164 academic citations — no claim rests on Wikipedia alone
- 10 MB bundled on-device SQLite Scripture database (complete KJV and ASV, 62,000+ verses)
Journeys is built upon strict accuracy principles enforced mechanically at compile time:
- Concrete Scholarly Sources: Tertiary sources (Wikipedia, devotional websites, popular encyclopedias) serve solely as orienting links. Every cited claim is backed by a primary text (Scripture, ANET, Josephus, Tacitus, cuneiform annals, Roman itineraries), an excavation report, or an academic gazetteer (Pleiades, DARE, Aharoni, the Sacred Bridge atlas).
npm run build:contentfails CI if any claim rests on tertiary sources alone. - Four Confidence Tiers:
high— Securely identified and physically or epigraphically attested.medium— Traditional or topographically apt, not definitively proven.disputed— Scholars actively disagree on location or identification.legendary— Preserved in later church or local tradition without early archaeological or textual support.
- Ambiguity Shown, Not Hidden: When scholars disagree on a site location, Journeys displays all documented rival candidates as hollow markers on the map rather than presenting a single guesswork pin.
- Graded Route Strokes: Geometry is classified as
surveyed-road(snapped to published Roman road surveys),reconstructed-land(historically argued corridor),sea-lane(sail route reconstructed from ancient notices), orschematic(connector). - Visible Review Status: Every claim clearly displays its status:
draft,self-reviewed, orscholar-approved. The release build gate (npm run build:content -- --release) intentionally blocks production store releases until qualified historical geographers sign off on high-confidence claims. - Scholarly Date Ranges: Dates are presented as historical ranges, avoiding artificial single-year precision where ancient calendars and records differ.
Journeys was engineered to work reliably in sanctuaries, classrooms, remote archaeological sites, and on airplanes:
- Complete On-Device Database: A 10 MB SQLite database containing the full text of the KJV and ASV is bundled into the client via WebAssembly (
sql.js). - Offline Vector Map: Basemap vector tiles and GeoJSON boundaries are packaged locally; no external tile servers are pinged during normal exploration.
- Zero Telemetry: No analytics, no tracking, no third-party ad networks, no cookies, and no network phone-home.
- Zero Accounts: No sign-in or account creation required. All reading notes and preferences remain strictly on your device.
| Layer | Technology |
|---|---|
| Core Framework | React 18 · TypeScript 5.7 · Vite 6 |
| State & Routing | Zustand 5 · React Router 6 |
| Mapping Engine | MapLibre GL JS 4.7 · Turf.js · PMTiles |
| Local Database | sql.js (SQLite compiled to WebAssembly) |
| Mobile Runtime | Capacitor 6 (iOS & Android) |
| Internationalization | react-i18next |
| Content Modeling | Zod (schemas emit TypeScript types + JSON Schema) |
| Testing & Quality | Vitest (120 unit tests) · Playwright (E2E) · ESLint |
- Node.js >= 20.0.0
- npm >= 10.0.0
# Clone the repository
git clone https://github.com/SeanLebida/journeys.git
cd journeys
# Install dependencies
npm install
# Start Vite development server
npm run dev# Typecheck TypeScript without emitting
npm run typecheck
# Lint codebase with ESLint
npm run lint
# Run Vitest test suite (unit + content integrity + component tests)
npm test
# Compile & validate content against accuracy gate
npm run build:content
# Full production web build
npm run build
# End-to-end tests via Playwright
npm run test:e2eNative platforms are synced from the production web bundle:
# Build web assets and sync to native containers
npm run build
npm run cap:sync
# iOS (Xcode required)
npx cap open ios
# Android (Android Studio required)
npx cap open androidjourneys/
├── content/ # Authored JSON datasets (journeys, sites, persons, artifacts, citations)
├── dist-content/ # Compiled SQLite database (content.sqlite) & bundle.json
├── docs/ # App Store and Google Play listing documentation & checklists
│ └── store-assets/ # High-resolution screenshots, banners, icons, and preview media
├── ios/ # Capacitor iOS native Xcode project & configuration
├── android/ # Capacitor Android native Gradle project & configuration
├── learnings/ # Architectural decisions, retrospectives, and session records
├── scripts/ # build-content.ts accuracy gate & asset generation tools
├── src/
│ ├── components/ # UI views (HomeView, CreditsView/AboutView, TabBar, SiteViews)
│ ├── content/ # Zod schemas, SQLite hooks, timeline models, scripture indexing
│ ├── i18n/ # Translations (en.json) & localization configuration
│ ├── map/ # MapLibre GL layer management, trace animation, basemap layers
│ ├── modes/ # Mode screens (TraceMode, AtlasMode, TimelineMode, BibleMode, LessonMode, QuizMode)
│ ├── platform/ # Unified native/web seam (bridge, storage, external URLs)
│ ├── state/ # Zustand stores (journey, map layers, notes, ui, quiz)
│ └── styles/ # CSS design system (tokens, fonts, global stylesheet)
└── tests/ # Unit test suites & Playwright E2E integration specs
The project has achieved milestones M0–M9 in release v0.3.14:
- M0 — Project scaffold, platform abstraction seam, Zustand state, i18n, CI pipelines
- M1 — Persistent offline MapLibre GL map engine & WCAG accessibility baseline
- M2 — Zod content model, automated
build-contentaccuracy gate, and bundled SQLite Bible (KJV + ASV) - M3 — Animated route tracing with graded travel paths
- M4 — Interactive sandbox atlas with toggleable historical layers
- M5 — Guided educational lessons with automated map choreography
- M6 — Interactive quiz engine with map-pin scoring
- M7 — Offline PWA service worker precaching full app shell, WASM, and 10 MB Bible DB
- M8 — Over-the-air (OTA) content update channels & apostolic traditions
- M9 — App Store & Play Store release packets, metadata, icon sets, and review verification
- MapLibre GL JS: BSD-3-Clause license.
- Ancient Geodata: Pleiades, Ancient World Mapping Center (AWMC), and ORBIS under open redistribution licenses.
- Scripture Texts: Public-domain translations (King James Version, American Standard Version).
- Typography: Ubuntu Font Family (Ubuntu Font Licence 1.0) and EB Garamond (SIL Open Font Licence 1.1).
This project is licensed under the MIT License.






