How a Forgotten Checkbox Broke My Weekly Notion System
1. Setting up a clean Notion workspace for weekly reviews
The most consistent issue when starting weekly reviews in Notion isn’t forgetting to do them — it’s forgetting where they live. Every time I opened Notion for the first two weeks, I clicked into a dashboard that looked great but had no actual function. Turns out, if the review template isn’t pinned, you will absolutely lose it in the sea of Notion sidebars.
I eventually set up a top-level page called “Weekly Review” with two key embeds only: the current week’s review template and a database view filtered by the last 7 days of tasks. This felt obvious once I had done it, but for some reason I’d buried those inside a Projects hub initially, which involved four clicks and no visual trigger to remind me what was due.
Filters in Notion can be fragile. One week I noticed my task section was completely blank — not because I hadn’t done anything (I had, barely), but because the filter was still set to the previous week ending Sunday and it was Monday morning. Unless you add a dynamic filter using "Date is within past 1 week"
, it simply shows nothing. No warning, just an empty view that makes you briefly feel like you’re in a productivity blackout.
2. Building a recurring template with dynamically dated sections
Notion’s template system is fine until dates get involved. The minute I tried auto-populating the review with this week’s start and end date, I hit a wall. There’s no native date offset that updates when the template is triggered. If you include a Date property inside a template and set it to “today” — that value stays fixed to the day the template was created.
What worked best was keeping the Week property empty in the template and then immediately hitting the inline calendar picker after spawning a new week. A total workaround, but at least it doesn’t lie.
Also a fun bug: if you duplicate a review template directly in the database, and there’s a linked database view inside the template that also filters by that database — it’ll turn recursive. As in, the new copy will show only itself. I only caught this because the reflection I wrote about procrastinating was staring back at me alone inside the new week’s review without any other task entries. I had to rebuild that relation filter manually to point to the main database again. Copy-paste at your own risk.
3. Linking tasks from different databases without breaking filters
If you’re using a task tracking database separate from your weekly journal or review log, get ready for some light chaos. I started with two linked databases: one for all tasks (including recurring events and deadlines) and one for my review entries. The goal was to show tasks done in a given week underneath that week’s notes. Easy, until you remember Notion doesn’t do bidirectional date-based relations.
I ended up using a roll-up field where the Review database links to the Tasks database (manual relation), and then the roll-up shows checkboxes for all tasks marked as “done” within that week. The real edge case: if I checked a task as done on Sunday but didn’t open the review template until Monday, it wouldn’t show up. Dates are read dynamically only when the filter criteria are applied — and filters use page-level date from when you first open the linked view.
One clickable trick that helped here: embedding a synced block instead of a database view if all you want is a dynamic snippet. That way you just update one central block’s filter every Monday, and every weekly review gets it. Saved me from forgetting to tweak the filter on three weeks’ worth of templates.
4. Triggering review reminders with Notion button hacks
Here’s where I got a little desperate. I wanted a way to trigger a new weekly review, set some default values, and maybe ping me if I forgot. Notion’s button feature sounds promising until you realize it can’t actually do anything dynamic with date offsets or send notifications.
To fake it, I set up a Notion button that:
- Duplicates a template in the Review database
- Calls it “Week of [[date]]” manually edited (ugh)
- Linkst o the current date via a pre-set Today property
Then, I hooked into Zapier. Using a Notion database trigger in Zapier, I set up a Zap to ping my phone via SMS whenever a new Week entry is created but not edited within 24 hours. This required checking a modified timestamp and a custom checkbox called “Started” — if that checkbox wasn’t checked within a day of the page appearing, I got a reminder.
This worked for about two weeks until the Zap started triggering twice for the same event. After some log deep-diving, it turned out Notion quietly adds a micro-update when duplicating a page that sometimes counts as a modification, sometimes not. There’s no consistent API response distinguishing the two — I had to add a 10-minute delay and a second conditional step to check for a real update (like changing the title length over 10 characters). Not elegant. But less spammy.
5. Using Notion formulas to generate date ranges that actually work
This probably ate the most time: trying to dynamically display “Week of May 6–12” type labels in a column. I figured it would be simple. It was not. Notion formulas can’t natively format dates into ranges very well. Their formatDate()
function doesn’t handle relative ranges cleanly unless you’re thinking in Unix timestamps and trimming strings manually.
Eventually landed on this formula:
"Week of " + formatDate(prop("Start"), "MMM D") + " – " + formatDate(dateAdd(prop("Start"), 6, "days"), "MMM D")
The key requirement was to always insert the start date manually on each Weekly Review page under a “Start” property. The tricky part was that this only displayed the right end date if Start was a Monday — otherwise it gave mid-week ranges. I hardcoded the new week to always begin Mondays for consistency.
Surprise behavior from substrings
I also tested using substrings to manipulate YYYY-MM-DD data, thinking it would avoid the date conversion bugs — except Notion formula evaluation forces implicit type coercion on even stringified dates. So substring("2024-05-07", 5, 2)
works, but substring(prop("MyDate"), 5, 2)
randomly fails if MyDate is formatted in UTC depending on your timezone. Spent a dumb hour on that.
6. Tracking incomplete reviews across multiple weeks automatically
This part’s still kind of a mess, but it’s slightly better now. At one point I realized I didn’t know which weeks I’d missed doing a full review — and more importantly, if any of them were still partially filled in. The solution I tried first was a checkbox called “Complete,” but of course I’d forget to tick it. Human error.
What started working better: a text formula that checks if the Journal, Highlights, and Tasks Completed fields were all not empty:
if(and(prop("Highlights") != "", prop("Journal") != "", prop("Tasks Completed") != ""), "✅ Done", "⚠️ Incomplete")
This gave me a visual cue in a single view listing all review entries. I filtered the database to show only entries where the Completion column = ⚠️ Incomplete and the date is older than 7 days. It’s not perfect — if you write just “meh” in each field, it counts — but I’ll take shallow data over absent data most days.
7. Embedding weekly summaries into dashboards without breaking sync
This one drove me up the wall. I had a main dashboard where I wanted to show the most recent weekly review snippet — basically, one nice box that said “Here’s what I did and learned this week.” I used a synced block for that, copying the Highlights section into a synced block and pasting that into the dashboard.
Fine for one week. But every time I created a new review, I had to update the synced block to reflect the new Highlights. You can’t dynamically point a synced block at another note — it’s static. So instead I built a Gallery view in the Review database, filtered to only show the most recent entry using sort by descending date + limit to 1, and displayed the Highlights field as the preview.
Undocumented but super useful Notion behavior here: gallery previews will show rich text snippets even if there are line breaks, as long as you set the property preview explicitly to a text field. I never found that in any docs, but it works — the same layout in Table view doesn’t render line breaks the same way.