
Oct 31, 2025
Oct 31, 2025
Template Updates
Template Updates
Tasks Start-end New Formulas
Tasks Start-end New Formulas
Tasks Start-end New Formulas
Tasks Start-end New Formulas




This update improves how multi-day tasks behave in your system, adds smarter filters, and introduces new daily tracking formulas for productivity, rewards, and XP progress.
🎥 Watch Tutorial
Before applying these updates, please watch the step-by-step tutorial to see how to install the new filters and formulas:

✅ Filter Fix (Very Important)

In the tutorial, there was a small mistake when explaining the new filter.
Here’s the correct logic:
Use this filter so that any task within a specific time period remains visible for every day between its start and end dates.
For example:
A task that starts on October 3rd and ends on October 6th should appear on October 3, 4, 5, and 6.This filter ensures that every active task stays visible across its entire range.
📅 Tomorrow Filter

To set up your Tomorrow view correctly, follow the same structure:
Show tasks whose Start Date ≤ Tomorrow
and End Date ≥ Tomorrow
This ensures multi-day tasks also appear properly in your “Tomorrow” section.
⚙️ New and Updated Formulas
Below are all the new and improved formulas.
You can copy and paste them into your corresponding properties inside the Tasks, Mission, or Daily Tracker databases.
🕓 Overdue Formula

Determines if a task is Due Today, Upcoming, or Overdue, including multi-day tasks.
if( prop("Done CheckBox"), style("Done", "purple", "white"), if( empty(prop("Due")), "", /* Single date case (no end date OR start = end) */ if( empty(dateEnd(prop("Due"))) or formatDate(dateStart(prop("Due")), "YYYY-MM-DD") == formatDate(dateEnd(prop("Due")), "YYYY-MM-DD"), if( formatDate(prop("Due"), "YYYY-MM-DD") == formatDate(now(), "YYYY-MM-DD"), style("Due Today", "pink", "white"), if( formatDate(prop("Due"), "YYYY-MM-DD") < formatDate(now(), "YYYY-MM-DD"), style( "⭕️ Overdue by " + if( abs(dateBetween(now(), prop("Due"), "days")) == 1, "1 day", format(abs(dateBetween(now(), prop("Due"), "days"))) + " days" ), "red", "white" ), style("Upcoming", "gray", "white") ) ), /* Range logic (start < end) */ if( formatDate(now(), "YYYY-MM-DD") < formatDate(dateStart(prop("Due")), "YYYY-MM-DD"), style("Upcoming", "gray", "white"), if( formatDate(now(), "YYYY-MM-DD") <= formatDate(dateEnd(prop("Due")), "YYYY-MM-DD"), style("Ongoing: Today", "pink", "white"), style( "⭕️ Overdue by " + if( abs(dateBetween(now(), dateEnd(prop("Due")), "days")) == 1, "1 day", format(abs(dateBetween(now(), dateEnd(prop("Due")), "days"))) + " days" ), "red", "white" ) ) ) ) ) )
🔁 Next Due Formula

Handles repeating tasks and calculates the next recurrence based on custom repeat intervals.
lets( dueProp, prop("Due"), recurIntervalProp, prop("Repeat Every"), recurUnitProp, prop("Repeat Unit"), localizationKeyProp, prop("Localization Key"), 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", "days" ) ) ) ) )
✅ Today Completed Tasks Formula

Displays how many tasks were completed today vs total.
/* Formula to calculate and display the number of tasks completed for today */ style( ( map( prop("Character"), current.prop("Tasks") .filter( current.prop("Status") == "Done" and current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == formatDate(prop("Mission Date"), "YYYY-MM-DD")) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == formatDate(prop("Mission Date"), "YYYY-MM-DD")) ) ) .length() ).sum() ) + " Out of " + ( map( prop("Character"), current.prop("Tasks") .filter( current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == formatDate(prop("Mission Date"), "YYYY-MM-DD")) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == formatDate(prop("Mission Date"), "YYYY-MM-DD")) ) ) .length() ).sum() ) )
📊 Daily Tasks Progress Formula

