@robbeverhelst/do 1.30.0 → 1.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/do.js +735 -643
  2. package/package.json +1 -1
package/dist/do.js CHANGED
@@ -21248,7 +21248,357 @@ var presetInstallResultSchema = exports_external.object({
21248
21248
  nodeCount: exports_external.number().int().nonnegative()
21249
21249
  });
21250
21250
  var MS_PER_DAY = 24 * 60 * 60 * 1000;
21251
- // ../../packages/schema/src/presets/catalog.ts
21251
+ // ../../packages/schema/src/presets/features/areas.ts
21252
+ var areaBundleDefs = [
21253
+ {
21254
+ key: "life-setup",
21255
+ name: "Life Setup",
21256
+ description: "Nine areas of responsibility to organise your whole life.",
21257
+ icon: "\uD83C\uDF31",
21258
+ color: "#34d399",
21259
+ areas: [
21260
+ { title: "Health", color: "green", icon: "heart-pulse" },
21261
+ { title: "Finances", color: "amber", icon: "wallet" },
21262
+ { title: "Career", color: "blue", icon: "briefcase" },
21263
+ { title: "Relationships", color: "rose", icon: "users" },
21264
+ { title: "Home", color: "teal", icon: "house" },
21265
+ { title: "Personal Growth", color: "purple", icon: "sprout" },
21266
+ { title: "Recreation", color: "amber", icon: "gamepad-2" },
21267
+ { title: "Admin", color: "slate", icon: "file-text" },
21268
+ { title: "Community", color: "red", icon: "hand-heart" }
21269
+ ]
21270
+ },
21271
+ {
21272
+ key: "student-life",
21273
+ name: "Student Life",
21274
+ description: "Keep coursework, exams and the rest of life in balance.",
21275
+ icon: "\uD83C\uDF93",
21276
+ color: "#38bdf8",
21277
+ areas: [
21278
+ { title: "Coursework", color: "blue", icon: "book-open" },
21279
+ { title: "Exams", color: "red", icon: "graduation-cap" },
21280
+ { title: "Finances", color: "amber", icon: "wallet" },
21281
+ { title: "Social", color: "rose", icon: "users" },
21282
+ { title: "Health", color: "green", icon: "heart-pulse" },
21283
+ { title: "Career Prep", color: "purple", icon: "briefcase" }
21284
+ ]
21285
+ },
21286
+ {
21287
+ key: "founder",
21288
+ name: "Founder",
21289
+ description: "The hats a founder wears, as areas to steward.",
21290
+ icon: "\uD83D\uDE80",
21291
+ color: "#a78bfa",
21292
+ areas: [
21293
+ { title: "Product", color: "purple", icon: "box" },
21294
+ { title: "Sales", color: "green", icon: "trending-up" },
21295
+ { title: "Fundraising", color: "amber", icon: "banknote" },
21296
+ { title: "Team", color: "blue", icon: "users" },
21297
+ { title: "Finances", color: "slate", icon: "wallet" },
21298
+ { title: "Personal", color: "rose", icon: "heart" }
21299
+ ]
21300
+ },
21301
+ {
21302
+ key: "new-parent",
21303
+ name: "New Parent",
21304
+ description: "Stay on top of life with a newborn.",
21305
+ icon: "\uD83C\uDF7C",
21306
+ color: "#f472b6",
21307
+ areas: [
21308
+ { title: "Baby Care", color: "rose", icon: "baby" },
21309
+ { title: "Health", color: "green", icon: "heart-pulse" },
21310
+ { title: "Home", color: "teal", icon: "house" },
21311
+ { title: "Finances", color: "amber", icon: "wallet" },
21312
+ { title: "Relationship", color: "purple", icon: "heart" },
21313
+ { title: "Self-care", color: "blue", icon: "sparkles" }
21314
+ ]
21315
+ }
21316
+ ];
21317
+ var areaPresets = areaBundleDefs.map((def) => ({
21318
+ key: def.key,
21319
+ entity: "area",
21320
+ name: def.name,
21321
+ description: def.description,
21322
+ icon: def.icon,
21323
+ color: def.color,
21324
+ category: "Life Setup",
21325
+ featured: def.key === "life-setup",
21326
+ recipe: {
21327
+ nodes: def.areas.map((area, index2) => ({
21328
+ ref: `area-${index2}`,
21329
+ kind: "area",
21330
+ title: area.title,
21331
+ color: area.color,
21332
+ icon: area.icon
21333
+ }))
21334
+ }
21335
+ }));
21336
+
21337
+ // ../../packages/schema/src/presets/features/automations.ts
21338
+ var automationPresets = [
21339
+ {
21340
+ key: "auto-low-stock-groceries",
21341
+ entity: "automation",
21342
+ name: "Low stock \u2192 add to groceries",
21343
+ description: "When an inventory item runs low, make a task to restock it.",
21344
+ icon: "\uD83E\uDD6B",
21345
+ color: "#34d399",
21346
+ category: "Automations",
21347
+ recipe: {
21348
+ nodes: [
21349
+ {
21350
+ ref: "automation",
21351
+ kind: "automation",
21352
+ name: "Low stock \u2192 add to groceries",
21353
+ trigger: { entity: "inventory", action: "updated" },
21354
+ condition: { path: "value.lowStock", op: "eq", value: true },
21355
+ action: { type: "create_task", title: "Restock low groceries", priority: "medium" }
21356
+ }
21357
+ ]
21358
+ }
21359
+ },
21360
+ {
21361
+ key: "auto-habit-missed-nudge",
21362
+ entity: "automation",
21363
+ name: "Habit missed 3\xD7 \u2192 nudge",
21364
+ description: "Get a gentle nudge when you miss a habit three times.",
21365
+ icon: "\uD83D\uDD14",
21366
+ color: "#fb7185",
21367
+ category: "Automations",
21368
+ recipe: {
21369
+ nodes: [
21370
+ {
21371
+ ref: "automation",
21372
+ kind: "automation",
21373
+ name: "Habit missed 3\xD7 \u2192 nudge",
21374
+ trigger: { entity: "habits", action: "updated" },
21375
+ condition: { path: "value.missedStreak", op: "eq", value: 3 },
21376
+ action: {
21377
+ type: "notify",
21378
+ title: "Don't break the chain",
21379
+ body: "You've missed this habit three times \u2014 jump back in today."
21380
+ }
21381
+ }
21382
+ ]
21383
+ }
21384
+ },
21385
+ {
21386
+ key: "auto-task-overdue-bump",
21387
+ entity: "automation",
21388
+ name: "Task overdue \u2192 bump priority",
21389
+ description: "When a task goes overdue, raise a high-priority follow-up.",
21390
+ icon: "\u23F0",
21391
+ color: "#f59e0b",
21392
+ category: "Automations",
21393
+ recipe: {
21394
+ nodes: [
21395
+ {
21396
+ ref: "automation",
21397
+ kind: "automation",
21398
+ name: "Task overdue \u2192 bump priority",
21399
+ trigger: { entity: "tasks", action: "updated" },
21400
+ condition: { path: "value.overdue", op: "eq", value: true },
21401
+ action: { type: "create_task", title: "Reprioritise overdue task", priority: "high" }
21402
+ }
21403
+ ]
21404
+ }
21405
+ },
21406
+ {
21407
+ key: "auto-weekly-review",
21408
+ entity: "automation",
21409
+ name: "Weekly review reminder",
21410
+ description: "Reschedule your weekly review a week out each time you finish it.",
21411
+ icon: "\uD83D\uDDD3\uFE0F",
21412
+ color: "#34d399",
21413
+ category: "Automations",
21414
+ recipe: {
21415
+ nodes: [
21416
+ {
21417
+ ref: "automation",
21418
+ kind: "automation",
21419
+ name: "Weekly review reminder",
21420
+ trigger: { entity: "tasks", action: "updated" },
21421
+ condition: { path: "value.title", op: "contains", value: "Weekly Review" },
21422
+ action: { type: "schedule_task", offsetMinutes: 10080 }
21423
+ }
21424
+ ]
21425
+ }
21426
+ },
21427
+ {
21428
+ key: "auto-finished-book-rate",
21429
+ entity: "automation",
21430
+ name: "Finished book \u2192 rate it",
21431
+ description: "When you finish a book, make a task to rate it.",
21432
+ icon: "\uD83D\uDCDA",
21433
+ color: "#f59e0b",
21434
+ category: "Automations",
21435
+ recipe: {
21436
+ nodes: [
21437
+ {
21438
+ ref: "automation",
21439
+ kind: "automation",
21440
+ name: "Finished book \u2192 rate it",
21441
+ trigger: { entity: "books", action: "updated" },
21442
+ condition: { path: "value.status", op: "eq", value: "finished" },
21443
+ action: {
21444
+ type: "create_task",
21445
+ title: "Rate the book you just finished",
21446
+ priority: "low"
21447
+ }
21448
+ }
21449
+ ]
21450
+ }
21451
+ }
21452
+ ];
21453
+
21454
+ // ../../packages/schema/src/presets/features/challenges.ts
21455
+ var challengePresetDefs = [
21456
+ {
21457
+ key: "challenge-75-hard",
21458
+ name: "75 Hard",
21459
+ description: "75 days of two workouts, water, reading and a clean diet.",
21460
+ icon: "\uD83D\uDD25",
21461
+ color: "#fb7185",
21462
+ metric: "habits.checked_in",
21463
+ target: 75,
21464
+ durationDays: 75
21465
+ },
21466
+ {
21467
+ key: "challenge-no-sugar",
21468
+ name: "30-Day No Sugar",
21469
+ description: "Cut added sugar for 30 days.",
21470
+ icon: "\uD83C\uDF6D",
21471
+ color: "#f472b6",
21472
+ metric: "habits.checked_in",
21473
+ target: 30,
21474
+ durationDays: 30
21475
+ },
21476
+ {
21477
+ key: "challenge-couch-to-5k",
21478
+ name: "Couch-to-5K",
21479
+ description: "Run your first 5K in nine weeks.",
21480
+ icon: "\uD83C\uDFC3",
21481
+ color: "#34d399",
21482
+ metric: "habits.checked_in",
21483
+ target: 27,
21484
+ durationDays: 63
21485
+ },
21486
+ {
21487
+ key: "challenge-dry-january",
21488
+ name: "Dry January",
21489
+ description: "An alcohol-free month to reset.",
21490
+ icon: "\uD83D\uDEAB",
21491
+ color: "#38bdf8",
21492
+ metric: "habits.checked_in",
21493
+ target: 31,
21494
+ durationDays: 31
21495
+ },
21496
+ {
21497
+ key: "challenge-meditation",
21498
+ name: "31-Day Meditation",
21499
+ description: "Sit every day for a month.",
21500
+ icon: "\uD83E\uDDD8",
21501
+ color: "#a78bfa",
21502
+ metric: "habits.checked_in",
21503
+ target: 31,
21504
+ durationDays: 31
21505
+ },
21506
+ {
21507
+ key: "challenge-no-spend",
21508
+ name: "No-Spend Month",
21509
+ description: "Thirty days of buying only the essentials.",
21510
+ icon: "\uD83D\uDCB8",
21511
+ color: "#f59e0b",
21512
+ metric: "habits.checked_in",
21513
+ target: 30,
21514
+ durationDays: 30
21515
+ }
21516
+ ];
21517
+ var challengePresets = challengePresetDefs.map((def) => ({
21518
+ key: def.key,
21519
+ entity: "challenge",
21520
+ name: def.name,
21521
+ description: def.description,
21522
+ icon: def.icon,
21523
+ color: def.color,
21524
+ category: "Challenges",
21525
+ featured: def.key === "challenge-couch-to-5k",
21526
+ recipe: {
21527
+ nodes: [
21528
+ {
21529
+ ref: "challenge",
21530
+ kind: "challenge",
21531
+ title: def.name,
21532
+ description: def.description,
21533
+ metric: def.metric,
21534
+ target: def.target,
21535
+ durationDays: def.durationDays
21536
+ }
21537
+ ]
21538
+ }
21539
+ }));
21540
+
21541
+ // ../../packages/schema/src/presets/features/contacts.ts
21542
+ var contactCircleDefs = [
21543
+ {
21544
+ key: "inner-circle",
21545
+ name: "Inner Circle",
21546
+ description: "The people you check in with weekly.",
21547
+ cadence: "every week",
21548
+ tag: "1w"
21549
+ },
21550
+ {
21551
+ key: "close-friends",
21552
+ name: "Close Friends",
21553
+ description: "Friends worth a message every couple of weeks.",
21554
+ cadence: "every 2 weeks",
21555
+ tag: "2w"
21556
+ },
21557
+ {
21558
+ key: "keep-warm",
21559
+ name: "Keep Warm",
21560
+ description: "People to keep warm with a monthly hello.",
21561
+ cadence: "every month",
21562
+ tag: "1m"
21563
+ },
21564
+ {
21565
+ key: "network",
21566
+ name: "Network",
21567
+ description: "Professional contacts to touch base with quarterly.",
21568
+ cadence: "every 3 months",
21569
+ tag: "3m"
21570
+ },
21571
+ {
21572
+ key: "birthday-only",
21573
+ name: "Birthday Only",
21574
+ description: "People you reach out to on their birthday.",
21575
+ cadence: "on their birthday",
21576
+ tag: "birthday"
21577
+ }
21578
+ ];
21579
+ var contactPresets = contactCircleDefs.map((def) => ({
21580
+ key: def.key,
21581
+ entity: "contact",
21582
+ name: def.name,
21583
+ description: def.description,
21584
+ icon: "\uD83D\uDC65",
21585
+ color: "#38bdf8",
21586
+ category: "Keep in Touch",
21587
+ featured: def.key === "inner-circle",
21588
+ recipe: {
21589
+ nodes: [
21590
+ {
21591
+ ref: "contact",
21592
+ kind: "contact",
21593
+ title: def.name,
21594
+ notes: `Keep-in-touch circle \u2014 reach out ${def.cadence}. Rename to a person and set their cadence.`,
21595
+ tags: ["keep-in-touch", def.tag]
21596
+ }
21597
+ ]
21598
+ }
21599
+ }));
21600
+
21601
+ // ../../packages/schema/src/presets/features/habits.ts
21252
21602
  var habitPresets = [
21253
21603
  {
21254
21604
  key: "drink-water",
@@ -21430,263 +21780,199 @@ var habitPresets = [
21430
21780
  }
21431
21781
  },
21432
21782
  {
21433
- key: "no-smoking",
21783
+ key: "weight",
21434
21784
  entity: "habit",
21435
- name: "No Smoking",
21436
- description: "Stay smoke-free, one day at a time.",
21437
- icon: "\uD83D\uDEAD",
21438
- color: "#fb7185",
21439
- category: "Abstinence",
21440
- displayKind: "abstinence-streak",
21785
+ name: "Weight",
21786
+ description: "Log your weight to watch the trend.",
21787
+ icon: "\u2696\uFE0F",
21788
+ color: "#38bdf8",
21789
+ category: "Health",
21790
+ displayKind: "trend-chart",
21441
21791
  recipe: {
21442
21792
  nodes: [
21443
21793
  {
21444
21794
  ref: "habit",
21445
21795
  kind: "habit",
21446
- title: "No Smoking",
21447
- measurementType: "negative",
21448
- targetValue: 0,
21796
+ title: "Weight",
21797
+ measurementType: "quantitative",
21798
+ targetValue: 70,
21799
+ targetUnit: "kg",
21449
21800
  period: "day"
21450
21801
  }
21451
21802
  ]
21452
21803
  }
21453
21804
  },
21454
21805
  {
21455
- key: "no-alcohol",
21806
+ key: "mood",
21456
21807
  entity: "habit",
21457
- name: "No Alcohol",
21458
- description: "Keep the day alcohol-free.",
21459
- icon: "\uD83D\uDEAB",
21460
- color: "#fb7185",
21461
- category: "Abstinence",
21462
- displayKind: "abstinence-streak",
21808
+ name: "Mood",
21809
+ description: "Rate your mood 1\u20135 and track how it moves.",
21810
+ icon: "\uD83D\uDE42",
21811
+ color: "#a78bfa",
21812
+ category: "Mindfulness",
21813
+ displayKind: "trend-chart",
21463
21814
  recipe: {
21464
21815
  nodes: [
21465
21816
  {
21466
21817
  ref: "habit",
21467
21818
  kind: "habit",
21468
- title: "No Alcohol",
21469
- measurementType: "negative",
21470
- targetValue: 0,
21819
+ title: "Mood",
21820
+ measurementType: "quantitative",
21821
+ targetValue: 5,
21822
+ targetUnit: "/5",
21471
21823
  period: "day"
21472
21824
  }
21473
21825
  ]
21474
21826
  }
21475
21827
  },
21476
21828
  {
21477
- key: "no-sugar",
21829
+ key: "sleep-duration",
21478
21830
  entity: "habit",
21479
- name: "No Sugar",
21480
- description: "Skip the added sugar today.",
21481
- icon: "\uD83C\uDF6D",
21482
- color: "#fb7185",
21483
- category: "Abstinence",
21484
- displayKind: "abstinence-streak",
21831
+ name: "Sleep",
21832
+ description: "Log hours slept and watch the trend.",
21833
+ icon: "\uD83D\uDE34",
21834
+ color: "#818cf8",
21835
+ category: "Health",
21836
+ displayKind: "trend-chart",
21485
21837
  recipe: {
21486
21838
  nodes: [
21487
21839
  {
21488
21840
  ref: "habit",
21489
21841
  kind: "habit",
21490
- title: "No Sugar",
21491
- measurementType: "negative",
21492
- targetValue: 0,
21842
+ title: "Sleep",
21843
+ measurementType: "duration",
21844
+ targetValue: 8,
21845
+ targetUnit: "h",
21493
21846
  period: "day"
21494
21847
  }
21495
21848
  ]
21496
21849
  }
21497
21850
  },
21498
21851
  {
21499
- key: "floss",
21500
- entity: "habit",
21501
- name: "Floss",
21502
- description: "Floss once a day.",
21503
- icon: "\uD83E\uDDB7",
21504
- color: "#38bdf8",
21505
- category: "Health",
21506
- recipe: {
21507
- nodes: [
21508
- { ref: "habit", kind: "habit", title: "Floss", measurementType: "binary", period: "day" }
21509
- ]
21510
- }
21511
- },
21512
- {
21513
- key: "morning-sunlight",
21852
+ key: "no-smoking",
21514
21853
  entity: "habit",
21515
- name: "Morning Sunlight",
21516
- description: "Get daylight early to set your clock.",
21517
- icon: "\uD83C\uDF05",
21518
- color: "#f59e0b",
21519
- category: "Health",
21854
+ name: "No Smoking",
21855
+ description: "Stay smoke-free, one day at a time.",
21856
+ icon: "\uD83D\uDEAD",
21857
+ color: "#fb7185",
21858
+ category: "Abstinence",
21859
+ displayKind: "abstinence-streak",
21520
21860
  recipe: {
21521
21861
  nodes: [
21522
21862
  {
21523
21863
  ref: "habit",
21524
21864
  kind: "habit",
21525
- title: "Morning Sunlight",
21526
- measurementType: "binary",
21865
+ title: "No Smoking",
21866
+ measurementType: "negative",
21867
+ targetValue: 0,
21527
21868
  period: "day"
21528
21869
  }
21529
21870
  ]
21530
21871
  }
21531
21872
  },
21532
21873
  {
21533
- key: "gratitude",
21874
+ key: "no-alcohol",
21534
21875
  entity: "habit",
21535
- name: "Gratitude (3)",
21536
- description: "Note three things you're grateful for.",
21537
- icon: "\uD83D\uDE4F",
21538
- color: "#a78bfa",
21539
- category: "Mindfulness",
21876
+ name: "No Alcohol",
21877
+ description: "Keep the day alcohol-free.",
21878
+ icon: "\uD83D\uDEAB",
21879
+ color: "#fb7185",
21880
+ category: "Abstinence",
21881
+ displayKind: "abstinence-streak",
21540
21882
  recipe: {
21541
21883
  nodes: [
21542
21884
  {
21543
21885
  ref: "habit",
21544
21886
  kind: "habit",
21545
- title: "Gratitude (3)",
21546
- measurementType: "quantitative",
21547
- targetValue: 3,
21548
- targetUnit: "notes",
21887
+ title: "No Alcohol",
21888
+ measurementType: "negative",
21889
+ targetValue: 0,
21549
21890
  period: "day"
21550
21891
  }
21551
21892
  ]
21552
21893
  }
21553
- }
21554
- ];
21555
- var shoppingItems2 = (...titles) => titles.map((title) => ({ title }));
21556
- var listPresetDefs = [
21557
- {
21558
- key: "watchlist",
21559
- name: "Watchlist",
21560
- description: "Films and shows to watch.",
21561
- icon: "\uD83C\uDFAC",
21562
- color: "#a78bfa",
21563
- category: "Entertainment",
21564
- title: "Watchlist",
21565
- items: ["Dune: Part Two", "The Bear", "Severance"]
21566
- },
21567
- {
21568
- key: "groceries",
21569
- name: "Groceries",
21570
- description: "A weekly grocery run.",
21571
- icon: "\uD83D\uDED2",
21572
- color: "#34d399",
21573
- category: "Food",
21574
- title: "Groceries",
21575
- items: ["Milk", "Eggs", "Bread", "Bananas", "Coffee", "Spinach"]
21576
- },
21577
- {
21578
- key: "packing-list",
21579
- name: "Packing List",
21580
- description: "Don't forget the essentials.",
21581
- icon: "\uD83E\uDDF3",
21582
- color: "#38bdf8",
21583
- category: "Travel",
21584
- title: "Packing List",
21585
- items: ["Passport", "Charger", "Toothbrush", "Headphones", "Adapter"]
21586
- },
21587
- {
21588
- key: "wishlist",
21589
- name: "Wishlist",
21590
- description: "Things you'd love to have.",
21591
- icon: "\u2B50",
21592
- color: "#f59e0b",
21593
- category: "Shopping",
21594
- title: "Wishlist",
21595
- items: ["New running shoes", "Standing desk", "E-reader"]
21596
- },
21597
- {
21598
- key: "gift-ideas",
21599
- name: "Gift Ideas",
21600
- description: "Presents to remember.",
21601
- icon: "\uD83C\uDF81",
21602
- color: "#fb7185",
21603
- category: "Gifts",
21604
- title: "Gift Ideas",
21605
- items: ["Mom \u2014 gardening gloves", "Dad \u2014 coffee beans", "Sam \u2014 board game"]
21606
21894
  },
21607
21895
  {
21608
- key: "restaurants-to-try",
21609
- name: "Restaurants to Try",
21610
- description: "Where to eat next.",
21611
- icon: "\uD83C\uDF7D\uFE0F",
21896
+ key: "no-sugar",
21897
+ entity: "habit",
21898
+ name: "No Sugar",
21899
+ description: "Skip the added sugar today.",
21900
+ icon: "\uD83C\uDF6D",
21612
21901
  color: "#fb7185",
21613
- category: "Food",
21614
- title: "Restaurants to Try",
21615
- items: ["Corner ramen spot", "New taqueria", "That rooftop place"]
21616
- },
21617
- {
21618
- key: "places-to-travel",
21619
- name: "Places to Travel",
21620
- description: "Your someday-soon map.",
21621
- icon: "\u2708\uFE0F",
21622
- color: "#38bdf8",
21623
- category: "Travel",
21624
- title: "Places to Travel",
21625
- items: ["Lisbon", "Kyoto", "Patagonia"]
21626
- },
21627
- {
21628
- key: "home-maintenance",
21629
- name: "Home Maintenance",
21630
- description: "Keep the house in shape.",
21631
- icon: "\uD83C\uDFE0",
21632
- color: "#f59e0b",
21633
- category: "Home",
21634
- title: "Home Maintenance",
21635
- items: ["Change HVAC filter", "Clean gutters", "Test smoke alarms", "Descale kettle"]
21636
- }
21637
- ];
21638
- var booksToRead = [
21639
- { title: "Atomic Habits", author: "James Clear" },
21640
- { title: "Deep Work", author: "Cal Newport" },
21641
- { title: "The Pragmatic Programmer", author: "Andrew Hunt" }
21642
- ];
21643
- var booksToReadPreset = {
21644
- key: "books-to-read",
21645
- entity: "library",
21646
- name: "Books to Read",
21647
- description: "Your reading queue \u2014 covers, status and ratings.",
21648
- icon: "\uD83D\uDCDA",
21649
- color: "#f59e0b",
21650
- category: "Reading",
21651
- displayKind: MEDIA_SHELF_DISPLAY_KIND,
21652
- recipe: {
21653
- nodes: [
21654
- {
21655
- ref: "list",
21656
- kind: "shopping_list",
21657
- title: "Books to Read",
21658
- displayKind: MEDIA_SHELF_DISPLAY_KIND,
21659
- items: booksToRead.map((book) => ({
21660
- title: book.title,
21661
- facet: { author: book.author, status: "to-read" }
21662
- }))
21663
- }
21664
- ]
21665
- }
21666
- };
21667
- var shoppingListPresets = [
21668
- booksToReadPreset,
21669
- ...listPresetDefs.map((def) => ({
21670
- key: def.key,
21671
- entity: "list",
21672
- name: def.name,
21673
- description: def.description,
21674
- icon: def.icon,
21675
- color: def.color,
21676
- category: def.category,
21677
- featured: def.key === "groceries",
21902
+ category: "Abstinence",
21903
+ displayKind: "abstinence-streak",
21904
+ recipe: {
21905
+ nodes: [
21906
+ {
21907
+ ref: "habit",
21908
+ kind: "habit",
21909
+ title: "No Sugar",
21910
+ measurementType: "negative",
21911
+ targetValue: 0,
21912
+ period: "day"
21913
+ }
21914
+ ]
21915
+ }
21916
+ },
21917
+ {
21918
+ key: "floss",
21919
+ entity: "habit",
21920
+ name: "Floss",
21921
+ description: "Floss once a day.",
21922
+ icon: "\uD83E\uDDB7",
21923
+ color: "#38bdf8",
21924
+ category: "Health",
21925
+ recipe: {
21926
+ nodes: [
21927
+ { ref: "habit", kind: "habit", title: "Floss", measurementType: "binary", period: "day" }
21928
+ ]
21929
+ }
21930
+ },
21931
+ {
21932
+ key: "morning-sunlight",
21933
+ entity: "habit",
21934
+ name: "Morning Sunlight",
21935
+ description: "Get daylight early to set your clock.",
21936
+ icon: "\uD83C\uDF05",
21937
+ color: "#f59e0b",
21938
+ category: "Health",
21678
21939
  recipe: {
21679
21940
  nodes: [
21680
21941
  {
21681
- ref: "list",
21682
- kind: "shopping_list",
21683
- title: def.title,
21684
- items: shoppingItems2(...def.items)
21942
+ ref: "habit",
21943
+ kind: "habit",
21944
+ title: "Morning Sunlight",
21945
+ measurementType: "binary",
21946
+ period: "day"
21685
21947
  }
21686
21948
  ]
21687
21949
  }
21688
- }))
21950
+ },
21951
+ {
21952
+ key: "gratitude",
21953
+ entity: "habit",
21954
+ name: "Gratitude (3)",
21955
+ description: "Note three things you're grateful for.",
21956
+ icon: "\uD83D\uDE4F",
21957
+ color: "#a78bfa",
21958
+ category: "Mindfulness",
21959
+ recipe: {
21960
+ nodes: [
21961
+ {
21962
+ ref: "habit",
21963
+ kind: "habit",
21964
+ title: "Gratitude (3)",
21965
+ measurementType: "quantitative",
21966
+ targetValue: 3,
21967
+ targetUnit: "notes",
21968
+ period: "day"
21969
+ }
21970
+ ]
21971
+ }
21972
+ }
21689
21973
  ];
