While the overall planning of project timeline gets lot of attention in the world of software, the most important aspect of project management in my experience is maintaining and tracking Issues and Actions. This in normal project management practice is carried out through the use of an Actions Log and an Issues Log. In addition any medium complexity project invariably will have internal and external dependencies / constraints, risks which I tend to track on Constraints Log and Risks Log. Finally, every project has decisions that I track on a Decisions Log.
Additionally, any opportunities that I identify during the course of project that are not in the scope of my project I capture those too in an Opportunities Log
Now all these logs have fairly standard fields so I created and started using an excel template and began calling it CARDIO Log short for log of Constraints, Actions, Risks, Decisions, Issues, Opportunities for a given project. This has worked well for me over the past 15 years or so but there are times where in order to maintain it meant cross linking an action to an issue or a risk and so on and more often than not it would become easier to just track actions in one of the other logs and that would make it a bit chaotic.
That problem, however, is what I thought, can be resolved using Logseq especially after starting with the template by the Logseq community user Luhman and starting with his template and explanation provided here.
Using logseq from browser when binary install is not possible¶
When binary install is not possible, one can still use logseq from browser by navigating to the web app demo page from Chrome browser and then selecting a local directory where notes will be saved. It works perfectly fine except there is no option to install plugins. So inorder for issues table etc to work from broswer following steps will suffice:
Select the directory where your notes (or graphs in logseq speak) will be saved.
Grant permission for local file access when asked by the browser.
Now if you will press Ctrl+K it will open search box but the cusrsor goes to the omnibox (where you type the url for the page) and then you will have to either manually click into the logseq search or press Esc key three times to be able to get the cursor back in the search box. It may be easier to just click on Search icon in left hand navigation at top of the screen (next to the hamburger menu).
Alternatively configure the keyboard shortcut to +alt+k++ as that does not conflict with any other keyboard shortcut.
To add custom shortcuts, you can navigate to the shortcuts page with g s. Press the blue button corresponding to a given shortcut and a modal should pop up. Press the keybinding you want and then press Save.
Now search for logseq/custom.css and add the whole css from this gist.
Then search for logseq/config.edn and add the whole edn from this gist
Tip
If you were installing the binary, you can still copy the entire css and edn from above. If you do that, you can directly skip to the section - Create Templates.
First we will ensure our actions log which will be generated using the Logseq's inbuilt feature for To Do Lists displays fields that we want it to display.
;; Advanced queries `:result-transform` function.;; Transform the query result before displaying it.:query/result-transforms{:sort-by-priority(fn [result](sort-by (fn [h](get h:block/priority"Z"))result))}
Now replace these with following which is slightly reduced compared to the Source as I only needed "Deadline" for my purposes and I don't use the "Scheduled" part of the Logseq task management feature:
Now, I quite like the Mia Quattro Theme that can either be installed as a theme from marketplace or just by including the following line in logseq/custom.css just under the comment /*Theme*/ right at the top of the file like so:
/* Override tag and note color scheme for tags from mia_quattro theme */a.tag{font-size:100%;color:var(--lx-accent-11,var(--ls-tag-text-color,hsl(var(--primary))));}svg.note{color:var(--lx-accent-11,var(--rx-yellow-08))}svg.tip{color:var(--lx-accent-11,var(--rx-blue-08))}/* Selection lists (search, tag complete, etc.) */#ui__ac.chosen,.chosen{--ls-primary-text-color:#ee0606;--ls-link-ref-text-color:#eaeaea;--ls-link-ref-text-hover-color:#fafafa;--ls-quaternary-background-color:var(--accent-dark-color);--ls-icon-color:var(--ls-primary-text-color);}#ui__ac.chosen{background-color:var(--accent-dark-color);}.menu-link.chosen{color:var(--ls-primary-text-color)!important;}/* to make todo checkbox visible */.form-checkbox{--ls-page-checkbox-border-color:var(--accent-color);border:1pxsolidvar(--ls-page-checkbox-border-color);border-radius:5px;opacity:1;}/* blockquote tweaks (reduce margin & padding and add custom colours) */blockquote{padding:8px12px;border-left:5pxsolid;border-left-color:var(--ls-page-blockquote-border-color,#7cfc00);margin:0.3rem0!important;}blockquote.yellow{border-left-color:#ffe85580;}blockquote.blue{border-left-color:#84b5ff80;}blockquote.red{border-left-color:#ff558280;}.ls-block[data-refs-self^=".blue"].blockquote{border-left-color:#84b5ff80;}/* ==mark== tweaks */mark{background:var(--ls-page-mark-bg-color);color:var(--ls-page-mark-color);padding:1px2px;margin:02px;border-radius:3px;}mark.yellow{background:var(--ls-page-mark-bg-color);color:var(--ls-page-mark-color);}mark.pink{background-color:#ff89be80;color:white;}mark.blue{background-color:#84b5ff80;color:white;}mark.green{background-color:#97ff9780;color:yellow;}mark.red{background-color:#ff558280;color:white;}mark.grey{background-color:#80808080;color:white;}mark.gray{background-color:#80808080;color:white;}mark.orange{background-color:#ffb86c80;color:white;}mark.purple{background-color:#c097ff80;color:white;}/* add traffic lights to prioritized tasks */.priority[href="#/page/A"i]::before{content:"🔴";margin-right:2px;}.priority[href="#/page/B"i]::before{content:"🟡";margin-right:2px;}.priority[href="#/page/C"i]::before{content:"🟢";margin-right:2px;}.opacity-50{opacity:1;}
As our templates later will depend on v-kanban plugin but I did not want to include the whole css and also wanted to modify the icons it shows with Pros and Cons, I include the following css on logseq/custom.css:
/* -- like dislike ----------------------------------------- */.ls-block[data-refs-self*="pros"].block-children.bullet-container.bullet{display:none;}.ls-block[data-refs-self*="pros"].block-children.bullet-container:after{content:"+";font-size:20px;color:#1cd41c;}.ls-block[data-refs-self*="cons"].block-children.bullet-container:after{content:"-";color:red;}a.tag[data-ref*="pros"]{font-size:.8rem;background:#014935e0;color:rgb(202,247,118);padding:06px3px;border-radius:var(--ls-border-radius-low);border:1pxsolidrgba(137,207,96,0.925);}a.tag[data-ref*="cons"]{font-size:13px;background:#4b033bda;color:rgb(255,116,128);padding:06px3px;border-radius:var(--ls-border-radius-low);border:1pxsolidrgba(182,13,41,0.925);}a.tag[data-ref*="pros"]:hover{filter:contrast(2)brightness(10);}a.tag[data-ref*="pros"]:before{content:"✅ ";font-size:13px}a.tag[data-ref*="cons"]:before{content:"❌ ";font-size:13px}a.tag[data-ref*="red"]:before{content:"🔴";margin-right:2px;}a.tag[data-ref*="amber"]:before{content:"🟠";margin-right:2px;}a.tag[data-ref*="green"]:before{content:"🟢";margin-right:2px;}a.tag[data-ref*="on-hold"]:before{content:"🟣";margin-right:2px;}a.tag[data-ref*="yellow"]:before{content:"🟡";margin-right:2px;}a.tag[data-ref*="closed"]:before{content:"🔵";margin-right:2px;}a.tag[data-ref*="no-go"]:before{content:"🚫";margin-right:2px;}a.tag[data-ref*="merged"]:before{content:"⚪";margin-right:2px;}/* -------------------------------- like dislike end ------ *//*===========================================================*//* css columns view / kanban v20220510--------------------- *//* use: inline tag #kanban, #kanban-small or #kanban-wXXX *//* try: #kanban-w200,#kanban-w300, #kanban-w400 */div[data-refs-self*="kanban"]>.block-children-container.flex{width:100%;}div[data-refs-self*="kanban"]>.block-children-container.flex>.block-children.w-full{display:inline-flex;position:relative;overflow-x:auto!important;overflow-y:hidden;margin:010px;}div[data-refs-self*="kanban"]>.block-children-container.flex>.block-children.w-full>div.ls-block{display:inline-block;padding:0;width:inherit;min-width:200px;margin-right:10px;}/* wide */div[data-refs-self*="kanban-small"]>.block-children-container.flex>.block-children,div[data-refs-self*="kanban-wide"]>.block-children-container.flex>.block-children{min-width:90vw;left:50%;transform:translate(-50%);background-color:var(--ls-primary-background-color);overflow-x:scroll!important;overflow-y:hidden;margin:10px30px;}div[data-refs-self*="kanban-wide"]>.block-children-container.flex>.block-children>div.ls-block{display:inline-block;min-width:350px;padding:8px0px!important;font-size:0.85rem;margin:5px0px;background-color:var(--ls-secondary-background-color);box-shadow:2px2px2px1pxrgba(0,0,0,0.2);border-radius:var(--ls-border-radius-medium);}/* #kanbansmall : smaller font with hover zoom */div[data-refs-self*="kanban-small"]>.block-children-container.flex>.block-children>div.ls-block{display:inline-block;min-width:350px;}div[data-refs-self*="kanban-small"]>.block-children-container.flex>.block-children.block-content{font-size:10px;font-weight:300;}div[data-refs-self*="kanban-small"]>.block-children-container.flex>.block-children.block-content:hover{font-size:14px!important;min-width:100px;}/* #kanban-w[100-300] : force width of the columns */div[data-refs-self*="kanban-w100"]>.block-children-container.flex>.block-children.w-full>div.ls-block{min-width:100px;}div[data-refs-self*="kanban-w150"]>.block-children-container.flex>.block-children.w-full>div.ls-block{min-width:150px;}div[data-refs-self*="kanban-w200"]>.block-children-container.flex>.block-children.w-full>div.ls-block{min-width:200px;}div[data-refs-self*="kanban-w300"]>.block-children-container.flex>.block-children.w-full>div.ls-block{min-width:300px;}div[data-refs-self*="kanban-w400"]>.block-children-container.flex>.block-children.w-full>div.ls-block{min-width:400px;}div[data-refs-self*="kanban-fit"]>.block-children-container.flex>.block-children.w-full>div.ls-block{min-width:400px;width:max-content;}/* remove left border for kanbanized */[data-refs-self*="kanban"].block-children-left-border{opacity:0;}/* fix modal list not appearing*/.block-children{overflow:visible!important;}.ls-block[data-refs-self*="kanban"].absolute-modal,.ls-block[data-refs-self*="kanban"]#ui__ac{min-height:80px;}/*--------------------------------------------- kanban end-- *//*------------------expreimetal for better table view START-------------------*/.table-wrapper{width:100%!important;max-width:100%!important;}tabletd{min-width:100px;word-wrap:break-word;}tableth{word-break:keep-all;}/*------------------expreimetal for better table view END-------------------*/
In order to invoke some of the above tweaks, we will also create keyboard shortcuts and shortcodes to have a simpler way to change colour of the blockquote side border and highlights. So open logseq/config.edn and do the following:
;; Macros replace texts and will make you more productive.;; Example usage:;; Change the :macros value below to:;; {"poem" "Rose is $1, violet's $2. Life's ordered: Org assists you."};; input "{{poem red,blue}}";; becomes;; Rose is red, violet's blue. Life's ordered: Org assists you.:macros{}
;; Macros replace texts and will make you more productive.;; Example usage:;; Change the :macros value below to:;; {"poem" "Rose is $1, violet's $2. Life's ordered: Org assists you."};; input "{{poem red,blue}}";; becomes;; Rose is red, violet's blue. Life's ordered: Org assists you.:macros{">""<blockquote class='$1'>$2</blockquote>";;usage {{ > orange,Text to be presented in the blockquote }}"==""<mark class='$1'>$2</mark>";;usage {{ == red,Text to be highlighted without linebreak }}}
;; Add custom commands to the command palette;; To quickly call these commands, just type / (backslash) followed by characters in square bracket:commands[["bookmark [.b]"[[:editor/input"{{ renderer :template, Bookmark}}"]]],
["date_today [dt]"[[:editor/input"{{renderer :template, Date Today}}"]]],
["issue_table [.it]"[[:editor/input"{{renderer :template, Issue_table}}"]]],
["issue [.is]"[[:editor/input"{{renderer :template, Issue}}"]]],
["circle [.c]"[[:editor/input"{{renderer :template-view, circle-template, :color orange}}"]]],["Blue Highlighter [=b]"[[:editor/input"<mark class='blue'></mark>"{:backward-pos7}]]],
["Green Highlighter [=g]"[[:editor/input"<mark class='green'></mark>"{:backward-pos7}]]],
["Gray Highlighter [=gra]"[[:edior/input"<mark class='gray'></mark>"{:backward-pos7}]]],
["Grey Highlighter [=gre]"[[:editor/input"<mark class='grey'></mark>"{:backward-pos7}]]],
["Orange Highlighter [=o]"[[:editor/input"<mark class='orange'></mark>"{:backward-pos7}]]],
["Pink Highlighter [=p]"[[:editor/input"<mark class='pink'></mark>"{:backward-pos7}]]],
["Red Highlighter [=r]"[[:editor/input"<mark class='red'></mark>"{:backward-pos7}]]],
["Yellow Highlighter [=y]"[[:editor/input"<mark class='yellow'></mark>"{:backward-pos7}]]],
["Purple Highlighter [=pu]"[[:editor/input"<mark class='purple'></mark>"{:backward-pos7}]]],
["Red Blockquote [>r]"[[:editor/input"<blockquote class='red'></blockquote>"{:backward-pos13}]]],
["Yellow Blockquote [>y]"[[:editor/input"<blockquote class='yellow'></blockquote>"{:backward-pos13}]]],
["Blue Blockquote [>b]"[[:editor/input"<blockquote class='blue'></blockquote>"{:backward-pos13}]]],]
Warning
Now, some of the short-codes above such as /.is, /.it, /dt and /.c will not work just yet because we have not created their associated template. We will get to that in next section.
- query-properties::[:icon:page:updated-at]#+BEGIN_QUERY{:title[:h1"⏳ Ongoing Projects"]:query[:find(pull?page[*]):where[?block:block/page?page][?page:block/name?pagename][?block:block/marker?marker][(contains? #{"DOING"}?marker)](page-ref?block"project")(not [?page:block/name"templates"])]:breadcrumb-show?false:collapsed?false}#+END_QUERY- query-properties::[:icon:page:updated-at]#+BEGIN_QUERY{:title[:h1"👨💼People"];; ---- Get every block into variable ?block:query[:find(pull?block[*]);; ---- filter command:where;; ---- get page name (lowercase) from the special page block into variable ?pagename[?block:block/name?pagename];; ---- Select if block is a special page block and has a single property (arg1) with value arg2(page-property?block:tags"people")]}#+END_QUERY
Now for everyday usage, each time there is a new issue or a number of issues they can simply be recorded by typing /.is for single issue and /.it for a table of issues.
Once the issue or issues table is created, all usual fields can be filled but most importantly the issue title must include hashtag for the project that the issue belongs to.
So an issue for project called North Star must have #[[North Star]] in the title.
As an example say the issue is to do with lack of resources then the title should be #[[North Star]]: Lack of Resources
The issue status or any topic to be highlighted with RAG status can be tagged with following tags:
Tag
Circle Appended
#red
🔴
#amber
🟠
#green
🟢
#on-hold
🟣
#yellow
🟡
#Closed
🔵
#no-go
🚫
Circles with additional colours can be created using the template. To do so, press /.c and press Enter. This should then put following text on the editor: {{renderer :template-view, circle-template, :color orange}}
Now just replace orange in above with the colour desired.
Reviewing the logs is as simple as opening the Contents page, clicking the project name and scrolling down to the Issues Log section.
Now if there are actions identified during the review of an issue, they can be simply added in the updates section under the date of review which can be quickly added by pressing Ctrl+Shift+D and then noting down the action as a sub bullet TODO [#A] Do Something /deadline
I usually log decisions against a logged issue or if they resulted from a general discussion, just as #<projectname> #decision.
All the project relevant notes will be automatically collected on the project's page so long as they have been tagged with the project name so for the day to day notes all that is required is add entires in the Journal.
As we added css for different coloured borders of blockquotes and also created shortcode and keyboard shortcut we can do this in multiple ways:
Type />band press Enter. This will place <blockquote class='blue'></blockquote> and the quote can be written between the tags.
Type the following, replacing yellow with one of the predefined colours: yellow, pink, blue, green, red, grey, gray, orange or purple.
{{> yellow,Some yellow quote}}
Type /=y, select Yellow Highlighter from pop-up menu and press Enter. This will place <mark class='yellow'></mark> and text to be highlighted can be written between the tags. It will be presented as Yellow Highlight
Type the following and it will be presented as This text is highlighted.
{{== pink,pink highlight}}