Elastic D&D - Update 1 - Project Introduction
Tags: python, elasticsearch
Published: 2023-08-26 03:04:31

## Dungeons & Dragons
[Dungeons & Dragons](https://dnd.wizards.com/start-playing-dnd), abbreviated D&D, is a tabletop role-playing game consisting of an adventuring party (the players) and a Dungeon Master, who tells the story. Many dice variants are used for skill checks, attacks, and damage, and players usually take extensive notes in order to remember what has happened along the way.

My personal experience with D&D began in 2020 during COVID quarantine. Our Discord friend group had never played, so a friend-of-a-friend ending up DM'ing for us. Since then, we have completed multiple campaigns and are currently in the early stages of our DM's homebrew campaign, meaning he completely wrote it from scratch. It is worth noting that we live all over North America, so we play virtually, as it would be nearly impossible to get us all in the same room.

## Elastic
The [Elastic Stack](https://www.elastic.co/elastic-stack/) is comprised of Elasticsearch (a NoSQL database allowing for data storage, search, and analysis), Kibana (a front-end for facilitating search and visualization of your data), Beats (lightweight data shippers to get your data to Elasticsearch), and Logstash (a pipeline for collecting, transforming, and processing your data).

My personal experience with Elastic began in 2017 at my place of employment, where I utilized the stack as a Security Analyst. I have since moved on from that company, but continue to use the stack daily as a Sr. Security Engineer in the automotive industry.

## The Correlation
As mentioned above, D&D players usually take extensive notes in order to remember what has happened during their adventure. Also mentioned above, my group plays virtually, so we are all using a computer to play the game. Because of this, I have been experimenting with different ways to record notes while playing.

Throughout the first campaign I used a Word document, which worked fine until you had to search for something that happened 6 months ago. Scrolling through a CTRL+F search is quite annoying and slow. In the next campaign, we implemented an Excel spreadsheet that was shared between all of the players. This was cool because we could link NPCs to quests, locations, etc. and be more organized, but searching for information was still quite slow. For our current campaign, using Elastic seemed like a logical choice for note taking. Notes are linked via text search, they are organized, and searching for information is FAST.

For example, a simple search of "Auburn Village" returns every note that I have taken in relation. These are timestamped, so I can quickly remember the flow of events, allowing me more time to play since I don't have to waste time flipping through notes.

![A Kibana search for "Auburn Village"](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7nny007iqrofkg2d3814.PNG)

## The Project
The first couple of weeks of note-taking with Elastic were so successful that I reached out to Andrew, the sales representative I have known my entire professional Elastic career. He got me in touch with Eddie, a community advocate, whose job is to find people like me, using Elastic to do interesting things, and give them resources to make them successful. While explaining my use-case to Eddie, ideas started flowing back and forth and, before I knew it, I had an entire list of things I could add to the scope of my note-taking experiment.

What started as simple note-taking has turned into an entire project and I could not be more excited. The vision of data-driven D&D may be in its early stages, but its potential for ease-of-use, speed, and outright fun are limitless.

## The Future
Among the ideas discussed by Eddie and I are the following:
* building a Python Streamlit application to take some of the guesswork out of note creation and search for those who may not know how to use Elastic -- I am finishing this up and will break down the code in a dedicated post next week
* using AssemblyAI to turn audio into text, allowing us to get an automatically generated summary by simply recording our session -- This will be included in the Streamlit code breakdown
* utilizing Elastic AI Assistant to consume the notes, allowing us to "ask" it questions and get an answer
* attempting to get D&D metrics (dice rolls, damage/healing numbers) so we can build fun visualizations, such as who was the deadliest player, who was the meat-shield, the MVP of the week, etc.

## Closing Remarks
Saying this all to say, stay tuned! Cool things are coming, more brainstorm sessions are being scheduled, and I will continue to update y'all along the way!

Check out the GitHub repo below. You can also find my Twitch account in the socials link, where I will be actively working on this during the week while interacting with whoever is hanging out!

[GitHub Repo](https://github.com/thtmexicnkid/elastic-dnd)
[Socials](https://allmylinks.com/thtmexicnkid)

Happy Coding,
Joe