Mapping Stories Through Time: The Journey of Building StoryTerra
Have you ever finished a book set in feudal Japan and wondered what was happening in the Viking world at that exact moment? Or watched a film set in 1980s New York and wished you could explore other stories unfolding in that same decade? Or played a video game set in 19th century and wanted to know what other stories are happening in that time and location? I have. For me, the setting of a story, its specific location and time period, is a character in itself. It’s the magic key that lets you feel like you’re time-traveling.
I’ve always wanted a way to connect these threads, to see which stories were neighbors in time and space. I wanted a comprehensive database of books, movies, TV shows, and games, all mapped and time-lined. I searched for a website that would let me filter the world’s fiction by geography and history, but found nothing; there weren’t even databases containing this data.
So, I decided to build it myself. It sounded simple enough. It wasn’t!
Curating the Dataset: From Mess to Map
My journey began with gathering publicly available data on movies, books, TV shows, and games. The initial plan was to use a Large Language Model (LLM) to annotate this mountain of information with two new columns: “location” and “time period.” This was my first, and perhaps greatest, underestimation. The initial results were spotty. The LLM often returned “undefined” for both fields, as it lacked the context to make an accurate judgment.
I found out it was better to feed it more than just a title; I had to include the plot summary or description for each item so if the LLM is unable to accurately know the location and time period of the item, it can use the description to accurately set those data. This gave the AI the necessary context, but it massively increased the size of the input, making the annotation process very slow. And even then, the output was far from clean. The hard work was just beginning.
The first major hurdle was filtering the data. I had to manually sift through the results to remove settings that couldn’t be placed on a real-world map, fantastical realms, sci-fi planets, and everything in between. This manual process filtered thousands of entries.
Next came the task of unifying the location data. The AI would output “USA,” “United States,” “United States of America,” and a dozen other variations, all for the same country and even for cities, provinces, states, etc… To make the map functional, all these variations had to point to a single, unified location. This process couldn’t be fully automated. It had to be done manually, for every city, region, and country.
The same applied to the time periods. One entry might say “set in WWII,” another might say “1940s France,” another might just say “early 20th century.” I needed numerical start and end dates for every item, so again, I cleaned and standardized thousands of entries by hand. From “ancient China” to “post-apocalyptic future,” each had to be reduced to a usable, searchable time frame.
After filtering out tens of thousands of items due to messy or unusable data, I was left with the core of just over 100,000 annotated items for now, ready to be mapped.
Designing the Map Interface
The next challenge was the interface.
I wanted it to feel smooth, intuitive, and immersive. You click on a location, and all the stories set there appear. You adjust the time slider, and the map shifts to reflect that historical window.
A key feature I wanted was a hierarchical location system. I structured the data so that a city belongs to a province, which in turn belongs to a country (e.g., Paris -> Île-de-France -> France). This way, when you click on a country, the map fetches all the stories from the cities and regions within it, even if the item itself was only tagged with “Paris.” This makes exploring entire countries and regions truly comprehensive.
Story Cards
I designed the story items as expandable cards, each color-coded by media type to make them stand out. Clicking on a card reveals full details. For movies, shows, and games, you’ll find trailers and soundtracks from YouTube. I even added a pinning feature, so you can play music from a chosen story and keep it as your soundtrack while you continue to explore the map. For games, I sought out “walking in game” videos, which I felt perfectly captured the geographical spirit of the project.
UI Highlights:
- Cards for each item, color-coded and styled to reflect their category (game, movie, book, TV show)
- Trailers and soundtracks from YouTube embedded for audiovisual context
- Music player pinning , you can listen to music from the selected item while continuing to explore the map
- For games, I included “walking tour” gameplay videos to evoke the feeling of walking through the story’s setting
Time
For filtering by time, I wanted something more engaging than a simple date picker (though I included one for convenience). I built a custom time slider with nodes for centuries. As you hover over on a century, the node expand to show decades, and then individual years. Once a time is set, the entire map syncs, showing only the stories that occurred within your chosen time.
Extra Features
- A random button (based on filters you’ve set, like location/time selected, filters for showing specific item types)
- A search box for direct queries of titles of items
- A video tab that contains walking tours of real-world locations, so even outside of fictional stories, you can explore the geography. every city on the map has many walking videos, the hierarchical logic of locations applies here as well.
When a story card is expanded, all of its locations are highlighted and displayed on the map. You can click on any individual location to zoom in on it.
Challenges That Remain
Despite all the filtering, there are still edge cases. For example, two different cities across the world might have the same name. Occasionally, an item might show up under the wrong location because of this.
I’ve fixed many of the major cases, but some slip through. That’s why each card clearly shows the actual setting under the cover image , always check that for accuracy.
Where StoryTerra Stands Now
There’s still plenty to improve, better filtering, more consistent location and time annotations, and adding more items.
But in its current state, it does what I set out to build: a way to explore stories through geography and time. You can click on a place, slide through history, and see what stories unfold there, across books, games, films, and shows.
There’s a whole world of stories out there waiting to be explored, and this is one way to start uncovering them.
Explore StoryTerra:
🗺️ https://www.storyterra.com/
StoryTerra is a personal project created and maintained independently. If you find it useful or enjoyable, consider supporting to help with hosting costs and keeping the site online.
☕ Support the project
Thank you for your support!
