How I use GoodTask to track reading

Tried a few book tracking apps. None of them stuck. I don't really need any social features at the moment. Just want something that allows me to

  • maintain an overview of the texts I'm engaging with
  • gives me a little visual encouragement to return to the reading list
  • allows me to keep a record of what I've read over time
  • allows me to track some basic reading stats (time spent reading, time spent on a book...)

Sounds like a job that GoodTask can handle...

image
(Widget view of books in the "reading pile" on the home screen...)

image
(the Reading kanban board...)

image
(an individual book reminder)

...with a little assistance from Scriptable for the widget, Shortcuts, and Nomie for logging stats.

I won't go too deeply into the technical aspects/code (though I'd be happy to share if anyone's interested). The widget is adapted from this: https://www.reddit.com/r/Scriptable/comments/j79qiy/time_progress_widget/, and uses variables defined in the notes for each book (reminder). The reading board uses the tags #to_read, #reading and #inprogress; anything tagged with reading or inprogress shows up in the widget, and anything tagged inprogress (meaning "reading right now") shows up in the widget with a highlight colour so it stands out. Why? Because the associated shortcut logs time spent reading, and I have a bad habit of forgetting to stop timers... :wink:

So. From the widget, I tap the title of a book to open that book's reminder in GoodTask. From there, tap the "!START!" quick action. That adds the current date and time to the start of the reminder's note, and adds an "inprogress" tag to the end of the note, which automatically moves it into the "inprogress" column. Then I tap the URL panel at the bottom of the reminder to open whichever app I'm using to read that book (why no deep links, Kindle!!?) or skip that step if it's a physical text.

When done, I return to the book's reminder, tap the ellipsis ("...") on the URL panel and select the URL for the "stop reading" shortcut, or just run that same shortcut from anywhere in iOS. That shortcut basically does some time math (difference between the time in the reminder's note and the time at which you stop reading) and logs that info to Nomie via Nomie's API. The shortcut also resets the reminder by removing the start time and returning it to the "reading" pile.

New books are quickly created in GoodTask with a native iOS text replacement that instantly inserts all of the variable placeholders in a reminder's note field. I could probably do that with a GoodTask template— something to experiment with...

I'm also experimenting with start and finish dates. GoodTask can log both, obviously, but I can't access GoodTask start dates outside of GoodTask (as far as I'm aware), so I can't use it any scripts. I've defined a couple of variables for dates in the template, as you'll see, but I'm not using them properly yet— I'm happy to use the first date logged for any book in Nomie as its start date, and that's enough for now.

5 Likes

Dude this is awesome! I'm interested as much as I can, do you mind talk via dm of some other uses and tech stuff?

By all means, fire away! My todo list won't thank you, but I certainly will... :slight_smile:

Wow, great setup! I'd like to read more about the technical stuff.

As you request... so shall it be...

Scriptable widget here: https://github.com/jacobsamlarose/scriptable/blob/main/bookprogress.js

Shortcut here:

Template/plain text variables for the notes field of a reading reminder: you can glean from the images above, but copied here in case it helps:
@pos: (number)— this logs your last position in the text.
@started: Start date.
@finished: Probably redundant— I can use the "completed" date of the reminder for this
@units: Either "page" or "percent_read"— percent read is with Kindle in mind. I should tidy a few things up around this...
@total: This is important for the widget...
@url: Could be a link to a GoodReads page, or a website, or even a URL scheme for notes in another app (e.g. Drafts). I guess you can have as many @url variables as you wish.
@notes: I probably wouldn't use this here. Bearing in mind that we're using the notes to store these variables, adding other notes here might get a bit messy. I might use the URL field to link to another app. But there's nothing to stop you from adding whatever notes you want here.
@stop: shortcuts://run-shortcut?name=Log%20Reading%20(Books) - this is for convenience. Make sure it corresponds with the Shortcut I linked to above.
@platform: kindle:// — this is a direct link to the book, if there is one. Kindle doesn't deep link (far as I know) so you can only open the app. But obviously, you can insert a link for any reading platform that supports URL schemes to link to specific reading items.
@status: this is important; make sure it's the last variable at the end of the notes field. Like I said in the first post, I use three tags— #to_read #reading #inprogress. If you want to use different tags, you'll have to edit the Scriptable widget to match.

Note: The shortcut does a little bit of tag management when resetting a book (#inprogress --> #reading) at the end of a reading session, other than that, I'm making use of the fact that GoodTask can automatically update a reminders tags via drag and drop, so moving a book between columns on a kanban board automatically updates a book's tag accordingly.

Again, it might sound like a bit much, but once it's set up, it's reasonably easy and light touch to work with.

I've probably missed something, but it feels like this is becoming an epic. Holler if there's anything else of interest.

1 Like