21974
+
21975
+ // ../../packages/schema/src/presets/features/inventory.ts
21690
21976
  var pantryStaples = [
21691
21977
  { title: "Rice", category: "Grains", unit: "kg", threshold: 1 },
21692
21978
  { title: "Pasta", category: "Grains", unit: "boxes", threshold: 2 },
@@ -21721,274 +22007,145 @@ var inventoryPresets = [
21721
22007
  }
21722
22008
  }
21723
22009
  ];
21724
- var routinePresetDefs = [
21725
- {
21726
- key: "morning-routine",
21727
- name: "Morning Routine",
21728
- description: "Start the day with intention.",
21729
- icon: "\uD83C\uDF05",
21730
- color: "#f59e0b",
21731
- category: "Daily",
21732
- displayKind: "routine-checklist",
21733
- steps: ["Make the bed", "Drink a glass of water", "Stretch", "Plan the day"]
21734
- },
21735
- {
21736
- key: "evening-wind-down",
21737
- name: "Evening Wind-Down",
21738
- description: "Ease into a restful night.",
21739
- icon: "\uD83C\uDF19",
21740
- color: "#818cf8",
21741
- category: "Daily",
21742
- steps: ["Dim the lights", "Tidy up", "Read a few pages", "Lights out"]
21743
- },
21744
- {
21745
- key: "deep-work-block",
21746
- name: "Deep Work Block",
21747
- description: "Set up for focused, distraction-free work.",
21748
- icon: "\uD83C\uDFAF",
21749
- color: "#a78bfa",
21750
- category: "Work",
21751
- steps: ["Silence notifications", "Pick one task", "Start a 50-min timer", "Take a break"]
21752
- },
21753
- {
21754
- key: "gym-session",
21755
- name: "Gym Session",
21756
- description: "A repeatable workout flow.",
21757
- icon: "\uD83C\uDFCB\uFE0F",
21758
- color: "#fb7185",
21759
- category: "Fitness",
21760
- steps: ["Warm up", "Main lifts", "Accessory work", "Cool down & stretch"]
21761
- },
21762
- {
21763
- key: "weekly-review",
21764
- name: "Weekly Review",
21765
- description: "Close the week and set up the next.",
21766
- icon: "\uD83D\uDDD3\uFE0F",
21767
- color: "#34d399",
21768
- category: "Work",
21769
- steps: ["Clear the inbox", "Review last week", "Check goals", "Plan next week"]
21770
- },
21771
- {
21772
- key: "leaving-the-house",
21773
- name: "Leaving the House",
21774
- description: "Never forget the essentials.",
21775
- icon: "\uD83D\uDEAA",
21776
- color: "#38bdf8",
21777
- category: "Daily",
21778
- steps: ["Keys", "Wallet", "Phone", "Lock the door"]
21779
- },
21780
- {
21781
- key: "skincare-routine",
21782
- name: "Skincare AM/PM",
21783
- description: "A simple morning and night skincare flow.",
21784
- icon: "\uD83E\uDDF4",
21785
- color: "#f472b6",
21786
- category: "Self-care",
21787
- steps: ["Cleanse", "Treat", "Moisturise", "SPF (AM only)"]
21788
- },
21789
- {
21790
- key: "shutdown-ritual",
21791
- name: "Shutdown Ritual",
21792
- description: "End the workday cleanly.",
21793
- icon: "\uD83D\uDD0C",
21794
- color: "#a78bfa",
21795
- category: "Work",
21796
- steps: ["Review what got done", "Note tomorrow's top task", "Close all tabs", "Step away"]
21797
- }
21798
- ];
21799
- var routinePresets = routinePresetDefs.map((def) => ({
21800
- key: def.key,
21801
- entity: "routine",
21802
- name: def.name,
21803
- description: def.description,
21804
- icon: def.icon,
21805
- color: def.color,
21806
- category: def.category,
21807
- ...def.displayKind ? { displayKind: def.displayKind } : {},
21808
- featured: def.key === "morning-routine",
21809
- recipe: {
21810
- nodes: [
21811
- {
21812
- ref: "routine",
21813
- kind: "routine",
21814
- title: def.name,
21815
- steps: def.steps.map((title) => ({ title }))
21816
- }
21817
- ]
21818
- }
21819
- }));
21820
- var areaBundleDefs = [
21821
- {
21822
- key: "life-setup",
21823
- name: "Life Setup",
21824
- description: "Nine areas of responsibility to organise your whole life.",
21825
- icon: "\uD83C\uDF31",
21826
- color: "#34d399",
21827
- areas: [
21828
- { title: "Health", color: "green", icon: "heart-pulse" },
21829
- { title: "Finances", color: "amber", icon: "wallet" },
21830
- { title: "Career", color: "blue", icon: "briefcase" },
21831
- { title: "Relationships", color: "rose", icon: "users" },
21832
- { title: "Home", color: "teal", icon: "house" },
21833
- { title: "Personal Growth", color: "purple", icon: "sprout" },
21834
- { title: "Recreation", color: "amber", icon: "gamepad-2" },
21835
- { title: "Admin", color: "slate", icon: "file-text" },
21836
- { title: "Community", color: "red", icon: "hand-heart" }
21837
- ]
21838
- },
21839
- {
21840
- key: "student-life",
21841
- name: "Student Life",
21842
- description: "Keep coursework, exams and the rest of life in balance.",
21843
- icon: "\uD83C\uDF93",
21844
- color: "#38bdf8",
21845
- areas: [
21846
- { title: "Coursework", color: "blue", icon: "book-open" },
21847
- { title: "Exams", color: "red", icon: "graduation-cap" },
21848
- { title: "Finances", color: "amber", icon: "wallet" },
21849
- { title: "Social", color: "rose", icon: "users" },
21850
- { title: "Health", color: "green", icon: "heart-pulse" },
21851
- { title: "Career Prep", color: "purple", icon: "briefcase" }
21852
- ]
21853
- },
22010
+
22011
+ // ../../packages/schema/src/presets/features/lists.ts
22012
+ var shoppingItems2 = (...titles) => titles.map((title) => ({ title }));
22013
+ var listPresetDefs = [
21854
22014
  {
21855
- key: "founder",
21856
- name: "Founder",
21857
- description: "The hats a founder wears, as areas to steward.",
21858
- icon: "\uD83D\uDE80",
22015
+ key: "watchlist",
22016
+ name: "Watchlist",
22017
+ description: "Films and shows to watch.",
22018
+ icon: "\uD83C\uDFAC",
21859
22019
  color: "#a78bfa",
21860
- areas: [
21861
- { title: "Product", color: "purple", icon: "box" },
21862
- { title: "Sales", color: "green", icon: "trending-up" },
21863
- { title: "Fundraising", color: "amber", icon: "banknote" },
21864
- { title: "Team", color: "blue", icon: "users" },
21865
- { title: "Finances", color: "slate", icon: "wallet" },
21866
- { title: "Personal", color: "rose", icon: "heart" }
21867
- ]
22020
+ category: "Entertainment",
22021
+ title: "Watchlist",
22022
+ items: ["Dune: Part Two", "The Bear", "Severance"]
21868
22023
  },
21869
22024
  {
21870
- key: "new-parent",
21871
- name: "New Parent",
21872
- description: "Stay on top of life with a newborn.",
21873
- icon: "\uD83C\uDF7C",
21874
- color: "#f472b6",
21875
- areas: [
21876
- { title: "Baby Care", color: "rose", icon: "baby" },
21877
- { title: "Health", color: "green", icon: "heart-pulse" },
21878
- { title: "Home", color: "teal", icon: "house" },
21879
- { title: "Finances", color: "amber", icon: "wallet" },
21880
- { title: "Relationship", color: "purple", icon: "heart" },
21881
- { title: "Self-care", color: "blue", icon: "sparkles" }
21882
- ]
21883
- }
21884
- ];
21885
- var areaPresets = areaBundleDefs.map((def) => ({
21886
- key: def.key,
21887
- entity: "area",
21888
- name: def.name,
21889
- description: def.description,
21890
- icon: def.icon,
21891
- color: def.color,
21892
- category: "Life Setup",
21893
- featured: def.key === "life-setup",
21894
- recipe: {
21895
- nodes: def.areas.map((area, index2) => ({
21896
- ref: `area-${index2}`,
21897
- kind: "area",
21898
- title: area.title,
21899
- color: area.color,
21900
- icon: area.icon
21901
- }))
21902
- }
21903
- }));
21904
- var projectPresetDefs = [
22025
+ key: "groceries",
22026
+ name: "Groceries",
22027
+ description: "A weekly grocery run.",
22028
+ icon: "\uD83D\uDED2",
22029
+ color: "#34d399",
22030
+ category: "Food",
22031
+ title: "Groceries",
22032
+ items: ["Milk", "Eggs", "Bread", "Bananas", "Coffee", "Spinach"]
22033
+ },
21905
22034
  {
21906
- key: "plan-a-trip",
21907
- name: "Plan a Trip",
21908
- description: "From idea to itinerary.",
22035
+ key: "packing-list",
22036
+ name: "Packing List",
22037
+ description: "Don't forget the essentials.",
21909
22038
  icon: "\uD83E\uDDF3",
21910
22039
  color: "#38bdf8",
21911
- category: "Personal",
21912
- milestones: ["Pick dates & destination", "Book flights", "Book stay", "Plan itinerary", "Pack"]
21913
- },
21914
- {
21915
- key: "job-search",
21916
- name: "Job Search",
21917
- description: "Run a focused job hunt.",
21918
- icon: "\uD83D\uDCBC",
21919
- color: "#a78bfa",
21920
- category: "Career",
21921
- milestones: ["Update CV", "Build a target list", "Apply", "Interview prep", "Negotiate offer"]
22040
+ category: "Travel",
22041
+ title: "Packing List",
22042
+ items: ["Passport", "Charger", "Toothbrush", "Headphones", "Adapter"]
21922
22043
  },
21923
22044
  {
21924
- key: "move-house",
21925
- name: "Move House",
21926
- description: "Keep a move from overwhelming you.",
21927
- icon: "\uD83D\uDCE6",
22045
+ key: "wishlist",
22046
+ name: "Wishlist",
22047
+ description: "Things you'd love to have.",
22048
+ icon: "\u2B50",
21928
22049
  color: "#f59e0b",
21929
- category: "Home",
21930
- milestones: ["Declutter", "Book movers", "Pack room by room", "Change address", "Unpack"]
22050
+ category: "Shopping",
22051
+ title: "Wishlist",
22052
+ items: ["New running shoes", "Standing desk", "E-reader"]
21931
22053
  },
21932
22054
  {
21933
- key: "side-project",
21934
- name: "Launch a Side Project",
21935
- description: "Ship something on the side.",
21936
- icon: "\uD83D\uDEE0\uFE0F",
21937
- color: "#34d399",
21938
- category: "Career",
21939
- milestones: ["Define the MVP", "Build it", "Test with users", "Launch", "Gather feedback"]
22055
+ key: "gift-ideas",
22056
+ name: "Gift Ideas",
22057
+ description: "Presents to remember.",
22058
+ icon: "\uD83C\uDF81",
22059
+ color: "#fb7185",
22060
+ category: "Gifts",
22061
+ title: "Gift Ideas",
22062
+ items: ["Mom \u2014 gardening gloves", "Dad \u2014 coffee beans", "Sam \u2014 board game"]
21940
22063
  },
21941
22064
  {
21942
- key: "plan-an-event",
21943
- name: "Plan an Event",
21944
- description: "Pull off a gathering without the stress.",
21945
- icon: "\uD83C\uDF89",
22065
+ key: "restaurants-to-try",
22066
+ name: "Restaurants to Try",
22067
+ description: "Where to eat next.",
22068
+ icon: "\uD83C\uDF7D\uFE0F",
21946
22069
  color: "#fb7185",
21947
- category: "Personal",
21948
- milestones: [
21949
- "Set date & budget",
21950
- "Invite guests",
21951
- "Book venue",
21952
- "Order food",
21953
- "Day-of run sheet"
21954
- ]
22070
+ category: "Food",
22071
+ title: "Restaurants to Try",
22072
+ items: ["Corner ramen spot", "New taqueria", "That rooftop place"]
21955
22073
  },
21956
22074
  {
21957
- key: "learn-a-skill",
21958
- name: "Learn a Skill",
21959
- description: "Go from beginner to capable.",
21960
- icon: "\uD83D\uDCDA",
22075
+ key: "places-to-travel",
22076
+ name: "Places to Travel",
22077
+ description: "Your someday-soon map.",
22078
+ icon: "\u2708\uFE0F",
22079
+ color: "#38bdf8",
22080
+ category: "Travel",
22081
+ title: "Places to Travel",
22082
+ items: ["Lisbon", "Kyoto", "Patagonia"]
22083
+ },
22084
+ {
22085
+ key: "home-maintenance",
22086
+ name: "Home Maintenance",
22087
+ description: "Keep the house in shape.",
22088
+ icon: "\uD83C\uDFE0",
21961
22089
  color: "#f59e0b",
21962
- category: "Growth",
21963
- milestones: [
21964
- "Pick a resource",
21965
- "Daily practice",
21966
- "Build a project",
21967
- "Get feedback",
21968
- "Teach someone"
21969
- ]
22090
+ category: "Home",
22091
+ title: "Home Maintenance",
22092
+ items: ["Change HVAC filter", "Clean gutters", "Test smoke alarms", "Descale kettle"]
21970
22093
  }
21971
22094
  ];
