My Beeminder browser extension

I’ve been using a browser extension to add a few features to Beeminder’s frontend that I’m sorely missing (in the vein of this thread from 2016).

I’ve been using this extension in one form or another for a couple of years, but I’ve only now gotten around to releasing it as open source. (Yeah, yeah, you know how it is. How have the plans for open-sourcing Beeminder been going lately?)

The extension currently does two things:

  1. It allows you to collapse/minimize goals down to a single line at the end of the goal list, hiding the graph and all but the bare minimum of data. This means that I can collapse anything “done for the day”, or which I don’t plan on getting to for now.

    (But it doesn’t allow you to collapse goals which are red, keeping them in your face whether you like it or not.)

    Minimized goals can be re-expanded by clicking on them, or with a hotkey of o, which unminimizes all such collapsed goals.

  2. It gives you a full-text search style interface to filter your goals. Hit the f hotkey to open a filter box, in which you can type just about anything: part of a name, a description, or a tag, a color (like red or green), as well as things like time (for time-formatted goals) or coasting (for goals you are coasting on.)

    The list of goals is filtered in real-time as you type, giving you the same Beeminder dashboard interface that you know and love, just with an appropriate subset of your goals.

    (This is the primary way I use Beeminder tags. It works really well. I just wish that adding tags was easier. I’d love to add a better tag-editing UI, but unfortunately tags aren’t exposed at in the API…)

You can download the extension for Firefox, download a zip you can load in Chromium with “load unpacked extension”, or you can build it yourself from source.

15 Likes

This is amazing! The ability to search through my goals is a killer feature for me since i have a lot of goals.

3 Likes

Cool. Would you consider following the instructions at https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Build_a_cross_browser_extension (or, if not, would you accept patches) to make it work across (some) other browsers?

3 Likes

This extension doesn’t actually do anything that would be browser specific. I just now gave it a try in Chrome (via “load unpacked extension”), and it looks like it works great.

So I don’t think that there’s anything extra that needs to be done! If you start using it and find some sort of compatibility issue, let me know, and I’ll fix it like I’d fix any other bug. (Or send a PR: I’m always happy to accept patches.)

3 Likes

This is cool! How do you actually collapse/minimize a goal? When I hit f it opens the filter box, so I know it’s working, but I can’t figure out how to minimize a goal…

Edited to add: never mind! I was looking at some red goals and I missed the part where you said you can’t minimize those. I see the ‘collapse’ link for the others now!

3 Likes

Would you be willing to explain how to do that? It is likely I am missing some sort of obvious step because I am a totally non-technical sort of person, sorry! :smiley:

3 Likes

Sure. I was kind of assuming that @kenoubi would know what I was talking about, but yes, it probably needs some explaining before everyone could do it.

In Chrome, you can go to the extensions page, either by entering chrome://extensions in the URL bar, or by going to Settings, then selecting Extensions (in the sidebar on the left), or with “More tools -> Extensions”.

Once you’re on that page, turn on “developer mode” (in the top right corner):

Screenshot from 2020-05-06 14-57-37

You’ll then see in the top-left a button labeled “Load unpacked”.

Screenshot from 2020-05-06 14-44-17

This button allows you to load an extension from a folder on your computer. Of course, you first need to download my extension to a folder.

Here’s a link to the extension as a zip file, or you could clone the repository and build it from source. (Which isn’t hard per se, but is a bit more technical than you might like.)

(For those who do want to build it from source:

  1. Clone the repository:
    git clone git@github.com:quantified-self-tools/beebrowse.git
  2. Run npm install
  3. Run npm run build

It’s not that hard, but you do need git and npm.)

In short: the quick and easy way is to download the zip file, extract it somewhere, then select that folder where you’ve extracted it with Chrome’s “load unpacked”.

“Load unpacked” is meant for developers testing not-yet-published extensions, and I mentioned it above to describe what I did in order to test that the extension works in Chrome. You can load it this way too, if you want. But I might as well pack it for you, here [EDIT: This link is now outdated. Use the link above to download the extension as a zip file.] You can download that file, and (after turning developer mode on!), drag and drop it onto the extensions page. That gives what’s effectively the same result as loading it as an unpacked extension, except that you don’t need to unzip the file first.

If someone wants to publish this in the Chrome Web Store, (or the equivalent for another browser), that’s fine by me, but I don’t particularly want the burden of doing it myself. But loading it this way in “developer mode” should be fine.

5 Likes

Thank youuuu! It works perfectly. (Actually, Chrome wouldn’t let me load the packed version, but it did let me just drag and drop the zip in. :unamused: Thank you for nannying me, Chrome…)

3 Likes

Today I entered data in almost all my goals, by just systematically collapsing each goal after I did something toward it if I could (or just got it out of the way if I couldn’t, like my iron tablet goal which has to be every-other-day). I touched almost all my goals, and it was so easy because I could just send them right out of the list if they weren’t relevant or they were done.

This might be revolutionary for me! :heart_eyes: I always tried to do this, but even using a view filtered by tags or sorting by most recently entered data, it still felt overwhelming because the goals I’d done were still in my face.

Thank you again! :smiley:

3 Likes

This is very cool! Glad you finally got around to publish it :slight_smile:
Also: Is anyone interested in porting this to Safari? :sweat_smile:

2 Likes

It shouldn’t need much if any porting! It works just fine on Chrome, and there is no reason it shouldn’t work exactly as well on Safari.

You can download the extension as a zip file, or build it yourself from source (instructions on how are in my post above), and then you should be able to load it as an unpacked extension. (This StackOverflow answer seems to describe how to do that.) Or of course you could pack it for Safari yourself, though I’m even less sure of the details of how you’d go about doing that.

1 Like

@zzq Unless your extension is written in Swift or ObjectiveC I don’t see how this would work :wink:

1 Like

Oh? I thought (well, assumed) that Safari supported the WebExtensions API, the cross-browser standard for browser extensions.

Maybe that’s not true. Which is a surprise, but I guess that Apple likes doing things differently from the rest of the world. (That’s a good reason to use a different browser. Can I suggest Firefox? This extension would work right off the bat. :slight_smile:)

3 Likes

It seems that Apple has just announced support for WebExtensions in Safari.

It doesn’t seem like it’s quite available just yet, but when it is you should be able to port my extension fairly easily.

(So I wasn’t actually all that wrong about Safari supporting WebExtensions! I was just a few months early :slight_smile:.)

3 Likes

I am shamelessly reviving this thread to announce that I love this extension! Thanks @zzq.

4 Likes

I’m still using it every day myself! It’s been a gamechanger. :slight_smile:

4 Likes

Anyone found it stopped working in the latest chrome? Might be down to my browser being weird.

1 Like

I don’t usually use Chrome, but I tried installing this extension (in Chrome) to see if there was a problem.

It seemed to work fine, so I’m not quite sure what to tell you, @emeraldnext. Perhaps check in chrome://extensions that the extension is still installed and enabled—Chrome tends to not like extensions that are not installed through the Chrome Web Store, and I wouldn’t put it past them to automatically disable or remove such extensions under the right circumstances.

2 Likes

Pardon me, seems to have randomly returned to working today. Appreciate the check.

2 Likes

This is your bi-yearly reminder that this extension is great and I love it so much.

I would change from the $8 to the $16 per month subscription if this extension was part of it. It’s just that useful.

2 Likes