Pebble watchapp client for beeminder.com with zeno polling apps.repebble.com/beehave_f1152802609442c08cb60daf
pebble beeminder

Files
README.md

Beehave #

Check Beeminder goals, get reminders, and log datapoints from Pebble Time 2.

'Beehave' title with subtitle 'check your goals and log datapoints from your wrist' beside two Pebble Time 2 watches with screenshots of the watchapp

MutuaL-1.2 scratchanitch.dev badge REUSE status Liberapay donation status

Beehave is an unofficial Beeminder client for Pebble Time 2. It lists goals in Beeminder urgency order. Open a goal to see its safety buffer, requirement, deadline, and pledge. For manual goals, log integer, decimal, or time values with the watch buttons.

Beehave creates reminder times from your Beeminder Lead Days, Start Alerts, deadlines, and Zeno settings. The watch schedules these reminders locally. Beehave does not use Pebble Timeline or a separate server.

Cached goals remain available when the phone is unavailable. Queued reminders can still open, and you can snooze them. A fresh sync and datapoint post require the phone and network.

Beeminder remains authoritative. A logged datapoint does not mark a goal as safe or complete. A refresh gets the current goal state from Beeminder.

Installation #

Get Beehave on the Pebble App Store

Scan to open Beehave in the Pebble Appstore

Screenshots #

Goal list Goal detail Log time
Beehave goal list Details for a time goal Time datapoint editor
Manual reminder Automatic reminder Unavailable goal help
Reminder for a manual goal Reminder for an automatic goal Help for goals with long text

Beehave demo: open deep-work, log time, then receive an urgent focus-hours reminder

Features #

  • Lists goals in Beeminder urgency order.
  • Shows the safety buffer, current requirement, deadline, and pledge.
  • Logs integer, decimal, and time values for manual-data goals.
  • Keeps automatic-data goals read-only.
  • Derives reminder polls from Lead Days, Start Alerts, deadlines, and Zeno cadence.
  • Schedules reminders on the watch without Pebble Timeline or a Beehave server.
  • Restores cached goals and queued reminders when the phone is unavailable.
  • Recalculates relative deadline and cache-age text from the current watch time.

Use Beehave #

  1. Open the Beehave settings in the Pebble phone app.
  2. Enter your Beeminder API key.
  3. Select the time format and reminder vibration.
  4. Save the settings.

The phone must have network access for a fresh sync or a datapoint post. Cached goals remain available on the watch. A queued reminder can still open, and you can snooze it.

Known limitations #

  • This release supports only Pebble Time 2 (emery). I intend to support more devices, but will have to develop using the emulator.
  • Beehave shows at most 64 goals and stores at most 64 upcoming reminder polls.
  • Long goal fields cannot fit in the watch protocol. Account identities, goal IDs, and slugs can contain at most 63 UTF-8 bytes. Titles and requirement text can contain at most 95 bytes. Units can contain at most 31 bytes.
  • Beehave excludes a goal when one of these fields is too long. The final goal row shows how many goals are unavailable. Shorten the text in Beeminder, then refresh Beehave.
  • Beehave does not edit goals, show graphs, or browse and edit old datapoints.

Development #

mise run check                   # run checks and build the PBW
mise run install                 # install on the Emery emulator
mise run publication:assets      # render the icons and banner
mise run publication:screenshots # capture the screenshots and demo GIF

The behavior specs in features/beehave/ are the source of truth. Keep package.json and mise.toml in sync when a later release adds a platform.

Project layout #

src/c/           watch-side C source
src/pkjs/        phone-side PebbleKit JS source
features/        acai behavior specs
store/           store copy and reviewed publication media
package.json     Pebble app metadata, target platform, and AppMessage keys
wscript          Pebble SDK build rules

Privacy #

Beehave stores your API key only in its phone-side credential storage. It does not send the key to the watch. The phone sends requests directly to Beeminder. Beehave has no separate server.

The phone and watch cache account identity, goal details, and reminder data. Disconnecting removes the API key but retains cached goals as stale data.

Support #

For support, open an issue on Tangled, where the source code lives.