Simple Reminders Improvements Which Should Be in iOS/iPadOS 16

Ever since Reminders got the redesign in iOS 13, I've been back to using it for my personal tasks between the app and the other Reminders clients out there. With the new features added in iOS 14, I've been using the Reminders app exclusively. With the state of the API – something that I hope Apple fixes, and soon – most of what I do for my personal life needs to run through the Reminders to work.

But Reminders could be so much better. I'm hoping that there are improvements coming to Reminders in iOS 16 that make the app more usable and better for everyday users. There are some bigger things that I'll explain in a few moments, but there are some small improvements which could make today's app better. For example, take the medium and large widgets. These widgets have enough width that you could give users the option to show the due time off to the right within the widget settings. Additionally, overdue tasks should show up as red in the widget view. In the Today view, tasks with subtasks should have the ability to expand the list to show them, just like they do in a regular list; having to jump into the list or the information of the reminder is more cumbersome than it needs to be.1st

The current widget could be so much better, even if it isn't interactive.

For the big changes, let's start with smart lists. Smart lists need to be, well, a whole lot smarter on iOS/iPadOS. I can create these very easily within GoodTasks, and it's baffling why some of the smart list options aren't also available in Reminders. A great example of this is having a Tomorrow widget: the only option I have right now is to create a relative date for a smart list, showing me all the tasks due within the next day. This doesn't show me what I want. Of course, I could use the Scheduled list, but that's not what a tomorrow list should be. There also should be more customizations to combine the search features of the smart lists. Not only should you be allowed to search better by dates, but also combine them by lists or tags or locations as well. It's a small-enough change in user interaction that would pay large dividends in user benefit.

One of the biggest features I want to see overall for iOS/iPadOS 16 on the home screen is interactive widgets. Reminders had this in the Today view, and it's functionality that should be there for any todo app that implements it. I don't want to have to go into the app just to check something off the list when I could just do this from the widget itself. I'd also like a larger XL widget in iPadOS 16, but I want it to be something more than just a single list. My vision for an XL widget would be to allow the selection of up to 3 different lists at any given time. This would be a perfect way to show a Today, Tomorrow, and Next 3 Days smart list setup. It provides a better look at my week for the real estate it takes up. I think Reminders would do well to steal inspiration here from other apps like GoodTasks and Things for how those apps have implemented the XL widget size.

Reminders could offer a lot more with an XL-sized widget.

Since Apple creates both the Reminders and Calendar apps, there could be an additional XL widget option which shows both Reminders and Calendar events in one single XL widget. Other apps like GoodTask and Fantastical show both reminders and events, but I think Apple could do a unique take on this: keep them separated and distinguished somehow in the XL widget, with Reminders on one side and Calendar on the other. If they would add both the three-list and list/calendar XL widgets, I'd have them stacked on my homescreen.

A combination Reminders and Calendar widget could have multiple options.

And if Apple really doesn't want to devote much time into making a more customizable app, then they absolutely should open up the API. Let third party apps create and access subtasks, create smart lists with parameters, add tags, urls, etc. It would even improve their own apps like Shortcuts. Open up the ecosystem to more possibilities, better interactions, and more useful tools.

All of this certainly seems possible to add when Apple announces the tent pole features of iOS/iPadOS 16. I know it's early to have some of these desires, but if nothing gets posted before WWDC, it might never happen. I guess we'll just have to wait and see what's in store this summer.

Close Your Rings Differently

Listening to Upgrade recently, I was reminded about a feature that I really want to see incorporated into the Apple Watch fitness tracking: rest days. I'm not a fitness expert by an means, and I have a long journey ahead of me to start living a healthier lifestyle in 2022. But I've done a lot of training in the past, and I can adamantly say that rest days are vital whether you're starting a new routine, are years-deep into one, or even if you're a pro-level athlete. There are many situations where resting for a day is actually more beneficial than continuing to push through an injury or illness. And Apple would do well to make a feature available to users to implement days of rest. I think there are a couple of different ways to handle this: one is a simple change that could be done now, the other would take a bit more to implement but I think would ultimately be the better of the two solutions.

