Changelog

This article may contain affiliate links.This article may contain affiliate links.

This changelog page documents all major and minor changes to Ultimate Brain 3.0.

Copy link to heading

This minor updates adds several improvements to Ultimate Brain, including:

  • “Enforce Schedule” property – now you can force a recurring task to stick to its schedule, even if it’s over due. For example, a daily recurring task overdue by 3 days will show a Next Due date that’s 2 days in the past, instead of showing tomorrow. Useful if you have a task that needs to stick to its schedule.
  • Tasks ↔ Notes Relation – now you can directly relate Tasks to Notes, and vice-versa. This is great if you need to link documentation from your Notes database to one or more tasks. Notes pages also have the Tabbed Layout activated, and include a Tasks tab.
  • Books ↔ Notes Relation – you can also directly relate Book pages to Note pages. Typically, I take dedicated book notes right on the book page, but I often found myself creating voice notes that were related to specific books.
  • Tabbed Layout in Task Pages – pages in the Tasks database now have the Tabbed Layout activated, and have dedicated tabs for Sub-Tasks, Recurring Task History, and Time-Tracking sessions.
  • Time Tracking Improvements – if you have Recurring Task History enabled, this update ensures that time tracking sessions are moved to the historical record for a completed task. Example: Prior to this update, if you did a recurring task 10 times and tracked 60 minutes of work each time, the current (unfinished) instance of the task would show 600 minutes of time tracked. This update ensures that each 60-minute session is associated with correct historical instance of the task.
  • Completion Dates Improvement – prior to this update, Completed Dates were automatically set on recurring tasks. This update fixes that, ensuring that automatically-process recurring tasks don’t show a Completed Date. If you have Recurring Task History enabled, historical instances of recurring tasks will still have Completed Dates – this change only affects the current (undone) instance of the task.

Here’s a video tour showcasing all of these upgrades (you can also watch it directly on Loom):

If you added Ultimate Brain to your Notion workspace prior to this update, you can use the upgrade guides below to update your copy manually. This release includes multiple updates, so you’re free to pick and choose the ones you want to add to your template.

It’s also possible to migrate to a new copy of the template – though for this release, I don’t recommend it. These updates are fairly minor, and performing the upgrades should only take 15-30 minutes total.

All features in this update were created in response to customer requests and feedback we’ve received in our community. If you don’t care to perform these updates to your template, don’t worry about it!

Copy link to accordion section
  • Time Commitment: Low
  • Upgrade Possible on Notion’s Free Plan:

This update adds an Enforce Schedule property that lets you force a recurring task to stick to its schedule, even if it’s overdue when you complete it.

For example, a daily recurring task overdue by 3 days will show a Next Due date that’s 2 days in the past, instead of showing tomorrow. Useful if you have a task that needs to stick to its schedule.

Upgrade Guide:

Here’s the direct Loom video link if you need it.

To perform this update, unlock your Tasks database first.

Find the latest version of the Next Due formula here.

Written instructions (Generated by Loom):

1. Introduction to the Update 0:01

  • Overview of the February 7th, 2026 update for Ultimate Brain 3.0.
  • Focus on the new feature for recurring tasks that allows enforcing due dates even if tasks are overdue.

2. Example of the Feature 0:28

  • Example of a recurring task called ‘test task’ due on February 2nd, currently overdue as of February 10th.
  • Explanation of how the next due date is calculated and how the new feature changes this.

3. Enforcing the Schedule 1:21

  • Introduction of the ‘Enforce Schedule’ checkbox.
  • Explanation of how checking this box sets the next due date to the original due date, regardless of overdue status.

4. Implementation Steps Overview 2:03

  • Steps to implement the update:
    • Unlock the tasks database.
    • Add the ‘Enforce Schedule’ property.
    • Update the next due formula.

5. Unlocking the Database 2:34

  • Navigate to the tasks database.
  • Unlock the database to allow structural changes.

6. Adding the ‘Enforce Schedule’ Property 3:37

  • Open the view details pane.
  • Add a new property called ‘Enforce Schedule’ as a checkbox.
  • Set property visibility to always hide.

7. Updating the Next Due Formula 4:24

  • Explanation of how to access and edit the formula.
  • Overview of the changes needed to incorporate the ‘Enforce Schedule’ feature.

8. Formula Modification Details 5:01

  • Replace the ‘now’ function with an ‘if’ statement to check the ‘Enforce Schedule’ property.
  • Explanation of how this change affects the calculation of the next due date.

9. Demonstrating the Feature 6:54

  • Example of how the feature works with overdue tasks.
  • Explanation of how the next due date changes when ‘Enforce Schedule’ is checked.

10. Alternative Method for Updating the Formula 8:05

  • Instructions on how to copy and paste the new formula from documentation instead of editing manually.

11. Accessing Documentation for the Formula 8:12

  • Navigate to the change log page in documentation.
  • Find the tasks database and locate the next due property formula.

12. Finalizing Changes 9:33

  • Lock the tasks database after making changes to prevent accidental modifications.
  • Summary of the new feature and its benefits for managing recurring tasks.
