The Interledger Community 🌱

Cover image for - a framework for ethics and technical development in fiction publishing
Gavin Chait for Qwyre

Posted on - a framework for ethics and technical development in fiction publishing

Two months after my dad died, I was sitting on a beach in the Philippines writing my first novel. My dad's passing was expected. My writing trip long-planned. It's the sequence that wasn't the one I had hoped.

I wrote 2,000 words a day for a month, and, when it was done, the orbital prison of Tartarus and the remote Nigerian village of Ewuru were real.

Lament for the Fallen

Isolated and with his orbital city hiding in the rubble of a devastating war, Samara falls 35,000km to escape from the space-based prison of Tartarus, smashing into the jungle near an isolated Nigerian village. Struggling to heal, and hunted by a brutal warlord in a ruthless land, Samara searches for a way home to the woman he loves.

I never expected an agent or publishing contract, didn't want to rely on Amazon, and so I rolled my own. Within a few months, my long-term software roadmap became moot when Penguin Random House picked up LAMENT for publication. The world of creative self-publishing stops at the border of formal publication.

GitHub logo turukawa / whyqd

Whyqd is an extensible object-based wiki bringing revision control, content presentation, forking and embedding to any type of digital object.

A publishing house must have a list of titles, each within a set of genres conforming to the topics in the average bookshop. They make their money off their handful of giants, and do little to promote or develop the careers of their mid-list writers. You are expected to promote your own work, but you can't sell your own work. Twitter ok. Experimental self-publishing definitely not.

The challenge with lists and genres is that success is a game of whack-a-mole. Success leads to copycats, leads to perpetuation of specific norms. For African writers, this has meant we need to conform to an industry notion satirised by Binyavanga Wainaina in his frustrated guide on How to Write About Africa:

Never have a picture of a well-adjusted African on the cover of your book, or in it, unless that African has won the Nobel Prize. An AK-47, prominent ribs, naked breasts: use these. If you must include an African, make sure you get one in Masai or Zulu or Dogon dress.

A continent of 54 countries, countless ethnicities, and over a billion people reduced to a cartoon cameo in the mid-list.

A framework for African collaborative publishing

Umumtu ngumuntu ngabangtu

The African philosophy of Ubuntu can be summarised as "I am because we are." As I writer, I am both reader and writer because there are other writers. There is no line between writer and reader just as there is no line between genres, stories and influences.

Qwyre starts with the following simple principles:

  • All Qwyre users are creators,
  • A creator can perform any task of:
    • Reading,
    • Writing,
    • Editing,
    • Curating.
  • The path to publication requires appointing an editor and letting them decide when a creative work is ready,
  • Editors and curators are first-class citizens in the creative process and should be paid,
  • An forum of peers is there to resolve disputes,
  • Popularity can be gamed and is no guide to what a reader may enjoy,
  • All writers should have an equal shot at being read.

In practice, this implies moderated publication. There is no gatekeeping. We do not assign an editor and decide who gets published. All we require is that a writer recruit and appoint an editor, and that their editor gets to decide when their work is ready for publication. This will require an appeals process, and so we need an editors forum.

This leads to the following structured components to support a Qwyre workflow:

  • EPUB generator: convert a .docx file to a standards-compliant .epub,
  • Editor recruitment: manage the recruitment and contractual agreement between a writer and editor,
  • eReader: an online standards-compliant EPUB reader,
  • Web monetisation: books can be read by streaming and, once paid for via monetisation, can be downloaded as an epub,
  • Editor's forum: a formal review process to permit dispute resolution between writers and their editors,
  • Curation: create lists of works which can be shared and promoted,
  • Search and discovery: a neutral, automated method to categorise and assess creative works to support reader discovery.

At this time, given the diverse needs of writers and their preferred ways of working, Qwyre will not offer any online editing or writing support. These are to take place offsite.

Where possible, components will be released as free-standing apps as they are developed. The most immediately obvious of these are the EPUB generator, and the ereader app.

Nuxt.js and FastAPI as our technical stacks

Qwyre will be a progressive web app (PWA) with offline support for the reader's library of ebooks. Books can be bought as epubs, or streamed via web monetisation. What a reader "buys" via web monetisation, they own. Once they have streamed an entire book, they are able to download an epub version of the work.

I have developed on Django for years and enjoyed it, and its documentation. Recently, however, I've wanted to try something new and more in line with my current standards-based approach to data curation. Python's support for types has evolved, and the most modern and mature framework for working with Pydantic is FastAPI which comes with a Docker base project with PostreSQL and Vue.js. I didn't want to faff too much with Vue, and set out to produce a version for Nuxt.js (which is to Vue what Next is to React) as well as replacing Vuetify with Tailwind for the user interface design.

GitHub logo whythawk / nuxt-for-fastapi

Nuxt.js frontend drop-in replacement for Vue.js FastAPI base project generator.

This provides a solid starting point for further development.

Current development: Chapisha and EPUB Generator PWA

Chapisha provides an intuitive method for converting a well-formatted Microsoft Word .docx file into a standards-compliant EPUB3 ebook. I developed the standalone Python package to support a Nuxt.js progressive web application.

GitHub logo whythawk / chapisha

Python-based docx to standards-compliant epub3 conversion

The core functionality for the EPUB convertor is almost complete.

A screenshot of the current development landing page for

Next up is to work with Coil's web monetisation API and test streaming payments to support EPUB conversion. The specific mechanism is that:

  • A creator provides all the content and metadata required to generate an EPUB in the PWA,
  • Data only transfer from the creator to the Qwyre server during the generation process,
  • During generation, they can stream payments to support the app,
  • Streaming is monitored directly using websockets giving the creator feedback on the generation process, and costs,
  • On completion, all creator data is deleted from the server and returned to the creator.

I'm hoping to complete this in mid-July and deploy a test server with the EPUB generator for public testing and use by the end of July 2021. In my next update, I'll hopefully have a link for you to go test what I built so far.

I'm keen on feedback and discussion, so please get in contact and let me know your thoughts or concerns.

Top comments (2)

chrislarry profile image
Chris Lawrence

@agarzia you will find this interesting. We need to get an indie publishing interest group together!

agarzia profile image
Andre Alves Garzia

Oh, that is great. Thanks for sharing, @chrislarry , I'm gonna check them out. I'd be definitely be interested in an indie publishing sig. There's the alli - Alliance of Independent Authors, they do a superb job, but they're not focused on the technical aspects of it like the kind of special interest groups we're used to are.