At the time of me writing this, I'm on an over 1,700-day move and stand streak with zero intention of stopping; I don't close my exercise ring every day, however. On the surface, the current strategy is fine: I am up and moving, but it doesn't mean that I have to work hard to close my rings. But for others, this method penalizes them if they have a routine with rest days in between. I'd personally be very pissed if I lost my move streak because I had a pulled muscle. The only possible way to allow for a rest, sick, or injury day right now is to lower your move goal for that day, however, you do have to remember to go in and manually modify your goal then remember to increase it the next day. Of course, neither option I'm suggesting addresses the sick and injury days that might occur as well. I'd love to see an option to add these; again, these don't count towards the daily or weekly goals, but they also don't count against you.

The easiest way to handle all of this is to allow a single day of rest in between two completed days to keep a streak going. If you miss a day, it just doesn't count. But it does mean that you have to work that much harder to make sure you close your rings the next day. This is just a change in the logic they use for calculating streaks, and would be fairly simple to implement. For someone who is starting on their fitness journey, that means they could generate a streak as they build their endurance and confidence; rest days would not count toward the overall streak of days, but would not restart the streak from zero.

The better way to handle this would be to create a new type of streak for weekly goals and provide associated badges which are separate from the daily goals. This preserves everything from users who are currently happy with how everything is implemented, while creating a new paradigm for those who aren't as emphatic about fitness but want to remain healthy. For example, I could see where a user might set weekly goals – say 10,000 kCals active calories burned, 180 exercise minutes, and 45 standing hours – which sets up their week with more flexibility to adjust their routines based on how they are feeling. If you have a solid 2-hour workout one day and two 30-min workouts later in the week, you still are accomplishing your goal of being active. But you could do that 2-hour workout on Monday and finish up the week with the 30-min workouts on Thursday and Saturday. Doing it this way would be beneficial for those that are maybe new to their fitness journey to still hit a goal while not having to do something every day to achieve it. It eases you into everything while still reaching for a goal.

With some small changes, Apple could empower more people to close their rings. It encourages better behaviors without penalizing for a day off when rest is needed, or an injury or illness sidelines you for a little while. As I'm on my own health journey, I've found that positive reinforcement has been key to my success. It's time that Apple start doing the same for everyone.

Flexible Packing List in Drafts

Recently, I created a shortcut for the Club MacStories Discord as part of the Automation Academy. If you're not a member, I highly recommend doing so. This shortcut was in response to the latest lesson, all about Reminders. I've been meaning to create this for a while, and it seemed like a good idea to apply this lesson in practice.

From the Discord:

I've been using packing lists in Drafts for a long time. Once it is created in Drafts, I send a single task over to Reminders with a link back to the packing list. This has worked well for years, but when I read the piece by Federico, I thought that maybe it'd be a good idea to make a customizable, variable shortcut for a packing list in Reminders instead.

I do appreciate this shortcut, as it creates reminders with subtasks in a packing list. Unfortunately, there are three things I do not like about it after using it for a short while: first, I cannot create a new list for each trip I without manual interaction; second, it clutters up my system with a lot of new tasks; third, it takes longer than I'd like to run. Now, that last point is a complete nitpick, but the first is critically important. There has been more than one occasion where I have needed to pack for work trip and then a subsequent personal trip. Having two lists to separate them is more ideal for me.

I started thinking about how I could better use Drafts to manage all of this. I have had a single packing list action for a long time. My biggest complaint about using this method is that it wasn't variable for the type of trip I was taking. I'd run the action to create the same list over and over, then have to remove items that weren't applicable to that particular trip. That kind of solution works, but is far less elegant. Having just gone through the shortcut activity, I couldn't help but think that there was a better solution for me: cleaner appearance in Reminders and faster automation with Drafts.

Managing a workspace is easier for me than a complex dictionary with arrays and items.

With this in mind, I created a new tag packing. This tag is only used by my newly created Packing workspace. None of my other workspaces contain this tag, and this workspace contains only this tag. I've also archived these particular drafts to keep them out of any other workspace inbox in the future, so it's very filtered for what I need. Next, I take each category from my shortcut and make its own draft. Within each draft, the title line is formatted ### Category and I have checkboxes for each item underneath. I can modify each draft as I need, or I can add completely new categories with items to pack.