Copy link to accordion section
  • Time Commitment: Low
  • Upgrade Possible on Notion’s Free Plan:

This update creates a relation between the Tasks and Notes databases, allowing you to directly relate Tasks to Notes (and vice versa). It also adds a Tasks tab to Note pages.

Upgrade Guide:

Note: I erroneously mention that a property called Sub-Task Arrow should be included in the template. I actually removed it in a previous update, so your template likely doesn’t have it (and doesn’t need it).

Here’s the direct Loom video link if you need it.

To perform this update, unlock your Tasks database first.

Written instructions (Generated by Loom):

1. Introduction to the Upgrade 0:01

  • Welcome to the Ultimate Brain 3.0 upgrade guide.
  • This update allows direct association between tasks and notes databases.

2. Accessing Databases and Components 0:47

  • Start on the home page of Ultimate Brain.
  • Scroll down to the ‘Databases and Components’ section.

3. Unlocking Databases 1:01

  • Unlock the tasks and notes databases for editing.
  • Choose ‘unlock for everyone’ for demonstration purposes.

4. Opening a Task Page 1:26

  • Open any task page (e.g., ‘pay queue on estimated taxes’).
  • Access the view details pane to see all properties.

5. Adding a Relation Property 1:57

  • Click ‘Add a property’ and select ‘Relation’.
  • Create a relation between tasks and notes databases.
  • Name the relation ‘notes’ and enable two-way relation.

6. Customizing Task Layout 2:23

  • Find the ‘Customize Layout’ button.
  • Add the new ‘notes’ property to the layout.
  • Move it to the desired position in the layout.

7. Displaying Notes in Task Pages 3:11

  • Set the display of the notes property to ‘page section’.
  • Repeat the process for the ‘people’ relation.

8. Adding Tags for Visual Clarity 3:43

  • Use the relation picker to show tags associated with notes.

9. Example Use Case 4:03

  • Demonstrate the benefit of associating notes with recurring tasks (e.g., tax payments).
  • Highlight the efficiency of maintaining a single documentation piece.

10. Opening a Note Page 5:00

  • Navigate back to the notes database and open a note page.

11. Customizing Note Layout 5:21

  • Add the ‘tasks’ relation to the note layout.
  • Set the display to ‘minimal’ for the tasks relation.

12. Creating a Tasks Tab in Notes 5:55

  • Change the structure of the note to ‘tabbed’.
  • Add the tasks relation to create a tasks tab.

13. Configuring Task Visibility 6:12

  • Set the layout for the tasks tab to ‘list’.
  • Add relevant properties (e.g., status, due date) to the tasks view.

14. Finalizing the Upgrade 8:20

  • Re-lock the notes and tasks databases to prevent unintended changes.
  • Confirm that the upgrade is complete and functional.
Copy link to accordion section
  • Time Commitment: Low
  • Upgrade Possible on Notion’s Free Plan:

This update created a relation between the Books and Notes databases, allowing you to relate Notes to Book pages. It also addes Notes and Logs tabs to Book pages.

Typically, I take dedicated book notes right on the book page, but I often found myself creating voice notes that were related to specific books, which is what inspired this update.

Upgrade Guide:

Here’s the direct Loom video link if you need it.

To perform this update, unlock your Tasks database first.

Written instructions (Generated by Loom):

1. Introduction to the Upgrade 0:00

  • Overview of the February 7th, 2026 updates to Ultimate Brain 3.0.
  • New feature: ability to associate notes with books in the books database.

2. New Tabs in Book Pages 0:24

  • Introduction of new tabs in book pages:
    • Logs tab: duplicates functionality of the logs section in the book template.
    • Notes tab: for associating notes with books.

3. Reason for the Upgrade 0:42

  • Original intention was to take book notes directly on book pages.
  • Realization of the need to link voice notes recorded in the notes database to book pages.

4. Starting the Implementation 1:22

  • Begin from the home page of Ultimate Brain.
  • Navigate to the bottom of the page to access databases and components.

5. Unlocking Databases 1:48

  • Unlock the books database to make changes.
  • Unlock the notes database as well.

6. Creating a Relation Property 2:21

  • Open any book in the books database.
  • Create a new property to establish a relation between the books database and the notes database:
    • Select relation property type.
    • Name the relation and set it to two-way.

7. Customizing the Layout 3:04

  • Access the layout customization options.
  • Add the notes relation and logs to the layout:
    • Set both to minimal display to keep content concise.

8. Changing Page Structure to Tabbed 4:27

  • Change the page structure from simple to tabbed.
  • Create a Logs tab with appropriate settings and filters.

9. Adding a Notes Tab 5:54

  • Create a Notes tab with a list layout.
  • Set properties and filters for the Notes tab.

10. Finalizing Changes in the Books Database 6:50

  • Apply changes to all pages in the books database.
  • Ensure the layout is consistent and functional.

11. Updating the Notes Database 7:19

  • Navigate to the notes database and open any note.
  • Add the new books relation property to the layout.

12. Final Steps and Locking Databases 8:23

  • Re-lock the notes and books databases to prevent accidental changes.
  • Emphasize the importance of keeping databases locked when not in use.
