bookshelf – a reading list manager

As I have stated previously, I read more than the UK average (40% of Britons haven’t read or listened to anything in the last 12 months), but I get books faster than I can read them. This means that I have a backlog of books waiting to be read. I wanted somewhere that I could record all my books and have a priority list of those that I wanted to read next.

Therefore, for this month’s “12 apps in 12 months” I present bookshelf – a reading list manager a place where you can manage all your reading whether it be in physical, electronic or audio formats. Mark which ones you are reading or have read and place books into lists such as the default “Priority” list for those you want to read next.

I have split this post into two. This first part talks about the project and the second one goes over how to use the app. If you are interested in how to setup the app then have a look at the Github page.

Hold up!

I know what you are thinking – why have you written what is basically Goodreads? Well, for a start in the UK, you cannot add your Kindle purchases to your Goodreads account, and nor can you add your Audible purchases either. Yes, you can add them manually but that’s a bit of a faff. Also, this way I get the sense of satisfaction in using what I have created and am not even more beholden to Amazon than I am already.

With bookshelf you can add books from all of the following sources:

Reuse

There’s a decent chunk of reuse in this project with the framework for the UI being taken from my WDiL (“When did I last?”) project and the book scanning from bookISBN2Task. This obviously gave me a bit of a head start when developing but it is still a large project compared to some of the other “12 apps in 12 months” releases.

When I developed WDiL, I realised that only a relatively small amount of data was going to be involved, and I didn’t want the overhead of another MySQL database, so I elected to store the data in serialised format in a file. This worked (and continues to) well but I found that you lost some of the flexibility of SQL so later projects, including this one, have moved to SQLite. This has given me much greater flexibilty in quickly storing and accessing book data without the overhead of an MySQL database.

Moving Requirements

All my projects start life as a problem I have that I want to solve. If someone other than me gets some use out of them, then that is a bonus but not a requirement as far as I am concerned. However, in this case, I actively sought out a couple of other users for the bookshelf as I knew that they would find it useful and could help with the testing of it— these were my wife and son, both of whom are avid readers and have hundreds of books each. As an aside my son is also an indie author – check out his books here!

Like any good developer I created what I considered to be a good MVP and then I set each of them up with their own instance of bookshelf, it is only single user by design. I gave them some basic information on how to use it and then left them to it.

Almost immediately, the enhancement requests arrived— “Can it do this?”, “How can I do that?“— and I remembered why I make all my projects open source! A while back, I had a project, which I still use today, that I considered releasing and charging for. I even got as far as integrating Stripe. At this point, I was still in full-time employment, and I wondered whether I really wanted to be spending time supporting other people. I decided that I didn’t. There are some exceptions to this. My php2Bluesky library gets a reasonable amount of downloads and from that I get quite a few bugs and enhancement requests which I try and deal with quickly.

Ultimately, if I am not charging someone for my apps then I don’t feel any great responsibility to make any changes may arise from their use. However, it is a whole different matter when you have actively asked people to use your product and those people are your family!

It’s not what I thought it was

One of the most useful things about having others test your product is that they use things in very different ways to that which you envisioned. So was the case with my tame testers. In fact, they wanted to use the bookshelf in ways that I hadn’t considered at all. They weren’t really interested in the ability to add books to lists and prioritise their next reads, which had been my primary focus. They purely wanted somewhere to record the books that they had read, add a review, and see some stats. This led to a bit of a rethink and some changes to the code to satisfy all parties, but it helped shape the app and led to a better product, I think.

What’s Next?

One of the issues of taking on a larger project within the context of the “12 Apps in 12 Months” regime is that you are always thinking of the next month’s project, and there isn’t really time to fine-tune what you have already done. What I intend to do at the end of the year is take a step back and look at the projects that have worked well and I want to expand in future. I already know that bookshelf will be one of those.

Here are some of the things that I am considering for the project:

  • make the app multi-user with login details which will make my family support easier!
  • smart matching to catch duplicates and merge them
  • more robust capturing of book covers
  • handling books that have been read multiple times
  • capturing when you start reading a book as well as when you have finished it.

As you can see from the above, there is still plenty more that could be done.

Let me at it!

As usual the code is available for free on my GitHub page – just don’t bank on any support! Also, don’t forget to read tomorrow’s post on using bookshelf.

One comment on “bookshelf – a reading list manager

Leave a Reply

Your email address will not be published. Required fields are marked *