Using a query on the drafts with the specific tag, I created a checklist prompt: it presents the same information as what was in Shortcuts and functions in much the same way. I even briefly thought about making an HTML prompt for this, but thought that this was easier and fits a user's preferred theme better; this is about quick interaction after all, right?. The way this is constructed grabs all of the draft titles and presents them as items; as the categories grow, so does the list.

Setting up individual trips is better this way.

The next script then pulls in the selected draft content, and compiles it into a single list. There's an optional forth step, which creates a new task in Reminders with the URL to the newly created draft. I personally don't like the way this is rendered as just the URL. I actually use Siri to do this, usually when on my iPad by pressing Globe + S and typing to Siri "remind me of this". This shows the Drafts icon to the right of the task and the URL; I will delete the URL part, which still keeps a link via the icon on the right, for cleanliness.

I prefer using Siri to "remind me of this", and edit the task in Reminders manually to make it cleaner.

This might seem a bit more complex than editing a single shortcut, but there are a few reasons why I prefer this method. First, It runs really quickly: sure, I might only be saving a few seconds, but it makes me feel better. Next, I think that the manipulation of text within a draft, combined with the power of arrange mode in Drafts, is better. I can also duplicate categories – like with my backpack and travel sling – to make a different version with or without camera gear far easier than creating another array in Shortcuts. Finally, it keeps me in Drafts. I'm not saying that Shortcuts isn't the right tool for most here, but I know that Drafts is a better tool for me. I trust the system I've developed over years, and it doesn't let me down. Unfortunately, I can't say the same for Shortcuts: even in the setup of the packing checklist shortcut, there were bugs that prevented me from completing it fully. With the groundwork done in Drafts, this is fully extensible and will adapt to new situations or changes in my gear.

Now that I'm going to travel slightly more than I have in the past, having this type of flexible packing list will keep me better prepared for travel. As I continue to venture out into The World, A.C., [1] I'll have the confidence and assurance that I have packed everything I need for any type of trip that might come my way.

  1. After COVID. ↩︎

Drafts 29: Autocomplete

With Techtober coming to an end, all of the major OS releases from Apple are finally out there, however buggy they may be. And of course, Drafts 29 has been released to accommodate the features in them. But some of the new features aren't even dependent on the latest OS releases, and add new levels of functionality to an amazingly capable app. Not only does the Mac have full Shortcuts support with the release of macOS Monterey – which as an iOS/iPadOS user I won't be writing about here – but Drafts also added new autocomplete options to its feature set. This post will go over what they are, what they do, and how I have incorporated them in my daily practice.

