Building an Automated Weekly Review with Things 3 and Obsidian

· 4 min read
obsidian things3 gtd productivity dataview

Prerequisites

  • Obsidian with Dataview and Periodic Notes plugins
  • Things 3 with the Things Logbook plugin for Obsidian
  • Daily notes following a consistent template
  • A strong cup of tea (non-negotiable)
  • The emotional resilience of someone who has debugged a Dataview query before

What We’re Building

Right, lets talk about weekly reviews. You know the ritual. Every Sunday you sit down, squint at your task manager, and try to reconstruct what on earth you actually did all week. Was it productive? Was it a blur of meetings and context-switching? Who can say. Your brain certainly cant.

What if your notes just… told you? Thats the dream, and its surprisingly achievable.

We’re building an automated weekly review system that pulls completed tasks from Things 3 and notes from your daily journal entries into a single weekly summary. No manual copy-pasting, no trawling through seven separate daily notes. Just open the weekly note and everything is already there.

Thanos saying fine Iโ€™ll do it myself

The Approach

  1. Create a daily note template with structured sections
  2. Create a weekly note template with Dataview queries
  3. Use Advanced URI for quick navigation

Nothing revolutionary here, just a few plugins doing exactly what they were designed to do. The magic is in how they fit together.

Step 1: Set Up Your Daily Template

Create a template with consistent headings that Dataview can parse. This is the bit that matters more than you think. Dataview doesnt care about your feelings, it cares about exact heading matches.

## ๐Ÿ“… Today's Notes

## ๐Ÿ“– Logbook
<!-- Things Logbook plugin populates this -->

Keep it simple. The Things Logbook plugin will automatically populate completed tasks under that Logbook heading each day. Your job is just to write whatever you want under Today’s Notes. Stream of consciousness, bullet points, a strongly worded letter to your past self. Whatever works.

Step 2: Create the Weekly Template

Here’s where the actual sorcery happens. Add this Dataview query to your weekly note template and it will pull all notes from the current week automatically.

const startOfWeek = window.moment().startOf("week").format("YYYY-MM-DD");
const endOfWeek = window.moment().endOf("week").format("YYYY-MM-DD");

const dailyNotesFolder = "Journal/Daily";

const pages = dv.pages(`"${dailyNotesFolder}"`)
  .where(p => {
    const dateInFilename = window.moment(p.file.name, "YYYY-MM-DD", true);
    return (
      dateInFilename.isValid() &&
      dateInFilename.isSameOrAfter(startOfWeek) &&
      dateInFilename.isSameOrBefore(endOfWeek)
    );
  });

function getSection(content, heading) {
  const lines = content.split("\n");
  const startIndex = lines.findIndex(line => line.trim() === heading);
  if (startIndex === -1) return "";

  const sectionLines = [];
  for (let i = startIndex + 1; i < lines.length; i++) {
    if (lines[i].startsWith("## ")) break;
    sectionLines.push(lines[i]);
  }
  return sectionLines.join("\n");
}

for (let page of pages) {
  const content = await dv.io.load(page.file.path);
  const notes = getSection(content, "## ๐Ÿ“… Today's Notes");
  const dateInFilename = window.moment(page.file.name, "YYYY-MM-DD", true);
  const dayOfWeek = dateInFilename.format("dddd");

  dv.header(3, `${page.file.name} (${dayOfWeek})`);
  dv.paragraph(notes);
}

This is a DataviewJS query, not a standard Dataview query block, so make sure you’re using a dataviewjs code block in your actual template. It filters daily notes by date, extracts the content under your “Today’s Notes” heading, and renders it all in one place. Beautifully lazy. The best kind of automation.

Cat typing furiously to automate everything

Use Advanced URI to create links you can trigger from anywhere. These little shortcuts save more time than you’d expect.

[Open Weekly Note](obsidian://advanced-uri?vault=knowledge&commandid=periodic-notes%253Aopen-weekly-note)
[Open Quarterly Note](obsidian://advanced-uri?vault=knowledge&commandid=periodic-notes%253Aopen-quarterly-note)

Stick these in your daily template, your home page, or even Things 3 as project notes. I have mine pinned in a “Navigation” project in Things that I never actually complete (because it isnt a real project, obviously, but Things doesnt need to know that).

Pedro monkey side-eyeing the fake project

The Result

Every Sunday, open your weekly note and see:

  • All your daily journal entries aggregated by day
  • Completed tasks from Things 3 via the Logbook plugin
  • A clear picture of what you actually accomplished
  • Irrefutable proof that you did, in fact, do things this week

Chefโ€™s Kiss

What I’d Do Differently

Use consistent heading styles from day one. Seriously, day one. I learned this the hard way when I changed my heading format three weeks in and every Dataview query silently returned nothing. No errors, no warnings, just a blank page staring back at me like I’d personally offended it. Changing heading formats breaks the Dataview queries and requires updating old notes, which is exactly as tedious as it sounds.

This took me about 2 hours to get the Dataview queries working correctly. If it helped you, let me know on Bluesky.

Related Posts

Comments