Building Historio: Episode 0
Creating an app to explore history that scratches my own itch. With NextJS, Supabase, Edge Functions, and a few clever AI Agents behind the scenes.
Introduction
I’m going to build something. I’ll get to what it is in a minute. But it’s worth making clear from the jump - more for me than you - that my intention here is to actually build, and make available, a new web app. Something built with new tech that I get to learn (yay). Something that serves as a creative outlet. And a challenge. And something to do on my computer while watching documentaries on the iPad lest I have to find an actual hobby.
Now for the what. I read almost exclusively history books. Further: I’m a nerd, so I take notes. What I love about history - of course - is that it actually happened, so my notes typically include dates (or at least years, or rough estimates of millenia for prehistory). Histories necessarily focus on one thing: A single war, or the history of a nation, for example. I’m biased towards extreme focus. My favorite histories - microhistories - attempt to describe a wide swath of history through a very narrow lens (like Salt). I’ve always been interested in how the disparate histories I’m reading about overlap with each other. What was happening elsewhere in the world during the American revolution? How was society developing in mesoamerica during the neolithic revolution in the levant? Or heck, what historical events did the pour souls from the Whaleship Essex miss while stranded in the South Pacific?
Historio will be a web app that takes multiple books or histories and juxtaposes them on zoomable, scrollable, totally nerd-out-able timelines. To supplement my notes, I’m using AI to extract and structure important or otherwise interesting events from books. It turns out AI is pretty good at this, so Historio is equally accessible to folks who don’t bring their own notes. My dream is to explore history through these timelines, with more and more interesting events appearing as I navigate the timelines and compare radically different stories that played out at the same time. If I sink enough time into this, maybe Historio can even recommend books on historical periods or events at the intersection of other histories being explored. (Anything to lessen the indecision of choosing my next book). There’s also potential to add some games (a la Economist Dateline, but for your favorite historical topics).
I expect Historio to be equally interesting to history nerds, teachers who want a quick AI-enabled way to generate accurate supplements for a lesson, and students who need a way to supplement their history project with a last-minute timeline that looks like they spent days creating it. In short: A one stop shop for a new kind of interactive timeline with deep historical context baked in.
Subscribe for updates as I build Historio. Expect posts on software and product design about every other week.
Follow Along!
So that’s the vision.
If you’ve made it to this point in this post, you may just be a huge nerd, too. If you want to follow along as I build Historio, subscribe to my Substack where I intend to post every couple of weeks about something interesting in the development process. I’ll describe a feature, or a challenge; something I can’t figure out or something that absolutely didn’t work. I’m open to discussing any of Historio’s features, including design and implementation decisions, in Substack’s chat. I’ve also published my project management space in Notion here in case that’s interesting.
I expect to do some deep dive tutorials on technical topics like implementing Supabase Auth, deploying a NextJS app with a mix of edge and non-edge functions, and my own getting started guide for Drizzle. All code for these posts will be published in this Historio Public githb repo.
The Stack
One motivation in building Historio is to generate ideas and learnings to write about. As such, I’m biased towards using new tech where I can. This includes:
NextJS to learn full-stack Typescript dev and form an opinion about React Server Components so that when I weigh on I can end the “are they good or bad” debate once and for all.
I’ll also be using NextUI with Tailwind (powered by Sass, because who has time for vanilla CSS?)
I want to find an airtable-like UI for slick editable tables because this need so often arises in other work I do. This is a rabbit hole I’m willing to go down.
Canvas or WebGL magic for the actual timeline component(s), probably wrapped in React to make my life a little harder. But who knows - I haven’t really explored the best way to do this.
Supabase for auth and Postgres. Auth because rolling your own auth is very two-thousand-and-ten. Postgres so I can maybe play with row level security and frontend DB clients? But I remain skeptical.
More supabase: Real-time API. I left my Django stack before I had a chance to play with Channels so I still haven’t scratched the itch of making a multiplayer web app.
Edge Functions using Vercel, Supabase, or Cloudflare to try and get a sense of whether these are actually ever useful or if it’s entirely a boondoggle for apps with fewer than a billion globally distributed users.
I want to contrast a few deployment patterns, including using Vercel and running the app in a docker container (or two) on a platform like Digital Ocean Apps. I’m particularly interested in being able to generate review apps on Vercel, even if the prod app is hosted elsewhere.
This sounds really interesting, Jordan. (Adam told me you are working on a cool history thing so I had to check it out. 😀) The tech speak is not my language 😂, but if I'm understanding the app right, it will help me find my next history read based on era/time period? If so that sounds super cool! Are you thinking about adding historical fiction into the mix at any point in the future?
This sounds really fascinating, Jordan! I, too, am a history nerd (or, just all-around nerd, really). When I taught World Literature to seniors, we created a timeline that showed when seminal world texts were written. Noting gaps and overlaps always led to good discussion. I can't wait to use your app when the time comes!