The first of the autocomplete features is fairly simple: creating a link to a specific draft. Creating a link starts by typing [[ and then a menu pops up with your most recent drafts. Selecting a draft completes the [[wiki-style]] link for the draft for quick reference. You can also use the arrow and enter keys to select the item you want, so your hands don't have to leave the keyboard. This has been great for my work and personal wikis that I have been creating and is a feature that has improved my workflows considerably over the past year.

Sometimes you want to take it a step further than a link and include the content of the draft inside another draft, which is where the second feature comes in. Starting with <<, you can now select from the same recent drafts list and then upon selection, the entire content of that draft is inserted into the current draft. This is great for those that use templates from existing drafts for various purposes like taskpaper lists, emails, and more.[1] I'll use this option far less frequently, but I'm thankful that the option is there. If you dare to use a custom syntax, you can even customize this autocomplete option to use the [[body]] template tag instead of [[draft]]. I'd only recommend changing this if you know what you're doing: I haven't changed this myself, as it's pretty easy to delete the line through an action or by using the arrange mode.

The last autocomplete feature is all about text. By default, the trigger is !!, but you can customize this in the app to be something else if you prefer. When you type this, you'll bring up a list of items to select, and upon doing so, it will insert that text into your draft. You can customize all of this within the app, in the editor Aa menu. But the fascinating thing here is that you can use this for standard text snippets or utilize the templates feature of drafts to go further.

There are a few simple examples of using templates in this way. Dates and times are a perfect example of this. The standard [[date]] template will insert the date in the YYYY-MM-DD format, but using strftime format string methods, you can customize both dates and times to be in a specific format: using [[date|%A, %B %d, %Y]] will insert text like "Monday, October 25, 2021" and using [[time|%l:%M %p]] will insert the time formatted in an AM/PM format. Another great example is some of the draft information, like [[uuid]] or the url of a draft using [[draft_open_url]]. I've even created a location text autocomplete, that inserts Location: [[latitude]], [[longitude]] for the current location of the device.

Where things start to get interesting is when you start combining a bit more of the complex template examples. Drafts also uses encoding and HTML templating which extends what you can do with the text. Using these options in conjunction with the [[clipboard]] tag, you can create functions to insert copied text when the {{[[clipboard]]}} has been encoded or insert the HTML for the %%[[clipboard]]%% by applying the correct characters. I use this often for HTML. In the future, I'd really like to see some new template features added specifically for this purpose to add title case, hyphenation, encoding/decoding text, and more. This could even be done using the same syntax as the date and time examples, where the options are provided after a pipe like[[clipboard|hyphenate]]. If you're in to using [[template|path]] files in action steps, you can now use those to directly insert the text into a draft.[2] Combining the power of templates into text insertion has been a game changer for me, and I can't wait to see this expanded further.

You can also use autocomplete to insert blocks of custom text that have multiple return lines, giving more power to text replacements than the standard implementation of iOS. For example, I use my signature often in emails but I prefer to send them as HTML. If I start this in Drafts, my standard signatures with returns does not work. So in addition to all of my information –  which includes my name, phone, Twitter handle, and email – it also includes line break HTML <br> after each line, saving me time when writing emails in Drafts. For work, I use a custom header which inserts two wiki-style links for my Work Tasks and Work Wiki files for quick navigation.

Make custom blocks of text using autocomplete.

But where I've personally appreciated text autocomplete the most is where I have been able to take single or multiple menu actions and completely replace them. I used to have keyboard shortcuts to insert the date and/or time, but now I can do both with the text autocomplete trigger. I've taken my "Insert Text Element" action and completely replaced it with autocomplete. I'm sure I'll find some more as I go through a cleanup of my entire Drafts setup, but having some extra keyboard shortcuts will come in handy down the road.

All of the autocomplete features work in the editor window itself, though I'd love to see an option to have it for the script editor to insert blocks of code that I often use. With the additional option to add multiple custom text autocompletes in custom syntaxes, I could even add this for when I start a new script in draft form, rather than in the editor. I haven't done any customizations beyond what I've shown here, but I'm sure that given some time I'll start exploring a bit more and come up with some interesting use cases that I'll be sure to share. For now, at least, I've updated my Draftsdown syntax to support the standard autocomplete features discussed here.

The new autocomplete feature for text has replaces several actions for me.

Like other new features introduced into Drafts, the new autocomplete features will be a huge productivity boost to some, and open new opportunities to others. The feature will get even more feedback, and perhaps some new enhancements in the future. We'll see some power users use custom syntaxes pushing this even further, something that I personally can't wait to see. This is yet just another rung on the feature ladder of Drafts. The view from the top is great.

  1. There's also another option for this that I'll explain in a bit. ↩︎

  2. This works best when the file is in a .txt format. ↩︎

Cycle Through Workspaces

Not long ago, my buddy Seth walked me through a bit of his Drafts setup. He's been creating a lot more workspaces as of late, but didn't think the workspace switching actions I had created before were enough, and he wanted a better way to cycle through them.

My coding skills aren't that great, and quite frankly, are rusty as hell because I haven't really done a lot of it due to other commitments. At the time, I was preparing for some big reviews at work, so I didn't even have time to look into it. Seth then reached out to the Drafts Community. It did take long before Jacob (jsamlarose) answered the call and created the action Seth requested. (Great work, Jacob!)

After discussing this over the phone with Seth, he was elated at his new method of switching. But he also wanted to cycle this in reverse as well. A quick search later, I found the .reverse() javascript function, and simply added the line under the first line of the script. This reverses the array created in the line above, and then the rest of the script works in the same way. I ended up renaming the actions to Cycle Workspace FWD and Cycle Workspace REV and changing the icons used, along with changing the keyboard actions to ⌘→ and ⌘← respectively.

This is just something simple that's really great and really effective. I think too often we can complicated the automation of different things and set our sights on creating complex actions (or shortcuts) to make our lives better. I'm finding that more and more, the simplest actions tend to be the right ones.