Development Overview¶
This page covers the tech stack, project structure, and core features of Chekameh from a development perspective. For step-by-step setup, see the installation guide; for how the pieces fit together, see the architecture guide.
Project structure¶
PersianCultureMap/
├── index.html # Entry point
├── data.js # Eras, cities, and poet data
├── ui.js # Panel system, state, event handling
├── styles.css # Styling and design tokens
├── map/
│ └── map.js # MapLibre initialization and controls
├── assets/
│ ├── fonts/
│ └── images/
├── docs/ # This documentation site
└── package.json
Tech stack¶
| Layer | Technology | Notes |
|---|---|---|
| Mapping | MapLibre GL JS (4.7.1+) | Loaded from CDN |
| UI framework | Bootstrap 5.3.8 (RTL) | Responsive layout, RTL support |
| Application logic | Vanilla JavaScript (ES6+) | No build step required |
| Fonts | Vazirmatn, Lalezar, Cormorant Garamond, Roboto Mono | See typography |
| Documentation | Zensical / MkDocs | Static site generator |
Browser support¶
Chekameh targets current versions of Chrome, Firefox, Safari, and Edge (90+), including their mobile equivalents. JavaScript must be enabled; no other runtime dependencies are required for end users.
Core features¶
- Interactive map — pan, zoom, and historical border overlays via MapLibre, with city markers that change based on the selected era.
- Time slider — navigates between the six historical eras, triggering an
eraChangedevent that the map and UI both listen for. - Poet and city panels — a single panel component renders city, poet, and work views, with a navigation stack for back/forward behavior.
- Chatbot — answers natural-language questions about poets, eras, and Persian literary history.
For the user-facing walkthrough of these features, see the getting started guide.
Data and state¶
All content lives in data.js as three structures: ERAS, CITIES (each with nested poets and works), and runtime state (currentEra, panelStack, cityMarkers). The architecture guide covers how these interact, and the API reference documents the functions for working with them directly.
Scalability¶
The current dataset (1 poets, 1 cities, 6 eras) is well within what the map and panel system are designed for — the architecture comfortably supports significantly more without changes to the rendering logic.
Next steps¶
- Installation guide — set up a local environment
- Architecture guide — codebase structure and data flow
- API reference — function-level documentation
- Contributing guide — how to submit changes