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/;
  let getUrls = function(proj) {
    if (proj.notes() && proj.notes().match(divider)) {
      return proj.notes()
                 .replace(divider, "")
                 .map(str => str.replace(/^- /, ""))
                 .filter(s => s != "")
    else {
      return false;
  let 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.


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. 

  • 2022-06-08 11:31:29 -0500
    Rename articles

  • 2022-03-11 08:02:39 -0600
    Fix typo

  • 2022-03-11 07:40:31 -0600
    Bunch of URLs