Serious Fiction for Serious People

I’ve just released an alpha-ish version of Serious, a project I’ve been working on for quite some time. Serious generates static websites from markdown, and there’s nothing really special about that, and that’s sort of the tale of Serious in general. It’s specific and narrow in scope. So let’s try to figure out why Serious exists, who it’s for, and whether I’ve wasted all of my time.

Serial Fiction

I’ve been wanting to get into writing a web serial for literal years. Initially I planned to use Blogger, or some other online blogging software, but what immediately struck me about those platforms was just how annoying it was to present structured, ordered content, particularly in an earliest-to-latest fashion. The only real thing you could do was create a hand-edited page on the site that collected all the episodes, in order, as links. So no excerpts or pretty stuff. Even next and previous buttons didn’t really work so well. They were there, sure, but often lost in a sea of suggestions, tags, similar posts–even ads.

I never did write any serial fiction, and the idea kind of died off. It’s possible on a blogging platform, but you really are fighting the platform on this one. Not only are you getting a lot of things you don’t need, but the things you do need are kludges and amateurish link-lists.

AO3 and FictionPress

I sort of forgot about FictionPress (and its big brother, FanFiction.net) at the time I was looking into doing a serial. AO3 (Archive of Our Own) wasn’t around yet; it’s a newer but very similar take on what the other two were doing. A few years later, maybe 2012-ish I wanted to try my hand at serial fiction again. I had actually seen some success releasing content on FictionPress in my late teens or early twenties, but nothing really episodic. When I came back to it, I found it…annoying. Not in any objective way; in a ‘not for me’ way. Even so, I know I can’t rag on a site that’s doing pretty good things without any explanation, so let me start by saying a lot of nice things.

I think FictionPress is a good choice for a lot of people. Particularly, if you don’t have either a lot of time to figure out your own blog-like thing, or you like the idea of an in-built audience (even if you’ll still need to fight for it). This is also true of AO3 and FF.net to, to a greater or lesser extent. You create a profile, there’s light social media elements, and you can leave comments and reviews on stories, or post your own.

They all look fairly similar, which makes sense: FF.net and FP.com were made by the same people, and AO3 seems to be a more modern take on the same concept. I’m not sure if AO3 was inspired directly or indirectly by the other two, in form or function, but they do wind up giving fairly similar vibes and user experiences.

Here’s some screen grabs. I blurred the text so as to not repost the writing itself without permission.

I’m absolutely not criticizing these sites for having similar sorts of functionality and UIs. It works well, and reinventing the wheel is for idiots (like me). Instead, what I think bothers me about these sites is that they feel like they miss the point for what I want. In the first place, I want my control over the theming of my story. In particular, I prefer a minimalist design when reading (think Medium), but I also want to be able to adjust what I don’t like about whatever pre-baked theme pops out of some web designer’s brain. Blogging and site-builder software typically gives users this ability.

The second thing is that I’m not really interested in the social aspect, or at least this implementation of it. While there are dedicated readers and writers on these platforms, a lot of engagement comes from “trading” reads and comments. You comment me, I comment you. It’s a fine system, and I don’t mind critiquing others’ work or reading it. In fact I enjoy it. But I want people to read my work for the same reason I read theirs; because they want to. Now, any platform can have those gross tit-for-tat undertones, and networking is good in itself, even if you have to engage in a bit of that. But I feel like I could network in a deeper pool on Twitter and write content on my own platform without having to balance that smaller (though more effective short-term) social network baked into the fiction platform.

One service I didn’t mention is WattPad. I think WattPad solves some of the problems of these other sites–particularly, I like the design, the layout, the functionality, and the general reading experience. But it’s social networking aspect is way, way, way more intense. From my own experience and the experience of other authors I’ve talked to, people on WattPad almost never just happen upon your story–you’ve got to go out and network until you’re sick of it, and then network some more, and probably a little more. And then the views will trickle in. It’s honestly a waste of time. It’s possible to make it there, and I’m sure some people have had good experiences; hell the front page shows some who must have. But the time investment for it seems out of whack to me. Whichever group of people wound up writing on WattPad seem to be way more interested in writing than reading, way more so than the other platforms. I can’t really recommend it. Again, I have a small sample size, so who knows? You may have a good experience. But I think the other sites here are better in terms of getting your content into people’s eyes.

Serious Begins

I’ve experimented, to a greater or lesser extent, with all of these platforms over the last decade or so. I don’t really dislike any of them. But as I learned more about web development and similar, I started to wonder, could I create a “blogging” engine for web serials? I knew, thanks to my time experimenting with Hexo (which powers this blog), that such a thing was possible. And my time working with Twine prepared me to understand how exactly a rendering system in a single page web app could be put together.

To start out, the goals of the Serious project were simple:

  • Stories should be separated into episodes. Users should be able to easily see an index of episodes, a list of the most recent episodes, and jump quickly to the first or last episode.
  • Each episode should have comments and the comment thread for each episode should be unique.
  • The generated web app should be simple, easy to read, and require no meaningful input from the author, outside of configuration options.
  • The generated web app should support, at the very least, CSS themes.
  • The author should write their posts in markdown, allowing simple formatting, embedded images, links, and other HTML features with a low barrier to entry for non-programmers.
  • Installing and using Serious should be as simple as possible.

