Skip to main content

My GTD - How I Organize Meetings and TODOs in Roam

  • How efficient is your workflow for keeping on top of all your meeting notes, action items, contacts, projects and more? 
  • If you were to bump into someone unexpectedly would you be able to remind yourself of all the relevant topics you wanted to discuss with the person? 
  • Can you remember all the things you wanted to get done when running your errands? 
  • Can you keep track of your discussions with all the people you talk to regularly?

In this post I will walk you through my meetings-actions-people workflow in Roam.

My GTD - How I Organize Meetings and TODOs in Roam

If you are new to Roam and Roam42...

Just in case you are not familiar with Roam, it is an ultra flexible note taking tool. It's like the Excel for text. If you want to find out more, there is tremendous amount of quality content available on YouTube, just search from "Roam Research". Equally, you can head over to RoamBrain.com for all the best links and more.

My workflow is automated using Roam42 SmartBlocks. If you have Roam, but you don't have Roam42 SmartBlocks installed, check out the video in my post about Progressive Summarization in Roam, it demonstrates how to get Roam42 and SmartBlocks up and running in less then 2 minutes.

My typical workweek

On a typical workweek I will have about 50 meetings. Roughly two third of these are reoccurring meetings with my direct reports, project managers, key stakeholders, steering committees, my peers and my manager. At any given time I need to keep my eyes on 15 to 20 larger (multi-year) projects and about double this amount of smaller projects and issues. Since finding Roam in May 2020 I've been practicing and refining my daily workflow in it. Today I have a system that works very efficiently for me.

Why Roam?

The reason for switching to Roam was its flexibility and friction free user experience. I've been experimenting with numerous solutions for the past twenty+ years. I can state without hesitation that Roam is by far the most efficient in combining a personal knowledge management (PKM) system with robust customer relationship management (CRM) and task management functionalities. To put it more precisely, Roam provides a very flexible structure and a powerful set of basic features that you can mold into a PKM, CRM and task management system. Today, I handle most of my knowledge work in Roam. This is where I track my work, organize my blog, manage my reading, do my daily journaling, and much more.

Core components of my meetings-actions-people workflow

My Getting Things Done (GTD) workflow consists of the following elements:

  • I manage my work calendar and email in Outlook.
  • I have a script to export my daily agenda from Outlook so I can place it on my Daily Notes page in Roam.
  • I embed TODOs into my meeting notes.
  • I create a separate page in Roam for each of my meetings, contacts, and projects.
  • I have a set of special purpose tags. The ones I will cover in more detail are #discussWith, #waitingFor, #promisedTo and #errands.
  • I use queries on the Daily Notes page and on the People pages.
  • I have a set of SmartBlocks. Some of them mere templates, others a little bit more complex.
  • Finally I have a GTD page with a set of queries to catch items that would fall through the cracks. i.e. TODO's that don't have a delivery deadline (INBOX), and those that are AGING (more than 1 month passed the due date). My GTD page also lists #somedayMaybe tasks, that I want to keep track of, but that I don't want to see on a daily basis.

My Calendar

I manage my work calendar in Outlook. Every morning I run a script in Outlook that produces the following two artifacts:

1) the list of today's meetings pre-formated for the Daily Notes page. The list contains the from-to times of each meeting followed by the subject of the meeting formatted as a Roam page link based on the following pattern: [[meeting/subject]].

2) and, for each of my meetings a pre-populated template that is ready to be copied to the meeting's page in Roam. This template includes the list of attendees, the time and location of the meeting, the subject of the meeting, a default set of tags of which I delete the ones not relevant (#1-1, #team-meeting, #steering-committee, #working-session), and a placeholder for the meeting notes.

My Outlook script

This is the scrip I use in Outlook. 

A few notes, should you want to re-use this script: 1) I have some helper functions at the bottom of the script that transform names from the format they are shown in the corporate address book to how I refer to them in my notes. See the cleanName and the initializeNicks Functions. 2) The script filters out my name from the list of attendees: you need to initialize sMyself and emailTo at the beginning of the script. 3) Also the script only lists meetings where I am set as Busy. Tentative meetings as well as meetings with the subject "Focus time" are excluded. Search for "olBusy" in the code to find the if statement.

