Bunch of URLs

While conducting a weekly review, I realized that a frequent step in my daily process was opening all the URLs associated with a project. Every file, JIRA ticket, Figma design, or wiki page has a URL.

I started putting all these links in a markdown list in the context section of the Things Project. For each context switch I would just click down the list:

## Resources
- https://fakejira.atlassian.net/wiki/spaces/UX/pages/12345/Fake+Project
- https://fakejira.atlassian.net/wiki/spaces/UX/pages/12345/Fake+Project+Changelog
- https://fakejira.atlassian.net/browse/DEV-13623
- obsidian://open?vault=wiki&file=career%2F07%20fake%2FFake%20Project
- figma:///file/12345/Fake-Project+P?node-id=0%3A1

After doing this for a week, I decided to automate this. I wrote a JXA function to find Things projects with the string ## Resources in the Notes field.

(function() {
  var Things = Application("Things");
  var divider = /## Resources/;
  Things.launch();
  let getUrls = function(proj) {
    if (proj.notes() && proj.notes().match(divider)) {
      return proj.notes()
                 .split(divider)[1]
                 .replace(divider, "")
                 .split("\n")
                 .map(str => str.replace(/^- /, ""))
                 .filter(s => s != "")
    }
    else {
      return false;
    }
  }
  let projects =
    Things
    .projects()
    .filter(t => t.status() == "open")
    .map(function(proj) {
      return {
        text: proj.name(),
        subText: proj.area().name(),
        urls: getUrls(proj),
        id: proj.id()
      }
    })
    .filter(function(proj) {
      return proj.urls
    });
  return projects;
})();

I wrapped this in a hammerspoon function that lets me choose a project and launch its URLs in one keystroke using hs.chooser.

chooser

I love it. It immediately has become one of my favorite little hacks. Every time I need to do a demo, or start logging time, or make a small change my whole workspace is a click away.

You can do this any old way. If you are on a Mac, the best way is probably using Bunch1. The only reason I’m maintaining my particular hack is because it’s really nice to have the links co-located with their project in Things. Hook.app is similarly great, if you can wrap your head around it. At least, keep a plaintext list of the URLs associated with a project and click on them manually… it is amazing how removing a little friction can help get into flow.


  1. Bunch is pure genius. I haven’t spent the time in it that I should, but I’m pretty sure I could refactor my Headspace scripts to be a supplement to bunches and that’d be simpler. I still may do that. 


Changelog
  • 2022-03-11 14:02:39 +0000

    Fix typo

  • 2022-03-11 13:40:31 +0000

    Bunch of URLs