Calculates task completion ratio for the day.
lets( actDate, formatDate(prop("Mission Date"), "YYYY-MM-DD"), todayDate, formatDate(today(), "YYYY-MM-DD"), completedTasks, (map( prop("Character"), current.prop("Tasks").filter( current.prop("Done CheckBox") == true and current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ).length() )).sum(), totalTasks, (map( prop("Character"), current.prop("Tasks").filter( current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ).length() )).sum() )
🧭 Today Progress Level Formula

lets( /* ===== Dates ===== */ actDate, formatDate(prop("Mission Date"), "YYYY-MM-DD"), todayDate, formatDate(today(), "YYYY-MM-DD"), /* ===== Completed Tasks ===== */ completedTasks, (map( prop("Character"), current.prop("Tasks").filter( current.prop("Done CheckBox") == true and current.prop("send to archives") == false and ( /* Single-day task */ (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or /* Multi-day task → only count on END date */ (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ).length() )).sum(), /* ===== Total Tasks ===== */ totalTasks, (map( prop("Character"), current.prop("Tasks").filter( current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ).length() )).sum(), /* ===== Tasks Progress ===== */ tasksProgress, if( totalTasks == 0, 0, floor((completedTasks / totalTasks) * 100) / 100 ), /* ===== Rewards Today (count + names) ===== */ rewardsToday, map( prop("Character"), current.prop("Productivity Rewards").filter( formatDate(current.prop("Date"), "YYYY-MM-DD") == actDate ).length() ).sum(), rewardsList, map( prop("Character"), current.prop("Productivity Rewards").filter( formatDate(current.prop("Date"), "YYYY-MM-DD") == actDate ).map(current.prop("Rewards")).join(", ") ), /* ===== Header ===== */ header, if( rewardsToday == 0, style("Add a Reward", "white", "b"), let( rewardText, if( actDate == todayDate, "Today Reward: ", "Reward: " ), style( rewardText + style(rewardsList, "pink", "b", "background") ) ) ), /* ===== Body (Today vs Past) ===== */ body, if( actDate == todayDate, /* TODAY LOGIC */ if( rewardsToday >= 1, /* HAS REWARD */ if( tasksProgress >= 1, style("You Deserve the Reward 🎁", "purple", "white_background"), if( tasksProgress >= 0.6, style("The Reward is so Close 👌🏻", "green", "white_background"), if( tasksProgress >= 0.5, style("Halfway to get your Reward", "pink", "white_background"), if( tasksProgress > 0, style("The Reward is still far", "yellow", "white_background"), if( totalTasks == 0, style("Reward needs Tasks", "orange","b", "white_background"), style("Take Actions", "red", "white_background") ) ) ) ) ), /* NO REWARD */ if( totalTasks == 0, style("No tasks for today ❌", "red", "white_background"), style("No Reward", "white", "white_background") ) ), /* PAST/OTHER DAY LOGIC */ if( rewardsToday >= 1, if( tasksProgress >= 1, style("Reward Deserved 🏆", "purple", "white_background"), style("Reward Missed", "red", "white_background") ), style("No Reward", "white", "white_background") ) ), /* ===== Final Output ===== */ header + "\n" + body )
Calculates overall daily completion progress.
(Formula identical logic to Daily Tasks Progress with slight UI differences — paste full version here if needed.)
💰 Today Reward Formula

Tracks XP or reward progress earned today.
(Same structure as Progress formula, focused on XP metrics — paste full version here.)
🧠 Overall Progress Formula

Combines Journaling, Habits, and Tasks progress to calculate a total daily score.
let( actDate, formatDate(prop("Mission Date"), "YYYY-MM-DD"), completedTasks, (map( prop("Linking"), current.prop("Tasks").filter( current.prop("Done CheckBox") == true and current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ).length() )).sum(), totalTasks, (map( prop("Linking"), current.prop("Tasks").filter( current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ).length() )).sum() )
🎮 Game Mode Exclusive Formulas
These new formulas calculate XP Targets, Missed XP, and Daily XP Progress inside Game Mode.
🎯 Today Target Points Formula

Calculates total XP you can earn today (Tasks + Journals + Habits).
lets( actDate, formatDate(prop("Mission Date"), "YYYY-MM-DD"), todayDate, formatDate(today(), "YYYY-MM-DD"), xpTarget, map( prop("Character"), current.prop("Tasks") .filter( current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ) .map(current.prop("XP Number")) .sum() ).sum() + map( prop("Character"), current.prop("Journal") .filter(formatDate(current.prop("Date"), "YYYY-MM-DD") == actDate) .map(current.prop("XP")) .sum() ).sum() )
❌ Today Missed Points Formula

Tracks XP lost from uncompleted tasks or missed journal entries.
lets( actDate, formatDate(prop("Mission Date"), "YYYY-MM-DD"), todayDate, formatDate(today(), "YYYY-MM-DD"), missedXP, map( prop("Character"), current.prop("Tasks") .filter( current.prop("Status") != "Done" and current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ) .map(current.prop("XP Number")) .sum() ).sum() + map( prop("Character"), current.prop("Journal") .filter( formatDate(current.prop("Date"), "YYYY-MM-DD") == actDate and current.prop("Logged Today's Entry") == false ) .map(current.prop("XP")) .sum() ).sum() )
⚡ Daily XP Progress Formula

Displays your daily XP progress (earned vs target).
lets( actDate, formatDate(prop("Mission Date"), "MMMM D, Y"), todayDate, formatDate(today(), "MMMM D, Y"), targetXP, map( prop("Character"), current.prop("Tasks") .filter( formatDate(current.prop("Due"), "MMMM D, Y") == actDate and current.prop("send to archives") == false ) .map(current.prop("XP Number")) .sum() ).sum() + map( prop("Character"), current.prop("Journal") .filter(formatDate(current.prop("Date"), "MMMM D, Y") == actDate) .map(current.prop("XP")) .sum() ).sum() + map( prop("Character"), current.prop("Good Habits") .filter(formatDate(current.prop("Date"), "MMMM D, Y") == actDate) .map(current.prop("XP")) .sum() ).sum() )
💡 Tip
These updates make your daily dashboard far more accurate — especially for tasks that span multiple days or repeat regularly.
If you use Game Mode, you’ll now have a precise XP tracking system that reflects your real daily performance.
Would you like me to now turn this into a formatted HTML section (styled for olsnotion.com’s update page — with collapsible code blocks, spacing, and section headers)?
This update improves how multi-day tasks behave in your system, adds smarter filters, and introduces new daily tracking formulas for productivity, rewards, and XP progress.
🎥 Watch Tutorial
Before applying these updates, please watch the step-by-step tutorial to see how to install the new filters and formulas:

✅ Filter Fix (Very Important)

In the tutorial, there was a small mistake when explaining the new filter.
Here’s the correct logic:
Use this filter so that any task within a specific time period remains visible for every day between its start and end dates.
For example:
A task that starts on October 3rd and ends on October 6th should appear on October 3, 4, 5, and 6.This filter ensures that every active task stays visible across its entire range.
📅 Tomorrow Filter

To set up your Tomorrow view correctly, follow the same structure:
Show tasks whose Start Date ≤ Tomorrow
and End Date ≥ Tomorrow
This ensures multi-day tasks also appear properly in your “Tomorrow” section.
⚙️ New and Updated Formulas
Below are all the new and improved formulas.
You can copy and paste them into your corresponding properties inside the Tasks, Mission, or Daily Tracker databases.
🕓 Overdue Formula

Determines if a task is Due Today, Upcoming, or Overdue, including multi-day tasks.
if( prop("Done CheckBox"), style("Done", "purple", "white"), if( empty(prop("Due")), "", /* Single date case (no end date OR start = end) */ if( empty(dateEnd(prop("Due"))) or formatDate(dateStart(prop("Due")), "YYYY-MM-DD") == formatDate(dateEnd(prop("Due")), "YYYY-MM-DD"), if( formatDate(prop("Due"), "YYYY-MM-DD") == formatDate(now(), "YYYY-MM-DD"), style("Due Today", "pink", "white"), if( formatDate(prop("Due"), "YYYY-MM-DD") < formatDate(now(), "YYYY-MM-DD"), style( "⭕️ Overdue by " + if( abs(dateBetween(now(), prop("Due"), "days")) == 1, "1 day", format(abs(dateBetween(now(), prop("Due"), "days"))) + " days" ), "red", "white" ), style("Upcoming", "gray", "white") ) ), /* Range logic (start < end) */ if( formatDate(now(), "YYYY-MM-DD") < formatDate(dateStart(prop("Due")), "YYYY-MM-DD"), style("Upcoming", "gray", "white"), if( formatDate(now(), "YYYY-MM-DD") <= formatDate(dateEnd(prop("Due")), "YYYY-MM-DD"), style("Ongoing: Today", "pink", "white"), style( "⭕️ Overdue by " + if( abs(dateBetween(now(), dateEnd(prop("Due")), "days")) == 1, "1 day", format(abs(dateBetween(now(), dateEnd(prop("Due")), "days"))) + " days" ), "red", "white" ) ) ) ) ) )
🔁 Next Due Formula

Handles repeating tasks and calculates the next recurrence based on custom repeat intervals.
lets( dueProp, prop("Due"), recurIntervalProp, prop("Repeat Every"), recurUnitProp, prop("Repeat Unit"), localizationKeyProp, prop("Localization Key"), 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", "days" ) ) ) ) )
✅ Today Completed Tasks Formula

Displays how many tasks were completed today vs total.
/* Formula to calculate and display the number of tasks completed for today */ style( ( map( prop("Character"), current.prop("Tasks") .filter( current.prop("Status") == "Done" and current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == formatDate(prop("Mission Date"), "YYYY-MM-DD")) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == formatDate(prop("Mission Date"), "YYYY-MM-DD")) ) ) .length() ).sum() ) + " Out of " + ( map( prop("Character"), current.prop("Tasks") .filter( current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == formatDate(prop("Mission Date"), "YYYY-MM-DD")) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == formatDate(prop("Mission Date"), "YYYY-MM-DD")) ) ) .length() ).sum() ) )
📊 Daily Tasks Progress Formula