Copy link to accordion section
  • Time Commitment: Low
  • Upgrade Possible on Notion’s Free Plan:

Pages in the Tasks database now have the Tabbed Layout activated, and have dedicated tabs for Sub-Tasks, Recurring Task History, and Time-Tracking sessions.

Upgrade Guide:

Note: I erroneously mention that a property called Sub-Task Arrow should be included in the template. I actually removed it in a previous update, so your template likely doesn’t have it (and doesn’t need it).

Here’s the direct Loom video link if you need it.

To perform this update, unlock your Tasks database first.

Written instructions (Generated by Loom):

1. Introduction to the Upgrade 0:00

  • Presenter: Thomas Frank
  • Purpose: Upgrade guide for Ultimate Brain 3.0
  • Date of upgrade: February 7th, 2026
  • Key feature: Adding tabbed layout to the tasks database.

2. Overview of New Features 0:08

  • New tabs added for:
    • Subtasks
    • Task history
    • Recurring tasks
    • Time tracking sessions
  • Note: Not all databases will have tabbed layouts due to complexity.

3. Upgrade Compatibility 0:35

  • Upgrade can be done on a free Notion plan.
  • No database automations will be updated in this upgrade.

4. Accessing the Tasks Database 1:46

  • Navigate to the databases and components page.
  • Unlock the tasks database for customization.

5. Customizing the Layout 2:32

  • Open a task page (e.g., ‘walk the dog’).
  • Click on ‘Customize Layout’.
  • Change from simple structure to tab structure.

6. Creating the Subtasks Tab 2:59

  • Create a new tab for subtasks:
    • Set icon to check mark list.
    • Add description.
    • Use list layout.
    • Set visible properties (status, meta labels, due date).
    • Sort by due date and name.

7. Creating the History Tab 5:39

  • Create a new tab for task history:
    • Set icon to calendar.
    • Add description.
    • Use table layout.
    • Show properties (due, completed, time tracked).
    • Add filters to exclude current tasks.

8. Creating the Time Tracking Tab 9:18

  • Create a new tab for time tracking:
    • Set icon to stopwatch.
    • Add description.
    • Use table layout.
    • Show properties (duration, start, end session button).
    • Sort by start date.

9. Finalizing the Upgrade 10:26

  • Relock the tasks database to prevent accidental changes.

10. Additional Notes 11:03

  • Current limitations on transferring subtasks to historical records.
  • Need for a ‘for each’ tool in Notion automations for advanced functionality.
Copy link to accordion section
  • Time Commitment: Low
  • Upgrade Possible on Notion’s Free Plan:

If you have Recurring Task History enabled, this update ensures that time tracking sessions are moved to the historical record for a completed task.

Example: Prior to this update, if you did a recurring task 10 times and tracked 60 minutes of work each time, the current (unfinished) instance of the task would show 600 minutes of time tracked. This update ensures that each 60-minute session is associated with correct historical instance of the task.

This update requires editing database automations, so it can’t be done on Notion’s free plan.

Upgrade Guide:

Here’s the direct Loom video link if you need it.

To perform this update, unlock your Tasks and Work Sessions databases first.

Written instructions (Generated by Loom):

1. Introduction to the Update 0:00

  • Overview of the update aimed at improving recurring tasks and time tracking in Ultimate Brain.
  • This is part of the February 7th, 2026 updates.
  • Note: This update is minor and primarily for users utilizing both advanced recurring tasks automation and time tracking.

2. Understanding the Bug Fix 0:12

  • Current issue: Time tracked on recurring tasks accumulates on the latest version instead of being recorded historically.
  • Example: 600 minutes tracked on 10 instances shows only on the latest task version.
  • Update will ensure time tracking sessions are moved to the historical record.

3. Requirements for the Update 1:30

  • Ensure you are on a paid Notion plan to perform the update.
  • The update involves modifying an automation.

4. Accessing the Tasks Database 1:44

  • Navigate to the tasks database in Ultimate Brain:
    • Scroll to the bottom of the homepage.
    • Click on ‘Databases and Components’.
    • Locate and unlock the tasks database.

5. Modifying the Recurring Tasks Automation 2:10

  • Find the ‘Recurring Tasks Advanced’ automation using the lightning icon.
  • Add steps to the bottom of the automation:
    • Define a variable for time tracking sessions.
    • Create a formula: trigger page.sessions to list time tracking sessions.

6. Editing Time Tracking Sessions 3:13

  • Add an ‘Edit Pages’ step:
    • Select the time tracking sessions variable as the data source.
    • Update properties:
      • Set the tasks relation to the newly created historical record.
      • Update the name to reflect the new task context.

7. Limitations of the Update 5:07

  • Note that due to Notion’s limitations, unique session numbers cannot be retained in the names of time tracking sessions.

8. Additional Aesthetic Upgrade 5:47

  • Make a minor aesthetic change in the work sessions database:
    • Unlock the database if necessary.
    • Add the status property to the task relation picker for better visual identification of task completion.