Sub CreateOverviewAndDetailedListofAppt()
    Dim nicknames As New Scripting.Dictionary
    Dim CalFolder As Outlook.MAPIFolder
    Dim CalItems As Outlook.Items
    Dim ResItems As Outlook.Items
    Dim sFilter, strSubject, strAppt, strApptSummary As String
    Dim itm, apptSnapshot As Object
    Dim tStart As Date, tEnd As Date, tFullWeek As Date
    Dim wd As Integer
    Dim emailTo As String
    Dim sMyself As String
    
    strApptSummary = ""
    strAppt = ""
    ' Set myself so I don't add myself to attendees
    sMyself = "Your Name"
    emailTo = "youremail@host.com"
    initializeNicks nicknames

    ' Use the default calendar folder
    Set CalFolder = Session.GetDefaultFolder(olFolderCalendar)
    Set CalItems = CalFolder.Items

    ' Sort all of the appointments based on the start time
    CalItems.Sort "[Start]"
    CalItems.IncludeRecurrences = True
 
    ' Set start and end dates for filter
    tStart = Format(Date, "Short Date")
    tEnd = Format(Date + 1, "Short Date")
    tFullWeek = Format(Date + 6, "Short Date") 'Does a full week calendar export on Sunday
    wd = Weekday(Date)
    ' Sun = 1, Mon = 2, Tues = 3, Wed = 4, Thu = 5, Fri = 6, Sat = 7
    ' get next day appt, do whole week on sunday
    If wd >= 2 And wd <= 6 Then 'Mon-Fri
        sFilter = "[Start] >= '" & tStart & "' AND [Start] <= '" & tEnd & "'"
    ElseIf wd = 1 Then 'Sun
        sFilter = "[Start] >= '" & tStart & "' AND [Start] <= '" & tFullWeek & "'"
    End If

    Set ResItems = CalItems.Restrict(sFilter)

   'Loop through the items in the collection.
    For Each itm In ResItems
        'only include meetings I've accepted. This can be removed
        'skip items marked with subject "Focus time"
        If (itm.BusyStatus = olBusy) And (itm.Subject <> "Focus time") Then
            ' Create list of meetings
            strApptSummary = strApptSummary & Format(itm.Start, "hh:mm") & "-" & Format(itm.End, "hh:mm ") & "[[meeting/" & Replace(itm.Subject, "/", "-") & "]]" & vbCrLf

            ' Create Meeting Page template
            strAppt = strAppt & "Tag:: #1-1 #[[team-meeting]] #[[steering-committee]]" & vbCrLf
            strAppt = strAppt & vbTab & "Subject:: [[meeting/" & Replace(itm.Subject, "/", "-") & "]]" & vbCrLf
            strAppt = strAppt & vbTab & "When:: [[" & Format(itm.Start, "mmmm d") & ordinals(Format(itm.Start, "d")) & ", " & Format(itm.Start, "yyyy]] hh:mm") & "-" & Format(itm.End, "hh:mm") & vbCrLf
            strAppt = strAppt & vbTab & "Attendees:: " & listAttendees(itm, sMyself, nicknames) & vbCrLf
            strAppt = strAppt & vbTab & "Location:: " & itm.Location & vbCrLf
            strAppt = strAppt & vbTab & "Summary:: " & vbCrLf
            strAppt = strAppt & "Pre-read:: " & vbCrLf
            strAppt = strAppt & "Decisions:: " & vbCrLf
            strAppt = strAppt & "Notes:: " & vbCrLf & vbCrLf
            strAppt = strAppt & "----------------------------------" & vbCrLf & vbCrLf
        End If
    Next

    ' Open a new email message form and insert the list of dates
    Set apptSnapshot = Application.CreateItem(olMailItem)
    With apptSnapshot
        .BodyFormat = olFormatHTML
        .Body = strApptSummary & vbCrLf & vbCrLf & vbCrLf & "----------------------------------" & vbCrLf & vbCrLf & strAppt
        .To = emailTo
        .Subject = "Appointments for " & tStart
        .Display 'or .send
    End With

    Set itm = Nothing
    Set apptSnapshot = Nothing
    Set ResItems = Nothing
    Set CalItems = Nothing
    Set CalFolder = Nothing
    Set nicknames = Nothing
