Watchapp: TimeToDo

Sync your Todoist tasks with your timeline!

  • Syncs your Todoist tasks with due date and time to the timeline
  • Tasks show up as timeline pins for quick, glanceable reminders
  • Completely free and open source

Note: A Rebble subscription is required for tasks due within the next 2 hours to appear correctly in timeline future. Without it, they may show up in timeline past.

Rebble link: Pebble Appstore
Discord: Discord

1 Like

This app by itself has me so tempted to switch my whole life over to ToDoist

3 Likes

I mean, not to be a todoist evangelist, buuuut it’s pretty awesome :grin:

1 Like

Recently circled back to the idea of merging this into Todoist Mini. I figured I might as well post some of my findings and thoughts here, since it’s quite hard to track this stuff down in Discord later.

To catch people up:

  • Todoist Mini[1] is a neat little app that allows to you view your Todoist tasks and stuff on your wrist.
  • TimeToDo pushes Todoist tasks to your timeline.
  • Instead of two apps, UX extroidinare @lavender said ‘hey, like, why not just merge the two?’[2]
  • And now we’re here :slight_smile:

Some of my main findings:

  • Todoist Mini currently works via the Sync v9 API. Somewhat recently, as part of a "unification” effort, Todoist merged Sync v9 and REST v2 into a new API simply called “API v1”.

  • Up until TimeToDo 2.x, I used REST v2 because it covered all my bases. I have since migrated it to the new “v1” API.

  • Now that TimeToDo uses the new API, Todoist Mini would also have to undergo some refactoring to use the new v1 /sync endpoint. It’s not terribly different, and Todoist has migration guides which should make this a bit easier.

On the topic of backends:

  • Todoist Mini doesn’t have a backend. It never has.

  • Meanwhile, with TimeToDo, essentially everything is done on the server :slight_smile: . Login, configuration, webhooks, pushing pins–everything. In fact, the entire watchapp for TimeToDo is only about 26 lines of code.

I use a library I built called shale for the TimeToDo config page. It’s pretty extensible and supports almost everything Todoist Mini would need as far as config goes, so that’s a non-issue.

How do you do a migration that doesn’t suck?

For current TimeToDo users, Technically, they should have no problem. They wouldn’t even have to move to the new app immediately. However, if they do move, the App UUID will change, meaning we’ll need a new Timeline Token. I imagine the flow would look like this:

  1. Once we migrate, TimeToDo is un-indexed from the app store (it’ll still be there, just not searchable).

  2. At this time, I’ll move the user’s Timeline Token to a new database column, probably named legacyTimelineToken.

  3. If the user never migrates: They’d still get pins just fine. The legacy token remains usable until the user deletes the app from their locker. The logic will basically be: “Does this user have a new timeline token? Yes? Use that. No? Use the old token.”

  4. There is already logic to delete the user when Rebble reports the token is inactive. I reach out to Todoist to deactivate the access token, then delete their account from the DB.

  5. If the user downloads the new app: I’ll need a warning to tell the user to delete the old TimeToDo from their locker to avoid duplicate pins. Or maybe I could add some logic to not do this. I don’t see why you’d keep TimeToDo around though.

For Todoist Mini users, This is where the problem is. Their token is stored on the phone. Sending it up to my server would break things because that token is associated with Todoist Mini’s specific Client ID, not mine.

  • Absolute best case: everybody has to sign back in. Which doesn’t suck that bad, but I really would’ve liked to see a “seamless” migration.

  • The thermonuclear option is I just wipe the DB and everybody starts over. 100% success rate, but it definitely sucks.

As far as next steps go, I may try and put together a POC sometime this weekend or next week. First, I just wanted to put my thoughts somewhere and maybe get some community feedback. As an avid user of both Todoist Mini and TimeToDo, I think a unified app would be awesome.

Random cliffnote: One other thing I’ve been thinking about—now that the app will be calling the server more—is how to verify that requests actually came from the Todoist Mini app. This would probably require some sort of app attestation thingy. I have some thoughts on this I should probably manifest somewhere; if RWS and new mobile apps provide this feature, it would be quite valuable to any developer with an app that calls their own API.


  1. Todoist Mini ↩︎

  2. Discord , paraphrasing here, obviously ↩︎

2 Likes

I’m still very much in favor of some merger being worked out - pins being provided by the same app opens up options like Launch Codes to view more details of a task right on your wrist, and of course a single login to set up for new users. I hope there is a path forward that makes sense for everyone.

1 Like