<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ulrich Feindt</title>
    <description>The latest articles on DEV Community by Ulrich Feindt (@ufeindt).</description>
    <link>https://dev.to/ufeindt</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1133476%2Fbd13c705-f002-4090-a865-9dc8c4ff7619.jpeg</url>
      <title>DEV Community: Ulrich Feindt</title>
      <link>https://dev.to/ufeindt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ufeindt"/>
    <language>en</language>
    <item>
      <title>Building a chore tracker with Airtable automations: Part 2</title>
      <dc:creator>Ulrich Feindt</dc:creator>
      <pubDate>Sun, 13 Aug 2023 10:20:52 +0000</pubDate>
      <link>https://dev.to/ufeindt/building-a-chore-tracker-with-airtable-automations-part-2-524b</link>
      <guid>https://dev.to/ufeindt/building-a-chore-tracker-with-airtable-automations-part-2-524b</guid>
      <description>&lt;p&gt;This is part 2 of a guide to building a chore tracker in Airtable. Make sure to check out &lt;a href="https://dev.to/ufeindt/building-a-chore-tracker-with-airtable-automations-part-1-2enf"&gt;part 1&lt;/a&gt; if you haven't already.&lt;/p&gt;

&lt;p&gt;At the end of part 1, we had a working chore tacker that lists the chores and highlights the ones that are due. Furthermore it automatically schedules a chore again once it is marked done. We will now add email notifications as a final feature. That way, you won't need to check the tracker everyday but will just receive a reminder email if any chores are due.&lt;/p&gt;

&lt;h1&gt;
  
  
  Adding chore assignees
&lt;/h1&gt;

&lt;p&gt;Before we can send the emails we need to decide where to store the email it should be send to. If you are using the tracker just by yourself, you can hardcode the email in the automation. However, if you are sharing the household responsibilities with someone, you may want to assign the chores to specific people. This can be done with a new table.&lt;/p&gt;

&lt;p&gt;Return to the chore tracker that we built in part 1. At the top click &lt;strong&gt;Add or import&lt;/strong&gt; (next to the name of your &lt;em&gt;Chores&lt;/em&gt; table) and then &lt;strong&gt;Create blank table&lt;/strong&gt;. Call the table &lt;em&gt;Users&lt;/em&gt; and set the records to be called users as well.&lt;/p&gt;

&lt;p&gt;In the new table, delete the &lt;em&gt;Notes&lt;/em&gt; and  &lt;em&gt;Status&lt;/em&gt; fields. Then rename the &lt;em&gt;Assignee&lt;/em&gt; field to &lt;em&gt;User&lt;/em&gt;. You can now enter a name and the assign user accounts. If you wish, you could also add an email field for the users' email addresses. However, all users should create Airtable accounts to use the tracker, so you can just sent the email to the accounts' adresses. Note I am using my own account for both users in the example below. You should assign a different account to each user.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1je3h7nlh1xwr8gvjnyh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1je3h7nlh1xwr8gvjnyh.png" alt="Figure 1: Initial setup of the Users table (in a real example, the values in the user field should be different accounts)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In order to assign a chore to a user, we can link our two tables. In the &lt;em&gt;Chores&lt;/em&gt; table, create a new field of type &lt;strong&gt;Link to another record&lt;/strong&gt;. Select the &lt;em&gt;Users&lt;/em&gt; table and name the field Assignee. You can skip adding additional lookup fields as we will not need them. Now you can click on the new field in one of the rows to add a link.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2xt9cqva6jjzjjchh0vg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2xt9cqva6jjzjjchh0vg.png" alt="Figure 2: The Chores table with the new link field to the Users table"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Return to the &lt;em&gt;Users&lt;/em&gt; table. You should notice that Airtable has automatically added a link field to it called &lt;em&gt;Chores&lt;/em&gt; and that it shows the chores that we have assigned to the users.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fby4x54ee2bpavo92hxol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fby4x54ee2bpavo92hxol.png" alt="Figure 3: Updated Users table with the assigned chores"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In order to list the chores in the email, we need to format the list a little bit. I like to see one chore per line. This can be achieved with a rollup field that applies a function to the array of values in a specific field of all linked records. Add a field of type &lt;strong&gt;Rollup&lt;/strong&gt; naming it &lt;em&gt;Chores to do&lt;/em&gt;. Select the &lt;em&gt;Chores&lt;/em&gt; table as the source and the &lt;em&gt;Description&lt;/em&gt; field as the field to roll up. We are only interested in chores that are due, so enable the option to only include linked records that meet certain conditions and set the condition to the Status being &lt;em&gt;Due&lt;/em&gt;. Lastly, enter the following aggregation formula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ARRAYJOIN(values, "\n")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This formula adds a linebreak between each chore.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9yypdvw2yue6ofyv08k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9yypdvw2yue6ofyv08k.png" alt="Figure 4: Settings for the Chores to do rollup field"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The content of the rollup field will not show the linebreaks. To confirm that each chore is listed on its own line, you can expand the field.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk5vpin1c57cs62x08j2x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk5vpin1c57cs62x08j2x.png" alt="Figure 5: Users table with a Chores to do field expanded to confirm that each chore is on a new line"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Sending the emails
&lt;/h1&gt;

