The Infinite Tale Returns!
The briefly available passion project, allowing people to create stories collaboratively, is back! (mostly)
The Infinite Tale is a collaborative story website that I created and hosted for a brief period of time in 2023. It was never going to make money… so when the money ran out for (production quality) hosting costs, it had to come down. It was sad as I love the concept and there were people actually using the site for turn-based, multi-directional storybuilding. It was neat to see what people came up with not only individually, but when needing to build off of someone else’s story. Alas, it had to come down… the money just wasn’t there.
I’m happy to say that my little passion project is back! It’s a little slower… A little less available… but much cheaper to host… so I think I’ll be able to keep it running for the long term. At least, that’s my goal.
What is it?
The Infinite Tale allows anyone to start a story and then allows any number of other people to continue that story in any direction they like. Those stories can then be read by anyone. At the end of any given passage may be a number of “next” passages that the reader can follow to take the story in one direction… then back up and read how the story might go in another direction. Anywhere along the way that reader can contribute their own “direction” for the story to go, and that option will then be presented to others to read as they explore the stories in the site.
I feel like this model presents a lot of possibilities for creativity by virtually anyone because you don’t have to have the whole story (and in fact, you shouldn’t). The goal is to just contribute a little to the overall concept… One idea that moves the story forward and that might be something other people can continue and build on. Even if you’re “not an author”, it’s still easy to come up with a few paragraphs that might contribute a great direction for the story to go. Anyone can be a writer!
Professional authors may even see great potential and growth by playing in The Infinite Tale by forcing them to step outside of their own brain or world. In The Infinite Tale, you’re responding to passages written by other people and having to think from their perspective as you continue their concept in your direction. This forces thinking beyond the ideas or perspectives that an author may be familiar with and stretches the brain in new directions. I believe The Infinite Tale is the ultimate answer to writer’s block as one is forced to think in new and different ways than we might on our own.
A Portfolio Property
While I’ve done software development for years in any number of roles, I’ve never really had a portfolio of reference work I could share with prospective employers. Most of my work as been internally-focused and therefore couldn’t be shared with the world. Plus, that work was technically owned by them… I had no rights to those solutions… so using them as portfolio pieces wasn’t a possibility.
The Infinite Tale is 100% mine.
Everything about The Infinite Tale was conceived by me, written by me, and managed by me. Many of the graphics were in collaboration with a graphics designer… but everything else about the site is me. Every line of code (C#, HTML, CSS, JS), every placement of a button, and yes, every bug, was written by my hands. The architecture internally, how it’s hosted, the deployment pipeline, all me.
The Infinite Tale in its current form is more portfolio piece than production solution. This is a demonstration of “See, I can write stuff!” as much as it is a fun plaything. While I’m not (currently) making the source code public, the solution is, and I think it’s solid resume material.
Technology
For those that are curious, The Infinite Tale uses the following technologies:
C# ASP.net 9 Razor Pages ( plus HTML/JS/CSS)
I’ve been writing C# since Microsoft .NET Framework 1.1, so it is basically my native language. I felt Razor pages (as opposed to Blazor) was more appropriate as the model fo the platform is more “page” based as you navigate the story. It’s not intended to behave like an actual application, but as a website.
Entity Framework Core 9 against MySQL
Given how native EF is to C#, I felt it was the best ORM for my needs. I won’t say it’s the best (I’m not necessarily a fan of it’s schema management and how that relates to deployment processes), but it IS native and it’s pretty good once you get the hang of it and learn to think in its terms.
Linux Docker Containers
I like the idea of demonstrating the cross-platform capabilities of .net core and maintaining my skills and knowledge of managing linux and containerized applications. Suddenly things like developing to be platform agnostic or managing persistent data matter.
Github
…Obviously.
Microsoft Azure
App Service
Having a primarily Microsoft background, targeting Azure seemed a natural choice for me. It’s definitely not the cheapest, but my existing knowledge of how Microsoft does things helps and encourages me to do things “The Right Way™️”.
Build Pipeline
The Azure Build Pipeline is connected directly to the Github repo such that any push to Main triggers a build and deployment to an Azure App Service Deployment Slot. Other branches are targeted by other deployment slots, allowing merges into the dev branch to be tested in Azure directly.
KeyVault
Critical secrets are stored in the KeyVault, and KeyVault is secured to only the service account of the App Service instance(s) and a distinct administrative account. Any other access or manipulation causes an alert to be fired, allowing some level of response. Note that The Infinite Tale is by no means intended to be a security or even truly secure platform… but some things SHOULD be secured properly.
Blob Store
Persisted data (beyond what is stored in the database) is stored in a blob store instance. Uploaded customer profile images, images used for publishing custom articles in the Articles area, and even some encrypted components (encrypted using secrets from KeyVault) all go here.
Twilio SendGrid
The Infinite Tale uses email for account confirmation and notifications, and Twilio is very well priced (at this scale) and is arguably the gold standard for outbound communications so it seemed an obvious choice.
Terraform (previously)
In its original deployment, the entire platform was managed in Azure via Terraform. This made sure everything was wired up correctly, deployed correctly, and could be validated at any time. the MySQL server deployment proved to be a little less convenient, but writing code is all about workarounds, so this was no exception. The current deployment is all manual, but I may put it back to Terraform at some point.
An important note is that the current deployment is NOT intended to be what some might call “production quality”. That is, it is not intended to be highly available, highly secure, highly recoverable, highly performant. It is certainly usable (and I do hope that people find it) but beyond minimal effort, I promise nothing to anyone anywhere. 😬
More Than It Seems
The Infinite Tale has a lot of interesting design in the user-facing portion of the site. Little things make me happy. I like the fact that every page load uses a different background (from a set collection of available images). I like the enforcement of the turn-based authoring model. I like that the passages use a different background based on the genre of the passage. I like the Favorites feature, the ratings…
…but there’s a LOT that users don’t see…
Users create the content in The Infinite Tale. Users tell the story. This means two things: We have to manage Users and we have to manage Content.
The Infinite Tale includes a (less well designed but fully funcional) behind-the-scenes interface for managing many aspects of the site, including:
Users and Roles
A typical user has the ability to create passages and tell stories, but that’s all. There are additional roles in The Infinite Tale in the back-end to assign users to additional roles and perform other operations focused on managing users and access.
Passages
Every Passage in The Infinite Tale can be managed, edited, or hidden in the back-end interface (and this is the only place that a published passage can be modified). This includes not only published passages but every user’s saved/unpublished passages as well.
There’s more than just users and user generated content.
Articles
The Articles section is effectively a complete WYSIWYG content management system. Articles in this section are authored within the live site itself… nothing is hard-coded in the site code.
Reports
User generated content means having to deal with those unfortunate users that create content that shouldn’t be in the tale. Passages can be reported and flagged for review by a content admin. This includes inappropriate, offensive, plaguerized, etc.
Feedback
Users can provide feedback about the site, request new features, or report difficulties with the site. The site incorporates a way to capture and manage that feedback internally.
My Baby
I’m actually quite proud of The Infinite Tale. I love the concept and I love that I managed to fully deliver a working solution to the world. I loved that people used it the first time… and some of the stories were really great… I hope people find it again. Who knows… maybe it could become a real thing…?