Whalefish was an experiment to build a flexible cloud-native CMS based on a user-defined document taxonomy. Each document type has a number of fields, which may be content, metadata or references to other documents in the taxonomy.
There’s no hard-coded concept of a Post, the document structure could represent anything from a blog, to a product catalog, to a photo gallery.
An initial version was started in 2016, built around similar technology to my blog and several other projects at the time: a Java web service implemented on Google App Engine, using the corresponding Google platform stack including Cloud Datastore. This attempt got fairly far, including document versioning, handling for multiple domains, preliminary hosting payment integration with Stripe, and an approval/publishing workflow. In the end it was the front-end elements which made the idea unworkable.
It had a set of mustache-based templates and layouts which could be composed in the administration UI to produce a rendered site from the taxonomy, but making this useable for end users was a challenge. Many low-code web design solutions such as Wix and Squarespace already exist, so I wasn’t going to do a better job with Whalefish.
When I decided to rebuild this blog I decided not to use what I’d been building for Whalefish and instead opted for a static Next.js generator with Markdown pages in Git. That’s been much more flexible for most of what I need personally from a content-based website, although there are still parts that are a bit clunky such as image handling.
I’ve since had another aborted attempt in 2020 to rebuild the idea on an AWS + Go stack, but that hasn’t got very far. I’d like to keep experimenting with this idea more, and it has evolved towards a headless API-first document store following the same taxonomy concept as the original, but dropping the complex templating system in favour of simplified pre-styled document rendering, leaving more complex layouts up to the implementor of the frontend.
This is not the only project where I have looked at concepts around document authoring and distribution.
- Communiscript was an attempt at enabling co-authoring of structured technical documents by breaking the document down into individually versioned paragraphs with comments and revisions.
- Kevalin is an ongoing experiment to enable peer-to-peer document publishing and referencing.