End Sub

'Roam date helper function
Function ordinals(i As Integer)
    Select Case i
        Case 1, 21, 31
            ordinals = "st"
        Case 2, 22
            ordinals = "nd"
        Case 3, 23
            ordinals = "rd"
        Case Else
            ordinals = "th"
    End Select
End Function

'To map how people are called in the company directory and in my Roam database
Sub initializeNicks(ByRef nicknames As Scripting.Dictionary)
    nicknames("Name in Company Directory 1") = "Nick Name 1"
    nicknames("Name in Company Directory 2") = "Nick Name 2"
    '....
End Sub

'implement your own function to clean or transform names depending on the naming convention at your company, etc.
'in my case I only keep the part of the name before the opening bracket
Function cleanName(sAtt) As String
    bp = InStr(sAtt, "(")
    If bp > 0 Then
        sAtt = Trim(Left(sAtt, bp - 1))
    Else
        sAtt = Trim(sAtt)
    End If
    cleanName = sAtt
End Function
 
Function listAttendees(ByRef item As Variant, myself As String, ByRef nicknames As Scripting.Dictionary) As String
    listAttendees = ""
    Dim sAtt As String
   
    For i = 1 To item.Recipients.Count
        sAtt = item.Recipients.item(i).Name
        sAtt = cleanName(sAtt)
        If nicknames.Exists(sAtt) Then
            sAtt = nicknames(sAtt)
        End If
        If sAtt <> myself Then
            If listAttendees <> "" Then
                listAttendees = listAttendees & ", "
            End If
            listAttendees = listAttendees & "[[" & sAtt & "]]"
        End If
    Next
End Function

Meetings

I distinguish 5 different type of meetings:

1. Reoccurring Meetings

Timing: #weekly, #bi-weekly, or #monthly

Length: 15-30-45-60 minutes (typically has a fixed reoccurring calendar entry in Outlook)

Attendees: the same person or people every time

Objective: to stay in sync, to track progress, to work on a subject

Pre-work, Decisions, Notes:

  • I don't create a new page for these every time, but always reference the same. This requries a little attention in setting meeting subject in Outlook, but not that much. Really.
  • I usually have Roam open during the meeting and I take notes into Roam real-time or right after the meeting has finished, while I still remember what was discussed.
  • My notes are organized by date. Every time the meeting repeats I add Today's date as a ((block reference)) from the Daily Notes page to the top nested under Notes (see picture below). With this approach I can easily scroll down to see what was discussed in previous discussions. The reason for the seemingly strange approach of inserting the date as a ((block reference)) has to do with how Roam queries deal with dates. When I add an action in the notes, I only want that {{[[TODO]]}} to show up under the date assigned to the action, not on the day when I took notes in the meeting. I will share more on this later when I explain the day and nw - now SmartBlocks.

Examples:

  • 1-1 meetings with my team and with key stakeholders
  • team meetings with my direct reports or my peers
  • steering committee meetings
  • project status reviews

2. Once-off Meetings

Timing: pre-scheduled, when needed

Length: 30 minutes to three hours

Attendees: one or more people depending on the subject

Objective: to resolve a current issue or escalation

Pre-work, Decisions, Notes:

  • Pre-work might be required and distributed few days prior to the meeting.
  • Often the meeting is organized to achieve one or more specific decisions.
  • A Minutes of Meeting is usually sent after the meeting to summarize the decisions.

Examples:

  • discussion initiated by a supplier
  • escalation of an issue
  • a demo session or a deep dive into a specific topic

3. Workshops

Timing: planned well in advance

Length: half-day, full-day or multi-day

Attendees: small to mid-size team

Objective: to work on a topic in detail, review a broader subject such as annual planning

Pre-work, Decisions, Notes: typically involves significant upfront planning and pre-work for the organizers and the participants

  • organizer: designing the agenda
  • organizer: developing pre-read
  • participant: reviewing pre-read

Examples:

  • leadership or team workshops
  • project specific workshops: discovery workshop, planning workshop, design workshop, etc.

4. Conferences

Timing: planned well in advance

Length: full-day or multi-day

Attendees: larger crowds

Objective: discuss a topic of common interest, learn what's happening elsewhere, network