&lt;p&gt;Now we have everything we need to send reminder email. Navigate to the Automation page and create a new automation called &lt;em&gt;Send reminder emails&lt;/em&gt;. Choose the trigger &lt;em&gt;Add schedule time&lt;/em&gt; and select a convenient time (I'm using 10 AM for my tracker):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interval type:&lt;/strong&gt; Daily&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Timing:&lt;/strong&gt; Every 1 day at 10:00am&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbx8tm3umdt0zvf4o501.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpbx8tm3umdt0zvf4o501.png" alt="Figure 6: Settings for the email trigger"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now add an action to &lt;strong&gt;Find records&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Table:&lt;/strong&gt; Users&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Find records based on:&lt;/strong&gt; Condition&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conditions:&lt;/strong&gt; Where Chores to do is not empty&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4m6yu2so95slo3cr2k94.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4m6yu2so95slo3cr2k94.png" alt="Figure 7: Settings for the find records action"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, add a repating group that will loop over the found records:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click &lt;strong&gt;Select input list&lt;/strong&gt; and select the &lt;em&gt;Find records&lt;/em&gt; action with the option &lt;strong&gt;Use as list&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zco0mirozbfjit2o7cl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4zco0mirozbfjit2o7cl.png" alt="Figure 8: Settings for the repeating group"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inside the repeating group, add an action to &lt;strong&gt;Send email&lt;/strong&gt; with the following configuration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;To:&lt;/strong&gt; Click the plus sign, then the &lt;strong&gt;Current item&lt;/strong&gt; followed by &lt;strong&gt;User&lt;/strong&gt; and &lt;strong&gt;Email&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Show more options&lt;/strong&gt; and under &lt;strong&gt;From name&lt;/strong&gt; enter: Chore Tracker &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subject:&lt;/strong&gt; You have chores to do!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Message:&lt;/strong&gt; Write any message you would like but remember to include the chores by clicking the plus button and selecting the &lt;em&gt;Chores to do&lt;/em&gt; field of the &lt;strong&gt;Current item&lt;/strong&gt;. Similarly, you can include the user's name if you like.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqzqciddlk81hlhrw44ea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqzqciddlk81hlhrw44ea.png" alt="Figure 9: Settings for the send email action"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now everything is in place for sending daily reminder email. Before, you switch the automation on, you should test it using the &lt;strong&gt;Test step&lt;/strong&gt; button for the &lt;em&gt;Send an email&lt;/em&gt; action. After confirming a couple of dialog, you should get a preview of the email. Before you leave the automation page, don't forget to activate the new automation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe63zbckm9ut90ff64346.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe63zbckm9ut90ff64346.png" alt="Figure 10: Preview of the reminder email"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion and next steps
&lt;/h1&gt;

&lt;p&gt;This concludes this short series of posts in which we build  a chore tracker that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lists your chores and highlights the ones that are due.&lt;/li&gt;
&lt;li&gt;Schedules chores again when they are marked done, based on when they should be repeated.&lt;/li&gt;
&lt;li&gt;Sends daily reminder emails to the chores' assignees if they have chores to do.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you like to dive deeper into what Airtable can do, consider trying the following improvements to the tracker:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add nicer formatting to the email using HTML or markdown.&lt;/li&gt;
&lt;li&gt;Add a table to log when a chore was completed and by whom.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>productivity</category>
      <category>airtable</category>
      <category>automation</category>
    </item>
    <item>
      <title>Building a chore tracker with Airtable automations: Part 1</title>
      <dc:creator>Ulrich Feindt</dc:creator>
      <pubDate>Sun, 06 Aug 2023 10:23:10 +0000</pubDate>
      <link>https://dev.to/ufeindt/building-a-chore-tracker-with-airtable-automations-part-1-2enf</link>
      <guid>https://dev.to/ufeindt/building-a-chore-tracker-with-airtable-automations-part-1-2enf</guid>
      <description>&lt;p&gt;When trying to take care of recurring chores, I often find that simple scheduled reminders, like a repeating calendar event, just don't work for me. Some chores don't have a fixed schedule but just a rough time scale, after which they should be done. &lt;/p&gt;

&lt;p&gt;For instance, my partner and I have two cats and we have an automatic food dispenser for the dry food that they mostly eat. The dispenser holds enough food for a little under two weeks but we never know whether it will be ten days or twelve because how much they eat depends on their activity and how many treats and other food we give them. If I just set a reminder for every ten days, the dispenser might still have a few days worth of food and I decide to wait. However, now my scheduled reminders are off by a few days and I would have to manually postpone them all.&lt;/p&gt;

&lt;p&gt;As a solution, I have set up an Airtable base that does the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It lists our recurring chores with a description, a number of days after which it may need to be repeated, and a list of assignees.&lt;/li&gt;
&lt;li&gt;When a chore is due, it is marked as such and a daily reminder is sent to the assignees. (I'll cover the email in another post.) &lt;/li&gt;
&lt;li&gt;When the chore is marked as done by a user, the due date is updated by the defined number of days and the task is moved back to the future chores.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Why Airtable?
&lt;/h1&gt;

&lt;p&gt;At first my plans for this chore tracker were to build a small web app, maybe in Django or maybe I'd go through some tutorials for a FARM stack app (FastAPI, React, MongoDB). The thing, however, is that this often felt like it would take me too much time to get started, so I never did start the project. &lt;/p&gt;

&lt;p&gt;Then I realized that I can set it up in Airtable very quickly and just went for it. At work, we are using Airtable as a product information manager (PIM) and I have been adding automations where necessary, so I was already familiar with its capabilities and limitations.&lt;/p&gt;

&lt;h1&gt;
  
  
  Setting up the base and the chores table
&lt;/h1&gt;

&lt;p&gt;To get started, you'll need to sign up at &lt;a href="https://airtable.com"&gt;Airtable&lt;/a&gt;. A free account will provide all the features that you need (as of writing this).&lt;/p&gt;

&lt;p&gt;Once you are signed up, click &lt;strong&gt;Create a base&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ceLAG-ZM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/imwlbqvmmos0yktckxe1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ceLAG-ZM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/imwlbqvmmos0yktckxe1.png" alt="Figure 1: The freshly created, yet to be name Airtable base" width="800" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Give it a name, e.g. &lt;em&gt;Chore Tracker&lt;/em&gt;, by clicking the current name. You can also change the color and icon.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_aZcYXPv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x387xe5ere1djk8wqhjj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_aZcYXPv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x387xe5ere1djk8wqhjj.png" alt="Figure 2: Changing the base's name, color, and icon" width="480" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, let's set up the chores table:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You'll start with an empty table named &lt;em&gt;Table 1&lt;/em&gt;, see figure 1. Rename it by clicking on the table name and then &lt;strong&gt;Rename table&lt;/strong&gt;. Change the name to &lt;em&gt;Chores&lt;/em&gt;. You can also change what the records/rows will be called. &lt;em&gt;Tasks&lt;/em&gt; is the most fitting term, I think.&lt;/li&gt;
&lt;li&gt;The Table started with a few fields/columns that we won't need. For the fields &lt;em&gt;Notes&lt;/em&gt;, &lt;em&gt;Assignee&lt;/em&gt;, and &lt;em&gt;Status&lt;/em&gt;, click the header and then &lt;strong&gt;Delete field&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;You need to keep the first field, currently called &lt;em&gt;Name&lt;/em&gt;. This field will contain the descriptions of the chores, so rename it to &lt;em&gt;Description&lt;/em&gt;. You probably have figured out how to rename a field by now. If not, click the header and then &lt;strong&gt;Edit field&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q8-rrML7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j4xrj9kw7lbjizqrmg05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q8-rrML7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j4xrj9kw7lbjizqrmg05.png" alt="Figure 3: The base after cleaning up the chores table" width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You'll need three additional fields in the chores table for starters. For each of them, click the plus sign next in the table header, enter the field name, and select its type:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Done&lt;/em&gt; (Checkbox)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Due date&lt;/em&gt; (Date, selecting your preferred format)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Repeat after [days]&lt;/em&gt; (Number, set the precision to &lt;em&gt;Integer&lt;/em&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BFs9_y-N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1prcd38qhf9k4q5b7gfr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BFs9_y-N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1prcd38qhf9k4q5b7gfr.png" alt="Figure 4: The chore table with its editable fields" width="800" height="257"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you can enter your chores, giving them an initial due date and a number of days, after which they should be repeated. Note that there are currently three empty records in the table. If you need more, just click one of the the plus signs below the records. If you only need one or two records, you can right click empty (and other) records and then &lt;em&gt;Delete task&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GVnnMBTQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6jro83c4shbi81qj13lx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GVnnMBTQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6jro83c4shbi81qj13lx.png" alt="Figure 5: The core table with two first chores" width="800" height="257"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also sort the chores by due date but right now, you will have to check the dates to see which chore is due. Let's make this clearer.&lt;/p&gt;

&lt;h1&gt;
  
  
  Separating chores that are due
&lt;/h1&gt;

&lt;p&gt;In order to distinguish chores that are due from those that are pending, you can assign a status dynamically using a formula field. Create a new field named &lt;em&gt;Status&lt;/em&gt; and of type &lt;em&gt;Formula&lt;/em&gt;. As the formula, enter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IF(TODAY() &amp;gt;= {Due date}, "Due", "Pending")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Rp9DR1ts--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8lmfo19bd6zk63973c9n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Rp9DR1ts--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8lmfo19bd6zk63973c9n.png" alt="Figure 6: Adding a formula field for the chore status" width="800" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This field will thus say &lt;em&gt;Pending&lt;/em&gt; when the due date is in the future and otherwise it will say &lt;em&gt;Due&lt;/em&gt;. In order to test the formula, set one chore to a past date and another to a future date.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--m_rAcY1f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jc3ko9zwri16thc6ea5d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m_rAcY1f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jc3ko9zwri16thc6ea5d.png" alt="Figure 7: The status field in action (screenshot taken on 2023-08-05)" width="800" height="215"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, to separate pending chores from those that are due, click &lt;strong&gt;Group&lt;/strong&gt; at the top of the table and select the Status field. You can then also hide the Status field to keep the table tidy by right click &lt;em&gt;Status&lt;/em&gt; in the header. Additionally, feel free to sort the table by the due date. This will sort the chores inside each grouping.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--skjKfu1l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ck6c14bsvimva7ejj07n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--skjKfu1l--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ck6c14bsvimva7ejj07n.png" alt="Figure 8: The chore table grouped by status and sorted" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now it is obvious which chores are due at a glance. Next we will set up the automation that reschedules completed tasks.&lt;/p&gt;

&lt;h1&gt;
  
  
  Rescheduling completed tasks automatically
&lt;/h1&gt;

&lt;p&gt;Airtable provides a simple no-code system for automation. This can be great if you're not a software developer and just want to automate some simply but for developers,  limitations can be frustrating (as we'll see in a bit). These limitation can be overcome by adding a script to an automation but that is a only possible on a paid Airtable plan. Fortunately, in this case we can work around it.&lt;/p&gt;

&lt;p&gt;First, the automation needs a trigger. At the top of the page click &lt;strong&gt;Automations&lt;/strong&gt; to navigate to the automations page. Select the empty automation that is already there and give it a name. Then click &lt;strong&gt;Add trigger&lt;/strong&gt; and select the following properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trigger type:&lt;/strong&gt; When record matches conditions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Table:&lt;/strong&gt; Chores&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conditions:&lt;/strong&gt; When &lt;em&gt;Done&lt;/em&gt; is checked&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WzSPgg95--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5itkkgu2jrhx4wc9m6h2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WzSPgg95--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5itkkgu2jrhx4wc9m6h2.png" alt="Figure 9: Trigger settings for the automation" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you just need to add an action that updates the record but trying this will reveal the aforementioned limitation: you cannot calculate new values inside an automation without using a script, i.e. we cannot determine the new date the task should be scheduled at here. Luckily, we can circumvent this by adding another formula field to the table.&lt;/p&gt;

&lt;p&gt;Return to the table view by clicking &lt;strong&gt;Data&lt;/strong&gt; at the top of the page. In the &lt;em&gt;Chores&lt;/em&gt; table, add a new field of type &lt;em&gt;Formula&lt;/em&gt; named &lt;em&gt;Next due date&lt;/em&gt; with the following formula:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DATEADD(TODAY(), {Repeat after [days]}, "days")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will always show a date in the future by the defined number of days. Feel free to adjust the formatting of the field. By default it will show the time but we don't need that level of precision here. You can also hide this field if you like. I will leave it visible for now for testing.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6W6_9gV---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0cssc5zrmc5ridyqejcm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6W6_9gV---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0cssc5zrmc5ridyqejcm.png" alt="Figure 10: The chore tracker with the calculated next due date (screenshot taken on 2023-08-06)" width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now return to the automations page, click &lt;strong&gt;Add advanced logic or action&lt;/strong&gt;, and select &lt;strong&gt;Update record&lt;/strong&gt;. In the properties, select the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Table:&lt;/strong&gt; Chores&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Record ID:&lt;/strong&gt; Click the plus sign and selec the Record ID of the record from the trigger (this should be your only option)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fields:&lt;/strong&gt; Click &lt;strong&gt;Choose field&lt;/strong&gt; to add two field to update

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Done:&lt;/strong&gt; unchecked&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Due date:&lt;/strong&gt; Click the gear icon to the right to switch the field to &lt;strong&gt;Dynamic&lt;/strong&gt;, then click the plus sign and select the &lt;em&gt;Next due date&lt;/em&gt; field of the record from the trigger.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now the automation is ready to be tested. Before you return to the table view, don't forget to switch the automation on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K6kCY9w4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/74b31m1nyj8abhwjjvet.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K6kCY9w4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/74b31m1nyj8abhwjjvet.png" alt="Figure 11: The update record action of the now activated automation" width="800" height="693"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To test the automation, return to the table view and check the checkbox in the &lt;em&gt;Done&lt;/em&gt; field of one of the task. (Note that this will work whether a task is due or not, i.e. you can use it if you took care of a chore early.) It may take a few second but you should see the task update to the new due date and &lt;em&gt;Done&lt;/em&gt; should be unchecked. If the task was due, it will now be grouped under &lt;em&gt;Pending&lt;/em&gt; again.&lt;/p&gt;

&lt;h1&gt;
  
  
  Next steps
&lt;/h1&gt;

&lt;p&gt;Now that we have a working automated tracker for your chores and tasks, we could just check it every day to see what needs to be done. But if you are as prone to forgetting this as me, you will want to add daily email reminders if there are chores. These reminders will be implemented in my next post.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>airtable</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
