Transcription
I've been journaling in Obsidian ever since I first started using the app over five years ago.
One of the reasons that this works so well is Obsidian's daily notes feature. Though over time, I've crafted my own journaling workflows to assign scores using a method called daily questions that focuses on my intentions rather than the outcomes. This workflow was great and I've used it every day.
But with the release of the basis core plugin this year, it became clear that I would need to update this workflow to use the note properties instead of the tags that I've been using since the beginning. So a few weeks ago, I bit the bullet and I updated everything from that tag-based workflow that I've been using for years to note properties instead, including the shortcut that I used to capture the values as part of my journaling workflow and the graphs that I use to visualize the data.
And in this video, I want to show you what I changed, how I updated that shortcut, and most importantly, I want to show you the beautiful brand new journaling dashboard I was able to create as a result.
Now, I did a video a while back on the specifics of my entire daily questions workflow. The link to that video will be in the description below this one. But the short version here is that instead of using prompts like, "What did I accomplish today?" I reframed the prompts in several important areas to focus on the intentions, not the outcomes. And this is the thing that has helped my journaling habit finally stick is I was no longer tracking outcomes that I really couldn't directly control and I focused on my effort instead. So every day I ask myself a series of questions that all begin with "Did I do my best to..." like, "Did I do my best to love my wife?" "Did I do my best to be a good friend?" "Did I do my best to create something?" And I rate myself on a scale from one to 10, and I log the scores in my Obsidian Daily Note.
Now, for a long time, I logged these scores as values attached to tags that I visualized using the Tracker community plug-in. I created a Canvas dashboard that tracked my scores for each area in a code block, and every quarter, I'd review this dashboard as part of my personal retreat process, as well as update the dates in those code blocks, so it was ready for the next round. It's a system that's worked for me for years, but I knew it needed to be updated for a couple of reasons.
First, the tracker plugin has always kind of bugged me. It can be slow when rendering all that data, and the graphs don't look all that great. It was annoying to have to manually update the dates in the code blocks each quarter. And when you look at where Obsidian is going with bases and properties, I knew the writing was on the wall. My tag-based journaling workflow was going to need to be replaced with one that used note properties instead. And honestly, I've been dragging my feet with moving everything to properties because I have over a thousand daily notes with these daily questions values saved as tags.
But recently, I came across a pretty cool plugin at the recommendation of someone in the library, which is my private PKM community called Life Tracker that allows you to create a dashboard in bases to visualize your property metadata. It looked like a great way to visualize my note metadata and even has a view to make entering missing metadata easy. Using this, I would still have to make the switch from tags to properties, but this looked like an easy way to remove my reliance on the tracker plug-in and would at least free me from editing those code snippets every 90 days.
So, I updated my daily notes template to add the daily questions metadata at the top. And I manually brought over about two weeks of data so I could see what the data looked like when I created the graphs using this particular plug-in. And at first glance, I thought I had struck gold. I was able to create a pretty impressive looking dashboard inside of a basis view that showed me historical data on all my journaling prompts using beautiful looking line graphs. And I could even select from a few different colors to make it a little bit more visually appealing.
Pretty quickly though, I started to hit the glass ceiling as I couldn't customize these charts exactly the way I wanted to and there were a few types of charts that I wanted to use that were missing for other dashboards. So as I started looking for ways to customize these graphs and build the ones I really wanted to use, I recall Tim Miller writing about visualizing data in his daily notes using data view.js. Now unfortunately I know nothing about writing data view.js code and I quickly got lost in those code explanations. But then I had a crazy idea. Could I get Claude to help me write the code to visualize the data the way I wanted to? And the short answer is absolutely yes. So that is what I did.
I built a beautiful new daily questions dashboard that looks like this. And I use Claude to help me write the queries to visualize the data the way I want. So here's how I built this beautiful new daily questions dashboard. I started with a simple prompt: "Help me write a data view.js code block that will display number values from a specific property in my Obsidian Note metadata over time." After going back and forth with Claude for a while, I was able to get a version that looks something like this.
Now this graph is pretty straightforward. It has a solid line that shows my daily question scores for the specific property those scores are assigned to. And I initially asked it to show me the data for the last 90 days. There's a little bit of flex or tension in the line graph to make the lines curved. And the dotted line represents the average score for the time period shown on the graph. Now, honestly, this is already way better than my old tracker-based version, but then I got inspired by a feature that I saw in the life tracker plug-in where you could select different time periods for the graph. So, I also was able to add a button to each code block that allows me to select different time periods to display on the graph. So, now I no longer have to update the date values in the tracker code and I can just select the time period that I want from a drop-down menu. This is starting to look really great and all the data instantly gets updated. The averages on the bottom are calculated just from the visualized data that's being shown in the graph. And this is kind of the best version of this that I've ever had.
Now, all of this is displayed insanely fast thanks to data view.js via the data view plugin and the charting features provided by the Obsidian Charts plugin. So, if you try to implement Data View.js without the Obsidian Charts plugin, you will probably get an error or a prompt to install that plugin. I provided links to both of those plugins below this video. Again, all of this is done with Vibe Coding. I did it without actually knowing how to write any data.js JS code. Though by going back and forth with Claude, I did actually learn quite a bit about what the code was actually doing as Claude does a pretty good job of explaining what it's changing.
So here's a quick look at the code and what's actually going on here. Okay, so first there are three back ticks and the word data.js to indicate that this is a data view.js code block. Then as you can see Claude actually comments out the code. So the first section here is used to make the header container which displays the header for the graph and the button to change the time period on the right. The next section adds the header on the left and the next section configures the look of the drop-down selection button on the right. Now this took a little bit of tweaking to get it the way that I wanted, but with some basic CSS knowledge, I was able to do it fairly easily.
Now, next is the section that sets the path for the daily notes folder for the specific property that I want to chart and the date format of my daily notes files. Now, if you wanted to change the property that the code actually grafted, you just change this property name right here, which makes this really easy to customize. The next section is for the options that show up in the dropdown and the values associated with each. This sets which time periods I can choose from and how many entries back from the current day to look at. And the next section sets the default view to quarterly. The next section creates the main container and the following section creates the graph container. After that, we get the function to display the chart based on the time period selected. And the first thing here is to clear any previous data. Then to calculate the cutoff date and figure out how many days worth of data to show. The next step is to fetch all the daily notes that have the property value and sort them in ascending order, which is the order that we'll use for the chart with the chronological dates on the bottom. The next section sets the labels from the daily notes dates and the values from the selected property, which is what will show up on the graph. The next section calculates the average score, but only from the data that is displayed on the chart. This took a little bit of back and forth to get this right. This makes sure that the average is always accurately displayed. The next section defines the chart structure for the Obsidian Charts plug-in where it sets the chart type as line, hides the labels for the graph itself, and sets the color for the lines and the dots. There's a little bit of extra color data here because I wanted solid dots on my graph instead of open ones, which I think looks a little bit better. The next section is where I force the graph to go from 0 to 10.5, even though the scale is only 1 to 10. And that's because the dots were sliced in half visually at the top or the bottom of the graph, if there wasn't a little extra room and adding margin or padding didn't seem to help. So going to 10.5 gives me that extra room that I need to make sure the dots display correctly at the top of the graph. But then you can see I also force specific tick marks. So the graph itself only shows 0 to 10. Now this section makes sure that the legend is hidden and the next section shows the dotted red average line. The next section is what renders the chart and displays the message, "Please install and/or enable the Obsidian Charts plugin" if the plugin is not active. The next section displays the average from the available data below the chart, followed by a section that looks for new data period to be selected from the drop-down menu and if it finds one, rerenders the chart. And finally, the bottom section here is the initial rendering of the chart, which is for the quarterly 90-day time period. And at the very end, there's again three back ticks to close out the code block.
Okay, so that's the code. Then I just copied this and I changed the header text, the property name, and the color values so that when I displayed all of these on my canvas dashboard, they all had distinguishable colors.
Then I had another crazy idea. Could I combine all of these into one graph and toggle the individual properties on or off? Again, yes. So I created another combined code block which shows each property as a different color on the graph and the averages below the graph for each score being shown. This might be my favorite thing that I have ever made in Obsidian. With this, you can actually toggle the checkboxes at the top to choose which lines show up on the graph. The averages at the bottom get displayed only for the visible lines on the graph. And again, there's a button to display different time periods. So, you can select from weekly, monthly, quarterly, yearly, or all-time view options. The code block for this one is absolutely bonkers. So, I'm not going to go through the whole thing here, but it does rely on a lot of the same logic. And I am building all of this stuff into the new version of Life HQ if you don't want to build this all yourself. I provide free updates to Life HQ to all customers. So, if you already bought it, you're going to get this update for free pretty soon. Just want to make sure that everything is completely good to go before I add it there for everyone.
But again, note properties are the key to making this all work. In each graph is simply showing the numerical values associated with a particular property over time. So as I shared earlier, the thing that drives this is my daily questions properties at the top of my daily note template file. So you could manually update these every day or you could use the command provided in the life tracker plugin, but I've been using a shortcut on my iPhone with actions provided by Actions for Obsidian to capture these values easily at the end of my day without having to open up the Obsidian app.
So, in order to update these, I also had to modify my daily question shortcut that I walked through in this other video here. Now, the basic concept is still exactly the same. I answer prompts with numbers from 1 to 10 based on my intentions. Those responses get saved as variables and then the variables get written to the current daily note using shortcuts actions from Actions for Obsidian. The difference is that it's no longer a text block that gets inserted at a placeholder. For this to work, I had to first create a dictionary file in the shortcut with the key value pairs I wanted to set. Then I set the properties for the current daily note according to that dictionary. Now, this part gets a little bit technical. Short version here is that the set properties action adds my responses to the properties in the current daily note in a way that the workflow at the end of the day is exactly the same.
So, here's what it looks like in action. First, I run the daily question shortcut on my iPhone, which prompts me to provide number values for all my daily questions. "Did I do my best to be spiritual?" "Did I do my best to love my wife?" "Did I do my best to love my kids?" "Did I do my best to be a good friend?" "Did I do my best to learn something?" "Did I do my best to create something?" And "Did I do my best to exercise?" Those responses are captured as variables, inserted into the dictionary, then they get added to the properties in today's daily note in Obsidian.
So, that's the shortcut. And if you want to use this for yourself, it's actually available inside my free Obsidian Starter Vault, which has a bunch of additional tips, templates, and resources to help you get more out of your notes and ideas. You can download that right now by going to vault.practicalpkm.com.
All right, so that'll do it for this video on my updated digital journaling workflow. I walk through the code examples here, so you can piece this together yourself if you want using Claude just like I did. But as I mentioned, I'm also adding these personal dashboard tools into Life HQ, which is my epic done-for-you Obsidian Vault. It's the quickest way to get up and running with values-based productivity and creativity workflows. But as I showed you in this video, it's easy to change and customize this to your liking so it fits the way that you work with your notes and ideas. I got a few more personal dashboards I'm working on for LifeHQ as well. And you can find out more and get lifetime access to LifeHQ at lifehq.practicalpkm.practicalpkm.com.