Pre-work, Decisions, Notes: involves significant upfront planning and pre-work primarily falling on the shoulders of the organizers and presenters

  • Typically no Minutes of Meeting is distributed after the conference, but the conference papers and recordings of the sessions might be available for viewing or for download to participants.

Examples:

  • large industry conferences

Ad-hoc Meetings

Timing: ad-hoc

Length: few minutes to half and hour

Attendees: typically one, maybe few people

Objective: discuss a current question or issue, may also be just a social interaction

Pre-work, Decisions, Notes:

  • No pre-work.
  • Decisions might be reached, in which case it is good to send a very brief reminder email afterwards.

Examples:

  • someone stopping by my office
  • bumping into someone at the cafeteria or on the corridor
  • receiving a call, or calling someone with a question
  • unplanned escalation of an issue

My templates

I use three different templates.

Reoccurring meetings and once-off meetings are generated from Outlook and the template is embedded into the Visual Basic script included above.

For workshops and conferences I create the page in Roam well in advance of the event using a the MoM - Minutes of Meeting SmartBlock.

MoM - Minutes of Meeting

- #42SmartBlock MoM - Minutes of Meeting
    - Tag:: <%INPUT:tags?,%%#1-1 #team-meeting #steering-committee #working-session%>
        - Subject:: <%CURSOR%>
        - When:: <%DATE:today%>
        - Attendees:: 
        - Location:: 
        - Summary:: 
    - Pre-read:: 
        -  
    - Decision:: 
        -  
    - Notes:: 
        -  

Ad-hoc meetings also have their dedicated page. I use two scripts to generate them. First I use mn - Meet Now on Daily Notes to create a page for the ad-hoc meeting and to open it in the sidebar. Then I use ahm - Ad-hoc Minutes of Meeting to pre-populate the meeting page with the ad-hoc meeting template.

mn - Meet Now

- #42SmartBlock mn - Meet Now
    - <%J:```javascript
roam42.smartBlocks.activeWorkflow.vars['page_title'] = 'meeting/' + prompt('Subject of the meeting?');
return roam42.dateProcessing.getTime24Format() + ' ['+'['+roam42.smartBlocks.activeWorkflow.vars['page_title']+']]';```%>
    - <%NOBLOCKOUTPUT%><%J:```javascript
let inPut =  document.getElementById('find-or-create-input');
inPut.focus();
roam42.common.setEmptyNodeValue( inPut, roam42.smartBlocks.activeWorkflow.vars['page_title'] );
	setTimeout(()=>{
    	roam42KeyboardLib.simulateKey(13,100,{  shiftKey:true});  
	}, 200);```%>

ahm - Ad-hoc Minutes of Meeting

- #42SmartBlock ahm Ad-hoc Meeting MoM
    - Tag:: #ad-hoc-meeting
        - Attendees:: <%CURSOR%>
        - Notes::
            -  

My note taking approach

Meetings get their own page. Ad-hoc meetings I sometimes record on Daily Notes, but only if there are no actions agreed.

Meeting pages are created in specific namespaces: meeting/, workshop/, conference/

Actions are recorded as part of meeting notes.

I capture notes in Reoccurring Meetings as explained above, providing an easy to access log of previous discussions.

When meeting with someone I open the page for the person in the sidebar to see if there are any #waitingFor, #discussWith, #promisedTo items to be discussed. (see below under People)

Actions

I come across dozens of actions each day. Most of them I delegate. I am extremely selective regarding which actions I record for tracking purposes. I only track high priority actions that I also expect to be chased on, or in which I have something to contribute.

I aim to place TODOs to the highest possible level of the bullet-point hierarchy. My TODO blocks contain the name of the action party and a brief (SMART) description of the action. I prefer shallow nesting to avoid long snippets of text in query results and action references.

Actions get one or more of the following tags: #discussWith, #waitingFor, #promisedTo and #errands

  • {{[[TODO]]}} #discussWith [[The Person]] by [[December 24th, 2020]]: Topic of the discussion
  • {{[[TODO]]}} #waitingFor [[The Person]] by [[December 31st, 2020]]: The promise I received
  • {{[[TODO]]}} I #promisedTo [[The Person]] that by [[December 27th, 2020]] I will...
  • {{[[TODO]]}} #errands when visiting [[IKEA]] don't forget to ....

