@hy-capital/api-habit-tracker-types 1.0.51 → 1.0.52

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.
package/dist/habit.d.ts CHANGED
@@ -16,6 +16,8 @@ export interface HabitType {
16
16
  description: string;
17
17
  frequency: HabitFrequency;
18
18
  habitDays: HabitDay[];
19
+ possibleNotificationDescriptions: string[];
20
+ minDaysPerWeek: number;
19
21
  }
20
22
  export interface BaseHabit {
21
23
  user_id: number;
@@ -33,6 +35,8 @@ export interface BaseHabit {
33
35
  frequency: HabitFrequency;
34
36
  habit_days: HabitDay[];
35
37
  habit_dates: number[];
38
+ possible_notification_descriptions: string[];
39
+ min_days_per_week: number;
36
40
  }
37
41
  export interface RemindMeAtTime {
38
42
  hour: number;
package/dist/habit.js CHANGED
@@ -47,48 +47,88 @@ exports.habitTypesByTopicType = {
47
47
  Dating: [
48
48
  {
49
49
  name: 'Talk to new person',
50
- description: 'No pressure, just talk about whatever, whoever, no matter how long or short.',
51
- difficulty: 2,
50
+ description: 'No pressure, just talk about whatever, no matter how long or short.',
51
+ difficulty: 3,
52
52
  topicType: 'Dating',
53
53
  habitTime: 'Anytime',
54
54
  habitDays: exports.allHabitDays,
55
- frequency: 'Daily'
55
+ frequency: 'Daily',
56
+ minDaysPerWeek: 5,
57
+ possibleNotificationDescriptions: [
58
+ 'You haven\'t talked to new person today. No wonder you\'re single.',
59
+ 'Still haven’t talked to anyone new? Your dating life won’t improve itself.',
60
+ 'Another day, no balls to chat. Enjoy being alone forever.',
61
+ 'Your social skills suck. Talk to a person or stay a useless reject.',
62
+ 'Don’t let your future self down. Talk to someone new today.'
63
+ ]
56
64
  },
57
65
  {
58
66
  name: 'Ask for date/social media',
59
67
  description: 'Turn a conversation into an actual opportunity. Get her contact or set up a date.',
60
- difficulty: 2,
68
+ difficulty: 3,
61
69
  topicType: 'Dating',
62
70
  habitTime: 'Anytime',
63
71
  habitDays: exports.allHabitDays,
64
- frequency: 'Daily'
72
+ frequency: 'Daily',
73
+ minDaysPerWeek: 3,
74
+ possibleNotificationDescriptions: [
75
+ 'No date yet? Keep stalling and stay a nobody.',
76
+ 'You didn’t ask. Pathetic. Get her number or keep dreaming.',
77
+ 'Your future self is pissed. Close the deal with a date already.',
78
+ 'Still too scared to ask? Guess who’s not getting laid.',
79
+ 'Don\'t let your boys down. Get her contact or a date today.'
80
+ ]
65
81
  },
66
82
  {
67
83
  name: 'Grooming',
68
84
  description: 'Wear your best clothes, keep hair in check. Always.',
69
- difficulty: 2,
85
+ difficulty: 1,
70
86
  topicType: 'Dating',
71
87
  habitTime: 'Anytime',
72
88
  habitDays: exports.allHabitDays,
73
- frequency: 'Daily'
89
+ frequency: 'Daily',
90
+ minDaysPerWeek: 7,
91
+ possibleNotificationDescriptions: [
92
+ 'Looking like trash today? No girl’s touching that.',
93
+ 'Sloppy hair, shitty clothes. Enjoy the friend zone, loser.',
94
+ 'Your mom didn’t raise a slob. Clean up and look sharp.',
95
+ 'Skipped grooming? Might as well quit dating now.',
96
+ 'Dress like a king or stay a peasant. Your call.'
97
+ ]
74
98
  },
75
99
  {
76
100
  name: 'Get new photos',
77
- description: 'Take new high-quality photos for dating apps, also make your bio message authentic. Ask your friend for help.',
101
+ description: 'Take new high-quality photos for dating apps.',
78
102
  difficulty: 2,
79
103
  topicType: 'Dating',
80
104
  habitTime: 'Anytime',
81
105
  habitDays: exports.allHabitDays,
82
- frequency: 'Daily'
106
+ frequency: 'Daily',
107
+ minDaysPerWeek: 2,
108
+ possibleNotificationDescriptions: [
109
+ 'No new pics? Your dating profile\'s a graveyard.',
110
+ 'Old photos still up? No wonder she’s swiping left.',
111
+ 'Your future self deserves better. Snap some fresh shots.',
112
+ 'Too lazy for new pics? Keep failing at this game.',
113
+ 'No new shots? She’ll think you peaked at 16. Fix it.'
114
+ ]
83
115
  },
84
116
  {
85
117
  name: 'Send messages',
86
- description: 'Instead of asking questions, try to write more assumptions about the girl.',
118
+ description: 'Instead of asking boring questions, make more assumptions about the girl.',
87
119
  difficulty: 2,
88
120
  topicType: 'Dating',
89
121
  habitTime: 'Anytime',
90
122
  habitDays: exports.allHabitDays,
91
- frequency: 'Daily'
123
+ frequency: 'Daily',
124
+ minDaysPerWeek: 5,
125
+ possibleNotificationDescriptions: [
126
+ 'No messages sent? Your game’s weaker than your biceps.',
127
+ 'Still asking boring questions? She’s already ghosting you.',
128
+ 'Your bloodline’s too strong for weak texts. Send a real one.',
129
+ 'She’s losing interest. Call out something from her bio and send it now.',
130
+ 'No text yet? Drop a line on her pic\'s vibe or kiss her reply goodbye.'
131
+ ]
92
132
  }
93
133
  ],
94
134
  Sleep: [
@@ -96,46 +136,86 @@ exports.habitTypesByTopicType = {
96
136
  name: 'No screens before bed',
97
137
  description: 'Put the phone away 1 hour before sleep. Read a book or journal instead.',
98
138
  difficulty: 2,
99
- topicType: 'Dating',
139
+ topicType: 'Sleep',
100
140
  habitTime: 'Anytime',
101
141
  habitDays: exports.allHabitDays,
102
- frequency: 'Daily'
142
+ frequency: 'Daily',
143
+ minDaysPerWeek: 7,
144
+ possibleNotificationDescriptions: [
145
+ 'Still scrolling? You’ll wake up a wrecked zombie.',
146
+ 'Phone’s your bedtime pal? Enjoy sucking at life.',
147
+ 'Your future self needs sleep. Ditch the screen now.',
148
+ 'No book, no journal? Keep tanking your mojo.',
149
+ 'Too weak to unplug? Stay a tired nobody.'
150
+ ]
103
151
  },
104
152
  {
105
- name: 'Consistent bedtime',
153
+ name: '> 7hr sleep',
106
154
  description: 'Go to bed and wake up at the same time. No excuses, even on weekends.',
107
155
  difficulty: 2,
108
- topicType: 'Dating',
156
+ topicType: 'Sleep',
109
157
  habitTime: 'Anytime',
110
158
  habitDays: exports.allHabitDays,
111
- frequency: 'Daily'
159
+ frequency: 'Daily',
160
+ minDaysPerWeek: 7,
161
+ possibleNotificationDescriptions: [
162
+ 'Late again? Your sloppy ass is a walking mess.',
163
+ 'No bedtime yet? You’re begging to have a heart attack.',
164
+ 'Your ancestors thrived on routine. Get to bed on time.',
165
+ 'Still up? Stroke’s coming for you—sleep now.',
166
+ 'Can’t stick to a clock? Good luck winning at anything.'
167
+ ]
112
168
  },
113
169
  {
114
170
  name: 'No late-night snacking',
115
171
  description: 'Stop eating at least 2 hours before bed. Let your body rest, not digest.',
116
172
  difficulty: 2,
117
- topicType: 'Dating',
173
+ topicType: 'Sleep',
118
174
  habitTime: 'Anytime',
119
175
  habitDays: exports.allHabitDays,
120
- frequency: 'Daily'
176
+ frequency: 'Daily',
177
+ minDaysPerWeek: 7,
178
+ possibleNotificationDescriptions: [
179
+ 'Stuffing your face late? Enjoy that bloated gut.',
180
+ 'Snacking before bed? Kiss your gains goodbye, pig.',
181
+ 'Your bloodline didn’t bloat. Cut the midnight crap.',
182
+ 'Still eating? You’re a sluggish wreck by morning.',
183
+ 'Can’t stop munching? Stay fat and useless then.'
184
+ ]
121
185
  },
122
186
  {
123
187
  name: 'No caffeine after 2pm',
124
188
  description: 'Cut all caffeine - coffee, pre-workout, energy drinks. Water only.',
125
189
  difficulty: 2,
126
- topicType: 'Dating',
190
+ topicType: 'Sleep',
127
191
  habitTime: 'Anytime',
128
192
  habitDays: exports.allHabitDays,
129
- frequency: 'Daily'
193
+ frequency: 'Daily',
194
+ minDaysPerWeek: 7,
195
+ possibleNotificationDescriptions: [
196
+ 'Caffeine past 2? You’re a jittery disaster.',
197
+ 'Still sipping energy drinks? Crash and burn, loser.',
198
+ 'Your future self sleeps better. Drop the coffee now.',
199
+ 'Late buzz again? Heart’s ticking toward failure. Quit it.',
200
+ 'Too dumb to switch to water? Enjoy the insomnia.'
201
+ ]
130
202
  },
131
203
  {
132
204
  name: 'Optimize your sleep environment',
133
205
  description: 'Cool room, blackout curtains, clean sheets, no electronics nearby.',
134
206
  difficulty: 2,
135
- topicType: 'Dating',
207
+ topicType: 'Sleep',
136
208
  habitTime: 'Anytime',
137
209
  habitDays: exports.allHabitDays,
138
210
  frequency: 'Daily',
211
+ minDaysPerWeek: 7,
212
+ possibleNotificationDescriptions: [
213
+ 'Room’s a dump? You’re sleeping in a pigsty.',
214
+ 'No blackout curtains? Keep waking up a tired joke.',
215
+ 'Your coffin’s comfier than this. Fix your bedroom now.',
216
+ 'Electronics by the bed? Stay a restless nobody.',
217
+ 'Too lazy to cool the room? Enjoy being a wreck.'
218
+ ]
139
219
  }
140
220
  ],
141
221
  Fitness: [
@@ -143,84 +223,173 @@ exports.habitTypesByTopicType = {
143
223
  name: 'Stay active',
144
224
  description: 'Go to the gym, do cardio or just move. No lazy days.',
145
225
  difficulty: 2,
146
- topicType: 'Dating',
226
+ topicType: 'Fitness',
147
227
  habitTime: 'Anytime',
148
228
  habitDays: exports.allHabitDays,
149
- frequency: 'Daily'
229
+ frequency: 'Daily',
230
+ minDaysPerWeek: 7,
231
+ possibleNotificationDescriptions: [
232
+ 'No workout today? You’re a flabby waste.',
233
+ 'Still sitting on your ass? Softness doesn’t win.',
234
+ 'Your bloodline was tough. Move or shame them.',
235
+ 'Skipped the gym? Keep being a weak nobody.',
236
+ 'Too lazy to sweat? Enjoy the couch potato life.'
237
+ ]
150
238
  },
151
239
  {
152
240
  name: 'No processed sugars',
153
241
  description: 'Skip added sugars. Stick to natural sources like fruit.',
154
242
  difficulty: 2,
155
- topicType: 'Dating',
243
+ topicType: 'Fitness',
156
244
  habitTime: 'Anytime',
157
245
  habitDays: exports.allHabitDays,
158
- frequency: 'Daily'
246
+ frequency: 'Daily',
247
+ minDaysPerWeek: 7,
248
+ possibleNotificationDescriptions: [
249
+ 'Sugar binge again? Diabetes is your next date.',
250
+ 'Candy over fruit? Heart attack’s loading, moron.',
251
+ 'Your future self’s fit. Ditch the junk now.',
252
+ 'Still eating crap? Enjoy being fat f*ck.',
253
+ 'Too weak for clean food? Stay a flabby reject.'
254
+ ]
159
255
  },
160
256
  {
161
257
  name: 'No alcohol',
162
258
  description: 'Stay 100% alcohol-free. No exceptions, no slip-ups.',
163
259
  difficulty: 2,
164
- topicType: 'Dating',
260
+ topicType: 'Fitness',
165
261
  habitTime: 'Anytime',
166
262
  habitDays: exports.allHabitDays,
167
- frequency: 'Daily'
263
+ frequency: 'Daily',
264
+ minDaysPerWeek: 7,
265
+ possibleNotificationDescriptions: [
266
+ 'Booze today? Enjoy your beer gut.',
267
+ 'Drinking again? You’re a sloppy disaster.',
268
+ 'Your ancestors didn’t need vodka shots. Quit now.',
269
+ 'Sipped a beer? Your liver is rotting away.',
270
+ 'Too soft to go dry? Your gut’s a ticking bomb. Quit now.'
271
+ ]
168
272
  },
169
273
  {
170
274
  name: 'Weigh yourself',
171
- description: 'Track weight every week.',
275
+ description: 'Track weight your weight, so you know you\'re moving in the right direction.',
172
276
  difficulty: 2,
173
- topicType: 'Dating',
277
+ topicType: 'Fitness',
174
278
  habitTime: 'Anytime',
175
279
  habitDays: exports.allHabitDays,
176
- frequency: 'Daily'
280
+ frequency: 'Daily',
281
+ minDaysPerWeek: 7,
282
+ possibleNotificationDescriptions: [
283
+ 'No weigh-in? Blind to how fat you’re getting?',
284
+ 'Skipping the scale? Your bulk’s out of control.',
285
+ 'Your future self tracks it—step up and weigh in.',
286
+ 'Too scared to check? Keep guessing your failure.',
287
+ 'No numbers today? Enjoy the clueless bloat.'
288
+ ]
177
289
  },
178
290
  {
179
291
  name: 'Meal prep',
180
292
  description: 'Cook meals in bulk. No excuses for missing protein or eating junk.',
181
293
  difficulty: 2,
182
- topicType: 'Dating',
294
+ topicType: 'Fitness',
183
295
  habitTime: 'Anytime',
184
296
  habitDays: exports.allHabitDays,
185
- frequency: 'Daily'
297
+ frequency: 'Daily',
298
+ minDaysPerWeek: 2,
299
+ possibleNotificationDescriptions: [
300
+ 'No prep today? You’re a takeout-fed slob.',
301
+ 'Skipped cooking? Enjoy your weak-ass frame.',
302
+ 'No meals ready? Obesity’s your future—cook now.',
303
+ 'Still eating junk? No muscle, no glory.',
304
+ 'Too lazy to cook? Stay scrawny and broke.'
305
+ ]
186
306
  }
187
307
  ],
188
308
  'Side Hustle': [
189
309
  {
190
310
  name: 'Dedicate 2 hours to hustle',
191
- description: 'Two focused hours on your hustle. No distractions, no excuses.',
311
+ description: '2 focused hours on your hustle. No distractions, no excuses.',
192
312
  difficulty: 2,
193
- topicType: 'Dating',
313
+ topicType: 'Side Hustle',
194
314
  habitTime: 'Anytime',
195
315
  habitDays: exports.allHabitDays,
196
- frequency: 'Daily'
316
+ frequency: 'Daily',
317
+ minDaysPerWeek: 7,
318
+ possibleNotificationDescriptions: [
319
+ 'No hustle time today? You’re a broke-ass joke.',
320
+ 'Skipped your 2 hours? Keep begging for scraps.',
321
+ 'Your future self’s rich. Put in the work now.',
322
+ 'Distracted again? Retire broke at 80. Take action now.',
323
+ 'Too soft for focus? Die with regrets, loser.'
324
+ ]
197
325
  },
198
326
  {
199
327
  name: 'Client outreach',
200
328
  description: 'Contact potential clients or partners.',
201
329
  difficulty: 2,
202
- topicType: 'Dating',
330
+ topicType: 'Side Hustle',
203
331
  habitTime: 'Anytime',
204
332
  habitDays: exports.allHabitDays,
205
- frequency: 'Daily'
333
+ frequency: 'Daily',
334
+ minDaysPerWeek: 3,
335
+ possibleNotificationDescriptions: [
336
+ 'No outreach yet? Your hustle’s dead in the water.',
337
+ 'Too shy to reach out? Stay broke and forgotten.',
338
+ 'Your bloodline built empires. Message someone now.',
339
+ 'Still silent? No money, no momentum.',
340
+ 'Can’t pitch today? Enjoy the empty pockets.'
341
+ ]
206
342
  },
207
343
  {
208
- name: 'Post content',
209
- description: 'Share something valuable related to your hustle.',
344
+ name: 'Share your journey',
345
+ description: 'Social media post, blog, tweet, vlog or message someone.',
210
346
  difficulty: 2,
211
- topicType: 'Dating',
347
+ topicType: 'Side Hustle',
212
348
  habitTime: 'Anytime',
213
349
  habitDays: exports.allHabitDays,
214
- frequency: 'Daily'
350
+ frequency: 'Daily',
351
+ minDaysPerWeek: 7,
352
+ possibleNotificationDescriptions: [
353
+ 'No post today? Your hustle’s a ghost town.',
354
+ 'Nothing shared? You’re a lazy nobody.',
355
+ 'Your future self’s a boss. Post something worth a damn.',
356
+ 'Too lame to share? Keep fading into nothing.',
357
+ 'Skipped content? Rot broke in obscurity—post now.'
358
+ ]
215
359
  },
216
360
  {
217
361
  name: 'Get real feedback',
218
362
  description: 'Ask a customer or friend what they’d change about your hustle.',
219
363
  difficulty: 2,
220
- topicType: 'Dating',
364
+ topicType: 'Side Hustle',
221
365
  habitTime: 'Anytime',
222
366
  habitDays: exports.allHabitDays,
223
- frequency: 'Daily'
367
+ frequency: 'Daily',
368
+ minDaysPerWeek: 2,
369
+ possibleNotificationDescriptions: [
370
+ 'No feedback yet? Your hustle’s trash and you’re blind.',
371
+ 'Too scared to ask? Keep failing in silence, chump.',
372
+ 'Your grave’s waiting. Get input or flop forever.',
373
+ 'Still guessing? No critique, no growth.',
374
+ 'Can’t face the truth? Stay stuck and broke.'
375
+ ]
224
376
  },
377
+ {
378
+ name: 'Study competitors',
379
+ description: 'Analyze what your rivals are doing, see what works, what not.',
380
+ difficulty: 2,
381
+ topicType: 'Side Hustle',
382
+ habitTime: 'Anytime',
383
+ habitDays: exports.allHabitDays,
384
+ frequency: 'Daily',
385
+ minDaysPerWeek: 3,
386
+ possibleNotificationDescriptions: [
387
+ 'No competitor check? They’re crushing you blind.',
388
+ 'Skipped studying? You’re a sitting duck, wake up.',
389
+ 'Your future self outsmarts them. Scope rivals now.',
390
+ 'Too lazy to spy? Regrets will bury you broke.',
391
+ 'Not watching them? They’ll bury you. Lock in today.'
392
+ ]
393
+ }
225
394
  ]
226
395
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hy-capital/api-habit-tracker-types",
3
- "version": "1.0.51",
3
+ "version": "1.0.52",
4
4
  "main": "dist/index.js",
5
5
  "license": "MIT",
6
6
  "types": "dist/index.d.ts",
package/src/habit.ts CHANGED
@@ -59,6 +59,8 @@ export interface HabitType {
59
59
  description: string;
60
60
  frequency: HabitFrequency;
61
61
  habitDays: HabitDay[];
62
+ possibleNotificationDescriptions: string[];
63
+ minDaysPerWeek: number;
62
64
  }
63
65
 
64
66
  export interface BaseHabit {
@@ -73,10 +75,12 @@ export interface BaseHabit {
73
75
  description: string;
74
76
  remind_me: boolean;
75
77
  remind_me_at_times: RemindMeAtTime[]; // these are shown in FO
76
- notifications: Notification[]; // these are Local notification times
78
+ notifications: Notification[]; // these are Local notification times (work offline)
77
79
  frequency: HabitFrequency; //TODO: keep only daily
78
80
  habit_days: HabitDay[];
79
81
  habit_dates: number[]; //TODO: remove
82
+ possible_notification_descriptions: string[];
83
+ min_days_per_week: number;
80
84
  }
81
85
 
82
86
  export interface RemindMeAtTime {
@@ -130,48 +134,88 @@ export const habitTypesByTopicType: Record<TopicType, HabitType[]> = {
130
134
  Dating: [
131
135
  {
132
136
  name: 'Talk to new person',
133
- description: 'No pressure, just talk about whatever, whoever, no matter how long or short.',
134
- difficulty: 2,
137
+ description: 'No pressure, just talk about whatever, no matter how long or short.',
138
+ difficulty: 3,
135
139
  topicType: 'Dating',
136
140
  habitTime: 'Anytime',
137
141
  habitDays: allHabitDays,
138
- frequency: 'Daily'
142
+ frequency: 'Daily',
143
+ minDaysPerWeek: 5,
144
+ possibleNotificationDescriptions: [
145
+ 'You haven\'t talked to new person today. No wonder you\'re single.',
146
+ 'Still haven’t talked to anyone new? Your dating life won’t improve itself.',
147
+ 'Another day, no balls to chat. Enjoy being alone forever.',
148
+ 'Your social skills suck. Talk to a person or stay a useless reject.',
149
+ 'Don’t let your future self down. Talk to someone new today.'
150
+ ]
139
151
  },
140
152
  {
141
153
  name: 'Ask for date/social media',
142
154
  description: 'Turn a conversation into an actual opportunity. Get her contact or set up a date.',
143
- difficulty: 2,
155
+ difficulty: 3,
144
156
  topicType: 'Dating',
145
157
  habitTime: 'Anytime',
146
158
  habitDays: allHabitDays,
147
- frequency: 'Daily'
159
+ frequency: 'Daily',
160
+ minDaysPerWeek: 3,
161
+ possibleNotificationDescriptions: [
162
+ 'No date yet? Keep stalling and stay a nobody.',
163
+ 'You didn’t ask. Pathetic. Get her number or keep dreaming.',
164
+ 'Your future self is pissed. Close the deal with a date already.',
165
+ 'Still too scared to ask? Guess who’s not getting laid.',
166
+ 'Don\'t let your boys down. Get her contact or a date today.'
167
+ ]
148
168
  },
149
169
  {
150
170
  name: 'Grooming',
151
171
  description: 'Wear your best clothes, keep hair in check. Always.',
152
- difficulty: 2,
172
+ difficulty: 1,
153
173
  topicType: 'Dating',
154
174
  habitTime: 'Anytime',
155
175
  habitDays: allHabitDays,
156
- frequency: 'Daily'
176
+ frequency: 'Daily',
177
+ minDaysPerWeek: 7,
178
+ possibleNotificationDescriptions: [
179
+ 'Looking like trash today? No girl’s touching that.',
180
+ 'Sloppy hair, shitty clothes. Enjoy the friend zone, loser.',
181
+ 'Your mom didn’t raise a slob. Clean up and look sharp.',
182
+ 'Skipped grooming? Might as well quit dating now.',
183
+ 'Dress like a king or stay a peasant. Your call.'
184
+ ]
157
185
  },
158
186
  {
159
187
  name: 'Get new photos',
160
- description: 'Take new high-quality photos for dating apps, also make your bio message authentic. Ask your friend for help.',
188
+ description: 'Take new high-quality photos for dating apps.',
161
189
  difficulty: 2,
162
190
  topicType: 'Dating',
163
191
  habitTime: 'Anytime',
164
192
  habitDays: allHabitDays,
165
- frequency: 'Daily'
193
+ frequency: 'Daily',
194
+ minDaysPerWeek: 2,
195
+ possibleNotificationDescriptions: [
196
+ 'No new pics? Your dating profile\'s a graveyard.',
197
+ 'Old photos still up? No wonder she’s swiping left.',
198
+ 'Your future self deserves better. Snap some fresh shots.',
199
+ 'Too lazy for new pics? Keep failing at this game.',
200
+ 'No new shots? She’ll think you peaked at 16. Fix it.'
201
+ ]
166
202
  },
167
203
  {
168
204
  name: 'Send messages',
169
- description: 'Instead of asking questions, try to write more assumptions about the girl.',
205
+ description: 'Instead of asking boring questions, make more assumptions about the girl.',
170
206
  difficulty: 2,
171
207
  topicType: 'Dating',
172
208
  habitTime: 'Anytime',
173
209
  habitDays: allHabitDays,
174
- frequency: 'Daily'
210
+ frequency: 'Daily',
211
+ minDaysPerWeek: 5,
212
+ possibleNotificationDescriptions: [
213
+ 'No messages sent? Your game’s weaker than your biceps.',
214
+ 'Still asking boring questions? She’s already ghosting you.',
215
+ 'Your bloodline’s too strong for weak texts. Send a real one.',
216
+ 'She’s losing interest. Call out something from her bio and send it now.',
217
+ 'No text yet? Drop a line on her pic\'s vibe or kiss her reply goodbye.'
218
+ ]
175
219
  }
176
220
  ],
177
221
  Sleep: [
@@ -179,46 +223,86 @@ export const habitTypesByTopicType: Record<TopicType, HabitType[]> = {
179
223
  name: 'No screens before bed',
180
224
  description: 'Put the phone away 1 hour before sleep. Read a book or journal instead.',
181
225
  difficulty: 2,
182
- topicType: 'Dating',
226
+ topicType: 'Sleep',
183
227
  habitTime: 'Anytime',
184
228
  habitDays: allHabitDays,
185
- frequency: 'Daily'
229
+ frequency: 'Daily',
230
+ minDaysPerWeek: 7,
231
+ possibleNotificationDescriptions: [
232
+ 'Still scrolling? You’ll wake up a wrecked zombie.',
233
+ 'Phone’s your bedtime pal? Enjoy sucking at life.',
234
+ 'Your future self needs sleep. Ditch the screen now.',
235
+ 'No book, no journal? Keep tanking your mojo.',
236
+ 'Too weak to unplug? Stay a tired nobody.'
237
+ ]
186
238
  },
187
239
  {
188
- name: 'Consistent bedtime',
240
+ name: '> 7hr sleep',
189
241
  description: 'Go to bed and wake up at the same time. No excuses, even on weekends.',
190
242
  difficulty: 2,
191
- topicType: 'Dating',
243
+ topicType: 'Sleep',
192
244
  habitTime: 'Anytime',
193
245
  habitDays: allHabitDays,
194
- frequency: 'Daily'
246
+ frequency: 'Daily',
247
+ minDaysPerWeek: 7,
248
+ possibleNotificationDescriptions: [
249
+ 'Late again? Your sloppy ass is a walking mess.',
250
+ 'No bedtime yet? You’re begging to have a heart attack.',
251
+ 'Your ancestors thrived on routine. Get to bed on time.',
252
+ 'Still up? Stroke’s coming for you—sleep now.',
253
+ 'Can’t stick to a clock? Good luck winning at anything.'
254
+ ]
195
255
  },
196
256
  {
197
257
  name: 'No late-night snacking',
198
258
  description: 'Stop eating at least 2 hours before bed. Let your body rest, not digest.',
199
259
  difficulty: 2,
200
- topicType: 'Dating',
260
+ topicType: 'Sleep',
201
261
  habitTime: 'Anytime',
202
262
  habitDays: allHabitDays,
203
- frequency: 'Daily'
263
+ frequency: 'Daily',
264
+ minDaysPerWeek: 7,
265
+ possibleNotificationDescriptions: [
266
+ 'Stuffing your face late? Enjoy that bloated gut.',
267
+ 'Snacking before bed? Kiss your gains goodbye, pig.',
268
+ 'Your bloodline didn’t bloat. Cut the midnight crap.',
269
+ 'Still eating? You’re a sluggish wreck by morning.',
270
+ 'Can’t stop munching? Stay fat and useless then.'
271
+ ]
204
272
  },
205
273
  {
206
274
  name: 'No caffeine after 2pm',
207
275
  description: 'Cut all caffeine - coffee, pre-workout, energy drinks. Water only.',
208
276
  difficulty: 2,
209
- topicType: 'Dating',
277
+ topicType: 'Sleep',
210
278
  habitTime: 'Anytime',
211
279
  habitDays: allHabitDays,
212
- frequency: 'Daily'
280
+ frequency: 'Daily',
281
+ minDaysPerWeek: 7,
282
+ possibleNotificationDescriptions: [
283
+ 'Caffeine past 2? You’re a jittery disaster.',
284
+ 'Still sipping energy drinks? Crash and burn, loser.',
285
+ 'Your future self sleeps better. Drop the coffee now.',
286
+ 'Late buzz again? Heart’s ticking toward failure. Quit it.',
287
+ 'Too dumb to switch to water? Enjoy the insomnia.'
288
+ ]
213
289
  },
214
290
  {
215
291
  name: 'Optimize your sleep environment',
216
292
  description: 'Cool room, blackout curtains, clean sheets, no electronics nearby.',
217
293
  difficulty: 2,
218
- topicType: 'Dating',
294
+ topicType: 'Sleep',
219
295
  habitTime: 'Anytime',
220
296
  habitDays: allHabitDays,
221
297
  frequency: 'Daily',
298
+ minDaysPerWeek: 7,
299
+ possibleNotificationDescriptions: [
300
+ 'Room’s a dump? You’re sleeping in a pigsty.',
301
+ 'No blackout curtains? Keep waking up a tired joke.',
302
+ 'Your coffin’s comfier than this. Fix your bedroom now.',
303
+ 'Electronics by the bed? Stay a restless nobody.',
304
+ 'Too lazy to cool the room? Enjoy being a wreck.'
305
+ ]
222
306
  }
223
307
  ],
224
308
  Fitness: [
@@ -226,84 +310,173 @@ export const habitTypesByTopicType: Record<TopicType, HabitType[]> = {
226
310
  name: 'Stay active',
227
311
  description: 'Go to the gym, do cardio or just move. No lazy days.',
228
312
  difficulty: 2,
229
- topicType: 'Dating',
313
+ topicType: 'Fitness',
230
314
  habitTime: 'Anytime',
231
315
  habitDays: allHabitDays,
232
- frequency: 'Daily'
316
+ frequency: 'Daily',
317
+ minDaysPerWeek: 7,
318
+ possibleNotificationDescriptions: [
319
+ 'No workout today? You’re a flabby waste.',
320
+ 'Still sitting on your ass? Softness doesn’t win.',
321
+ 'Your bloodline was tough. Move or shame them.',
322
+ 'Skipped the gym? Keep being a weak nobody.',
323
+ 'Too lazy to sweat? Enjoy the couch potato life.'
324
+ ]
233
325
  },
234
326
  {
235
327
  name: 'No processed sugars',
236
328
  description: 'Skip added sugars. Stick to natural sources like fruit.',
237
329
  difficulty: 2,
238
- topicType: 'Dating',
330
+ topicType: 'Fitness',
239
331
  habitTime: 'Anytime',
240
332
  habitDays: allHabitDays,
241
- frequency: 'Daily'
333
+ frequency: 'Daily',
334
+ minDaysPerWeek: 7,
335
+ possibleNotificationDescriptions: [
336
+ 'Sugar binge again? Diabetes is your next date.',
337
+ 'Candy over fruit? Heart attack’s loading, moron.',
338
+ 'Your future self’s fit. Ditch the junk now.',
339
+ 'Still eating crap? Enjoy being fat f*ck.',
340
+ 'Too weak for clean food? Stay a flabby reject.'
341
+ ]
242
342
  },
243
343
  {
244
344
  name: 'No alcohol',
245
345
  description: 'Stay 100% alcohol-free. No exceptions, no slip-ups.',
246
346
  difficulty: 2,
247
- topicType: 'Dating',
347
+ topicType: 'Fitness',
248
348
  habitTime: 'Anytime',
249
349
  habitDays: allHabitDays,
250
- frequency: 'Daily'
350
+ frequency: 'Daily',
351
+ minDaysPerWeek: 7,
352
+ possibleNotificationDescriptions: [
353
+ 'Booze today? Enjoy your beer gut.',
354
+ 'Drinking again? You’re a sloppy disaster.',
355
+ 'Your ancestors didn’t need vodka shots. Quit now.',
356
+ 'Sipped a beer? Your liver is rotting away.',
357
+ 'Too soft to go dry? Your gut’s a ticking bomb. Quit now.'
358
+ ]
251
359
  },
252
360
  {
253
361
  name: 'Weigh yourself',
254
- description: 'Track weight every week.',
362
+ description: 'Track weight your weight, so you know you\'re moving in the right direction.',
255
363
  difficulty: 2,
256
- topicType: 'Dating',
364
+ topicType: 'Fitness',
257
365
  habitTime: 'Anytime',
258
366
  habitDays: allHabitDays,
259
- frequency: 'Daily'
367
+ frequency: 'Daily',
368
+ minDaysPerWeek: 7,
369
+ possibleNotificationDescriptions: [
370
+ 'No weigh-in? Blind to how fat you’re getting?',
371
+ 'Skipping the scale? Your bulk’s out of control.',
372
+ 'Your future self tracks it—step up and weigh in.',
373
+ 'Too scared to check? Keep guessing your failure.',
374
+ 'No numbers today? Enjoy the clueless bloat.'
375
+ ]
260
376
  },
261
377
  {
262
378
  name: 'Meal prep',
263
379
  description: 'Cook meals in bulk. No excuses for missing protein or eating junk.',
264
380
  difficulty: 2,
265
- topicType: 'Dating',
381
+ topicType: 'Fitness',
266
382
  habitTime: 'Anytime',
267
383
  habitDays: allHabitDays,
268
- frequency: 'Daily'
384
+ frequency: 'Daily',
385
+ minDaysPerWeek: 2,
386
+ possibleNotificationDescriptions: [
387
+ 'No prep today? You’re a takeout-fed slob.',
388
+ 'Skipped cooking? Enjoy your weak-ass frame.',
389
+ 'No meals ready? Obesity’s your future—cook now.',
390
+ 'Still eating junk? No muscle, no glory.',
391
+ 'Too lazy to cook? Stay scrawny and broke.'
392
+ ]
269
393
  }
270
394
  ],
271
395
  'Side Hustle': [
272
396
  {
273
397
  name: 'Dedicate 2 hours to hustle',
274
- description: 'Two focused hours on your hustle. No distractions, no excuses.',
398
+ description: '2 focused hours on your hustle. No distractions, no excuses.',
275
399
  difficulty: 2,
276
- topicType: 'Dating',
400
+ topicType: 'Side Hustle',
277
401
  habitTime: 'Anytime',
278
402
  habitDays: allHabitDays,
279
- frequency: 'Daily'
403
+ frequency: 'Daily',
404
+ minDaysPerWeek: 7,
405
+ possibleNotificationDescriptions: [
406
+ 'No hustle time today? You’re a broke-ass joke.',
407
+ 'Skipped your 2 hours? Keep begging for scraps.',
408
+ 'Your future self’s rich. Put in the work now.',
409
+ 'Distracted again? Retire broke at 80. Take action now.',
410
+ 'Too soft for focus? Die with regrets, loser.'
411
+ ]
280
412
  },
281
413
  {
282
414
  name: 'Client outreach',
283
415
  description: 'Contact potential clients or partners.',
284
416
  difficulty: 2,
285
- topicType: 'Dating',
417
+ topicType: 'Side Hustle',
286
418
  habitTime: 'Anytime',
287
419
  habitDays: allHabitDays,
288
- frequency: 'Daily'
420
+ frequency: 'Daily',
421
+ minDaysPerWeek: 3,
422
+ possibleNotificationDescriptions: [
423
+ 'No outreach yet? Your hustle’s dead in the water.',
424
+ 'Too shy to reach out? Stay broke and forgotten.',
425
+ 'Your bloodline built empires. Message someone now.',
426
+ 'Still silent? No money, no momentum.',
427
+ 'Can’t pitch today? Enjoy the empty pockets.'
428
+ ]
289
429
  },
290
430
  {
291
- name: 'Post content',
292
- description: 'Share something valuable related to your hustle.',
431
+ name: 'Share your journey',
432
+ description: 'Social media post, blog, tweet, vlog or message someone.',
293
433
  difficulty: 2,
294
- topicType: 'Dating',
434
+ topicType: 'Side Hustle',
295
435
  habitTime: 'Anytime',
296
436
  habitDays: allHabitDays,
297
- frequency: 'Daily'
437
+ frequency: 'Daily',
438
+ minDaysPerWeek: 7,
439
+ possibleNotificationDescriptions: [
440
+ 'No post today? Your hustle’s a ghost town.',
441
+ 'Nothing shared? You’re a lazy nobody.',
442
+ 'Your future self’s a boss. Post something worth a damn.',
443
+ 'Too lame to share? Keep fading into nothing.',
444
+ 'Skipped content? Rot broke in obscurity—post now.'
445
+ ]
298
446
  },
299
447
  {
300
448
  name: 'Get real feedback',
301
449
  description: 'Ask a customer or friend what they’d change about your hustle.',
302
450
  difficulty: 2,
303
- topicType: 'Dating',
451
+ topicType: 'Side Hustle',
304
452
  habitTime: 'Anytime',
305
453
  habitDays: allHabitDays,
306
- frequency: 'Daily'
454
+ frequency: 'Daily',
455
+ minDaysPerWeek: 2,
456
+ possibleNotificationDescriptions: [
457
+ 'No feedback yet? Your hustle’s trash and you’re blind.',
458
+ 'Too scared to ask? Keep failing in silence, chump.',
459
+ 'Your grave’s waiting. Get input or flop forever.',
460
+ 'Still guessing? No critique, no growth.',
461
+ 'Can’t face the truth? Stay stuck and broke.'
462
+ ]
307
463
  },
464
+ {
465
+ name: 'Study competitors',
466
+ description: 'Analyze what your rivals are doing, see what works, what not.',
467
+ difficulty: 2,
468
+ topicType: 'Side Hustle',
469
+ habitTime: 'Anytime',
470
+ habitDays: allHabitDays,
471
+ frequency: 'Daily',
472
+ minDaysPerWeek: 3,
473
+ possibleNotificationDescriptions: [
474
+ 'No competitor check? They’re crushing you blind.',
475
+ 'Skipped studying? You’re a sitting duck, wake up.',
476
+ 'Your future self outsmarts them. Scope rivals now.',
477
+ 'Too lazy to spy? Regrets will bury you broke.',
478
+ 'Not watching them? They’ll bury you. Lock in today.'
479
+ ]
480
+ }
308
481
  ]
309
482
  };