Obsidian Plugin for Beeminder

Creating this thread to document my journey as I attempt to create a new Obsidian Plugin that connects with the beeminder API.

I searched through Obsidian’s community plugins, and was shocked to find that there was only 1 related to beeminder, the “Beeminder Word Count” plugin, which allows you to specifically send the word count of your current Obsidian note to 1 beeminder goal. Clearly there is a desire for Beeminder plugins in Obsidian, as this plugin has over 4000 downloads despite last update being 3 years ago !

I find this functionality limited for my personal desires.

I personally desire a feature set of:

  • adding up all completed or uncompleted tasks in current note and sending to a beeminder
  • adding up all completed or uncompleted tasks in specific note and sending to a beeminder (can be executed no matter which note you currently have opened)
  • automated polling beeminder updates
  • ability to add data to multiple beeminders (the current obsidian plugin only allows for one)
  • grabbing specific dataview values and being able to do some logic/math related to them, in order to send that data to a beeminder

If someone already knows an obsidian plugin that is working to these features, let me know !

And also for the Obsidian-users out there, please let me know if there are any features you would want in an Obsidian to beeminder plugin.

I’ll be prioritizing the features that can benefit my workflows/life, but will definitely consider to implement any suggestions…

9 Likes

Counting tasks of a specific completion state in a specific note is exactly what I want! :open_mouth:

2 Likes

Made a beeminder to track contributions to this thread:

Edit: I think I made this goal private by accident. It should show up now.

3 Likes

Update:

Today I…

  1. created the github repo for the plugin:
    GitHub - napkindev/beeminder-obsidian-plugin

  2. cloned the repo into my testing Obsidian vault

  3. opened the repo in vscode and built the main.ts file into a main.js

  4. created a “hello world” test plugin and got it working to output to the obsidian dev console

IMG_8106

1 Like

Update:

3 Weeks and 3 Derails in a Row…

Well, this is exactly what beeminder is for, and why I created an RSS beeminder to monitor my contributions to this project.

This project has unregretfully been of low priority for me. I simply have other more important things going on. Like, the fact that I run a cashflowing business that I’m in the process of scaling ! And had to hire + onboard a few people haha.

But, again, that’s exactly why I’m happy I did this experiment, of beeminding a project like this, something that otherwise I would’ve had a great idea for, and then slowly forgot about and taken minimal action.

Each of the 3 derails has kept this project in my peripheral focus… the first $5 was not enough to motivate me. The second $10 was not enough to motivate me. The 3rd $30 stung me, and I did try to make an update last week but I only remembered about the beeminder being due that day with 20-30 minutes to go. I actually did reorient myself with the project and the obsidian plugin code that day, but I deemed I didn’t make enough progress to be worthy of not derailing. I didn’t want to cheat and post a fake update here… and honestly this shows the benefit of having a public beeminder like this. If I cheated I would have known that it was a public embarassment ! Even with my anon profile here, I’d still like to build a reputation of someone who delivers on what they promise.

So, that $30 derail was enough to make my brain a little more conscious of the fact that I had this plugin deadline coming up.

In terms of actual updates, I made some small progress by creating a simple code to count the number of completed tasks in a note, and include that metric in the status bar. This code does real-time updating based on your edits to the file !

image

This gets me a small step closer towards the plugin I want… because now I’m adding up the completed tasks in the note.

I now have a few logical next steps for the plugin:

  1. push the completed tasks data to a test beeminder (using internal variables for the beeminder username, slug, and API key)
  2. create a plugin entry form to insert your username, slug, API key
  3. add the logic to pull from the form to push to the test beeminder

Honestly, after these 3 steps I’ll have a core functionality of what I’m going for, and I’ll see if I can get the plugin uploaded to obsidian’s community plugins :slight_smile:

If you’d like to see this project move up my priority list, I’ve set up a Ko-fi page just for this. Your support through donations will directly influence how much time I dedicate to it, helping me prioritize this project over others:

https://ko-fi.com/napkindev

3 Likes

Small update.

I created the form for users to enter their Beeminder goal, api key, and username.

1 Like

Quick update. I’m only working on this a bit at a time since I’ve got other priorities :sweat_smile:

I added to the settings form a space to specify the file you want to track for your beeminder goal:

I also set up a test goal on beeminder. You can find it at: obsidiantest1 – napkin – beeminder

Finally, I added the listening function for my obsidian plugin to update to beeminder whenever the specified file path is edited. And then, if and only if the new value of completed tasks in the file is different than the current beeminder goal value, then it pushes an update via the beeminder API.


The initial test was successful as I marked a 3rd task as completed and a value of 3 was posted to beeminder chart.

So, may be a fairly usable implementation… if anyone wants access please respond on this thread or dm me, since then I know to rush publishing it to the official obsidian community plugins, since I still have to learn how to do that whole rodeo lol.

I’ve now achieved all 3 next steps that I indicated on Aug 16th.

Next steps from here would be:

  1. more testing… try to create bugs with edge cases
  2. more advanced form entry. I’ve seen other obsidian plugins that have a plus button to create multiple iterations/workflows. I’d like to do the same. I think user should just enter their username and api key once, and then they can add to track different files and have them update to different goals
  3. allow multiple files to push total completed tasks to same goal ? (let me know if you’d want this… I could see a use case for tracking total tasks completed across projects or daily notes)
  4. allow functionality for tracking uncompleted tasks ?
  5. create simple loom screen recordings to show how best to use the plugin with specific goal types (do more vs whittle down etc)
  6. add other data options like word count of note, and possibly other ideas…

I guess I have achieved some of my initial roadmap though… so that’s cool ! Wasn’t that hard either tbh, wish I was more sucked into this project but ill keep progressing it dutifully due to the weekly beeminder holding my attention. no more derails please :man_bowing:t2:

Quick update:

I implemented the function of multiple goals today. I still need to add a drop down for what metric the goals will count (completed tasks, uncompleted tasks, word count).

I also should probably add a manual hotkey for submitting the beeminder data point, and possibly polling frequency options. I do think making the beeminder data point on EVERY file change is going to be an issue for things like word count. So maybe give the user option for polling time frequency as well as will it update automatically or manual.

In other news, I need to make sure the data is correct for a beeminder goal… I think the issue here is that I set it as a “do more” goal when it really should have been an odometer !

I guess the completed tasks is really meant for odometer goal types, and uncompleted tasks would be a whittle down goal type (this is what I currently use for tackling my backlog of tasks !)

So, I think those are the only 2 goal types that my plugin in meant for… I should probably make a quick write up on why those 2 goal types are the ones to choose, and to use other goal types at your own risk.

Please, beekeepers, chime in if you can think of how this would work on goal types other than odometer and whittle down ?

Lastly, based on this write up one of my near term goals should be to start using this plugin on my main vault and replacing the backlog beeminders that I currently use a python script to update. No point in doing this plugin if it’s not scratching my own itch !

1 Like