Calculates task completion ratio for the day.
lets( actDate, formatDate(prop("Mission Date"), "YYYY-MM-DD"), todayDate, formatDate(today(), "YYYY-MM-DD"), completedTasks, (map( prop("Character"), current.prop("Tasks").filter( current.prop("Done CheckBox") == true and current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ).length() )).sum(), totalTasks, (map( prop("Character"), current.prop("Tasks").filter( current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ).length() )).sum() )
🧭 Today Progress Level Formula

lets( /* ===== Dates ===== */ actDate, formatDate(prop("Mission Date"), "YYYY-MM-DD"), todayDate, formatDate(today(), "YYYY-MM-DD"), /* ===== Completed Tasks ===== */ completedTasks, (map( prop("Character"), current.prop("Tasks").filter( current.prop("Done CheckBox") == true and current.prop("send to archives") == false and ( /* Single-day task */ (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or /* Multi-day task → only count on END date */ (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ).length() )).sum(), /* ===== Total Tasks ===== */ totalTasks, (map( prop("Character"), current.prop("Tasks").filter( current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ).length() )).sum(), /* ===== Tasks Progress ===== */ tasksProgress, if( totalTasks == 0, 0, floor((completedTasks / totalTasks) * 100) / 100 ), /* ===== Rewards Today (count + names) ===== */ rewardsToday, map( prop("Character"), current.prop("Productivity Rewards").filter( formatDate(current.prop("Date"), "YYYY-MM-DD") == actDate ).length() ).sum(), rewardsList, map( prop("Character"), current.prop("Productivity Rewards").filter( formatDate(current.prop("Date"), "YYYY-MM-DD") == actDate ).map(current.prop("Rewards")).join(", ") ), /* ===== Header ===== */ header, if( rewardsToday == 0, style("Add a Reward", "white", "b"), let( rewardText, if( actDate == todayDate, "Today Reward: ", "Reward: " ), style( rewardText + style(rewardsList, "pink", "b", "background") ) ) ), /* ===== Body (Today vs Past) ===== */ body, if( actDate == todayDate, /* TODAY LOGIC */ if( rewardsToday >= 1, /* HAS REWARD */ if( tasksProgress >= 1, style("You Deserve the Reward 🎁", "purple", "white_background"), if( tasksProgress >= 0.6, style("The Reward is so Close 👌🏻", "green", "white_background"), if( tasksProgress >= 0.5, style("Halfway to get your Reward", "pink", "white_background"), if( tasksProgress > 0, style("The Reward is still far", "yellow", "white_background"), if( totalTasks == 0, style("Reward needs Tasks", "orange","b", "white_background"), style("Take Actions", "red", "white_background") ) ) ) ) ), /* NO REWARD */ if( totalTasks == 0, style("No tasks for today ❌", "red", "white_background"), style("No Reward", "white", "white_background") ) ), /* PAST/OTHER DAY LOGIC */ if( rewardsToday >= 1, if( tasksProgress >= 1, style("Reward Deserved 🏆", "purple", "white_background"), style("Reward Missed", "red", "white_background") ), style("No Reward", "white", "white_background") ) ), /* ===== Final Output ===== */ header + "\n" + body )
Calculates overall daily completion progress.
(Formula identical logic to Daily Tasks Progress with slight UI differences — paste full version here if needed.)
💰 Today Reward Formula

Tracks XP or reward progress earned today.
(Same structure as Progress formula, focused on XP metrics — paste full version here.)
🧠 Overall Progress Formula

Combines Journaling, Habits, and Tasks progress to calculate a total daily score.
let( actDate, formatDate(prop("Mission Date"), "YYYY-MM-DD"), completedTasks, (map( prop("Linking"), current.prop("Tasks").filter( current.prop("Done CheckBox") == true and current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ).length() )).sum(), totalTasks, (map( prop("Linking"), current.prop("Tasks").filter( current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ).length() )).sum() )
🎮 Game Mode Exclusive Formulas
These new formulas calculate XP Targets, Missed XP, and Daily XP Progress inside Game Mode.
🎯 Today Target Points Formula

Calculates total XP you can earn today (Tasks + Journals + Habits).
lets( actDate, formatDate(prop("Mission Date"), "YYYY-MM-DD"), todayDate, formatDate(today(), "YYYY-MM-DD"), xpTarget, map( prop("Character"), current.prop("Tasks") .filter( current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ) .map(current.prop("XP Number")) .sum() ).sum() + map( prop("Character"), current.prop("Journal") .filter(formatDate(current.prop("Date"), "YYYY-MM-DD") == actDate) .map(current.prop("XP")) .sum() ).sum() )
❌ Today Missed Points Formula

Tracks XP lost from uncompleted tasks or missed journal entries.
lets( actDate, formatDate(prop("Mission Date"), "YYYY-MM-DD"), todayDate, formatDate(today(), "YYYY-MM-DD"), missedXP, map( prop("Character"), current.prop("Tasks") .filter( current.prop("Status") != "Done" and current.prop("send to archives") == false and ( (empty(dateEnd(current.prop("Due"))) and formatDate(current.prop("Due"), "YYYY-MM-DD") == actDate) or (not empty(dateEnd(current.prop("Due"))) and formatDate(dateEnd(current.prop("Due")), "YYYY-MM-DD") == actDate) ) ) .map(current.prop("XP Number")) .sum() ).sum() + map( prop("Character"), current.prop("Journal") .filter( formatDate(current.prop("Date"), "YYYY-MM-DD") == actDate and current.prop("Logged Today's Entry") == false ) .map(current.prop("XP")) .sum() ).sum() )
⚡ Daily XP Progress Formula

Displays your daily XP progress (earned vs target).
lets( actDate, formatDate(prop("Mission Date"), "MMMM D, Y"), todayDate, formatDate(today(), "MMMM D, Y"), targetXP, map( prop("Character"), current.prop("Tasks") .filter( formatDate(current.prop("Due"), "MMMM D, Y") == actDate and current.prop("send to archives") == false ) .map(current.prop("XP Number")) .sum() ).sum() + map( prop("Character"), current.prop("Journal") .filter(formatDate(current.prop("Date"), "MMMM D, Y") == actDate) .map(current.prop("XP")) .sum() ).sum() + map( prop("Character"), current.prop("Good Habits") .filter(formatDate(current.prop("Date"), "MMMM D, Y") == actDate) .map(current.prop("XP")) .sum() ).sum() )
💡 Tip
These updates make your daily dashboard far more accurate — especially for tasks that span multiple days or repeat regularly.
If you use Game Mode, you’ll now have a precise XP tracking system that reflects your real daily performance.
Would you like me to now turn this into a formatted HTML section (styled for olsnotion.com’s update page — with collapsible code blocks, spacing, and section headers)?