9. Finalizing the Update 7:06

  • Relock the work sessions database after making changes.
  • Confirm that all updates are complete.
Copy link to accordion section
  • Time Commitment: Low
  • Upgrade Possible on Notion’s Free Plan:

Prior to this update, Completed Dates were automatically set on recurring tasks.

This update fixes that, ensuring that automatically-process recurring tasks don’t show a Completed Date. If you have Recurring Task History enabled, historical instances of recurring tasks will still have Completed Dates – this change only affects the current (undone) instance of the task.

This update requires editing database automations, so it can’t be done on Notion’s free plan.

Upgrade Guide:

Here’s the direct Loom video link if you need it.

To perform this update, unlock your Tasks database first.

Written instructions (Generated by Loom):

1. Introduction to the Upgrade 0:00

  • Overview of the upgrade guide for Ultimate Brain.
  • Focus on the February 7th, 2026 updates.
  • Purpose: Add a non-recurring source view to the tasks database.

2. Purpose of the Update 0:16

  • Ensure recurring tasks do not receive a completion date.
  • Important for users with older versions of Ultimate Brain (pre-February 7th, 2026).
  • Note: This change will not affect task history.

3. Requirements for the Upgrade 1:09

  • Must be on a Notion paid plan.
  • Requires a paid plan due to automation tweaks.

4. Adding the Non-Recurring Source View 1:17

  • Navigate to the tasks database in Ultimate Brain.
  • Unlock the tasks database if it is locked.

5. Duplicating the Recurring Source View 2:24

  • Duplicate the existing recurring source view.
  • Rename it to ‘Non-Recurring Source’ and assign a down arrow icon.

6. Adjusting Filters for the New View 2:42

  • Change filters to exclude recurring tasks:
    • Set criteria: recur interval >= 0 OR recur interval is empty OR Due is empty.

7. Updating Automations 3:49

  • Locate the ‘Set Completion Dates’ automation.
  • Change the trigger to only activate for the non-recurring source view.

8. Defensive Programming Steps 4:25

  • Edit existing recurring tasks automations to ensure completed dates are cleared:
    • For both simple and advanced recurring tasks automations, add an action to clear the completed date.

9. Finalizing the Update 5:26

  • Re-lock the databases to prevent accidental changes.
  • Confirm that recurring tasks do not have a completed date set.
Copy link to heading

This update introduces a few major new features in Ultimate Brain, including:

  • Native Time Tracking – track how long your tasks take to complete, and even track multiple work sessions for each task.
  • Recurring Tasks Upgrade – you can now create schedules like “The 3rd Thursday of Each Month” with the new “Nth Weekday of Month” Recur Unit option.
  • Daily Planning Properties – improve your daily planning with new Energy, Location, and Process/Immersive properties and views in My Day → Execute.
  • Track Tasks in Areas – the Area template in the Tags database now has a new Tasks section, which shows all tasks within Projects related to an Area.
  • Sub-Task Automations – Auto-close sub-tasks when parent tasks are finished, keep parent and sub-task Project relations in sync, etc.
  • Native Sub-Tasks – Ultimate Brain now uses Notion’s native Sub-Tasks feature.

Additionally, we’ve made a few small tweaks in response to customer feedback, and fixed a couple of small bugs.

Here’s a video tour of all the changes we’ve made:

If you added Ultimate Brain to your Notion workspace prior to this update, you can use the upgrade guides below to update your copy manually. This release includes multiple updates, so you’re free to pick and choose the ones you want to add to your template.

It’s also possible to migrate to a new copy of the template – though for this release, I don’t recommend it unless you really want native Sub-Tasks. All the other updates are quite easy to perform manually, and will take less time than doing a full migration.

All features in this update were created in response to customer requests and feedback we’ve received in our community. If you don’t care to perform these updates to your template, don’t worry about it!

Copy link to accordion section
  • Time Commitment: Medium
  • Upgrade Possible on Notion’s Free Plan: ⚠️ (see below)

We’ve added an all-new, native time-tracking feature to Ultimate Brain. In the Execute section of My Day, we added new Start and End buttons which can start and end work sessions related to a task.

This feature allows you to track multiple work sessions across a single task, and the new Time Tracking property section will show you the total time tracked across all of them. You can also see the total time tracked across all tasks in each Project page as well.

Upgrade Guide:

You can also follow our time-tracking guide to if you need a text guide on performing this update.

Most of this update can be performed if your workspace is on Notion’s Free plan. However, it does include a single database automation that automatically ends active time-tracking sessions when a task is marked Done. You can skip this part if you’re on the Free plan, or upgrade to a paid plan in order to build it. If you do want to build it, follow the video below after you’ve already done everything in the first video:

Copy link to accordion section
  • Time Commitment: Low
  • Upgrade Possible on Notion’s Free Plan:

We’ve upgraded our recurring tasks feature so that it can now handle a new type of schedule: Every nth weekday of each month. For example, “Every 3rd Thursday of the Month”. The term weekday here includes weekend days (otherwise we’d use “workday”, as Excel does).

To keep things as simple as possible, there are no new properties needed for this capability. Instead, we’ve added a single new option to the Recur Unit property: “Nth Weekday of Month”.