Multiple actions with the same person get nested under a block with the name of the person.

I keep tasks off the daily notes page unless it has yet to be processed. TODOs with due dates are recorded on a page other then the Daily Notes page e.g. project page, meeting page, person page.

People

Each person gets a page with metadata defined in the person SmartBlock.

The person's page includes three queries: #waitingFor, #discussWith, #promisedTo. "Waiting for" are the TODOs I have agreed a person to deliver to me. "Discuss with" are topics - potential future actions -, that I want to discuss with the person next time we meet. "Promised to" are my promises, if someone asked me to help with something and I made a commitment to take action.

I collect examples for performance review meetings during the year by tagging relevant information with #forPRM and adding the individual's name. I can filter for these under linked references when the time comes for the performance review meeting.

When I meet with someone, I have made it a habit to open the page for the person in the sidebar, to see if there are any #waitingFor, #discussWith, or #promisedTo items to be covered.

My person template

My person template takes the name of the person from the title of the page to customize the 3 queries at the bottom of the page.

- #42SmartBlock person
    - <%NOBLOCKOUTPUT%><%SET:page_title,<%JAVASCRIPT: return document.querySelector('.rm-title-display').textContent;%>%>
    - Tag:: <%INPUT:Tags?%%#person #author #businessassociation #colleague #vendor #contractor #speaker #family #friend #sportsassociation %>
        - Photo:: 
        - Phone Number:: 
        - Email:: <%CURSOR%>
        - Company:: 
        - Location:: 
        - Assistant:: 
        - Role:: 
        - How we met:: 
        - Birthday:: 
        - Interests:: 
        - Spouse & children:: 
    - **Waiting for**
        - {{[[query]]: {and: [[<%GET:page_title%>]] [[waitingFor]] [[TODO]] {not: [[query]]}}}}
    - **Discuss with** 
        - {{[[query]]: {and: [[<%GET:page_title%>]] [[discussWith]] [[TODO]] {not: [[query]]}}}}
    - **Promised to**
        - {{[[query]]: {and: [[<%GET:page_title%>]] [[promisedTo]] [[TODO]] {not: [[query]]}}}}
    - Notes:: 
        -  

Daily Notes page

The image below shows my daily notes page for tomorrow. There are two things I want to draw your attention to.

First, at the top I have today's date in the second bullet. When calling the ;;day SmartBlock, it automatically stores the reference to this block in a variable, so whenever I am on a meeting page, I can run ;;nw - Now and insert a reference to today's date, to create the meeting-log as mentioned above. If you recall the reason I reference today's date in meeting notes like this is to ensure queries only bring up actions based on the due date specified in the action. Else all the actions I record in meetings would show up in the queries below twice: once with the day when they were captured, and second with the due date for the action. This would create clutter.

Second, I try to avoid placing TODO's on the Daily Notes page. The only exception is placing the TODO on a future Daily Note page, to be reminded when the day comes. Changing deadlines and moving tasks to a different date is more cumbersome that way, this is why I prefer placing TODO's on other pages such as Meetings, People, Projects, but also Book Reflections and other notes.

The short video below demonstrates how the process of taking notes in a meeting works. 1) I shift-click on the meeting to open it in the sidebar. 2) I use ;;nw - Now to insert today's date in the meeting log. 3) I start taking notes and record an action. 4) The action does not show up in the query as today's task - which is what I wanted! -, however 5) by clicking the references next to the date block at the top I have an easy way to list all actions recorded on the day. 6) Finally I also show how, if I would use the [[Date]] instead of the ((block reference to the date)), the new action would wrongly show up as today's action on my daily page, cluttering the view.

As a final note, I do not use the ;;nw - Now ((date reference)) when I have a once-off meeting, since the date of the meeting is in the metadata section of the meeting and the Note is not nested under this date, thus the problem with the double counting in queries does not arise.

My Templates

day