The first thing I needed to do was create an framework that accepted a configuration file and a series of markdown files, and covert those, along with an HTML template, into an app and all the required data. I wrote a script that created an HTML file from a template and a config file, and then created a simple file handler that turned a directory of markdown files into a series of JSON files.

The second stage of development was the most fun for me; generating the web app. I started with marked.js, jQuery, and pure.css as a jumping-off point and wrote Serious’s renderer from there. The renderer parses the URL and determines what exactly it needs to render based on that information; an episode, a meta post, or some sort of episode list (recent episodes in reverse order or the whole episode list in order). In addition to this, I wrote quick sidebar links to take the user to the first episode, the latest episode, the episode list, or the recent episodes list.

Adding Disqus comments wound up being incredibly simple, though at first I made the mistake of assuming it would be complicated in a single page app. Disqus is awesome, and this turned out to be a totally painless process. Implementing Google Analytics was also a snap. After the rendering engine was complete, I hosted it on the awesome jsDelivr CDN to be served to the generated Serious apps.

The next part did prove a challenge, as I’ve never actually made an NPM package before. I had to publish several versions in a row to get things working right, but I learned a lot. I’ve worked with Node enough by now that the errors immediately made sense to me, but each error was hiding another, more critical error behind it. After releasing several versions in a row, I managed to get a stable working version out the door.

The NPM package is a CLI (command-line interface) app called serious. You need Nodejs to use it, but installing it is as simple as typing npm install -g serious-fiction into the console. This gives you access to the CLI; cd over to an empty folder and type in serious init to get started! If you’re interested, learn more here.

I also wrote up a couple themes for Serious, and more are on the way. There aren’t any releases yet, but you can still grab the appropriate theme.css file to use one if you want to.

Is Serious Right for Me?

Serious is probably not a perfect solution for every author, as it will require some know-how or some willingness to learn to actually put it into use for you. For the sake of clarity about who I envision this software is for, here’s a quick run down.

Assuming you’re new to web development, are you willing to learn some programming?

Serious is not meant to be advanced, or complicated, but it does use a lot of programming tools that most professional web developers use to make websites. These tools are built to be fast, effective, and efficient, not easy to use. If you can learn to set the clock on a VCR, you can learn this stuff, but it does take time and willingness. It can be rewarding though, and Serious may be a good way to get started.

Are you looking specifically for a tool to help you make episodic content?

Serious does one thing. It is not for blogs, personal web sites, portfolios, or press kits. There are probably some interesting use-cases for Serious that I haven’t thought of, but it is what it is.

Are you sure you wouldn’t be better served by another platform?

Websites like https://www.fictionpress.com/ and https://archiveofourown.org/, mentioned above, allow authors to make episodic content, too. You should choose Serious instead if you want to create your own site and host it–you don’t want to be boxed into someone else’s platform, or if the concept of building it yourself seems interesting.

Help!

In the near-ish future, I will be writing a complete “author’s” guide to using Serious. This guide will be written specifically for authors who have no experience with programming or the command line. It will cover everything from getting started with Nodejs to writing markdown to deploying your site on GitHub or NeoCities for free, and also a bit about setting up a custom domain.

This will not be a quick write, so if you’re interested in the software but just can’t figure out exactly how to use it, I hope to have something to help soon.

The Future of Serious

There’s a few other things I have in the pipeline for Serious. Some of these may not come to fruition, but I hope to get at least some out there.

  • I would live to try to build an editor for Serious, basically a GUI application that has a rich text editor and compiles your Serious story for you. This is not a small undertaking, and I’d need to make sure the main project is stable and reliable before breaking ground on something like this.
  • A standalone executable will some someday. It will still be a command-line application, but it will come with an installer to set everything up for you and you won’t need Node, though Node with it’s ease of updating will always be the ideal way to use Serious. This will definitely happen, at least for Windows machines, but it will happen after the project stabilizes.
  • More themes are in the pipeline. I feel like we have a few bases covered already, but I’d like to get a few more out there.
  • Swappable templates for the html of the app is a long-term goal, but isn’t currently being worked on. This will allow way bigger UI changes than a theme will allow, and also allow the web app to load it’s scripts locally so authors can edit the rendering engine. Again, this is a long-term goal, no ETA.
  • I think the ability to run custom scripts in the app similar to the way the themes work isn’t a terrible idea. I would need to wait for the project to fully stabilize and have a reliable API, and I’d need to write API docs though. Whether this happens or not will probably be based on if it’s requested. It’s possible, but not low-hanging fruit.

In Other News

Some other news from my world:

This has already been a busy year for me! Once Serious stabilizes, I’ll probably take a break from my open source projects to get back to creating my own things, particularly my games. I also plan to start a web serial, but it may not be released under the “Chapel” pseudonym. Of course, seeing someone using Serious may tip you off if no one else likes the app, so we’ll see.