-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathuvis2025.js
More file actions
2590 lines (2577 loc) · 172 KB
/
uvis2025.js
File metadata and controls
2590 lines (2577 loc) · 172 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
/* globals batches */
batches['2025jan'] = [{
}, { // ------------------------------------------------------------------------
"x": "The breaks page now disallows breaks after the implicit end date (for goals w/ a final target + rate, w/ inferred end date). #bugfix HT Clive",
"s": "this caused brokenness in the graph in the form of a long retroactive flat spot",
"l": ["https://x.com/beemuvi/status/1874983156799160321",
"https://github.com/beeminder/beeminder/issues/5089",
"https://github.com/beeminder/beeminder/issues/5094",
"https://github.com/beeminder/beeminder/pull/5105"],
"d": "2024-12-17",
"e": "2025-01-02",
}, { // ------------------------------------------------------------------------
"x": "The breaks page no longer shows group goals if you're not the owner of the goal, because groupies are only supposed to have edit access to the data. HT Clive",
"l": ["https://x.com/beemuvi/status/1874983509892403481",
"https://github.com/beeminder/beeminder/issues/5084",
"https://github.com/beeminder/beeminder/pull/5106"],
"d": "2024-12-17",
"e": "2025-01-02",
}, { // ------------------------------------------------------------------------
"x": "Doh, when we added the honey-transactions page (UVI#5024) we broke links to honeygrams. #zombie #bugfix",
"l": ["https://x.com/beemuvi/status/1875342475545792723",
"https://github.com/beeminder/beeminder/issues/5110",
"https://github.com/beeminder/beeminder/pull/5109"],
"d": "2024-12-20",
"e": "2025-01-03",
}, { // ------------------------------------------------------------------------
"x": "Fixed an issue for do-less goals where weekends-off (or other upcoming breaks) could get ruined by an intermediate derail. #bugfix HT Clive",
"l": ["https://x.com/beemuvi/status/1876431051276644526",
"https://github.com/beeminder/beeminder/issues/2462",
"https://github.com/beeminder/beeminder/issues/4333",
"https://github.com/beeminder/beeminder/pull/5102"],
"d": "2024-12-13",
"e": "2025-01-06",
"s": "Future fixed points in the red line (like weekends-off and upcoming breaks) did not get updated to reflect the mercY added on a derail",
}, { // ------------------------------------------------------------------------
"x": "New beecaps of your 2024 year! https://www.beeminder.com/beecap",
"l": ["https://x.com/beemuvi/status/1876431142758576234",
"https://github.com/beeminder/beeminder/pull/5121"],
"d": "2025-01-01",
"e": "2025-01-06",
"s": "Same as last year, just for 2024 now. Not actually very exciting.",
}, { // ------------------------------------------------------------------------
"x": "We removed the mention of the meta-commitment device in the \"why?\" popup when you've already complied with the meta-commitment device",
"l": ["https://x.com/beemuvi/status/1876791359421431986",
"https://github.com/beeminder/beeminder/issues/4142",
"https://github.com/beeminder/beeminder/pull/5107"],
"d": "2024-12-17",
"e": "2025-01-07",
"s": "Popup aka modal, gateway-drug commitment device",
}, { // ------------------------------------------------------------------------
"x": "We smoothed out our username validation so it never happens that we say a username is valid and let you move to the next step before changing our mind",
"l": ["https://x.com/beemuvi/status/1877151689754427838",
"https://github.com/beeminder/beeminder/issues/4226",
"https://github.com/beeminder/beeminder/pull/5123"],
"d": "2025-01-08",
"e": "2025-01-08",
"s": "We formerly partially validated on the client side, and partially serverside, so it was possible if you submitted something such as 'featured' for your username when registering, that it would appear ok according to clientside validations, but then come back with an error from the server once you clicked the 'continue' button",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Changed headings and adjusted wording away from paying-as-punishment in \"What Is Beeminder?\" plus tweaks and little fixes in 9 other articles",
"l": ["https://x.com/beemuvi/status/1877513305008517630",
"https://help.beeminder.com/article/70-what-is-beeminder",
"https://help.beeminder.com/article/120-whats-the-best-way-to-beemind",
"https://help.beeminder.com/article/339-how-do-i-set-a-goal-with-a-weekly-rate",
"https://help.beeminder.com/article/71-example-10k-steps",
"https://help.beeminder.com/article/72-example-goal-run-3-times-per-week",
"https://help.beeminder.com/article/93-example-goal-spend-less-time-on-facebook",
"https://help.beeminder.com/article/94-example-goal-eat-14-servings-of-vegetables-per-week",
"https://help.beeminder.com/article/95-example-goal-learn-a-new-language",
"https://help.beeminder.com/article/51-whats-the-difference-between-the-goal-types",
"https://help.beeminder.com/article/52-why-cant-i-create-a-do-less-odometer-whittle-down"],
"e": "2025-01-09",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Deleted most words from the \"when does my week start?\" article, making it hopefully much clearer, plus made another one not discuss fake data",
"l": ["https://x.com/beemuvi/status/1877516066936537527",
"https://help.beeminder.com/article/123-weekstart",
"https://help.beeminder.com/article/92-example-goal-go-to-the-gym-4-times-per-week"],
"e": "2025-01-09",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Made the article about Beeminder end-of-day more readable (by deleting lots of things) plus fixed an error a user caught in the Odometer goals one",
"l": ["https://x.com/beemuvi/status/1877873005680013343",
"https://help.beeminder.com/article/122-why-does-beeminder-think-its-already-tomorrow",
"https://help.beeminder.com/article/68-odometer-goals"],
"e": "2025-01-10",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Added guidance about replying to legit checks and other support email things in the catchall article, plus tweaks to 2 other articles",
"l": ["https://x.com/beemuvi/status/1878966872437322209",
"https://help.beeminder.com/article/351-i-need-help",
"https://help.beeminder.com/article/154-can-i-schedule-breaks-on-many-goals-at-once",
"https://help.beeminder.com/article/58-what-if-i-only-want-to-do-something-once-a-month"],
"e": "2025-01-13",
}, { // ------------------------------------------------------------------------
"x": "Help docs: In the article on weekday-only goals, added links and made clear you can toggle weekends-off on the mass-breaks page",
"l": ["https://x.com/beemuvi/status/1878966969271218200",
"https://help.beeminder.com/article/57-what-if-i-only-want-to-do-my-goal-on-weekdays"],
"e": "2025-01-13",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Retitled article on getting free goals making it more findable, plus edited \"my goal doesn't make any sense!\" article to encourage more self-help",
"l": ["https://x.com/beemuvi/status/1879332522217382043",
"https://help.beeminder.com/article/336-how-many-goals-can-i-make-for-free",
"https://help.beeminder.com/article/124-my-goal-doesnt-make-any-sense"],
"e": "2025-01-14",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Added more about Whittle Down and Weight goals to the safety buffer article, addressing some user confusion, plus cleaned up the formatting",
"l": ["https://x.com/beemuvi/status/1879686992939909508",
"https://help.beeminder.com/article/55-what-is-safety-buffer"],
"e": "2025-01-15",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Clarified about ratcheting number of safe days vs goal units in the Ratchet article, plus tweaks and rearranging/rephrasing in 2 other articles",
"l": ["https://x.com/beemuvi/status/1880055465549410683",
"https://help.beeminder.com/article/56-can-i-get-rid-of-extra-safety-buffer",
"https://help.beeminder.com/article/119-what-are-the-goal-statistics",
"https://help.beeminder.com/article/66-do-more-goals"],
"e": "2025-01-16",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Lots of edits throughout the article on scheduling breaks to clarify about when/how one can derail during a break",
"l": ["https://x.com/beemuvi/status/1880055717203489061",
"https://help.beeminder.com/article/98-can-i-put-my-goal-on-pause-for-a-little-bit"],
"e": "2025-01-16",
}, { // ------------------------------------------------------------------------
"x": "Got our YNAB integration the official stamp of approval from YNAB, meaning we're in their \"works with us\" gallery and also we can have more than 25 users now",
"l": ["https://x.com/beemuvi/status/1880406329694777416",
"https://api.ynab.com/#works-with-ynab-official",
"https://github.com/beeminder/beeminder/issues/4980"],
"d": "2024-08-20",
"e": "2024-01-17",
"s": "We forgot to do this before publicly launching the integration from our side, so we ran out of slots and the integration was broken for a while, which was embarrassing for us. Also there's no PR to go with this because it was pretty much just about emailing with their gatekeepers. Oldie but we did break it twice without counting it as a UVI previously.",
}, { // ------------------------------------------------------------------------
}, { // ------------------------------------------------------------------------
"x": "Help docs: Updated screenshot and text for relative (aka rolling) x-min (aka t-min) in the article about restarting archived goals",
"l": ["https://x.com/beemuvi/status/1881491664365350924",
"https://help.beeminder.com/article/358-can-i-restart-an-archived-goal"],
"e": "2025-01-20",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Added bit about visual graph editor in \"Can I start my goal over?\" and Do-More-vs-Do-Less tradeoffs plus new links in the Do-Less article",
"l": ["https://x.com/beemuvi/status/1881491766358180159",
"https://help.beeminder.com/article/117-can-i-start-my-goal-over",
"https://help.beeminder.com/article/67-do-less-goals"],
"e": "2025-01-20",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Added warnings for wary to the Custom Goals article, fixed a missing sentence ending in another, and tweaked the intro in 2 more articles",
"l": ["https://x.com/beemuvi/status/1881866043091816909",
"https://help.beeminder.com/article/97-custom-goals",
"https://help.beeminder.com/article/157-pessimistic-presumptive-reports",
"https://help.beeminder.com/article/68-odometer-goals",
"https://help.beeminder.com/article/69-whittle-down-goals"],
"e": "2025-01-21",
}, { // ------------------------------------------------------------------------
"x": "Soft launch (beta) of our Fatebook integration. Open to daily beemail folks and anyone else who can guess the URL.",
"l": ["https://x.com/beemuvi/status/1882230134071316650",
"https://github.com/beeminder/beeminder/issues/5114",
"https://github.com/beeminder/beeminder/pull/5142"],
"d": "2025-01-21",
"e": "2025-01-22",
}, { // ------------------------------------------------------------------------
"x": "We updated our Garmin integration which was about to break if we didn't change some API calls Garmin asked us to change. Sweat-smile-emoji.",
"l": ["https://x.com/beemuvi/status/1882588052910166248",
"https://github.com/beeminder/beeminder/issues/4967#issuecomment-2599189608"],
"e": "2025-01-23",
"s": "I think historically we've waited for things to break before counting them as UVIs but that makes for silly incentives, so we decided pregressions (aka time-bomb zombs) should count too. This one involved changing some http calls to https.",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Fixed some user-confusion with the Weight Loss/Gain article by changing headings and adding clarifying words and sentences",
"l": ["https://x.com/beemuvi/status/1882588627898921120",
"https://help.beeminder.com/article/96-weight-gain-loss-goals"],
"e": "2025-01-23",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Clarifications in \"What is my data?\" re: auto-summing vs odometer goals, plus keywords and a link. And a tiny tweak to \"Can I export my data?\"",
"l": ["https://x.com/beemuvi/status/1882955530337128888",
"https://help.beeminder.com/article/36-what-is-my-data",
"https://help.beeminder.com/article/41-can-i-export-my-data"],
"e": "2025-01-24",
}, { // ------------------------------------------------------------------------
"x": "Fixed a critical bug in the soft-launched Fatebook integration: it's odometer style, not auto-summing. HT @poisson",
"l": ["https://x.com/beemuvi/status/1884015412192632990",
"https://github.com/beeminder/beeminder/issues/5114",
"https://github.com/beeminder/beeminder/pull/5144"],
"e": "2025-01-27",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Lots of copyediting love and new examples for the \"How do I enter data?\" article, plus a clarifying line in \"How do I fix incorrect data?\"",
"l": ["https://x.com/beemuvi/status/1884015564684943753",
"https://help.beeminder.com/article/37-how-do-i-enter-data-to-my-goal",
"https://help.beeminder.com/article/39-how-do-i-fix-incorrect-data"],
"e": "2025-01-27",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Significantly rewrote the \"When do I pay?\" article to make it clearer, easier to read, and to get important stuff up front",
"l": ["https://x.com/beemuvi/status/1884402333028868584",
"https://help.beeminder.com/article/324-when-do-i-pay"],
"e": "2025-01-28",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Rephrasings/clarifications in the article on others adding data to your goal, plus mention of API in data import article, plus link added to 1 other",
"l": ["https://x.com/beemuvi/status/1884761615050080508",
"https://help.beeminder.com/article/40-can-anybody-else-add-data-to-my-goal",
"https://help.beeminder.com/article/113-can-i-import-previous-data",
"https://help.beeminder.com/article/19-how-much-does-beeminder-cost"],
"e": "2025-01-29",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Added a link to goal archiving to the article on changing goal units, as some users needed that pointer",
"l": ["https://x.com/beemuvi/status/1885130109604291045",
"https://help.beeminder.com/article/42-switching-goal-units"],
"e": "2025-01-30",
}, { // ------------------------------------------------------------------------
"x": "The refresh/resync button now retries fetching data for an autodata goal even after there's been an auto-fetch error",
"l": ["https://x.com/beemuvi/status/1885130911374852487",
"https://github.com/beeminder/beeminder/pull/5149"],
"d": "2025-01-30",
"e": "2025-01-30",
"s": "This is for the kind of auto-fetch error that puts up a blue banner. Also the tweeted version of this was slightly wrong.",
}, { // ------------------------------------------------------------------------
"x": "The API has a new boolean field to tell you if a datapoint is a true logical datapoint or just a placeholder/meta datapoint like marking a derail (is_dummy)",
"l": ["https://x.com/beemuvi/status/1885492312543027453",
"https://github.com/beeminder/BeeSwift/pull/599#issuecomment-2599381144"],
"e": "2025-01-31",
"s": "Also PPRs are considered dummy datapoints in this sense",
}, /* --------------------------------------------------------- end 2025jan */ ]
batches['2025feb'] = [{
}, { // ------------------------------------------------------------------------
"x": "The API also has a new boolean field to distinguish the initial datapoint that's added as part of goal creation: is_initial (documented these as well)",
"l": ["https://x.com/beemuvi/status/1886535306104725870",
"https://github.com/beeminder/BeeSwift/pull/599#issuecomment-2599381144"],
"e": "2025-02-03",
}, { // ------------------------------------------------------------------------
"x": "When we added info about where a goal gets its data to the sidebar of the goalpage, we broke some of the meta user's goal pages. #bugfix #zomb HT David Yang",
"l": ["https://x.com/beemuvi/status/1886536482275688596",
"https://github.com/beeminder/beeminder/issues/4119", // introduced by
"https://changelog.beeminder.com/#4993", // UVI entry that introduced this bug
"https://github.com/beeminder/beeminder/pull/5130"], // fixed by
"d": "2025-01-09",
"e": "2025-02-03",
"s": "The goal pages gave a 500 error because we were trying to generate a link to the autodata landing page, but they're a custom internal pseudo-autodata goal, and didn't have a landing page. Introduced in UVI#4993",
}, { // ------------------------------------------------------------------------
"x": "The refresh arrow in the sidebar of autodata goals now changes color when new data fetched by pressing it changes the goal's safety buffer, e.g. orange to blue",
"l": ["https://x.com/beemuvi/status/1886936908829241577",
"https://github.com/beeminder/beeminder/issues/5143",
"https://github.com/beeminder/beeminder/pull/5152"],
"d": "2025-02-04",
"e": "2025-02-04",
}, { // ------------------------------------------------------------------------
"x": "We now include the connected username and a description of what the goal is tracking in the GitHub section of goal settings for Gitminder autodata goals",
"l": ["https://x.com/beemuvi/status/1887302483619553376",
"https://github.com/beeminder/beeminder/issues/4094",
"https://github.com/beeminder/beeminder/pull/5153",
"https://github.com/beeminder/beeminder/pull/5156"],
"d": "2025-02-04",
"e": "2025-02-05",
}, { // ------------------------------------------------------------------------
"x": "We also added a button for the Gitminder form that lets you change the repo it's tracking, if you're tracking a specific repo, instead of all commits",
"l": ["https://x.com/beemuvi/status/1887660918726885498",
"https://github.com/beeminder/beeminder/issues/4094",
"https://github.com/beeminder/beeminder/pull/5153",
"https://github.com/beeminder/beeminder/pull/5156"],
"e": "2025-02-06",
}, { // ------------------------------------------------------------------------
"x": "Finally, we added a warning line for Gitminder if the goal's owner is disconnected from GitHub",
"l": ["https://x.com/beemuvi/status/1887661151380775086",
"https://github.com/beeminder/beeminder/issues/4094",
"https://github.com/beeminder/beeminder/pull/5153",
"https://github.com/beeminder/beeminder/pull/5156"],
"d": "2025-02-04",
"e": "2025-02-06",
"s": "I rearranged what I did yesterday and made it slightly better, so that's why there are two PRs now",
}, { // ------------------------------------------------------------------------
"x": "SerineMolecule fixed the bug w/ anchor links here in the changelog. Linking to specific UVIs works now without scrolling slightly away from the target! #bugfix",
"l": ["https://x.com/beemuvi/status/1888027264756936832",
"https://github.com/beeminder/uvi"],
"d": "2025-02-07",
"e": "2025-02-07",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Subtle edits to the \"how much do I pledge?\" article to encourage derailing-it-is-nailing-it plus tweaks/rearranging to 5 other articles",
"l": ["https://x.com/beemuvi/status/1889120491623109099",
"https://help.beeminder.com/article/20-how-much-do-i-pledge-on-my-goals",
"https://help.beeminder.com/article/21-can-i-decrease-the-pledge-on-my-goal",
"https://help.beeminder.com/article/24-how-do-i-manage-my-subscription",
"https://help.beeminder.com/article/26-what-if-i-buy-one-plan-and-change-my-mind",
"https://help.beeminder.com/article/27-what-payment-methods-are-available",
"https://help.beeminder.com/article/28-how-do-i-update-my-payment-information"],
"e": "2025-02-10",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Same story for the \"can I increase the pledge?\" article plus tweaks/clarifications to another 3 articles",
"l": ["https://x.com/beemuvi/status/1889120644962640273",
"https://help.beeminder.com/article/343-can-i-increase-the-pledge-on-my-goal",
"https://help.beeminder.com/article/22-can-i-limit-how-high-my-pledge-gets",
"https://help.beeminder.com/article/23-can-i-have-goals-without-pledges",
"https://help.beeminder.com/article/25-how-do-auto-canceling-subscriptions-work"],
}, { // ------------------------------------------------------------------------
"f": true,
"x": "Official launch of our Fatebook (with a T) integration! https://blog.beeminder.com/fatebook",
"l": ["https://x.com/beemuvi/status/1889499697821499512",
"https://github.com/beeminder/blog/issues/582",
"https://github.com/beeminder/integrations/issues/52",
"https://github.com/beeminder/beeminder/issues/5114",
"https://github.com/beeminder/beeminder/pull/5160"],
"d": "2025-02-11",
"e": "2025-02-11",
"s": "Improvements to the landing page, logo on front page gallery, blog post",
}, { // ------------------------------------------------------------------------
"x": "Help docs: New article for the new Fatebook integration",
"l": ["https://x.com/beemuvi/status/1889500812759761090",
"https://help.beeminder.com/article/366-fatebook"],
"d": "2025-02-11",
"e": "2025-02-11",
}, { // ------------------------------------------------------------------------
"x": "We fixed the alignment of the integrations gallery so when the don't fit in a nice rectangle, the overlow is left-justified",
"l": ["https://x.com/beemuvi/status/1890201640264954337",
"https://github.com/beeminder/beeminder/commit/615f17f39eca9dcea34bb1ac4789f786c9857a94"],
"e": "2025-02-13",
}, { // ------------------------------------------------------------------------
"x": "Also we improved the spacing of the gallery and made the logos slightly smaller so things fit better",
"l": ["https://x.com/beemuvi/status/1890201677913104869",
"https://github.com/beeminder/beeminder/commit/615f17f39eca9dcea34bb1ac4789f786c9857a94"],
"d": "2025-02-11",
"e": "2025-02-13",
}, { // ------------------------------------------------------------------------
"x": "Removed all-commits tracking from Gitminder for now; it has been semi-broken because the API it uses is not realtime and we can miss data & derail edge-skaters",
"l": ["https://x.com/beemuvi/status/1890555566482690220",
"https://github.com/beeminder/beeminder/pull/5167"],
"d": "2025-02-14",
"e": "2025-02-14",
}, { // ------------------------------------------------------------------------
"x": "Toggl changed their URLs around and we now once again link to the right place to find your token for pasting in to create a Beeminder autodata goal",
"l": ["https://x.com/beemuvi/status/1892013006973698393",
"https://github.com/beeminder/beeminder/issues/5172",
"https://github.com/beeminder/beeminder/pull/5170"],
"d": "2025-02-18",
"e": "2025-02-18",
}, { // ------------------------------------------------------------------------
"x": "We fixed a slight/sorta error in the feet-weeting emailcopy and added a conditional blurb for the (edge) case that the goal ended up archived (somehow)",
"l": ["https://x.com/beemuvi/status/1892368469800227298",
"https://github.com/beeminder/beeminder/issues/4947",
"https://github.com/beeminder/beeminder/pull/5169"],
"d": "2025-02-18",
"e": "2025-02-19",
"s": "HT Andy. This is so corner-casey: it involves creating the goal, turning on no-excuses mode (otherwise there's no option to archive, only delete), and then immediately archive it. And then maybe losing a race condition?",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Rearranging and clarifying in the \"Why did Beeminder charge me?\" article plus smaller tweaks to 4 other articles",
"l": ["https://x.com/beemuvi/status/1892739995607433546",
"https://help.beeminder.com/article/29-why-did-beeminder-charge-my-card",
"https://help.beeminder.com/article/30-what-happens-if-a-charge-fails",
"https://help.beeminder.com/article/354-honey-money",
"https://help.beeminder.com/article/12-what-is-a-derailment",
"https://help.beeminder.com/article/13-when-do-derailments-happen"],
"e": "2025-02-20",
}, { // ------------------------------------------------------------------------
"x": "Fixed a bug introduced by UVI#5122 where we weren't validating your tracked repo when you set up a new GitHub (Gitminder) goal. #bugfix #zombie",
"l": ["https://x.com/beemuvi/status/1894185693074649553",
"https://github.com/beeminder/beeminder/issues/5027",
"https://github.com/beeminder/beeminder/pull/5173"],
"e": "2025-02-24",
"s": "Autodata integration improvements. UVI#5122 removed all-commits from goal setup, and that messed up the validation, so we weren't even checking if you entered a repo, let alone whether or not we could access it with your credentials",
}, { // ------------------------------------------------------------------------
"x": "Our GitHub integration now checks and keeps in sync the last week of data, in line with other autodata, rather than just the current day",
"l": ["https://x.com/beemuvi/status/1894185827292295201",
"https://github.com/beeminder/beeminder/issues/5027",
"https://github.com/beeminder/beeminder/pull/5173"],
"e": "2025-02-24",
"s": "This is to help with gissue #5027 -- part of the problem with the allcommits endpoint not being real-time was that if the delay happened across midnight, we'd miss the commits entirely because we didn't go back and check past days",
}, { // ------------------------------------------------------------------------
"x": "We now check that the goaldate parameter passed to the API in goal creation is a Unix timestamp, and give a coherent error if not",
"l": ["https://x.com/beemuvi/status/1894548534541914594",
"https://github.com/beeminder/beeminder/issues/4952",
"https://github.com/beeminder/beeminder/pull/5174"],
"e": "2025-02-25",
"s": "Prior to this we were just accepting it and interpreting as 1969-12-31, which is super wrong",
}, { // ------------------------------------------------------------------------
"x": "To catch more errors (e.g., unixtime in milliseconds instead of seconds), we further enforce NOW < goaldate < 2099-12-31",
"l": ["https://x.com/beemuvi/status/1894914472650977571",
"https://github.com/beeminder/beeminder/pull/5174",
"https://github.com/beeminder/beeminder/pull/5177"],
"e": "2025-02-26",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Added to the Boss as a Service integration article info about non-legit derailments when using that integration",
"l": ["https://x.com/beemuvi/status/1894914534697316564",
"https://help.beeminder.com/article/329-boss-as-a-service-baas"],
"e": "2025-02-26",
"s": "We still also allow nil/null goaldate",
}, { // ------------------------------------------------------------------------
"x": "We added an explicit link to the dashboard in the dropdown menu in the upper right of the website; apparently not everyone knew how to find the dashboard",
"l": ["https://x.com/beemuvi/status/1895274339584679995",
"https://github.com/beeminder/beeminder/issues/5193",
"https://github.com/beeminder/beeminder/pull/5181"],
"d": "2025-02-27",
"e": "2025-02-27",
}, { // ------------------------------------------------------------------------
"x": "While we were at it we changed \"gallery\" to \"gallery view\" and added some handy tooltips",
"l": ["https://x.com/beemuvi/status/1895573333862989913",
"https://github.com/beeminder/beeminder/pull/5181"],
"e": "2025-02-28",
}, /* --------------------------------------------------------- end 2025feb */ ]
batches['2025mar'] = [{
}, { // ------------------------------------------------------------------------
x: "Help docs: New FAQ item / clarification in the article for the Fatebook autodata integration, plus copy tweaks to 3 other articles",
l: ["https://x.com/beemuvi/status/1896723193441964234",
"https://help.beeminder.com/article/366-fatebook",
"https://help.beeminder.com/article/16-what-is-a-legit-derailment",
"https://help.beeminder.com/article/360-what-is-no-excuses-mode",
"https://help.beeminder.com/article/61-apple-health"],
e: "2025-03-03",
}, { // ------------------------------------------------------------------------
x: `Help docs: The Focusmate autodata integration article now covers the new time-based metric, plus copy tweaks or added details to 4 more articles`,
l: ["https://x.com/beemuvi/status/1896724799818543295",
"https://help.beeminder.com/article/278-focusmate",
"https://help.beeminder.com/article/17-what-happens-when-i-derail",
"https://help.beeminder.com/article/290-clozemaster",
"https://help.beeminder.com/article/288-codecombat",
"https://help.beeminder.com/article/364-curlex"],
e: "2025-03-03",
}, { // ------------------------------------------------------------------------
x: "For consistency (and cuteness?) and I guess in some cases actual usefulness, we added tooltips to pretty much everything in the navbar and dropdown menu",
l: ["https://x.com/beemuvi/status/1897080286581842025",
"https://github.com/beeminder/beeminder/issues/5182",
"https://github.com/beeminder/beeminder/pull/5184"],
e: "2025-03-04",
}, { // ------------------------------------------------------------------------
x: "Oops, we accidentally swapped the Log In and Sign Up links. #bugfix #zombie",
l: ["https://x.com/beemuvi/status/1897451417662812638",
"https://forum.beeminder.com/t/log-in-and-sign-up-buttons-permuted/12269",
"https://github.com/beeminder/beeminder/pull/5189"],
e: "2025-03-05",
}, { // ------------------------------------------------------------------------
x: "While we were at it / for completionism, we added tooltips to the remaining navbar / menu items, and improved several of them",
l: ["https://x.com/beemuvi/status/1897451534675595342",
"https://github.com/beeminder/beeminder/issues/5182",
"https://github.com/beeminder/beeminder/pull/5189"],
e: "2025-03-05",
}, { // ------------------------------------------------------------------------
"x": "Help docs: Clarification about donations to freeCodeCamp in the article about the autodata integration, plus tweaks to 2 other autodata articles",
l: ["https://x.com/beemuvi/status/1897814167329161530",
"https://help.beeminder.com/article/287-freecodecamp",
"https://help.beeminder.com/article/80-duolingo",
"https://help.beeminder.com/article/74-garmin"],
e: "2025-03-06",
}, { // ------------------------------------------------------------------------
x: "Some autodata integrations used to overwrite the #DERAIL datapoints and others wouldn't. Now they never do. Consistency (and moar information) FTW.",
l: ["https://x.com/beemuvi/status/1898167363910222321",
"https://github.com/beeminder/beeminder/issues/4192",
"https://github.com/beeminder/beeminder/pull/5183",
"https://github.com/beeminder/beeminder/pull/5186"],
d: "2025-03-04",
e: "2025-03-07",
}, { // ------------------------------------------------------------------------
x: `There's a new AGGDAY section at the end of the Data tab indicating how multiple datapoints for a single day are aggregated, e.g., "last", "first", "min", "max"`,
l: ["https://x.com/beemuvi/status/1899246071563665748",
"https://github.com/beeminder/beeminder/issues/5044",
"https://github.com/beeminder/beeminder/pull/5180"],
d: "2025-03-04",
e: "2025-03-10",
}, { // ------------------------------------------------------------------------
x: `The new AGGDAY section also explains aggdays in general and links to the help doc about them`,
l: ["https://x.com/beemuvi/status/1899246455212400921",
"https://github.com/beeminder/beeminder/issues/5044",
"https://github.com/beeminder/beeminder/pull/5180"],
d: "2025-03-04",
e: "2025-03-10",
}, { // ------------------------------------------------------------------------
x: `Tweaks to the aggday section: following our convention for opening links in new tabs or not, not using "here" as anchor text, more words for aggday=max`,
l: ["https://x.com/beemuvi/status/1899593751724720623",
"https://github.com/beeminder/beeminder/pull/5194"],
d: "2025-03-11",
e: "2025-03-11",
}, { // ------------------------------------------------------------------------
x: `Help docs: Added a section to the GmailZero article about how to add a break`,
l: ["https://x.com/beemuvi/status/1899955528455073923",
"https://help.beeminder.com/article/82-gmail"],
e: "2025-03-12",
}, { // ------------------------------------------------------------------------
x: `Help docs: Added a section to the Gitminder article about flakiness with all-commits tracking with link to new forum thread`,
l: ["https://x.com/beemuvi/status/1899969992856396257",
"https://help.beeminder.com/article/81-github"],
e: "2025-03-12",
}, { // ------------------------------------------------------------------------
x: `Added "6 months" as one of the choices for relative t-min aka x-min (either by popular demand or because 3 months was demanded and having 3 but not 6 was weird)`,
l: ["https://x.com/beemuvi/status/1900335100744908805",
"https://github.com/beeminder/beeminder/issues/5187",
"https://github.com/beeminder/beeminder/pull/5197"],
d: "2025-03-13",
e: "2025-03-13",
}, { // ------------------------------------------------------------------------
x: `Our authorization to read your Lichess data only lasts a year. Now we handle that gracefully, showing you the error and letting you reauthorize us.`,
l: ["https://x.com/beemuvi/status/1900686994407362656",
"https://github.com/beeminder/beeminder/issues/4973",
"https://github.com/beeminder/beeminder/pull/5195"],
d: "2025-03-14",
e: "2025-03-14",
}, { // ------------------------------------------------------------------------
x: `Added an "Expired Services" section to your account settings; otherwise we would only notice a service expired if you had an active autodata goal using it`,
l: ["https://x.com/beemuvi/status/1900687378748239960",
"https://github.com/beeminder/beeminder/issues/4973",
"https://github.com/beeminder/beeminder/pull/5195"],
d: "2025-03-14",
e: "2025-03-14",
}, { // ------------------------------------------------------------------------
x: "YNAB sent us some legalese to put in our TOS. We're counting this as a UVI on grounds that they'd demote (and thus break) the integration if we didn't.",
l: ["https://x.com/beemuvi/status/1901782022621962497",
"https://github.com/beeminder/beeminder/issues/5199",
"https://github.com/beeminder/beeminder/pull/5201"],
d: "2025-03-17",
e: "2025-03-17",
}, { // ------------------------------------------------------------------------
x: "The Toggl autodata integration, for earlybird goals, wasn't adding data for the new day till the calendar day and Beeminder day matched. #bugfix",
l: ["https://x.com/beemuvi/status/1901782512009195752",
"https://github.com/beeminder/beeminder/issues/5108",
"https://github.com/beeminder/beeminder/pull/5198"],
d: "2025-03-17",
s: "E.g. if your deadline was noon, and then you did another hour of work starting at 1pm, we wouldn't add that hour until after the clock rolled over midnight",
}, { // ------------------------------------------------------------------------
x: `Our query for showing Expired Services from UVI#5147 was wrongly including non-expired services (ones with refresh tokens). #bugfix`,
l: ["https://x.com/beemuvi/status/1902509714984067296",
"https://github.com/beeminder/beeminder/pull/5204"],
e: "2025-03-19",
d: "2025-03-19",
s: "Services with refresh tokens are ones that expire on the regular but self-renew. (Sorta. oAuth2 is actually a bit more complicated than that in practice, but anyway.)",
}, { // ------------------------------------------------------------------------
x: `We also made it anti-magic-compliant so if you have no expired services it tells you so explicitly`,
l: ["https://x.com/beemuvi/status/1902509910056968648",
"https://github.com/beeminder/beeminder/pull/5204"],
e: "2025-03-19",
d: "2025-03-19"
}, { // ------------------------------------------------------------------------
x: `The anti-magic fix also magically fixed an if-statement bug that caused us to only show *one* of auth'd, expired, or "you haven't auth'd anything yet". #bugfix`,
l: ["https://x.com/beemuvi/status/1902870740363587986",
"https://github.com/beeminder/beeminder/pull/5204"],
e: "2025-03-20",
s: "Probably this ought to have been obvious, but code reviews are hard, my friends."
}, { // ------------------------------------------------------------------------
x: `Also in the Apps&API tab of Settings, we made the autodata integration logos and names look better at small screen sizes`,
l: ["https://x.com/beemuvi/status/1903210671241875457",
"https://github.com/beeminder/beeminder/pull/5204"],
d: "2025-03-19",
e: "2025-03-21",
}, { // ------------------------------------------------------------------------
x: `Another style improvement: we fixed up the whitespace in the Unauth'd and Expired sections so it's distributed evenly`,
l: ["https://x.com/beemuvi/status/1903210938758734302",
"https://github.com/beeminder/beeminder/issues/4845",
"https://github.com/beeminder/beeminder/pull/5204"],
d: "2025-03-19",
e: "2025-03-21",
}, { // ------------------------------------------------------------------------
x: `Finally, we made the layout responsive so it switches to a two-column layout at small enough screen sizes`,
l: ["https://x.com/beemuvi/status/1903210984669597719",
"https://github.com/beeminder/beeminder/pull/5204"],
d: "2025-03-19",
e: "2025-03-21",
}, { // ------------------------------------------------------------------------
x: `Fixed an alignment problem w/ the "Apps you have authorized to access your beeswax" section that we introduced in the previous batch of UVIs. #css #bugfix #zomb`,
l: ["https://x.com/beemuvi/status/1907220503267582278",
"https://github.com/beeminder/beeminder/pull/5206"],
d: "2025-03-20",
e: "2025-04-01",
}, { // ------------------------------------------------------------------------
x: `Changed the syling of the list of expired services and we now let you either re-auth or delete the service`,
l: ["https://x.com/beemuvi/status/1907576815654441415",
"https://github.com/beeminder/beeminder/issues/4845",
"https://github.com/beeminder/beeminder/pull/5206"],
d: "2025-03-20",
e: "2025-04-02",
}, { // ------------------------------------------------------------------------
x: `Made the spacing/alignment of "Add another service" nicer by giving everything a consistent width, plus some vertical space between sections`,
l: ["https://x.com/beemuvi/status/1907576934663688214",
"https://github.com/beeminder/beeminder/issues/4845",
"https://github.com/beeminder/beeminder/pull/5206"],
d: "2025-03-20",
e: "2025-04-02",
}, { // ------------------------------------------------------------------------
x: `Finally, we adjusted the growing/shrinking of columns in the "Authorized" and "Expired" sections to use whitespace better and wrap text less`,
l: ["https://x.com/beemuvi/status/1907944873027842089",
"https://github.com/beeminder/beeminder/issues/4845",
"https://github.com/beeminder/beeminder/pull/5206"],
d: "2025-03-20",
e: "2025-04-03",
}, /* --------------------------------------------------------- end 2025mar */ ]
batches['2025apr'] = [{
}, { // ------------------------------------------------------------------------
f: true,
x: `Official launch of our Postminder autodata integration, with new Discourse logo, nicer landing page, and inclusion in the integrations gallery`,
l: ["https://x.com/beemuvi/status/1908259775303082465",
"https://blog.beeminder.com/postminder"],
e: "2025-04-04",
}, { // ------------------------------------------------------------------------
x: `Help docs: New article for our Postminder integration`,
l: ["https://x.com/beemuvi/status/1908259967179874730",
"https://help.beeminder.com/article/368-postminder"],
e: "2025-04-04",
}, { // ------------------------------------------------------------------------
x: `Loophole closing: If you try to create goals via the API when you're in the "deadbeat" state (failed payment method), it now gives an error`,
l: ["https://x.com/beemuvi/status/1909367794728153577",
"https://github.com/beeminder/beeminder/issues/1978",
"https://github.com/beeminder/beeminder/pull/5214"],
d: "2025-04-07",
e: "2025-04-07",
}, { // ------------------------------------------------------------------------
x: `We introduced a syntax error that caused email reminders for Curlminder (aka Curlex), Fatebook, Oura, and Wakatime autodata goals to fail to send. #bugfix #zomb`,
l: ["https://x.com/beemuvi/status/1909757623957917886",
"https://github.com/beeminder/beeminder/issues/5216",
"https://github.com/beeminder/beeminder/pull/5215"],
d: "2025-04-04",
e: "2025-04-08",
s: "See `cute_reminder` for autodata reminders. Possibly broken ever since the Wakatime integration.",
}, { // ------------------------------------------------------------------------
x: `And a tiny set of users (who managed to have the SMS bot checkbox checked but had a blank phone number) were failing to get any reminders of any kind. #bugfix`,
l: ["https://x.com/beemuvi/status/1910117505328357769",
"https://github.com/beeminder/beeminder/issues/5220"],
d: "2025-04-04",
e: "2025-04-09",
s: "There's some followon work to robustify and fix things, but the direct fix for the users who weren't getting their alerts was just a database update. Total affected was between 5 and 8.",
}, { // ------------------------------------------------------------------------
x: `Restarting a goal that hit its end date was yielding a new end date of +1.5 years. Now we correctly put the default end date at 2099, ie open-ended. #bugfix`,
l: ["https://x.com/beemuvi/status/1910118544601489912",
"https://github.com/beeminder/beeminder/issues/4049",
"https://github.com/beeminder/beeminder/pull/5207"],
d: "2025-03-21",
e: "2025-04-09",
}, { // ------------------------------------------------------------------------
x: `Help docs: New article, "What happens when I reach my goal total / end date?" because users asked and we didn't have it in one place to search for or link to`,
l: ["https://x.com/beemuvi/status/1910481082199511163",
"https://help.beeminder.com/article/367-what-happens-when-i-reach-my-goal-total-end-date"],
e: "2025-04-10",
}, { // ------------------------------------------------------------------------
x: `Help docs: Attempted to ameliorate confusion about the Metaminder integration in that article, plus tweaks to 5 other autodata articles`,
l: ["https://x.com/beemuvi/status/1910781955836404028",
"https://help.beeminder.com/article/323-metaminder",
"https://help.beeminder.com/article/83-habitica",
"https://help.beeminder.com/article/86-ifttt",
"https://help.beeminder.com/article/338-lichess",
"https://help.beeminder.com/article/318-make-formerly-integromat",
"https://help.beeminder.com/article/352-manifold"],
e: "2025-04-11",
}, { // ------------------------------------------------------------------------
x: `Help docs: Added a bit of a troubleshooting note to the Intend autodata article, a solicitation of new metrics in the Oura one, plus tweaks in 3 others`,
l: ["https://x.com/beemuvi/status/1910783188949176451",
"https://help.beeminder.com/article/85-intend",
"https://help.beeminder.com/article/361-oura",
"https://help.beeminder.com/article/291-pocket",
"https://help.beeminder.com/article/292-project-euler",
"https://help.beeminder.com/article/347-readwise-reader"],
e: "2025-04-11",
}, { // ------------------------------------------------------------------------
x: `Help docs: Replaced the screenshots in the Postminder article to reflect the final version that supports arbitrary Discourse fora`,
l: ["https://x.com/beemuvi/status/1911877942420119898",
"https://help.beeminder.com/article/368-postminder"],
e: "2025-04-14",
}, { // ------------------------------------------------------------------------
x: `Help docs: The RescueTime autodata integration article now documents the slight delay we have in derailing RescueTime goals`,
l: ["https://x.com/beemuvi/status/1912293947936063859",
"https://help.beeminder.com/article/76-rescuetime",
"https://doc.bmndr.co/freshat"],
e: "2025-04-15",
}, { // ------------------------------------------------------------------------
x: `Our freeCodeCamp autodata integration briefly broke due to an API change on their end. We got approval for a workaround, now put in place! #bugfix #zomb`,
l: ["https://x.com/beemuvi/status/1912653410513699159",
"https://github.com/beeminder/beeminder/issues/5236",
"https://github.com/beeminder/beeminder/pull/5233"],
d: "2025-04-16",
e: "2025-04-16",
}, { // ------------------------------------------------------------------------
x: `Help docs: Added more about syncing to the Skritter autodata article, plus a couple links added to the RSSminder and Runkeeper articles`,
l: ["https://x.com/beemuvi/status/1912653488892588459",
"https://help.beeminder.com/article/89-skritter",
"https://help.beeminder.com/article/331-rssminder",
"https://help.beeminder.com/article/77-runkeeper"],
e: "2025-04-16",
}, { // ------------------------------------------------------------------------
x: `Help docs: Added a note to the TaskRatchet autodata article about how to not count tasks as a +1 on Beeminder until they're completed on TaskRatchet`,
l: ["https://x.com/beemuvi/status/1913019198059823527",
"https://help.beeminder.com/article/289-taskratchet"],
e: "2025-04-17",
}, { // ------------------------------------------------------------------------
x: `We weren't tracking when you change your phone number, so you could wind up with an 'active' number that you hadn't actually opted in to the SMS bot. #bugfix`,
l: ["https://x.com/beemuvi/status/1913379713453838413",
"https://github.com/beeminder/beeminder/issues/5223",
"https://github.com/beeminder/beeminder/pull/5235"],
d: "2025-04-18",
e: "2025-04-18",
s: "We thought we were, but there was a bug with assignment so that we weren't actually updating the 'phone number state', which meant once you had activated the bot once, you could change or even delete your number and we'd still have it marked down as 'active'",
}, { // ------------------------------------------------------------------------
x: `Soft launch of our Maayot autodata integration for Chinese language learning, at the still-slightly-secret URL beeminder.com/maayot`,
l: ["https://x.com/beemuvi/status/1914467551574368664",
"https://github.com/beeminder/integrations/issues/70",
"https://github.com/beeminder/beeminder/issues/5191",
"https://github.com/beeminder/beeminder/pull/5239"],
d: "2025-04-21",
}, { // ------------------------------------------------------------------------
x: `Help docs: Added a troubleshooting section to the StoryGraph autodata integration article and clarified a point about changing projects in the Todoist article`,
l: ["https://x.com/beemuvi/status/1914468070556578034",
"https://help.beeminder.com/article/300-the-storygraph",
"https://help.beeminder.com/article/79-todoist"],
e: "2025-04-21",
}, { // ------------------------------------------------------------------------
x: `Help docs: Additions/tweaks to the Toggl Track autodata integration article (re: other Toggl software, etc) plus tiny tweaks to 5 other articles`,
l: ["https://x.com/beemuvi/status/1914824457526649059",
"https://help.beeminder.com/article/155-toggl",
"https://help.beeminder.com/article/116-slack",
"https://help.beeminder.com/article/84-sleep-as-android",
"https://help.beeminder.com/article/368-postminder",
"https://help.beeminder.com/article/112-sms",
"https://help.beeminder.com/article/281-strava"],
e: "2025-04-22",
}, { // ------------------------------------------------------------------------
x: `Help docs: Rearranged the FAQ for WakaTime to put higher-frequency questions on top, plus small tweaks for clarity to 4 other articles`,
l: ["https://x.com/beemuvi/status/1914826975816176061",
"https://help.beeminder.com/article/357-wakatime",
"https://help.beeminder.com/article/78-trello",
"https://help.beeminder.com/article/340-trydeepwork",
"https://help.beeminder.com/article/293-twitter",
"https://help.beeminder.com/article/88-urlminder"],
e: "2025-04-22",
}, { // ------------------------------------------------------------------------
f: true,
x: `Official launch of our Maayot autodata integration, with fancy landing page and Maayot's logo on the Beeminder front page, plus blog post`,
l: ["https://x.com/beemuvi/status/1915187506343227407",
"https://blog.beeminder.com/maayot",
"https://x.com/bmndr/status/1915184408640004271",
"https://github.com/beeminder/integrations/issues/70",
"https://github.com/beeminder/beeminder/issues/5191"],
d: "2025-04-22",
e: "2025-04-23",
}, { // ------------------------------------------------------------------------
x: `Tiny #bugfix with the Maayot integration: if we can't find your Maayot account when you're setting up your goal, we actually tell you that`,
l: ["https://x.com/beemuvi/status/1915187914071589255",
"https://github.com/beeminder/beeminder/issues/5191"],
e: "2025-04-23",
}, { // ------------------------------------------------------------------------
x: `Help docs: New article for the Maayot autodata integration`,
l: ["https://x.com/beemuvi/status/1915188131097383145",
"https://help.beeminder.com/article/369-maayot"],
e: "2025-04-23",
}, { // ------------------------------------------------------------------------
x: `Added a line to the email about failed charges to let people know they can manually force a retry of charges from the Payments page`,
l: ["https://x.com/beemuvi/status/1915518113057218824",
"https://github.com/beeminder/beeminder/issues/5238",
"https://github.com/beeminder/beeminder/pull/5242"],
e: "2025-04-24",
}, { // ------------------------------------------------------------------------
x: `Help docs: Todoist integration article mentions combining projects/tags with boolean-OR; plus rephrasings, rearranging, new links, and more for Withings`,
l: ["https://x.com/beemuvi/status/1915888400479227998",
"https://help.beeminder.com/article/79-todoist",
"https://help.beeminder.com/article/90-withings"],
e: "2025-04-25",
}, { // ------------------------------------------------------------------------
x: `Closed a loophole that allowed you to end a goal within the akrasia horizon in some sneaky convoluted cases by messing with the graph editor`,
l: ["https://x.com/beemuvi/status/1915910283887063215",
"https://github.com/beeminder/beeminder/issues/1930",
"https://github.com/beeminder/beeminder/pull/5237"],
d: "2025-04-25",
e: "2025-04-25",
}, { // ------------------------------------------------------------------------
x: "The StoryGraph integration was broken for several days. Related to a DDOS attack they were experiencing, but we got them to whitelist us, phew!",
l: ["https://x.com/beemuvi/status/1916993551227097358",
"https://github.com/beeminder/beeminder/pull/5246"],
d: "2025-04-25",
e: "2025-04-28",
s: "added a descriptive user-agent header to the requests"
}, { // ------------------------------------------------------------------------
x: `Help docs: Added a "Related Integrations" section to the language-learning integrations so they all link to each other`,
l: ["https://x.com/beemuvi/status/1916993739199025165",
"https://help.beeminder.com/article/369-maayot"],
d: "2025-04-28",
e: "2025-04-28",
}, { // ------------------------------------------------------------------------
x: `Help docs: Clarifications and cross-links on the "how do I quit a goal?" article based on user confusion about goals about to end`,
l: ["https://x.com/beemuvi/status/1917361582847521251",
"https://help.beeminder.com/article/44-how-do-i-quit-a-goal"],
e: "2025-04-29",
}, { // ------------------------------------------------------------------------
x: `Help docs: Added feedback solicitation on new metrics for the YNAB article plus readability tweaks to the Zapier and Slack integration articles`,
l: ["https://x.com/beemuvi/status/1917361704608137469",
"https://help.beeminder.com/article/359-ynab",
"https://help.beeminder.com/article/87-zapier",
"https://help.beeminder.com/article/116-slack"],
e: "2025-04-29",
}, { // ------------------------------------------------------------------------
}, { // ------------------------------------------------------------------------
x: `Another #bugfix with the Maayot integration: pasting a bad URL (either nonsense or doesn't point to your Maayot settings) gives a nice error instead of silence`,
l: ["https://x.com/beemuvi/status/1917729823268692030",
"https://github.com/beeminder/beeminder/pull/5251"],
s: `It says "that URL format looks sus"`,
d: "2025-04-30",
e: "2025-04-30",
}, { // ------------------------------------------------------------------------
x: `Yet more error checking for the Maayot integration: We don't let you choose more than 1 story per day as your commitment since that's the most Maayot offers`,
l: ["https://x.com/beemuvi/status/1917729922027773976",
"https://github.com/beeminder/beeminder/pull/5251"],
d: "2025-04-30",
e: "2025-04-30",
}, { // ------------------------------------------------------------------------
x: `Also in Maayot goal setup: some error messages were flashing several times and/or disappearing too soon. Also nixed an errant "Euler" from a tooltip. #bugfix`,
l: ["https://x.com/beemuvi/status/1917730014868693206",
"https://github.com/beeminder/beeminder/pull/5251"],
d: "2025-04-30",
e: "2025-04-30",
}, { // ------------------------------------------------------------------------
x: `One more for Maayot: Clicking the stepper up or down to change the rate you're committing to increments by ±1/7 so it's easy to pick, say, 2 per week`,
l: ["https://x.com/beemuvi/status/1917730103519502775",
"https://github.com/beeminder/beeminder/pull/5251"],
d: "2025-04-30",
e: "2025-04-30",
}, /* --------------------------------------------------------- end 2025apr */ ]
batches['2025may'] = [{
}, { // ------------------------------------------------------------------------
x: `Not specific to Maayot, the up/down stepper buttons no longer ever allow you to step past whatever the upper/lower bounds are. #bugfix`,
l: ["https://x.com/beemuvi/status/1918377397923221608",
"https://github.com/beeminder/beeminder/pull/5251"],
d: "2025-04-30",
e: "2025-05-02",
}, { // ------------------------------------------------------------------------
x: `Grandpatricide! The year of grandfathering for the last Beemium price hike ($50->$64) ended and we emailed those affected. Time for another price hike?`,
l: ["https://x.com/beemuvi/status/1918378106517442639",
"https://github.com/beeminder/beeminder/issues/4153",
"https://github.com/beeminder/beeminder/commit/90a4edc7690e4d2d73824447aa875dfb63b140e9"],
d: "2025-05-02",
}, { // ------------------------------------------------------------------------
x: `Help docs: More clarifications on Beeminder login for the iOS app article, plus smaller clarifications and tweaks for 3 other articles`,
l: ["https://x.com/beemuvi/status/1919541589573304835",
"https://help.beeminder.com/article/60-ios-app",
"https://help.beeminder.com/article/48-how-do-i-delete-my-account",
"https://help.beeminder.com/article/47-how-do-i-delete-a-goal",
"https://help.beeminder.com/article/46-what-happens-to-an-archived-goal"],
e: "2025-05-05",
}, { // ------------------------------------------------------------------------
x: `Help docs: Added a note to the Fitbit article about using Fitbit as a bridge to Beeminder from other services, plus links to other bridging integrations`,
l: ["https://x.com/beemuvi/status/1919541715523838412",
"https://help.beeminder.com/article/11-fitbit"],
e: "2025-05-05",
}, { // ------------------------------------------------------------------------
x: `Help docs: Added a screenshot and details about the due-by table to the Android app (Beedroid) article, much asked-about in support`,
l: ["https://x.com/beemuvi/status/1919896411560440176",
"https://help.beeminder.com/article/62-android-app#dueby"],
e: "2025-05-06",
}, { // ------------------------------------------------------------------------
x: `We made a new flash banner warning you when your Beeminder timezone doesn't match your browser's timezone (displays once a day)`,
l: ["https://x.com/beemuvi/status/1919904577270223063",
"https://github.com/beeminder/beeminder/issues/3069",
"https://github.com/beeminder/beeminder/pull/5248"],
d: "2025-05-06",
e: "2025-05-06",
}, { // ------------------------------------------------------------------------
x: `Help docs: Add a Related Integrations section to the TagTime article plus a link to a new community-driven Android implementation`,
l: ["https://x.com/beemuvi/status/1920265327788573003",
"https://help.beeminder.com/article/64-tagtime"],
d: "2025-05-07",
e: "2025-05-07",
}, { // ------------------------------------------------------------------------
x: `There were a couple graph images on http://beeminder.com/overview that still showed yellow brick road style graphs. Modernized them to bright red line versions.`,
l: ["https://x.com/beemuvi/status/1920268626327650735",
"https://github.com/beeminder/beeminder/issues/4074",
"https://github.com/beeminder/beeminder/pull/5258"],
d: "2025-05-07",
e: "2025-05-07",
}, { // ------------------------------------------------------------------------
x: `Modernized the screenshot for setting a starting stakes and pledge cap on http://beeminder.com/overview`,
l: ["https://x.com/beemuvi/status/1920626895302926809",
"https://github.com/beeminder/beeminder/pull/5258"],
e: "2025-05-08",
}, { // ------------------------------------------------------------------------
x: `Updated the webcopy on beeminder.com/overview to talk about pledge caps rather than "first derail typically free" which is less true now`,
l: ["https://x.com/beemuvi/status/1920627042728783966",
"https://github.com/beeminder/beeminder/pull/5258"],
e: "2025-05-08",
}, { // ------------------------------------------------------------------------
x: `The rosy line is deprecated and now turned off by default for new graphs; we have plans for something better!`,
l: ["https://x.com/beemuvi/status/1920963752913932535",
"https://github.com/beeminder/road/issues/268",
"https://github.com/beeminder/beeminder/pull/5258"],
e: "2025-05-09",
}, { // ------------------------------------------------------------------------
x: `UVI#4572 got most of these but we finally got the stragglers: modernized the example graph images on the GmailZero and Withings landing pages`,
l: ["https://x.com/beemuvi/status/1920963932228813292",
"https://github.com/beeminder/beeminder/issues/3814",
"https://github.com/beeminder/beeminder/pull/5258"],
e: "2025-05-09",
}, { // ------------------------------------------------------------------------
x: `Updated the example goals section of beeminder.com/overview to fix whitespace usage (it was sqwunched together on the left, not using available space). #css`,
l: ["https://x.com/beemuvi/status/1922076408496508997",
"https://github.com/beeminder/beeminder/pull/5261#event-17597626304",
"https://github.com/beeminder/beeminder/issues/4074"],
d: `2025-05-09`,
e: `2025-05-12`,
s: `Before/after shots in the PR`,
}, { // ------------------------------------------------------------------------
x: `Shortened the "fitness & training" header to just "fitness". It was slightly redundant, and also wrapped at small screen sizes messing up the layout. #css`,
l: ["https://x.com/beemuvi/status/1922076489136079268",
"https://github.com/beeminder/beeminder/pull/5261#event-17597626304",
"https://github.com/beeminder/beeminder/issues/4074"],
d: `2025-05-09`,
e: `2025-05-12`,
s: `Before/after shots in the PR`,
}, { // ------------------------------------------------------------------------
x: `For group goals, we now send SMS reminders to any groupie with an active phone number for SMS (if the owner chooses SMS reminders)`,
l: ["https://x.com/beemuvi/status/1922441518003929558",
"https://github.com/beeminder/beeminder/pull/5264"],
e: "2025-05-13",
}, { // ------------------------------------------------------------------------
x: `And we put more helpful info in the "this is a fallback for your SMS alerts" blurb in the fallback email in case SMS fails`,
l: ["https://x.com/beemuvi/status/1922441556071506384",
"https://github.com/beeminder/beeminder/pull/5264"],
e: "2025-05-13",
}, { // ------------------------------------------------------------------------
x: `Oops, we broke the SMS reminders on Monday and were always falling back to email. #zombie #bugfix`,
l: ["https://x.com/beemuvi/status/1922803215529111798",
"https://github.com/beeminder/beeminder/pull/5268"],
d: "2025-05-14",
s: `This was due to a dumb syntax error using assignment '=' instead of comparison '=='. Mortifying."`,
}, { // ------------------------------------------------------------------------
x: `Help docs: Moved up the definition of akrasia in the article on the akrasia horizon and restructured accordingly, plus tweaks to 2 other articles`,
l: ["https://x.com/beemuvi/status/1922803301692715208",
"https://help.beeminder.com/article/45-what-is-the-akrasia-horizon",
"https://help.beeminder.com/article/321-ios-app-beta-testing",
"https://help.beeminder.com/article/158-android-app-beta-testing"],
e: "2025-05-14",
}, { // ------------------------------------------------------------------------
x: `More robust fallback for SMS reminder failures; we now always fall back to email due to any problems on Beeminder's side at least (follow-on to UVI#5164)`,
l: ["https://x.com/beemuvi/status/1923165423433875803",
"https://github.com/beeminder/beeminder/pull/5264",
"https://github.com/beeminder/beeminder/issues/4378"],
e: "2025-05-15",
s: `Case where it failed: user had SMS turned on, but no phone number, and the job freaked out and failed. Now the if-statements are more thorough so it would only raise an error if Twilio returns an error (or times out or somesuch). Which we also ought to be more robust to.`,
}, { // ------------------------------------------------------------------------
x: `The "renew" link for expired services could cause you to wind up with two copies of the service stored (and then we wouldn't use the new/correct one) #bugfix`,
l: ["https://x.com/beemuvi/status/1923165735695618122",
"https://github.com/beeminder/beeminder/issues/5255",
"https://github.com/beeminder/beeminder/pull/5270"],
d: "2025-05-14",
e: "2025-05-15",
s: `Reported as Lichess dups, but could apply to any service showing up in the expired list`,
}, { // ------------------------------------------------------------------------
x: `Help docs: Added more arguments and links to our article about Beeminder vs StickK, like how Beeminder can be your personal Pigouvian tax`,
l: ["https://x.com/beemuvi/status/1923499461243986290",
"https://help.beeminder.com/article/49-why-should-i-use-beeminder-over-stickk",
"https://blog.beeminder.com/pigou"],
e: "2025-05-16",
}, { // ------------------------------------------------------------------------
x: `Help docs: Edited how we talk about Beemium (superusers only) to not be mistakable for upselling, plus a typo fix in the Privacy article`,
l: ["https://x.com/beemuvi/status/1923499990879699264",
"https://help.beeminder.com/article/114-can-i-specify-a-beneficiary-for-my-derailments",
"https://help.beeminder.com/article/102-privacy"],
e: "2025-05-16",
}, { // ------------------------------------------------------------------------
x: `For the dialog box where you explicitly say you want to archive a derailed goal and accept the charge immediately, we added "this is non-refundable"`,
l: ["https://x.com/beemuvi/status/1924605941615677918",
"https://github.com/beeminder/beeminder/issues/5271",
"https://github.com/beeminder/beeminder/pull/5272"],
d: "2025-05-19",
e: "2025-05-19",
s: `This is the insta-archive dialog which tells users "we're gonna charge you this $X right now if you click that button; email support instead if you have a problem with that". Support Czar request."`,
}, { // ------------------------------------------------------------------------
x: `The cropping of the how-it-works graph image on beeminder.com/overview was bumping into the border uglily. Now cropped nicely. #css (sort of)`,
l: ["https://x.com/beemuvi/status/1924612972036686059",
"https://github.com/beeminder/beeminder/issues/4074"],
d: "2025-05-19",
e: "2025-05-19",
}, { // ------------------------------------------------------------------------
x: `Added an example graph to the Metaminder landing page`,
l: ["https://x.com/beemuvi/status/1924976856509673477",
"https://github.com/beeminder/beeminder/issues/4074",
"https://github.com/beeminder/beeminder/issues/3814"],
e: "2025-05-20",
}, { // ------------------------------------------------------------------------
x: `More webcopy changes on beeminder.com/overview to keep up with Beeminder changes, such as customizable post-derail respite and fancier data-smoothing`,
l: ["https://x.com/beemuvi/status/1924977459516346851",
"https://github.com/beeminder/beeminder/issues/4074",
"https://blog.beeminder.com/smooth"],
e: "2025-05-20",
}, { // ------------------------------------------------------------------------
x: `Added a link to the Featured Gallery on beeminder.com/overview and made other copyedits`,
l: ["https://x.com/beemuvi/status/1925336132491030636",
"https://github.com/beeminder/beeminder/pull/5278",
"https://github.com/beeminder/beeminder/issues/4074"],
e: "2025-05-21",
}, { // ------------------------------------------------------------------------
x: `Fixed a tiny typo on the landing page of the Intend integration ("an Intend user", not "a Intend") plus more copyedit tweaks fussing with commas`,
l: ["https://x.com/beemuvi/status/1925336602014097796",
"https://github.com/beeminder/beeminder/pull/5278",
"https://github.com/beeminder/beeminder/issues/4074"],
e: "2025-05-21",
}, { // ------------------------------------------------------------------------
x: `All autodata goals now have a Settings section, for consistency, even if the specific integration doesn't implement letting you set things`,
l: ["https://x.com/beemuvi/status/1925697443104006602",
"https://github.com/beeminder/beeminder/pull/5277"],
d: "2025-05-20",
e: "2025-05-22",
s: `E.g. Strava now has a section in settings, whereas it did not before`,
}, { // ------------------------------------------------------------------------
x: `Flash banners for errors/warnings/FYIs finally wrap when the words don't fit. Phew!`,
l: ["https://x.com/beemuvi/status/1925697591485804845",
"https://github.com/beeminder/beeminder/issues/166",
"https://github.com/beeminder/beeminder/pull/5276"],
d: "2025-05-20",
e: "2025-05-22",
}, { // ------------------------------------------------------------------------
x: `Flash banners are also more responsive to screen size in that the font size is adaptive. Yay mobile-friendliness.`,
l: ["https://x.com/beemuvi/status/1925697784818159739",
"https://github.com/beeminder/beeminder/issues/166",
"https://github.com/beeminder/beeminder/pull/5276"],
d: "2025-05-20",
e: "2025-05-22",
s: "There probably exist instances where this looks demonstrably worse now, because the wrapped text will be long and crowded -- in fact could potentially overflow the banner area? So there's prolly more work to be done, but I think it's definitely an improvement to be able to see the whole message on mobile and stuff...",
}, { // ------------------------------------------------------------------------