Download the day template as a Roam.JSON file from here.
- #42SmartBlock day
    - <%J: ```javascript
let UID = document.querySelector("textarea.rm-block-input").id;
localStorage.setItem('today_date_blockRef','((' + UID.substring( UID.length -9) + '))');
return document.querySelector('.rm-title-display').textContent;```%>
    - <%NOBLOCKOUTPUT%><%JAVASCRIPTASYNC: ```javascript
var settings = {
  "url": "https://api.quotable.io/random",
  "method": "GET",
  "timeout": 0,
  "async": false
};

$.ajax(settings).done(function (response) {
  console.log(response);
  var jsonQuotes = JSON.stringify(response);
  var quote = JSON.parse(jsonQuotes);
  roam42.smartBlocks.activeWorkflow.vars['author'] = quote.author;
  roam42.smartBlocks.activeWorkflow.vars['quote'] = quote.content + ' #quote';
});
return '';``` %>
    - > <%GET:quote%>
[[<%GET:author%>]]
    - <%IFDAYOFWEEK:2,3,4,5,6,7%>**Top 3 goals for today**
        - <%IFDAYOFWEEK:2,3,4,5,6,7%> 
    - <%IFDAYOFWEEK:1%>**Top 3 goals for this week**
        - <%IFDAYOFWEEK:1%> 
    - **Meetings** 
        - 
    - **Today’s successes**
        -  
    - **How could I have made today better?**
        -  
    - **Notes**
        - 
    - **TODO**
        - **Tasks for today**
            - {{[[query]]: {and: [[TODO]] {not: {or: [[query]]}} <%DATE:today%> }}}
        - **Overdue from previous month**
            - {{[[query]]: {and: [[TODO]] {not: {or: [[query]]}} {between: <%DATE:yesterday%> <%DATE:one month ago%>} }}} 

nw - Now

- #42SmartBlock nw - Now
    - <%JAVASCRIPT: return localStorage.getItem('today_date_blockRef') + ' ' + roam42.dateProcessing.getTime24Format();%>

Information security and other closing thoughts

Finally I wanted to comment on information security. I'd love if I could simply include every information I ever wanted to store and organize in Roam, but this desire needs to be balanced with keeping information safe, both corporate and personal. As closing thoughts I wanted to share some of my related approaches with you.

First, I never upload corporate files to Roam. I include links to files, but never the actual content. I do the same for my personal files as well. I store my files mostly on OneDrive and add links to Roam. Back in May I developed a simple tool to generate markdown formatted links for my OneDrive files that are easy to embedding into Roam and look good as well. Check out get-my.link. Note that for some reason I couldn't get the OneDrive file picker component from Microsoft to work with either Internet Explore or Edge. The site works well with other browsers.

If I reference emails in my notes, I also never include the email body. What I typically do is include the search term I can copy into Outlook that will pull up the email or the discussion thread. e.g.:

  • subject:"this is the subject" AND from:theSender
  • category:"my mail category"

Regarding personal information such as the #forPRM tag, I use the Roam {{encrypted text}} command to safeguard the information.

Finally, I do regular backups.

I would love to hear what you think

If you have questions, ideas, want to share your own approach, or learned something that you want to experiment with yourself... I would love to hear your feedback! Please leave a comment.

Thank you.

Other posts you might be interested in

Like this post?
Show your support.