We’ve also renamed the “Days (Only if Set to 1 Day(s))” property to “Days”.

Upgrade Guide:

To perform this update, unlock your Tasks database first.

Rename the Days (Only if Set to 1 Day(s)) property to Days.

Add a “Nth Weekday of Month” option to the Recur Unit property.

Update the Localization Key to include a translated or alternate name for the “Nth Weekday of Month” option. If you haven’t renamed or translated your properties, you can ignore this or just paste in the new default formula for Localization Key from below.

[
/* Rewrite these weekday and recur unit options in your own language, so your second brain can work even better with your first. Make sure to set up the same options in the "Recur Unit" and "Days" properties afterward, so you can select them. Feel free to remove the original names afterward! */

/* ["lunes", "3ª", "mercredi", "木曜日", "piątek", "lørdag", "Double Sunday"] */
["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],

/* ["Day(s)", "Week(s)", "Month(s)", "Year(s)", "Month(s) on the Last Day", "Month(s) on the First Weekday", "Month(s) on the Last Weekday", "Nth Weekday of Month"] */
["Day(s)", "Week(s)", "Month(s)", "Year(s)", "Month(s) on the Last Day", "Month(s) on the First Weekday", "Month(s) on the Last Weekday", "Nth Weekday of Month"],

/* This final list is for Status option names. */
["To Do", "Doing", "Done"]
]
Code language: JavaScript (javascript)

Update the Next Due formula with the code block below.

If you’ve renamed or translated your property names, you’ll need to either rename them back to the defaults, paste this code in, and place them back, or use search and replace features to update the code block before pasting it into your own template.

lets(
	version, "2.2.1",
	
	dueProp, prop("Due"),
	
	recurIntervalProp, prop("Recur Interval"),
	
	recurUnitProp, prop("Recur Unit"),
	
	localizationKeyProp, prop("Localization Key"),
	
	daysProp, prop("Days"),
	
	emptyDate, parseDate(""),
	
	if(!empty(recurIntervalProp) and !empty(dueProp),
		if(recurIntervalProp > 0 and recurIntervalProp == ceil(recurIntervalProp),
			lets(
				recurUnit,
					ifs(
						or(recurUnitProp == at(at(localizationKeyProp, 1), 0), recurUnitProp == "Day(s)"), "days",
						or(recurUnitProp == at(at(localizationKeyProp, 1), 1), recurUnitProp == "Week(s)"), "weeks",
						or(recurUnitProp == at(at(localizationKeyProp, 1), 2), recurUnitProp == "Month(s)"), "months",
						or(recurUnitProp == at(at(localizationKeyProp, 1), 3), recurUnitProp == "Year(s)"), "years",
						or(recurUnitProp == at(at(localizationKeyProp, 1), 4), recurUnitProp == "Month(s) on the Last Day"), "monthsonthelastday",
						or(recurUnitProp == at(at(localizationKeyProp, 1), 5), recurUnitProp == "Month(s) on the First Weekday"), "monthsonthefirstweekday",
						or(recurUnitProp == at(at(localizationKeyProp, 1), 6), recurUnitProp == "Month(s) on the Last Weekday"), "monthsonthelastweekday",
						or(and(!empty(at(at(localizationKeyProp, 1), 7)), recurUnitProp == at(at(localizationKeyProp, 1), 7)), recurUnitProp == "Nth Weekday of Month"), "nthweekdayofmonth",
						"days"
					),
				
				weekdays,
					match(
						[
							if(or(includes(daysProp, at(at(localizationKeyProp, 0), 1 - 1)), includes(daysProp, "Monday")), 1, false),
							if(or(includes(daysProp, at(at(localizationKeyProp, 0), 2 - 1)), includes(daysProp, "Tuesday")), 2, false),
							if(or(includes(daysProp, at(at(localizationKeyProp, 0), 3 - 1)), includes(daysProp, "Wednesday")), 3, false),
							if(or(includes(daysProp, at(at(localizationKeyProp, 0), 4 - 1)), includes(daysProp, "Thursday")), 4, false),
							if(or(includes(daysProp, at(at(localizationKeyProp, 0), 5 - 1)), includes(daysProp, "Friday")), 5, false),
							if(or(includes(daysProp, at(at(localizationKeyProp, 0), 6 - 1)), includes(daysProp, "Saturday")), 6, false),
							if(or(includes(daysProp, at(at(localizationKeyProp, 0), 7 - 1)), includes(daysProp, "Sunday")), 7, false)
						],
						"[1-7]"
					),
				
				dateDue, parseDate(formatDate(dueProp, "YYYY-MM-DD")),
				
				timeNow, now(),
				
				dateNow, parseDate(formatDate(timeNow, "YYYY-MM-DD")),
				
				hasRange, dateEnd(dueProp) > dateStart(dueProp),
				
				recurUnitLapseLength,
					if(
						includes(["days", "weeks", "months", "years"], recurUnit),
						dateBetween(dateNow, dateDue, recurUnit) / recurIntervalProp,
						false
					),
				
				lastDayBaseDate,
					if(
						includes(["monthsonthelastday", "monthsonthefirstweekday", "monthsonthelastweekday"], recurUnit),
						if(
							year(dateNow) * 12 + month(dateNow) - (year(dateDue) * 12 + month(dateDue)) > 0,
							dateSubtract(dateAdd(dateSubtract(dateAdd(dateDue, ceil((year(dateNow) * 12 + month(dateNow) - (year(dateDue) * 12 + month(dateDue))) / recurIntervalProp) * recurIntervalProp, "months"), date(dateAdd(dateDue, ceil((year(dateNow) * 12 + month(dateNow) - (year(dateDue) * 12 + month(dateDue))) / recurIntervalProp) * recurIntervalProp, "months")) - 1, "days"), 1, "months"), 1, "days"),
							dateSubtract(dateAdd(dateSubtract(dateAdd(dateDue, recurIntervalProp, "months"), date(dateAdd(dateDue, recurIntervalProp, "months")) - 1, "days"), 1, "months"), 1, "days")
						),
						emptyDate
					),
				
				firstDayBaseDate,
					if(
						lastDayBaseDate != emptyDate,
						dateSubtract(lastDayBaseDate, date(lastDayBaseDate) - 1, "days"),
						emptyDate
					),
				
				firstWeekdayBaseDate,
					if(
						lastDayBaseDate != emptyDate,
						if(
							test(day(firstDayBaseDate), "6|7"), 
							dateAdd(firstDayBaseDate, 8 - day(firstDayBaseDate), "days"),
							firstDayBaseDate
						),
						emptyDate
					),
				
				lastWeekdayBaseDate,
					if(
						lastDayBaseDate != emptyDate,
						if(
							test(day(lastDayBaseDate), "6|7"), 
							dateSubtract(lastDayBaseDate, day(lastDayBaseDate) - 5, "days"),
							lastDayBaseDate
						),
						emptyDate
					),
				
				nextLastBaseDate,
					if(
						lastDayBaseDate != emptyDate,
						dateSubtract(dateAdd(dateSubtract(dateAdd(lastDayBaseDate, recurIntervalProp, "months"), date(dateAdd(lastDayBaseDate, recurIntervalProp, "months")) - 1, "days"), 1, "months"), 1, "days"),
						emptyDate
					),
				
				nextFirstBaseDate,
				if(
					lastDayBaseDate != emptyDate,
					dateSubtract(nextLastBaseDate, date(nextLastBaseDate) - 1, "days"),
					emptyDate
				),
				
				nextFirstWeekday,
					if(
						lastDayBaseDate != emptyDate,
						if(
							test(day(nextFirstBaseDate), "6|7"), 
							dateAdd(nextFirstBaseDate, 8 - day(nextFirstBaseDate), "days"),
							nextFirstBaseDate
						),
						emptyDate
					),
				
				nextLastWeekday,
					if(
						lastDayBaseDate != emptyDate,
						if(
							test(day(nextLastBaseDate), "6|7"), 
							dateSubtract(nextLastBaseDate, day(nextLastBaseDate) - 5, "days"),
							nextLastBaseDate
						),
						emptyDate
					),
				
				firstWeekdayOfMonthBaseDate,
					lets(
						baseMonthDate,
							if(
								timeNow > dueProp,
								timeNow,
								dueProp
							),
							
						weekday, toNumber(at(weekdays, 0)),
						
						firstDayOfNextMonth, dateAdd(dateSubtract(baseMonthDate, date(baseMonthDate) - 1, "days"), 1, "months"),
						
						ifs(
							day(firstDayOfNextMonth) < weekday, dateAdd(firstDayOfNextMonth, weekday - day(firstDayOfNextMonth), "days"),
							day(firstDayOfNextMonth) > weekday, dateAdd(firstDayOfNextMonth, weekday - day(firstDayOfNextMonth) + 7, "days"),
							firstDayOfNextMonth
						)
					),
					
				nthWeekdayOfMonthBaseDate, dateAdd(firstWeekdayOfMonthBaseDate, recurIntervalProp - 1, "weeks"),
				
				nextDueStart,
					ifs(
						recurUnit == "days" and length(weekdays) > 0 and recurIntervalProp == 1, 
							if(
								dateNow >= dateDue,
								ifs(
									includes(weekdays, format(day(dateAdd(dateNow, 1, "days")))), dateAdd(dateNow, 1, "days"),
									includes(weekdays, format(day(dateAdd(dateNow, 2, "days")))), dateAdd(dateNow, 2, "days"),
									includes(weekdays, format(day(dateAdd(dateNow, 3, "days")))), dateAdd(dateNow, 3, "days"),
									includes(weekdays, format(day(dateAdd(dateNow, 4, "days")))), dateAdd(dateNow, 4, "days"),
									includes(weekdays, format(day(dateAdd(dateNow, 5, "days")))), dateAdd(dateNow, 5, "days"),
									includes(weekdays, format(day(dateAdd(dateNow, 6, "days")))), dateAdd(dateNow, 6, "days"),
									includes(weekdays, format(day(dateAdd(dateNow, 7, "days")))), dateAdd(dateNow, 7, "days"),
									emptyDate
								),
								ifs(
									includes(weekdays, format(day(dateAdd(dateDue, 1, "days")))), dateAdd(dateDue, 1, "days"),
									includes(weekdays, format(day(dateAdd(dateDue, 2, "days")))), dateAdd(dateDue, 2, "days"),
									includes(weekdays, format(day(dateAdd(dateDue, 3, "days")))), dateAdd(dateDue, 3, "days"),
									includes(weekdays, format(day(dateAdd(dateDue, 4, "days")))), dateAdd(dateDue, 4, "days"),
									includes(weekdays, format(day(dateAdd(dateDue, 5, "days")))), dateAdd(dateDue, 5, "days"),
									includes(weekdays, format(day(dateAdd(dateDue, 6, "days")))), dateAdd(dateDue, 6, "days"),
									includes(weekdays, format(day(dateAdd(dateDue, 7, "days")))), dateAdd(dateDue, 7, "days"),
									emptyDate
								)
							),

						recurUnit == "nthweekdayofmonth" and length(weekdays) == 1 and recurIntervalProp >= 1 and recurIntervalProp <= 5,
							if(
								month(nthWeekdayOfMonthBaseDate) == month(firstWeekdayOfMonthBaseDate),
								nthWeekdayOfMonthBaseDate,
								dateSubtract(nthWeekdayOfMonthBaseDate, 1, "week")
							),

						recurUnit == "monthsonthelastday",
							if(
								dateNow >= lastDayBaseDate,
								nextLastBaseDate,
								lastDayBaseDate
							),
						
						recurUnit == "monthsonthefirstweekday",
							if(
								dateNow >= firstWeekdayBaseDate,
								nextFirstWeekday,
								firstWeekdayBaseDate
							),
						
						recurUnit == "monthsonthelastweekday",
							if(
								dateNow >= lastWeekdayBaseDate,
								nextLastWeekday,
								lastWeekdayBaseDate
							),
						
						includes(["days", "weeks", "months", "years"], recurUnit), 
							if(
								dateBetween(dateNow, dateDue, "days") >= 1,
								if(
									recurUnitLapseLength == ceil(recurUnitLapseLength),
									dateAdd(dateDue, (recurUnitLapseLength + 1) * recurIntervalProp, recurUnit),
									dateAdd(dateDue, ceil(recurUnitLapseLength) * recurIntervalProp, recurUnit)
								),
								dateAdd(dateDue, recurIntervalProp, recurUnit)
							),

						emptyDate
					),
				
				recurRange, dateBetween(nextDueStart, dateDue, "days"),
				
				timeNextDueStart, dateAdd(dateStart(dueProp), recurRange, "days"),
				
				timeNextDueEnd, dateAdd(dateEnd(dueProp), recurRange, "days"),
				
				nextDue,
					if(
						hasRange,
						dateRange(timeNextDueStart, timeNextDueEnd),
						timeNextDueStart
					),
				
				nextDue
			),
			dueProp
		),
		emptyDate
	)
)
Code language: JavaScript (javascript)
Copy link to accordion section
  • Time Commitment: Low
  • Upgrade Possible on Notion’s Free Plan:

In the My Day → Execute section of Ultimate Brain, there are now three new views: Energy, Location, and P/I. After you’ve selected the tasks you’re going to complete today by checking the My Day checkbox, you can use these views to help prioritize and batch those tasks. Here’s a rundown:

  • Energy: Group tasks by High Energy or Low Energy. While I typically recommend doing the most important task of the day first, this can help you be more productive if you know your biological prime time.
  • Location: Group tasks by the location in which they need to be done. Included categories include Home, Work, and Errand. This can help you effectively batch tasks by location.
  • P/I: This one stands for Process/Immersive. Author Dan Charnas shared these terms in his book Work Clean, and I love them. Process tasks are those where you need to get the ball rolling and unblock someone (or something else) – e.g. replying to an email or heating up a pan. Immersive tasks are those that require your full attention from start to finish. Doing Process tasks first will ensure you actually get more done, since you aren’t blocking other people (or systems) while you’re doing Immersive tasks.

Each of these views makes it easy to drag tasks into their correct category. This is also the reason we’ve created three separate properties for these categories – the older Contexts property didn’t work as well for this purpose (and we’ve removed it).

Upgrade Guide:

To perform this update, unlock your Tasks database first.

You can also update the views in the Process (GTD) → Do Next page:

Copy link to accordion section
  • Time Commitment: Low
  • Upgrade Possible on Notion’s Free Plan: ⚠️ (see below)

We’ve added a new Active Tasks view to the Area template in the Tags database. This allows you to see all open tasks within Projects that are related to the current Area.

I’ll note that this update does not directly relate Tasks to Areas, though you can make that customization to your own copy if you like.

Instead, it simply shows a view of the tasks database, grouped by the Projects that are related to the current Area.

We’ve also shipped a new Automation in the Tags database: Create Ongoing Project for Areas. Once enabled, this automation will create a new ongoing Project whenever you create a new Area-type Tag page – and that project will be related to the Tag page.

For example, if you create a page called “Work” and give it the Area type, Notion will create a “Work Ongoing” project and relate it to that page. You’ll then see that project as a group in the Active Tasks view.

Upgrade guide:

You can perform the bulk of this update on Notion’s Free plan. However, to create the automation shown near the end of the video, your workspace will need to be on a paid Notion plan. Free users can use and enable/disable automations that come with templates, but creating and editing automations requires a paid plan.

To perform this update, unlock your Tags and Tasks databases first.

Copy link to accordion section
  • Time Commitment: Low
  • Upgrade Possible on Notion’s Free Plan:

We’ve added three new automations to the Tasks database that improve the way sub-tasks work. These automations bring some useful functionality from other to-do apps, such as Todoist and ClickUp, into Notion. They are:

  1. Task Done → Close All Open Sub-Tasks – When a task’s Status changes to Done, all of its open sub-tasks are set to Done as well (and are given Completed Dates).
  2. Sync Parent/Sub-Task Projects & People – Ensures each sub-task has the same Project, People, and Content relations as its parent task.
  3. Change Project → Remove Parent Task – If you change the Project on a sub-task, it will no longer be a sub-task.

In new copies of Ultimate Brain, each of these automations is disabled by default. They must be enabled by users.

If your workspace is on a paid Notion plan, you can create the automations yourself in the Tasks database.

We’ve made this a separate upgrade from the Native Sub-Tasks upgrade listed below because – unlike that upgrade – this one is easy to perform, and is actually worth doing if you’re a heavy user of sub-tasks.

Upgrade guide:

Performing this upgrade involves creating new database automations, so you’ll need to be on a paid Notion plan to do it.

To perform this update, unlock your Tasks database first.

Copy link to accordion section
  • Time Commitment: High
  • Upgrade Possible on Notion’s Free Plan:

We’ve finally switched over to using Notion’s native Sub-Items feature for sub-tasks in Ultimate Brain.

This change doesn’t really change the way Ultimate Brain works, and is not recommend for most people who already have a copy of the template. Ultimate Brain already had a very robust sub-tasks system, which was developed to side-step technical issues in Notion’s Sub-Items feature.

We feel Notion has finally addressed enough of those issues to move forward with using Sub-Items, and doing so will help us to keep our tutorials and educational content from being confusing in the future (e.g. “Why don’t you use Sub-Items, Tom?”). We try our best to build our templates so that you can use our tutorials to learn exactly how they work!

That said, actually making this change to an existing copy of Ultimate Brain requires extensive work. For most people, it’s not worth the trouble.

I also don’t personally use sub-tasks – ever. If a task needs to be broken down, I believe it is a project.

Upgrade guide:

To perform this update, unlock your Tasks database first.

Copy link to accordion section
  • Time Commitment: Low
  • Upgrade Possible on Notion’s Free Plan: ⚠️ (see below)

Finally, we’ve made a number of small tweaks and bug fixes to Ultimate Brain:

  • My Day is now a pinned property in the Tasks database page layout
  • The My Week → Plan My Week → Recurring view’s Status property’s view-by setting has been changed to Checkbox. The same was done for My Day → Plan → Recurring.
  • In My Day → Wrap Up → Calendar, the filters were edited so that My Day is Unchecked.
  • The following properties were deleted in the Tasks database: Next Due API, UTC, Recurring Tasks Divider, and Contexts (this one has been replaced by Energy, Location, and P/I in the Daily Planning update – see note below before deleting it.)
  • The Set Completion Dates and Clear Completion Dates automations are now enabled by default.
  • The Clear Completion Date automation now triggers if a task is set to In Progress, and only triggers for tasks in the Complete view of the Tasks database.
  • A new Shopping List property is created in the Tasks database (see second video below)

Upgrade guide:

Important: Don’t delete the Contexts property unless you’re on a paid Notion plan. If you do, also edit the Recurring Tasks (Advanced) automation in the Tasks database, removing the deleted Contexts property from the Add Page action. Once you delete the Contexts property, the automation will be disabled until this change is made. You can avoid this issue by simply not deleting the Contexts property.

Nearly all of these changes can be made to your existing copy if your workspace is on Notion’s Free plan. However, making the small change to the Clear Completion Date automation requires being on a paid Notion plan.

To perform this update, unlock your Tasks database first.

After deleting the Contexts property, watch the video below to create a new Shopping List property that will drive the shopping list in the Recipes dashboard:

Copy link to heading

In the Tasks database, we renamed a multi-select property called “Tags” to “Labels”.

This was done to prevent confusion with other Relation properties in other databases that connect to the Tags database.

Here’s an upgrade guide:

Copy link to heading

Today mark’s the full, public launch of Ultimate Brain 3.0. You can see everything that’s new in our detailed What’s New page.

Alternatively, you can watch the video below!

🤔 Have an UB Question?

Fill out the form below and I’ll answer as soon as I can! ~Thomas

🤔 Have a Question?

Fill out the form below and I’ll answer as soon as I can! ~Thomas