21972
- var projectPresets = projectPresetDefs.map((def) => ({
21973
- key: def.key,
21974
- entity: "project",
21975
- name: def.name,
21976
- description: def.description,
21977
- icon: def.icon,
21978
- color: def.color,
21979
- category: def.category,
21980
- featured: def.key === "plan-a-trip",
22095
+ var booksToRead = [
22096
+ { title: "Atomic Habits", author: "James Clear" },
22097
+ { title: "Deep Work", author: "Cal Newport" },
22098
+ { title: "The Pragmatic Programmer", author: "Andrew Hunt" }
22099
+ ];
22100
+ var booksToReadPreset = {
22101
+ key: "books-to-read",
22102
+ entity: "library",
22103
+ name: "Books to Read",
22104
+ description: "Your reading queue \u2014 covers, status and ratings.",
22105
+ icon: "\uD83D\uDCDA",
22106
+ color: "#f59e0b",
22107
+ category: "Reading",
22108
+ displayKind: MEDIA_SHELF_DISPLAY_KIND,
21981
22109
  recipe: {
21982
22110
  nodes: [
21983
22111
  {
21984
- ref: "project",
21985
- kind: "project",
21986
- title: def.name,
21987
- milestones: def.milestones.map((title) => ({ title }))
22112
+ ref: "list",
22113
+ kind: "shopping_list",
22114
+ title: "Books to Read",
22115
+ displayKind: MEDIA_SHELF_DISPLAY_KIND,
22116
+ items: booksToRead.map((book) => ({
22117
+ title: book.title,
22118
+ facet: { author: book.author, status: "to-read" }
22119
+ }))
21988
22120
  }
21989
22121
  ]
21990
22122
  }
21991
- }));
22123
+ };
22124
+ var shoppingListPresets = [
22125
+ booksToReadPreset,
22126
+ ...listPresetDefs.map((def) => ({
22127
+ key: def.key,
22128
+ entity: "list",
22129
+ name: def.name,
22130
+ description: def.description,
22131
+ icon: def.icon,
22132
+ color: def.color,
22133
+ category: def.category,
22134
+ featured: def.key === "groceries",
22135
+ recipe: {
22136
+ nodes: [
22137
+ {
22138
+ ref: "list",
22139
+ kind: "shopping_list",
22140
+ title: def.title,
22141
+ items: shoppingItems2(...def.items)
22142
+ }
22143
+ ]
22144
+ }
22145
+ }))
22146
+ ];
22147
+
22148
+ // ../../packages/schema/src/presets/features/meals.ts
21992
22149
  var recipeNode = (def) => ({
21993
22150
  ref: def.ref,
21994
22151
  kind: "recipe",
@@ -22186,265 +22343,197 @@ var mealPresets = [
22186
22343
  }
22187
22344
  }
22188
22345
  ];