Comments

  1. Hi Zsolt, this looks absolutely fantastic but unfortunately I won't be able to try your scripted workflow since I'm on a Mac at work and Outlook there is not scriptable. But I'll replicate a few of your ideas nevertheless and will put up with a more manual version of this workflow. Thanks for publishing such a detailed overview!

    ReplyDelete
  2. Hi Thorsten, thanks for the comment! You could try two things. I haven't tried these myself yet, but will definitely play with them.
    1) Apparently Outlook online offers you a possibility to receive your daily agenda in email.
    https://www.linkedin.com/business/learning/blog/productivity-tips/how-to-get-your-daily-agenda-emailed-to-you-each-morning-in-gmai

    2) You could use Microsoft Flow in O365 to automate this process.
    https://flow.microsoft.com/en-us/galleries/public/templates/99892410786e4d6888f27ae380125a80/email-me-with-a-list-of-upcoming-calendar-events/

    ReplyDelete
  3. Hi Zsolt, thanks for this excellent article. I've set this up in my own Roam, but I'm wondering how to collapse the queries. In your screenshots under WaitingFor, DiscussedWith, PromisedTo, your queries are collapsed into a symbol. I haven't figured out how to do that. My full query shows in the block above with the results underneath. Is there something I'm missing? Thanks again!

    ReplyDelete
    Replies
    1. You mean how to hide the query from the header of the query? You need to add the following to your [[roam/css]]

      .rm-query-title {
      display: none;
      }

      by also adding the following, you can hide the box around the query as well:

      .rm-query {
      border: 0px;
      }

      Delete
  4. Hi Zsolt...thank you! Yes, that's exactly what I meant and I appreciate you taking the time to respond. That worked perfectly. And now I'm subscribed and no longer "Unknown". :-)

    ReplyDelete
  5. Thanks for putting this out there.
    Really like your CSS theme can you share it?

    ReplyDelete
    Replies
    1. Here's a lint to my roam/css page saved as a roam.json file. Before you import this into your graph, be sure to save your current CSS (export or just copy / paste to another page in your graph). Also I would advise to clean your css page before importing, otherwise the imported file will be appended to your current CSS resulting in an unpredictable outcome.

      Being one step more cautious, if I were you I would open an empty graph, import the css, take a look, and if I like it, then select all / copy / paste into my main graph.

      http://zsviczian.github.io/zsolt.blog/roam-css.zip

      Enjoy!

      Delete
  6. Thanks, I edited the downloaded JSON file to be nested under my regular roam/CSS page, and it works perfectly. I'll deconstruct it and cherry-pick the pieces I find super useful. I'm a little partial to the font Avenir Next - I used Bear for so many years it has just been ingrained in my mind

    ReplyDelete
    Replies
    1. What JavaScripts do you use? I use roam42 and afew others that I’ve been testing out but I noticed you daily note has the day of the week added to it.

      Delete
    2. I don't use that many JS extensions on top of Roam42. Here's the list:

      Mobile Quality of Life Improvements from Viktor TƔbori
      https://gist.github.com/thesved/48cab2307cf0598fcc5cd37643d36cb4
      https://twitter.com/viktortabori/status/1303125320728555522?s=21

      Date formatter:
      https://gist.github.com/thesved/e61fef8b3e5a50ac1ae1362e72da88cf

      YouTube Player:
      https://c3founder.github.io/Roam-Enhancement/

      Some extensions David Vargas:
      from https://roamjs.com/docs

      Delete
  7. hi! great post! thank you for sharing!

    Would you be able to share your GTD page and the query you set up for your AGING todos?

    Thank you!

    ReplyDelete
    Replies
    1. In practice I am using the day template to check aging items. You can find a bit more background info about my day and meeting templates here:
      https://www.zsolt.blog/2021/01/one-on-one-meetings.html

      Here's my GTD page:
      https://roamresearch.com/#/app/Zsolt-Blog/page/ehjTFlpIs

      Here are my day and meeting templates:
      https://roamresearch.com/#/app/Zsolt-Blog/page/Zz1R_VYal

      Delete
  8. This is fantastic Zsolt! I've just set up your approach for my own work.
    Thank you for this excellent workflow for managing tasks that arise in meetings.

    But how do you integrate and track tasks which arise via email?

    I'm very keen to read how you capture and process email tasks to Roam.

    ReplyDelete

Post a Comment

Popular posts from this blog

Deep Dive Into Roam's Data Structure - Why Roam is Much More Than a Note Taking App

Which are the longest paragraphs in your graph? Which pages did you edit or create last week? How many paragraphs of text do you have in your database in total? Which pages do you have under a given namesapece (e.g. meetings/)?

Showcasing Excalidraw

Conor ( @Conaw ) pointed me to Excalidraw last week, and I was blown away by the tool and especially about the opportunities it opens up for  Roam Research ! It is a full-featured, embeddable sketching component ready for web integration. This post will showcase key Excalidraw features and discusses some of the issues I still need to solve to complete its integration into Roam. I spent most of my free time during the week integrating Excalidraw into Roam. This article will introduce Excalidraw by showcasing its features.

Roam-Excalidraw Plugin MVP Release

  I am releasing the MVP version of the Roam-Excalidraw Plugin. Over the past two weeks, I have been super focused on getting to this point. As a consequence, this post is going to be shorter and more utilitarian than usual. I had to make a choice whether to release the plugin this weekend or to write a detailed blog post. I opted for the first.

contact: info@zsolt.blog