CMS for Historical Timelines
I’ve often said that the last thing the world needs is another CMS. Yet, here we go…
I read a lot of history (literally five minutes ago, I finished And the Band Played On).
To understand history, nothing beats a timeline.
They help me put things into context. I like seeing when something began, all the different phases it went through, and what their relative timespan was. This is what it takes for me to sort something out in my head.
I’ve often thought about coming up with a software system to manage timelines – a “CMS for history,” if you will. This post is an exploration of that idea, along with a bunch of supporting links and random stuff I’ve gathered over the years.
My goal would be to find some data model that could represent the passage of time, the events that occur within it, the geographies associated with those events, and actors that were involved in them. With a solid model behind this, you could visually represent it in different ways, query it around the involvement of various entities, and even overlay different timelines to see where they intersect.
Some random use cases:
- Learning. This is the primary use case – to be able to more clearly visualize the passage of time and the events that occur within it. In particular, there are some historical threads I’ve been studying on and off for years. I’d like to start building and maintaining timelines of them all.
Event planning and coordination. I’ve been involved in some conference organization which required planning for specific things to occur, down to the minute in some cases – “At 8:32 a.m., Person X has to be Location Y,” etc.
Event reconstruction. This is a derivative of #1, but consider a crime scene or accident investigation that needs to recreate several places, people, and events across time.
Research organization. Lots of history books, autobiographies, and memoirs involve plotting a lot of observations on a timeline.
Real-life logging. Sometimes you need a log of where people are at specific times. Imagine application logging…but for people.
Last year, in an effort to research this, I made a post to the History Stack Exchange: Is there a formal ontology for documenting historical timelines? I wrote, in part:
How do historical researchers organize their notes? If you’re researching and documenting the history of…well, anything, are there systems designed to keep track of “the timeline”?
I’m reading “House of Gucci” right now, which is the long, storied history of the Gucci family and company (it was the source material for the 2021 movie starring Lady Gaga). It’s incredibly detailed, and I find myself wondering how did the author keep track of it all? It had to be something more elaborate than a bunch of sticky notes on a whiteboard.
The resulting answers were few, but quite good. I learned that techniques used in the study of history are known as “historiography” (someone edited my post and applied that tag). A few mentioned mentioned some resources (linked below), but honestly, I had trouble conveying the concept of serializing history to a data model. Explaining it to non-CMS people was harder than I thought.
I ended up adding a music analogy, which I thought worked pretty well:
Musical notation is a codification of a concept (a series of audible sounds). It’s a standard protocol, which many people understand, and it’s used to serialize music into a recordable form. It’s transferable across time and space – I can write some music down that someone can play later, because we both understand the protocol. Does anything like this exist for historical timelines?
Still, no existing solution jumped out at me.
Getting down to nuts and bolts, in my head, the data model looks something like this:
erDiagram TIMELINE }o--o{ EVENT : "linked to" EVENT }o--o{ ACTOR : involves LOCATION }o--o{ EVENT : "occurs at" EVENT }o--o{ SUBJECT : "affects" ACTOR ||..o{ ACTOR : "member of" LOCATION ||..o{ LOCATION : "contained within" TIMELINE { string id string name int period datetime basePeriod } EVENT { string id int startPeriod int endPeriod string status } SUBJECT { string id string name } ACTOR { string id string parentActorId string name } LOCATION { int id string parentLocationId string name }
A Timeline is the largest object. They’re the “container” through which you view everything.
A Timeline has a Period. This is the minimum period of time the Timeline breaks up into. If you’re studying the history of Christianity, it’s probably okay to have your period be a full year. If you’re reconstructing the meltdown of a nuclear reactor, you might have a period of a second or less.
A Timeline has a Base Period, which is a point in time when the timeline starts.
Events are assigned to Timelines. An Event could be assigned to more than one Timeline, though maybe that’s over-engineering.
Events are placed on a timeline by Start Period, which represents the number of Periods from the Base Period. If your Period is 1 year, your Base Period is 5000 BC, and an event has a Start Period of 6100, then the Event occurred at 1100 AD.
Events can have an End Period as well, for Events that span time. An End Period of NULL meants the event is a point in time, not a span.
Events can be linked to one or more Actors. This is a network of humans that are somehow involved in the Event.
Events can be linked to one or more Locations. This is a network of geospatial locations that are somehow involved in the Event.
Events can be linked to one or more Subjects. This is a network of objects (purposely left vague) that are somehow involved in the Event.
The concept of putting events on a timeline is neither novel nor complex. However, it gets a little daunting when I bring Actors, Subjects, and Locations into it. In some senses, I am theoretically trying to represent everything on Earth.
The trick is in the details, of course. How in-depth you decide to go depends very much on what you’re trying to model – what historical concept you want to represent.
In tossing this idea around, I’ve uncovered some interesting things:
History Timeline is a software package that purports to do exactly what I’m seeking. However, it appears to be client software, optimized for printing, rather than data-driven, server-based software.
Someone on the Stack Exchange question pointed me to LODE, the ontology for Linking Open Descriptions of Events. That comes very close to what I want to do, but it’s more a transmission or serialization format. Additionally, it’s been around since 2009, and not a lot seems to have happened with it (but maybe that’s because it was so good on first draft?). Still, there’s a lot to be learned there.
I purchased a “World History Timeline” from a company called World History and Mythology. I was a little shocked when it was a Microsoft Excel download. Yes, they created a macro-enabled Excel document that they used to plot out the history of the world – each cell is a period (using my nomenclature from above), and each row is a grouping of some kind. It’s a spectacular work, but it was very difficult to browse for me. Honestly, the idea of Excel as a content delivery platform had never occured to me…
MermaidJS includes a timeline option for a diagram type (clearly, this is simply a visualization format). Here’s an example:
timeline title Deane's Life 1971 : Born 1989 : Graduates High School 1997 : Graduates College 1999 : Marries Annie
- I even created my own web component to visualize timelines. It’s here (css is here) if you want to look at it. It’s unfinished, but it looks something like this:
I found a company called History Factory that compiles organizational histories for companies. I’m not sure if they have any specific or proprietary software that they use for this, but I love the idea that they essentially produce timelines for a living.
There are lots of “timeline modules” for various CMS platforms. For example, Timeline for Craft CMS and there are literally dozens for WordPress
TimelineJS is a gorgeous open-source visualization tool from the Knight Lab at Northwestern University. It’s amazing, but it’s a visualization/design tool. It doesn’t have a lot of sophistication in the underlying data. (Put another way: the tool I’m dreaming of would likely generate data to power TimelineJS installations, among other visualizations.)
Here’s a spectacular timeline of world history. Again, this is a visualization, and I think it’s mostly a community project, not a product or platform. But it’s beautifully done.
So, there’s a lot of prior art here. I’m trying to thread my desire in between what already exists and figure out where there’s overlap.
Here are some open(-ish) questions I’m dealing with –
Is this a CMS? Yes, I think it is. This, of course, is is a bit of a “Holy War” question, but the Events, Actors, Locations, and Subjects and the relationships between them are unquestionably “content.” The only novel thing is organizing them in relation to time.
Would you build it on top of an existing CMS? More than likely, yes. Like I said, the individual entities are content and can benefit from all the services that a CMS already provides.
How is this different than a web calendar? A web calendar is always a human-oriented period by default, since it’s concerned with scheduling things for humans (consider documenting the Age of Exploration on Google Calendar…). And while they do have some Location, people (Actor), and resource (Subject) functionality, it’s only in the context of invitations, so not quite the same thing.
What parts of this are…novel? Very little, honestly. As I mentioned above, the entities themselves are core content, and the linking from events to Locations, Actors, and Subjects feels like a semantic triple to me. I think I’m just needing to add some conceptual “overlay” for the timeline piece of it. I also like the concept of arbitrary-length Periods that build on the Base Period, but that’s just math.
After writing this, I’m beginning to think this is just an editorial UI on top of another data management tool… but that’s what all CMSs are in the end, really.
So, that’s it, basically. That’s the idea.
Believe me, the last thing I need to do is create another CMS. But this idea simply will not leave me alone. And some recent research I’ve been doing about AI in relation to CMS repositories makes me think this would be easier to build than I had originally feared.
Please, someone, talk me out of this.
Postscript: Timelines for Fiction
Earlier in this post I mentioned the book And the Band Played on, and in the Stack Exchange post, I referred to House of Gucci. These are both historical re-creations where timelines would be used for accuracy and research.
However, I just started reading the zombie novel World War Z (more known for a mostly unrelated movie with Brad Pitt).
I love the format of this novel. It’s a series of “interviews” with people who survived a zombie war that occurred sometime in the past. It’s very rashomonic in the sense that multiple people talk about the same series of events.
In just the first 30 pages, for example, I’m hearing bits and pieces about the “Warmbrunn-Knight Report” and “Flight 575” and some battle in Yonkers. None of this has been fully explained to me yet.
What this tells me is that there is a timeline to this. I assume the author wrote a detailed timeline of what actually happened, and then he wrote this novel by figuring out who had access to what information when. So there is a master timeline, and I’m just seeing different windows into it.
I love this use of a timeline. It’s something I would have never thought of.