22189
- var contactCircleDefs = [
22346
+
22347
+ // ../../packages/schema/src/presets/features/projects.ts
22348
+ var projectPresetDefs = [
22190
22349
  {
22191
- key: "inner-circle",
22192
- name: "Inner Circle",
22193
- description: "The people you check in with weekly.",
22194
- cadence: "every week",
22195
- tag: "1w"
22350
+ key: "plan-a-trip",
22351
+ name: "Plan a Trip",
22352
+ description: "From idea to itinerary.",
22353
+ icon: "\uD83E\uDDF3",
22354
+ color: "#38bdf8",
22355
+ category: "Personal",
22356
+ milestones: ["Pick dates & destination", "Book flights", "Book stay", "Plan itinerary", "Pack"]
22196
22357
  },
22197
22358
  {
22198
- key: "close-friends",
22199
- name: "Close Friends",
22200
- description: "Friends worth a message every couple of weeks.",
22201
- cadence: "every 2 weeks",
22202
- tag: "2w"
22359
+ key: "job-search",
22360
+ name: "Job Search",
22361
+ description: "Run a focused job hunt.",
22362
+ icon: "\uD83D\uDCBC",
22363
+ color: "#a78bfa",
22364
+ category: "Career",
22365
+ milestones: ["Update CV", "Build a target list", "Apply", "Interview prep", "Negotiate offer"]
22203
22366
  },
22204
22367
  {
22205
- key: "keep-warm",
22206
- name: "Keep Warm",
22207
- description: "People to keep warm with a monthly hello.",
22208
- cadence: "every month",
22209
- tag: "1m"
22368
+ key: "move-house",
22369
+ name: "Move House",
22370
+ description: "Keep a move from overwhelming you.",
22371
+ icon: "\uD83D\uDCE6",
22372
+ color: "#f59e0b",
22373
+ category: "Home",
22374
+ milestones: ["Declutter", "Book movers", "Pack room by room", "Change address", "Unpack"]
22210
22375
  },
22211
22376
  {
22212
- key: "network",
22213
- name: "Network",
22214
- description: "Professional contacts to touch base with quarterly.",
22215
- cadence: "every 3 months",
22216
- tag: "3m"
22377
+ key: "side-project",
22378
+ name: "Launch a Side Project",
22379
+ description: "Ship something on the side.",
22380
+ icon: "\uD83D\uDEE0\uFE0F",
22381
+ color: "#34d399",
22382
+ category: "Career",
22383
+ milestones: ["Define the MVP", "Build it", "Test with users", "Launch", "Gather feedback"]
22217
22384
  },
22218
22385
  {
22219
- key: "birthday-only",
22220
- name: "Birthday Only",
22221
- description: "People you reach out to on their birthday.",
22222
- cadence: "on their birthday",
22223
- tag: "birthday"
22386
+ key: "plan-an-event",
22387
+ name: "Plan an Event",
22388
+ description: "Pull off a gathering without the stress.",
22389
+ icon: "\uD83C\uDF89",
22390
+ color: "#fb7185",
22391
+ category: "Personal",
22392
+ milestones: [
22393
+ "Set date & budget",
22394
+ "Invite guests",
22395
+ "Book venue",
22396
+ "Order food",
22397
+ "Day-of run sheet"
22398
+ ]
22399
+ },
22400
+ {
22401
+ key: "learn-a-skill",
22402
+ name: "Learn a Skill",
22403
+ description: "Go from beginner to capable.",
22404
+ icon: "\uD83D\uDCDA",
22405
+ color: "#f59e0b",
22406
+ category: "Growth",
22407
+ milestones: [
22408
+ "Pick a resource",
22409
+ "Daily practice",
22410
+ "Build a project",
22411
+ "Get feedback",
22412
+ "Teach someone"
22413
+ ]
22224
22414
  }
22225
22415
  ];
22226
- var contactPresets = contactCircleDefs.map((def) => ({
22416
+ var projectPresets = projectPresetDefs.map((def) => ({
22227
22417
  key: def.key,
22228
- entity: "contact",
22418
+ entity: "project",
22229
22419
  name: def.name,
22230
- description: def.description,
22231
- icon: "\uD83D\uDC65",
22232
- color: "#38bdf8",
22233
- category: "Keep in Touch",
22234
- featured: def.key === "inner-circle",
22420
+ description: def.description,
22421
+ icon: def.icon,
22422
+ color: def.color,
22423
+ category: def.category,
22424
+ featured: def.key === "plan-a-trip",
22235
22425
  recipe: {
22236
22426
  nodes: [
22237
22427
  {
22238
- ref: "contact",
22239
- kind: "contact",
22428
+ ref: "project",
22429
+ kind: "project",
22240
22430
  title: def.name,
22241
- notes: `Keep-in-touch circle \u2014 reach out ${def.cadence}. Rename to a person and set their cadence.`,
22242
- tags: ["keep-in-touch", def.tag]
22431
+ milestones: def.milestones.map((title) => ({ title }))
22243
22432
  }
22244
22433
  ]
22245
22434
  }
22246
22435
  }));
22247
- var challengePresetDefs = [
22436
+
22437
+ // ../../packages/schema/src/presets/features/routines.ts
22438
+ var routinePresetDefs = [
22248
22439
  {
22249
- key: "challenge-75-hard",
22250
- name: "75 Hard",
22251
- description: "75 days of two workouts, water, reading and a clean diet.",
22252
- icon: "\uD83D\uDD25",
22253
- color: "#fb7185",
22254
- metric: "habits.checked_in",
22255
- target: 75,
22256
- durationDays: 75
22440
+ key: "morning-routine",
22441
+ name: "Morning Routine",
22442
+ description: "Start the day with intention.",
22443
+ icon: "\uD83C\uDF05",
22444
+ color: "#f59e0b",
22445
+ category: "Daily",
22446
+ displayKind: "routine-checklist",
22447
+ steps: ["Make the bed", "Drink a glass of water", "Stretch", "Plan the day"]
22257
22448
  },
22258
22449
  {
22259
- key: "challenge-no-sugar",
22260
- name: "30-Day No Sugar",
22261
- description: "Cut added sugar for 30 days.",
22262
- icon: "\uD83C\uDF6D",
22263
- color: "#f472b6",
22264
- metric: "habits.checked_in",
22265
- target: 30,
22266
- durationDays: 30
22450
+ key: "evening-wind-down",
22451
+ name: "Evening Wind-Down",
22452
+ description: "Ease into a restful night.",
22453
+ icon: "\uD83C\uDF19",
22454
+ color: "#818cf8",
22455
+ category: "Daily",
22456
+ steps: ["Dim the lights", "Tidy up", "Read a few pages", "Lights out"]
22267
22457
  },
22268
22458
  {
22269
- key: "challenge-couch-to-5k",
22270
- name: "Couch-to-5K",
22271
- description: "Run your first 5K in nine weeks.",
22272
- icon: "\uD83C\uDFC3",
22459
+ key: "deep-work-block",
22460
+ name: "Deep Work Block",
22461
+ description: "Set up for focused, distraction-free work.",
22462
+ icon: "\uD83C\uDFAF",
22463
+ color: "#a78bfa",
22464
+ category: "Work",
22465
+ steps: ["Silence notifications", "Pick one task", "Start a 50-min timer", "Take a break"]
22466
+ },
22467
+ {
22468
+ key: "gym-session",
22469
+ name: "Gym Session",
22470
+ description: "A repeatable workout flow.",
22471
+ icon: "\uD83C\uDFCB\uFE0F",
22472
+ color: "#fb7185",
22473
+ category: "Fitness",
22474
+ steps: ["Warm up", "Main lifts", "Accessory work", "Cool down & stretch"]
22475
+ },
22476
+ {
22477
+ key: "weekly-review",
22478
+ name: "Weekly Review",
22479
+ description: "Close the week and set up the next.",
22480
+ icon: "\uD83D\uDDD3\uFE0F",
22273
22481
  color: "#34d399",
22274
- metric: "habits.checked_in",
22275
- target: 27,
22276
- durationDays: 63
22482
+ category: "Work",
22483
+ steps: ["Clear the inbox", "Review last week", "Check goals", "Plan next week"]
22277
22484
  },
22278
22485
  {
22279
- key: "challenge-dry-january",
22280
- name: "Dry January",
22281
- description: "An alcohol-free month to reset.",
22282
- icon: "\uD83D\uDEAB",
22486
+ key: "leaving-the-house",
22487
+ name: "Leaving the House",
22488
+ description: "Never forget the essentials.",
22489
+ icon: "\uD83D\uDEAA",
22283
22490
  color: "#38bdf8",
22284
- metric: "habits.checked_in",
22285
- target: 31,
22286
- durationDays: 31
22491
+ category: "Daily",
22492
+ steps: ["Keys", "Wallet", "Phone", "Lock the door"]
22287
22493
  },
22288
22494
  {
22289
- key: "challenge-meditation",
22290
- name: "31-Day Meditation",
22291
- description: "Sit every day for a month.",
22292
- icon: "\uD83E\uDDD8",
22293
- color: "#a78bfa",
22294
- metric: "habits.checked_in",
22295
- target: 31,
22296
- durationDays: 31
22495
+ key: "skincare-routine",
22496
+ name: "Skincare AM/PM",
22497
+ description: "A simple morning and night skincare flow.",
22498
+ icon: "\uD83E\uDDF4",
22499
+ color: "#f472b6",
22500
+ category: "Self-care",
22501
+ steps: ["Cleanse", "Treat", "Moisturise", "SPF (AM only)"]
22297
22502
  },
22298
22503
  {
22299
- key: "challenge-no-spend",
22300
- name: "No-Spend Month",
22301
- description: "Thirty days of buying only the essentials.",
22302
- icon: "\uD83D\uDCB8",
22303
- color: "#f59e0b",
22304
- metric: "habits.checked_in",
22305
- target: 30,
22306
- durationDays: 30
22504
+ key: "shutdown-ritual",
22505
+ name: "Shutdown Ritual",
22506
+ description: "End the workday cleanly.",
22507
+ icon: "\uD83D\uDD0C",
22508
+ color: "#a78bfa",
22509
+ category: "Work",
22510
+ steps: ["Review what got done", "Note tomorrow's top task", "Close all tabs", "Step away"]
22307
22511
  }
22308
22512
  ];
22309
- var challengePresets = challengePresetDefs.map((def) => ({
22513
+ var routinePresets = routinePresetDefs.map((def) => ({
22310
22514
  key: def.key,
22311
- entity: "challenge",
22515
+ entity: "routine",
22312
22516
  name: def.name,
22313
22517
  description: def.description,
22314
22518
  icon: def.icon,
22315
22519
  color: def.color,
22316
- category: "Challenges",
22317
- featured: def.key === "challenge-couch-to-5k",
22520
+ category: def.category,
22521
+ ...def.displayKind ? { displayKind: def.displayKind } : {},
22522
+ featured: def.key === "morning-routine",
22318
22523
  recipe: {
22319
22524
  nodes: [
22320
22525
  {
22321
- ref: "challenge",
22322
- kind: "challenge",
22526
+ ref: "routine",
22527
+ kind: "routine",
22323
22528
  title: def.name,
22324
- description: def.description,
22325
- metric: def.metric,
22326
- target: def.target,
22327
- durationDays: def.durationDays
22529
+ steps: def.steps.map((title) => ({ title }))
22328
22530
  }
22329
22531
  ]
22330
22532
  }
22331
22533
  }));
22332
- var automationPresets = [
22333
- {
22334
- key: "auto-low-stock-groceries",
22335
- entity: "automation",
22336
- name: "Low stock \u2192 add to groceries",
22337
- description: "When an inventory item runs low, make a task to restock it.",
22338
- icon: "\uD83E\uDD6B",
22339
- color: "#34d399",
22340
- category: "Automations",
22341
- recipe: {
22342
- nodes: [
22343
- {
22344
- ref: "automation",
22345
- kind: "automation",
22346
- name: "Low stock \u2192 add to groceries",
22347
- trigger: { entity: "inventory", action: "updated" },
22348
- condition: { path: "value.lowStock", op: "eq", value: true },
22349
- action: { type: "create_task", title: "Restock low groceries", priority: "medium" }
22350
- }
22351
- ]
22352
- }
22353
- },
22354
- {
22355
- key: "auto-habit-missed-nudge",
22356
- entity: "automation",
22357
- name: "Habit missed 3\xD7 \u2192 nudge",
22358
- description: "Get a gentle nudge when you miss a habit three times.",
22359
- icon: "\uD83D\uDD14",
22360
- color: "#fb7185",
22361
- category: "Automations",
22362
- recipe: {
22363
- nodes: [
22364
- {
22365
- ref: "automation",
22366
- kind: "automation",
22367
- name: "Habit missed 3\xD7 \u2192 nudge",
22368
- trigger: { entity: "habits", action: "updated" },
22369
- condition: { path: "value.missedStreak", op: "eq", value: 3 },
22370
- action: {
22371
- type: "notify",
22372
- title: "Don't break the chain",
22373
- body: "You've missed this habit three times \u2014 jump back in today."
22374
- }
22375
- }
22376
- ]
22377
- }
22378
- },
22379
- {
22380
- key: "auto-task-overdue-bump",
22381
- entity: "automation",
22382
- name: "Task overdue \u2192 bump priority",
22383
- description: "When a task goes overdue, raise a high-priority follow-up.",
22384
- icon: "\u23F0",
22385
- color: "#f59e0b",
22386
- category: "Automations",
22387
- recipe: {
22388
- nodes: [
22389
- {
22390
- ref: "automation",
22391
- kind: "automation",
22392
- name: "Task overdue \u2192 bump priority",
22393
- trigger: { entity: "tasks", action: "updated" },
22394
- condition: { path: "value.overdue", op: "eq", value: true },
22395
- action: { type: "create_task", title: "Reprioritise overdue task", priority: "high" }
22396
- }
22397
- ]
22398
- }
22399
- },
22400
- {
22401
- key: "auto-weekly-review",
22402
- entity: "automation",
22403
- name: "Weekly review reminder",
22404
- description: "Reschedule your weekly review a week out each time you finish it.",
22405
- icon: "\uD83D\uDDD3\uFE0F",
22406
- color: "#34d399",
22407
- category: "Automations",
22408
- recipe: {
22409
- nodes: [
22410
- {
22411
- ref: "automation",
22412
- kind: "automation",
22413
- name: "Weekly review reminder",
22414
- trigger: { entity: "tasks", action: "updated" },
22415
- condition: { path: "value.title", op: "contains", value: "Weekly Review" },
22416
- action: { type: "schedule_task", offsetMinutes: 10080 }
22417
- }
22418
- ]
22419
- }
22420
- },
22421
- {
22422
- key: "auto-finished-book-rate",
22423
- entity: "automation",
22424
- name: "Finished book \u2192 rate it",
22425
- description: "When you finish a book, make a task to rate it.",
22426
- icon: "\uD83D\uDCDA",
22427
- color: "#f59e0b",
22428
- category: "Automations",
22429
- recipe: {
22430
- nodes: [
22431
- {
22432
- ref: "automation",
22433
- kind: "automation",
22434
- name: "Finished book \u2192 rate it",
22435
- trigger: { entity: "books", action: "updated" },
22436
- condition: { path: "value.status", op: "eq", value: "finished" },
22437
- action: {
22438
- type: "create_task",
22439
- title: "Rate the book you just finished",
22440
- priority: "low"
22441
- }
22442
- }
22443
- ]
22444
- }
22445
- }
22446
- ];
22447
- var presetCatalog = [
22534
+
22535
+ // ../../packages/schema/src/presets/features/index.ts
22536
+ var featurePresets = [
22448
22537
  ...habitPresets,
22449
22538
  ...shoppingListPresets,
22450
22539
  ...inventoryPresets,
@@ -22456,6 +22545,9 @@ var presetCatalog = [
22456
22545
  ...challengePresets,
22457
22546
  ...automationPresets
22458
22547
  ];
22548
+
22549
+ // ../../packages/schema/src/presets/catalog.ts
22550
+ var presetCatalog = featurePresets;
22459
22551
  var presetsByKey = new Map(presetCatalog.map((preset) => [preset.key, preset]));
22460
22552
  // ../../node_modules/.bun/ulidx@2.4.1/node_modules/ulidx/dist/node/index.js
22461
22553
  import crypto from "crypto";
@@ -22709,7 +22801,7 @@ function parseCapture2(input) {
22709
22801
 
22710
22802
  // src/meta.ts
22711
22803
  var CLI_NAME = "do";
22712
- var VERSION = "1.30.0";
22804
+ var VERSION = "1.31.0";
22713
22805
  var API_PREFIX = "/api/v1";
22714
22806
  var DEFAULT_API_URL = "http://localhost:3001";
22715
22807