A Jekyll-based digital storytelling platform for creating interactive narratives with maps, timelines, and multimedia content.
Weaving Histories is a scrollable storytelling framework that combines:
- Interactive maps with zoom and pan navigation using Leaflet.js
- Timeline visualizations for chronological narratives
- Video integration with YouTube embeds
- Multi-layered content with expandable information panels
- Ruby (see
.ruby-versionfor the specific version) - Bundler gem
bundle installStart the local Jekyll server:
bundle exec jekyll serveThe site will be available at http://localhost:4000/weaving_history/
Note: If you modify _config.yml, you must restart the server for changes to take effect.
Stories are defined in _data/story.json as an array of step objects. Each step represents a scroll position that triggers different media views and content.
{
"id": 1,
"question": "The main question or title for this step",
"answer": "Brief introductory text visible in the scroll panel",
"view": "map",
"media": {
"type": "map-image",
"src": "/assets/images/your-image.jpg",
"width": 2048,
"height": 1364
},
"x": 1024,
"y": 682,
"zoom": 0,
"pins": [
"900|600|Point A description",
"1020|720|Point B description"
],
"layer1": {
"title": "Additional Information",
"text": "Detailed content that appears in an offcanvas panel",
"media": "/assets/images/layer1-image.jpg"
},
"layer2": {
"title": "More Context",
"text": "Further details in a stacked panel",
"media": "/assets/images/layer2-image.jpg"
}
}map: Interactive image map with pan/zoomtimeline: Embedded timeline visualizationvideo: YouTube video player
map-image: Static image overlay (requireswidthandheight)map-tile: Tile layer for geographic mapsvideo: YouTube video (includestarttime in seconds if needed)
The map uses Leaflet's CRS.Simple projection for static images:
- Origin
[0, 0]is the top-left corner xandyvalues position the camera centerzoomlevels: negative values zoom out, positive values zoom in- Pins use
x|y|labelformat where coordinates match the image dimensions
weaving_history/
├── _config.yml # Jekyll configuration
├── _data/
│ └── story.json # Story content and structure
├── _includes/
│ ├── story/
│ │ ├── adapter.html # JSON to HTML renderer
│ │ ├── step.html # Individual step template
│ │ └── panel-*.html # Content layer templates
│ ├── head.html
│ ├── header.html
│ └── footer.html
├── _layouts/
│ ├── story.html # Main story layout
│ └── page.html
├── _stories/
│ └── *.md # Story markdown files
├── assets/
│ ├── css/
│ ├── js/
│ │ ├── story.js # Main storytelling runtime
│ │ └── leaflet-iiif.js
│ └── images/ # Story images
└── Gemfile
- Jekyll 4.3.4: Static site generator
- Bootstrap 5.3: UI framework with offcanvas panels
- Leaflet 1.9.4: Interactive map library
- Scrollama: Scroll-driven interactions
- YouTube IFrame API: Video playback
Edit _config.yml to customize:
title: Site titledescription: Site descriptionbaseurl: Path prefix for GitHub Pages deploymenturl: Full site URL
This site is configured for GitHub Pages deployment. The baseurl setting in _config.yml should match your repository name.