dating-schema 0.5.0 → 0.6.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 (52) hide show
  1. package/dist/index.d.ts +5 -5
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +6 -6
  4. package/dist/index.js.map +1 -1
  5. package/dist/plan-limits.d.ts.map +1 -1
  6. package/dist/plan-limits.js.map +1 -1
  7. package/dist/profile-fields/01-hero-identity.d.ts.map +1 -1
  8. package/dist/profile-fields/01-hero-identity.js +45 -9
  9. package/dist/profile-fields/01-hero-identity.js.map +1 -1
  10. package/dist/profile-fields/03-basics.d.ts.map +1 -1
  11. package/dist/profile-fields/03-basics.js +45 -9
  12. package/dist/profile-fields/03-basics.js.map +1 -1
  13. package/dist/profile-fields/04-looking-for.d.ts.map +1 -1
  14. package/dist/profile-fields/04-looking-for.js +5 -1
  15. package/dist/profile-fields/04-looking-for.js.map +1 -1
  16. package/dist/profile-fields/05-personality.d.ts.map +1 -1
  17. package/dist/profile-fields/05-personality.js.map +1 -1
  18. package/dist/profile-fields/06-self-assessment.d.ts.map +1 -1
  19. package/dist/profile-fields/06-self-assessment.js.map +1 -1
  20. package/dist/profile-fields/07-interests.d.ts.map +1 -1
  21. package/dist/profile-fields/07-interests.js +20 -4
  22. package/dist/profile-fields/07-interests.js.map +1 -1
  23. package/dist/profile-fields/09-values.d.ts.map +1 -1
  24. package/dist/profile-fields/09-values.js +32 -8
  25. package/dist/profile-fields/09-values.js.map +1 -1
  26. package/dist/profile-fields/10-career.js +1 -1
  27. package/dist/profile-fields/10-career.js.map +1 -1
  28. package/dist/profile-fields/11-lifestyle.js +8 -8
  29. package/dist/profile-fields/11-lifestyle.js.map +1 -1
  30. package/dist/profile-fields/12-cognitive.d.ts.map +1 -1
  31. package/dist/profile-fields/12-cognitive.js +50 -10
  32. package/dist/profile-fields/12-cognitive.js.map +1 -1
  33. package/dist/profile-fields/13-relationship-intimacy.d.ts.map +1 -1
  34. package/dist/profile-fields/13-relationship-intimacy.js +65 -13
  35. package/dist/profile-fields/13-relationship-intimacy.js.map +1 -1
  36. package/dist/profile-fields/14-family-home.d.ts.map +1 -1
  37. package/dist/profile-fields/14-family-home.js +67 -15
  38. package/dist/profile-fields/14-family-home.js.map +1 -1
  39. package/dist/profile-fields/15-finance-legal.d.ts.map +1 -1
  40. package/dist/profile-fields/15-finance-legal.js +10 -2
  41. package/dist/profile-fields/15-finance-legal.js.map +1 -1
  42. package/dist/profile-fields/16-health-wellness.d.ts.map +1 -1
  43. package/dist/profile-fields/16-health-wellness.js +10 -2
  44. package/dist/profile-fields/16-health-wellness.js.map +1 -1
  45. package/dist/profile-fields/index.d.ts +1 -1
  46. package/dist/profile-fields/index.d.ts.map +1 -1
  47. package/dist/profile-fields/index.js.map +1 -1
  48. package/dist/profile.d.ts +548 -0
  49. package/dist/profile.d.ts.map +1 -1
  50. package/dist/profile.js +1415 -264
  51. package/dist/profile.js.map +1 -1
  52. package/package.json +48 -48
package/dist/profile.js CHANGED
@@ -13,568 +13,1679 @@ import { photoSchema } from './common.js';
13
13
  const opts = (values) => z.enum(values);
14
14
  // ─── 01. Hero & Identity ─────────────────────────────────────────────────────
15
15
  const genderOpts = opts([
16
- 'man', 'woman', 'non_binary', 'trans_man', 'trans_woman',
17
- 'genderfluid', 'genderqueer', 'agender', 'two_spirit', 'other', 'prefer_not_to_say',
16
+ 'man',
17
+ 'woman',
18
+ 'non_binary',
19
+ 'trans_man',
20
+ 'trans_woman',
21
+ 'genderfluid',
22
+ 'genderqueer',
23
+ 'agender',
24
+ 'two_spirit',
25
+ 'other',
26
+ 'prefer_not_to_say',
18
27
  ]);
19
28
  const pronounsOpts = opts([
20
- 'he_him', 'she_her', 'they_them', 'ze_zir', 'xe_xem', 'other', 'prefer_not_to_say',
29
+ 'he_him',
30
+ 'she_her',
31
+ 'they_them',
32
+ 'ze_zir',
33
+ 'xe_xem',
34
+ 'other',
35
+ 'prefer_not_to_say',
21
36
  ]);
22
37
  const relationshipIntentOpts = opts([
23
- 'life_partner', 'long_term', 'long_term_open_to_short', 'short_term_open_to_long',
24
- 'short_term_fun', 'new_friends', 'figuring_out',
38
+ 'life_partner',
39
+ 'long_term',
40
+ 'long_term_open_to_short',
41
+ 'short_term_open_to_long',
42
+ 'short_term_fun',
43
+ 'new_friends',
44
+ 'figuring_out',
25
45
  ]);
26
46
  const sexualOrientationOpts = opts([
27
- 'straight', 'gay', 'lesbian', 'bisexual', 'pansexual', 'asexual', 'demisexual',
28
- 'queer', 'questioning', 'homoflexible', 'heteroflexible', 'sapiosexual', 'prefer_not_to_say',
47
+ 'straight',
48
+ 'gay',
49
+ 'lesbian',
50
+ 'bisexual',
51
+ 'pansexual',
52
+ 'asexual',
53
+ 'demisexual',
54
+ 'queer',
55
+ 'questioning',
56
+ 'homoflexible',
57
+ 'heteroflexible',
58
+ 'sapiosexual',
59
+ 'prefer_not_to_say',
29
60
  ]);
30
61
  const relationshipStructureOpts = opts([
31
- 'monogamy', 'ethical_non_monogamy', 'open_relationship', 'polyamory',
32
- 'open_to_exploring', 'figuring_out', 'prefer_not_to_say',
62
+ 'monogamy',
63
+ 'ethical_non_monogamy',
64
+ 'open_relationship',
65
+ 'polyamory',
66
+ 'open_to_exploring',
67
+ 'figuring_out',
68
+ 'prefer_not_to_say',
33
69
  ]);
34
70
  const mbtiTypeOpts = opts([
35
- 'INTJ', 'INTP', 'ENTJ', 'ENTP', 'INFJ', 'INFP', 'ENFJ', 'ENFP',
36
- 'ISTJ', 'ISFJ', 'ESTJ', 'ESFJ', 'ISTP', 'ISFP', 'ESTP', 'ESFP',
37
- 'dont_know', 'prefer_not_to_say',
71
+ 'INTJ',
72
+ 'INTP',
73
+ 'ENTJ',
74
+ 'ENTP',
75
+ 'INFJ',
76
+ 'INFP',
77
+ 'ENFJ',
78
+ 'ENFP',
79
+ 'ISTJ',
80
+ 'ISFJ',
81
+ 'ESTJ',
82
+ 'ESFJ',
83
+ 'ISTP',
84
+ 'ISFP',
85
+ 'ESTP',
86
+ 'ESFP',
87
+ 'dont_know',
88
+ 'prefer_not_to_say',
38
89
  ]);
39
90
  // ─── 02. Story & Prompts ─────────────────────────────────────────────────────
40
91
  const selfKeywordsOpts = opts([
41
- 'creative', 'loyal', 'ambitious', 'empathetic', 'funny', 'adventurous',
42
- 'introverted', 'extroverted', 'thoughtful', 'independent', 'caring', 'curious',
43
- 'passionate', 'resilient', 'honest', 'spontaneous', 'reliable', 'overthinking',
44
- 'stubborn', 'emotional', 'logical', 'spiritual', 'grounded', 'dreamer',
45
- 'perfectionist', 'easygoing', 'intense', 'optimistic', 'realistic', 'nerdy',
92
+ 'creative',
93
+ 'loyal',
94
+ 'ambitious',
95
+ 'empathetic',
96
+ 'funny',
97
+ 'adventurous',
98
+ 'introverted',
99
+ 'extroverted',
100
+ 'thoughtful',
101
+ 'independent',
102
+ 'caring',
103
+ 'curious',
104
+ 'passionate',
105
+ 'resilient',
106
+ 'honest',
107
+ 'spontaneous',
108
+ 'reliable',
109
+ 'overthinking',
110
+ 'stubborn',
111
+ 'emotional',
112
+ 'logical',
113
+ 'spiritual',
114
+ 'grounded',
115
+ 'dreamer',
116
+ 'perfectionist',
117
+ 'easygoing',
118
+ 'intense',
119
+ 'optimistic',
120
+ 'realistic',
121
+ 'nerdy',
46
122
  ]);
47
123
  // othersKeywords uses the same option set
48
124
  const othersKeywordsOpts = selfKeywordsOpts;
49
125
  // ─── 03. Basics & Deal-Breakers ──────────────────────────────────────────────
50
126
  const heightOpts = opts([
51
- 'under_150', '150_155', '155_160', '160_165', '165_170', '170_175',
52
- '175_180', '180_185', '185_190', 'over_190', 'prefer_not_to_say',
127
+ 'under_150',
128
+ '150_155',
129
+ '155_160',
130
+ '160_165',
131
+ '165_170',
132
+ '170_175',
133
+ '175_180',
134
+ '180_185',
135
+ '185_190',
136
+ 'over_190',
137
+ 'prefer_not_to_say',
53
138
  ]);
54
139
  const bodyBuildOpts = opts([
55
- 'slim', 'athletic', 'average', 'curvy', 'heavy', 'prefer_not_to_say',
140
+ 'slim',
141
+ 'athletic',
142
+ 'average',
143
+ 'curvy',
144
+ 'heavy',
145
+ 'prefer_not_to_say',
56
146
  ]);
57
147
  const religionOpts = opts([
58
- 'hindu', 'muslim_sunni', 'muslim_shia', 'muslim_other',
59
- 'christian_catholic', 'christian_protestant', 'christian_other',
60
- 'sikh', 'jain_digambar', 'jain_shwetambar', 'buddhist', 'parsi',
61
- 'jewish', 'bahai', 'spiritual', 'atheist', 'agnostic',
62
- 'inter_religion', 'other', 'prefer_not_to_say',
148
+ 'hindu',
149
+ 'muslim_sunni',
150
+ 'muslim_shia',
151
+ 'muslim_other',
152
+ 'christian_catholic',
153
+ 'christian_protestant',
154
+ 'christian_other',
155
+ 'sikh',
156
+ 'jain_digambar',
157
+ 'jain_shwetambar',
158
+ 'buddhist',
159
+ 'parsi',
160
+ 'jewish',
161
+ 'bahai',
162
+ 'spiritual',
163
+ 'atheist',
164
+ 'agnostic',
165
+ 'inter_religion',
166
+ 'other',
167
+ 'prefer_not_to_say',
63
168
  ]);
64
169
  const religionPracticeLevelOpts = opts([
65
- 'devout', 'weekly', 'occasional', 'spiritual_private', 'secular',
170
+ 'devout',
171
+ 'weekly',
172
+ 'occasional',
173
+ 'spiritual_private',
174
+ 'secular',
66
175
  ]);
67
176
  const religionPartnerPreferenceOpts = opts([
68
- 'very_important', 'somewhat_important', 'not_important', 'prefer_not_to_say',
177
+ 'very_important',
178
+ 'somewhat_important',
179
+ 'not_important',
180
+ 'prefer_not_to_say',
69
181
  ]);
70
182
  const culturalImportanceOpts = opts([
71
- 'very_important', 'somewhat_important', 'not_important', 'prefer_not_to_say',
183
+ 'very_important',
184
+ 'somewhat_important',
185
+ 'not_important',
186
+ 'prefer_not_to_say',
72
187
  ]);
73
188
  const manglikStatusOpts = opts([
74
- 'manglik', 'partial_manglik', 'non_manglik', 'dont_know', 'prefer_not_to_say',
189
+ 'manglik',
190
+ 'partial_manglik',
191
+ 'non_manglik',
192
+ 'dont_know',
193
+ 'prefer_not_to_say',
75
194
  ]);
76
195
  const motherTongueOpts = opts([
77
- 'hindi', 'english', 'bengali', 'telugu', 'marathi', 'tamil', 'urdu',
78
- 'gujarati', 'kannada', 'odia', 'malayalam', 'punjabi', 'assamese',
79
- 'maithili', 'sanskrit', 'sindhi', 'kashmiri', 'nepali', 'konkani',
80
- 'dogri', 'manipuri', 'bodo', 'santali', 'other',
196
+ 'hindi',
197
+ 'english',
198
+ 'bengali',
199
+ 'telugu',
200
+ 'marathi',
201
+ 'tamil',
202
+ 'urdu',
203
+ 'gujarati',
204
+ 'kannada',
205
+ 'odia',
206
+ 'malayalam',
207
+ 'punjabi',
208
+ 'assamese',
209
+ 'maithili',
210
+ 'sanskrit',
211
+ 'sindhi',
212
+ 'kashmiri',
213
+ 'nepali',
214
+ 'konkani',
215
+ 'dogri',
216
+ 'manipuri',
217
+ 'bodo',
218
+ 'santali',
219
+ 'other',
81
220
  ]);
82
221
  const languagesSpokenOpts = opts([
83
- 'hindi', 'english', 'bengali', 'telugu', 'marathi', 'tamil', 'urdu',
84
- 'gujarati', 'kannada', 'odia', 'malayalam', 'punjabi', 'assamese',
85
- 'maithili', 'sanskrit', 'sindhi', 'kashmiri', 'nepali', 'konkani',
86
- 'dogri', 'manipuri', 'bodo', 'santali', 'other',
87
- 'spanish', 'french', 'german', 'mandarin', 'japanese', 'korean',
88
- 'arabic', 'portuguese', 'russian', 'italian',
222
+ 'hindi',
223
+ 'english',
224
+ 'bengali',
225
+ 'telugu',
226
+ 'marathi',
227
+ 'tamil',
228
+ 'urdu',
229
+ 'gujarati',
230
+ 'kannada',
231
+ 'odia',
232
+ 'malayalam',
233
+ 'punjabi',
234
+ 'assamese',
235
+ 'maithili',
236
+ 'sanskrit',
237
+ 'sindhi',
238
+ 'kashmiri',
239
+ 'nepali',
240
+ 'konkani',
241
+ 'dogri',
242
+ 'manipuri',
243
+ 'bodo',
244
+ 'santali',
245
+ 'other',
246
+ 'spanish',
247
+ 'french',
248
+ 'german',
249
+ 'mandarin',
250
+ 'japanese',
251
+ 'korean',
252
+ 'arabic',
253
+ 'portuguese',
254
+ 'russian',
255
+ 'italian',
89
256
  ]);
90
257
  const educationLevelOpts = opts([
91
- 'high_school', 'diploma', 'bachelors', 'masters', 'doctorate', 'professional',
92
- 'in_college', 'in_grad_school', 'prefer_not_to_say',
258
+ 'high_school',
259
+ 'diploma',
260
+ 'bachelors',
261
+ 'masters',
262
+ 'doctorate',
263
+ 'professional',
264
+ 'in_college',
265
+ 'in_grad_school',
266
+ 'prefer_not_to_say',
93
267
  ]);
94
268
  const institutionTierOpts = opts([
95
- 'tier1_elite', 'tier2_reputed', 'tier3_regional', 'open_distance', 'prefer_not_to_say',
269
+ 'tier1_elite',
270
+ 'tier2_reputed',
271
+ 'tier3_regional',
272
+ 'open_distance',
273
+ 'prefer_not_to_say',
96
274
  ]);
97
275
  const professionOpts = opts([
98
- 'it_software', 'engineering', 'healthcare', 'education', 'finance_accounting',
99
- 'arts_entertainment', 'media_communication', 'business_management',
100
- 'government_public', 'legal', 'science_research', 'agriculture',
101
- 'hospitality_travel', 'real_estate', 'retail_ecommerce', 'manufacturing',
102
- 'self_employed', 'student', 'homemaker', 'not_working', 'other', 'prefer_not_to_say',
276
+ 'it_software',
277
+ 'engineering',
278
+ 'healthcare',
279
+ 'education',
280
+ 'finance_accounting',
281
+ 'arts_entertainment',
282
+ 'media_communication',
283
+ 'business_management',
284
+ 'government_public',
285
+ 'legal',
286
+ 'science_research',
287
+ 'agriculture',
288
+ 'hospitality_travel',
289
+ 'real_estate',
290
+ 'retail_ecommerce',
291
+ 'manufacturing',
292
+ 'self_employed',
293
+ 'student',
294
+ 'homemaker',
295
+ 'not_working',
296
+ 'other',
297
+ 'prefer_not_to_say',
103
298
  ]);
104
299
  const relationshipStatusOpts = opts([
105
- 'single', 'dating', 'separated', 'divorced', 'widowed', 'enm',
106
- 'its_complicated', 'prefer_not_to_say',
300
+ 'single',
301
+ 'dating',
302
+ 'separated',
303
+ 'divorced',
304
+ 'widowed',
305
+ 'enm',
306
+ 'its_complicated',
307
+ 'prefer_not_to_say',
107
308
  ]);
108
309
  const dietOpts = opts([
109
- 'vegetarian', 'vegan', 'eggetarian', 'non_vegetarian', 'pescatarian',
110
- 'occasionally_non_veg', 'flexitarian', 'jain', 'halal', 'kosher',
111
- 'other', 'prefer_not_to_say',
310
+ 'vegetarian',
311
+ 'vegan',
312
+ 'eggetarian',
313
+ 'non_vegetarian',
314
+ 'pescatarian',
315
+ 'occasionally_non_veg',
316
+ 'flexitarian',
317
+ 'jain',
318
+ 'halal',
319
+ 'kosher',
320
+ 'other',
321
+ 'prefer_not_to_say',
112
322
  ]);
113
323
  const smokingOpts = opts([
114
- 'never', 'socially', 'when_drinking', 'regularly', 'trying_to_quit', 'prefer_not_to_say',
324
+ 'never',
325
+ 'socially',
326
+ 'when_drinking',
327
+ 'regularly',
328
+ 'trying_to_quit',
329
+ 'prefer_not_to_say',
115
330
  ]);
116
331
  const alcoholOpts = opts([
117
- 'never', 'sober', 'rarely', 'socially', 'on_special_occasions', 'regularly', 'prefer_not_to_say',
332
+ 'never',
333
+ 'sober',
334
+ 'rarely',
335
+ 'socially',
336
+ 'on_special_occasions',
337
+ 'regularly',
338
+ 'prefer_not_to_say',
118
339
  ]);
119
340
  const cannabisOpts = opts([
120
- 'never', 'socially', 'regularly', 'medical_only', '420_friendly', 'prefer_not_to_say',
341
+ 'never',
342
+ 'socially',
343
+ 'regularly',
344
+ 'medical_only',
345
+ '420_friendly',
346
+ 'prefer_not_to_say',
121
347
  ]);
122
348
  const childrenPlansOpts = opts([
123
- 'want_children', 'dont_want', 'open_undecided', 'have_and_want_more',
124
- 'have_and_done', 'not_sure', 'prefer_not_to_say',
349
+ 'want_children',
350
+ 'dont_want',
351
+ 'open_undecided',
352
+ 'have_and_want_more',
353
+ 'have_and_done',
354
+ 'not_sure',
355
+ 'prefer_not_to_say',
125
356
  ]);
126
357
  const lookingForEntrepreneurOpts = opts([
127
- 'yes', 'prefer', 'dont_care', 'prefer_not_to_say',
358
+ 'yes',
359
+ 'prefer',
360
+ 'dont_care',
361
+ 'prefer_not_to_say',
362
+ ]);
363
+ const nakshatraOpts = opts([
364
+ 'ashwini',
365
+ 'bharani',
366
+ 'krittika',
367
+ 'rohini',
368
+ 'mrigashira',
369
+ 'ardra',
370
+ 'punarvasu',
371
+ 'pushya',
372
+ 'ashlesha',
373
+ 'magha',
374
+ 'purva_phalguni',
375
+ 'uttara_phalguni',
376
+ 'hasta',
377
+ 'chitra',
378
+ 'swati',
379
+ 'vishakha',
380
+ 'anuradha',
381
+ 'jyeshtha',
382
+ 'moola',
383
+ 'purva_ashadha',
384
+ 'uttara_ashadha',
385
+ 'shravana',
386
+ 'dhanishta',
387
+ 'shatabhisha',
388
+ 'purva_bhadrapada',
389
+ 'uttara_bhadrapada',
390
+ 'revati',
391
+ 'dont_know',
392
+ 'prefer_not_to_say',
393
+ ]);
394
+ const rashiOpts = opts([
395
+ 'mesha',
396
+ 'vrishabha',
397
+ 'mithuna',
398
+ 'karka',
399
+ 'simha',
400
+ 'kanya',
401
+ 'tula',
402
+ 'vrischika',
403
+ 'dhanu',
404
+ 'makara',
405
+ 'kumbha',
406
+ 'meena',
407
+ 'dont_know',
408
+ 'prefer_not_to_say',
409
+ ]);
410
+ const hometownStateOpts = opts([
411
+ 'andhra_pradesh',
412
+ 'arunachal_pradesh',
413
+ 'assam',
414
+ 'bihar',
415
+ 'chhattisgarh',
416
+ 'goa',
417
+ 'gujarat',
418
+ 'haryana',
419
+ 'himachal_pradesh',
420
+ 'jharkhand',
421
+ 'karnataka',
422
+ 'kerala',
423
+ 'madhya_pradesh',
424
+ 'maharashtra',
425
+ 'manipur',
426
+ 'meghalaya',
427
+ 'mizoram',
428
+ 'nagaland',
429
+ 'odisha',
430
+ 'punjab',
431
+ 'rajasthan',
432
+ 'sikkim',
433
+ 'tamil_nadu',
434
+ 'telangana',
435
+ 'tripura',
436
+ 'uttar_pradesh',
437
+ 'uttarakhand',
438
+ 'west_bengal',
439
+ 'delhi',
440
+ 'jammu_kashmir',
441
+ 'ladakh',
442
+ 'chandigarh',
443
+ 'puducherry',
444
+ 'andaman_nicobar',
445
+ 'dadra_nagar_haveli',
446
+ 'lakshadweep',
447
+ 'international',
448
+ 'prefer_not_to_say',
128
449
  ]);
129
450
  // ─── 04. What I'm Looking For ────────────────────────────────────────────────
130
451
  const relationshipRoleOpts = opts([
131
- 'mentor', 'mentee', 'equal_partner', 'protector', 'nurturer', 'provider',
132
- 'companion', 'challenger', 'cheerleader', 'wise_partner', 'prefer_not_to_say',
452
+ 'mentor',
453
+ 'mentee',
454
+ 'equal_partner',
455
+ 'protector',
456
+ 'nurturer',
457
+ 'provider',
458
+ 'companion',
459
+ 'challenger',
460
+ 'cheerleader',
461
+ 'wise_partner',
462
+ 'prefer_not_to_say',
133
463
  ]);
134
464
  const sugarDaddyMommyOpts = opts([
135
- 'looking_for_sugar_daddy', 'looking_for_sugar_mommy', 'am_sugar_daddy',
136
- 'am_sugar_mommy', 'open_to_it', 'not_interested', 'prefer_not_to_say',
465
+ 'looking_for_sugar_daddy',
466
+ 'looking_for_sugar_mommy',
467
+ 'am_sugar_daddy',
468
+ 'am_sugar_mommy',
469
+ 'open_to_it',
470
+ 'not_interested',
471
+ 'prefer_not_to_say',
137
472
  ]);
138
473
  const dealbreakersOpts = opts([
139
- 'smoking', 'heavy_drinking', 'drug_use', 'no_ambition', 'dishonesty',
140
- 'poor_hygiene', 'different_religion', 'different_politics', 'no_kids_ever',
141
- 'already_has_kids', 'long_distance', 'non_monogamy', 'no_job',
142
- 'excessive_gaming', 'no_sense_of_humor', 'poor_communication', 'clingy',
143
- 'emotionally_unavailable', 'prefer_not_to_say',
474
+ 'smoking',
475
+ 'heavy_drinking',
476
+ 'drug_use',
477
+ 'no_ambition',
478
+ 'dishonesty',
479
+ 'poor_hygiene',
480
+ 'different_religion',
481
+ 'different_politics',
482
+ 'no_kids_ever',
483
+ 'already_has_kids',
484
+ 'long_distance',
485
+ 'non_monogamy',
486
+ 'no_job',
487
+ 'excessive_gaming',
488
+ 'no_sense_of_humor',
489
+ 'poor_communication',
490
+ 'clingy',
491
+ 'emotionally_unavailable',
492
+ 'prefer_not_to_say',
144
493
  ]);
145
494
  // ─── 05. Personality & Temperament ───────────────────────────────────────────
146
495
  const enneagramTypeOpts = opts([
147
- 'type_1', 'type_2', 'type_3', 'type_4', 'type_5', 'type_6',
148
- 'type_7', 'type_8', 'type_9', 'dont_know', 'prefer_not_to_say',
496
+ 'type_1',
497
+ 'type_2',
498
+ 'type_3',
499
+ 'type_4',
500
+ 'type_5',
501
+ 'type_6',
502
+ 'type_7',
503
+ 'type_8',
504
+ 'type_9',
505
+ 'dont_know',
506
+ 'prefer_not_to_say',
149
507
  ]);
150
508
  const attachmentStyleOpts = opts([
151
- 'secure', 'anxious', 'avoidant', 'fearful_avoidant', 'still_figuring_out', 'prefer_not_to_say',
509
+ 'secure',
510
+ 'anxious',
511
+ 'avoidant',
512
+ 'fearful_avoidant',
513
+ 'still_figuring_out',
514
+ 'prefer_not_to_say',
152
515
  ]);
153
516
  const humourStyleOpts = opts([
154
- 'witty', 'sarcastic', 'dry', 'goofy', 'dark', 'dad_jokes',
155
- 'self_deprecating', 'observational', 'punny', 'does_not_apply',
517
+ 'witty',
518
+ 'sarcastic',
519
+ 'dry',
520
+ 'goofy',
521
+ 'dark',
522
+ 'dad_jokes',
523
+ 'self_deprecating',
524
+ 'observational',
525
+ 'punny',
526
+ 'does_not_apply',
156
527
  ]);
157
528
  const relationshipPaceOpts = opts([
158
- 'slow', 'steady', 'fast', 'go_with_flow', 'prefer_not_to_say',
529
+ 'slow',
530
+ 'steady',
531
+ 'fast',
532
+ 'go_with_flow',
533
+ 'prefer_not_to_say',
159
534
  ]);
160
535
  const communicationStyleOpts = opts([
161
- 'big_texter', 'phone_caller', 'voice_note_lover', 'send_memes',
162
- 'better_in_person', 'slow_replier', 'prefer_not_to_say',
536
+ 'big_texter',
537
+ 'phone_caller',
538
+ 'voice_note_lover',
539
+ 'send_memes',
540
+ 'better_in_person',
541
+ 'slow_replier',
542
+ 'prefer_not_to_say',
163
543
  ]);
164
544
  const scientificTemperOpts = opts([
165
- 'strongly_scientific', 'mostly_scientific', 'balanced', 'mostly_intuitive',
166
- 'strongly_intuitive', 'prefer_not_to_say',
545
+ 'strongly_scientific',
546
+ 'mostly_scientific',
547
+ 'balanced',
548
+ 'mostly_intuitive',
549
+ 'strongly_intuitive',
550
+ 'prefer_not_to_say',
167
551
  ]);
168
552
  const outlookOnLifeOpts = opts([
169
- 'optimist', 'realist', 'pessimist', 'idealist', 'pragmatist', 'absurdist', 'prefer_not_to_say',
553
+ 'optimist',
554
+ 'realist',
555
+ 'pessimist',
556
+ 'idealist',
557
+ 'pragmatist',
558
+ 'absurdist',
559
+ 'prefer_not_to_say',
170
560
  ]);
171
561
  const socialBatteryOpts = opts([
172
- 'always_on', 'mostly_social', 'balanced', 'mostly_solo', 'hermit', 'prefer_not_to_say',
562
+ 'always_on',
563
+ 'mostly_social',
564
+ 'balanced',
565
+ 'mostly_solo',
566
+ 'hermit',
567
+ 'prefer_not_to_say',
173
568
  ]);
174
569
  // ─── 07. Interests & Hobbies ─────────────────────────────────────────────────
175
570
  const hobbiesOpts = opts([
176
- 'reading', 'writing', 'cooking', 'baking', 'photography', 'painting', 'drawing',
177
- 'hiking', 'camping', 'cycling', 'running', 'yoga', 'meditation', 'dancing',
178
- 'singing', 'playing_instrument', 'gardening', 'gaming', 'board_games', 'traveling',
179
- 'swimming', 'gym', 'martial_arts', 'rock_climbing', 'surfing', 'skiing', 'fishing',
180
- 'bird_watching', 'volunteering', 'crafts', 'pottery', 'knitting', 'woodworking',
181
- 'diy', 'podcasts', 'movies', 'anime', 'theater', 'stand_up_comedy', 'karaoke',
182
- 'wine_tasting', 'coffee', 'tea', 'blogging', 'vlogging', 'coding', 'investing',
183
- 'astrology_hobby', 'tarot', 'spirituality_practice', 'pet_care', 'horse_riding',
184
- 'scuba_diving', 'skateboarding', 'bowling', 'archery', 'other',
571
+ 'reading',
572
+ 'writing',
573
+ 'cooking',
574
+ 'baking',
575
+ 'photography',
576
+ 'painting',
577
+ 'drawing',
578
+ 'hiking',
579
+ 'camping',
580
+ 'cycling',
581
+ 'running',
582
+ 'yoga',
583
+ 'meditation',
584
+ 'dancing',
585
+ 'singing',
586
+ 'playing_instrument',
587
+ 'gardening',
588
+ 'gaming',
589
+ 'board_games',
590
+ 'traveling',
591
+ 'swimming',
592
+ 'gym',
593
+ 'martial_arts',
594
+ 'rock_climbing',
595
+ 'surfing',
596
+ 'skiing',
597
+ 'fishing',
598
+ 'bird_watching',
599
+ 'volunteering',
600
+ 'crafts',
601
+ 'pottery',
602
+ 'knitting',
603
+ 'woodworking',
604
+ 'diy',
605
+ 'podcasts',
606
+ 'movies',
607
+ 'anime',
608
+ 'theater',
609
+ 'stand_up_comedy',
610
+ 'karaoke',
611
+ 'wine_tasting',
612
+ 'coffee',
613
+ 'tea',
614
+ 'blogging',
615
+ 'vlogging',
616
+ 'coding',
617
+ 'investing',
618
+ 'astrology_hobby',
619
+ 'tarot',
620
+ 'spirituality_practice',
621
+ 'pet_care',
622
+ 'horse_riding',
623
+ 'scuba_diving',
624
+ 'skateboarding',
625
+ 'bowling',
626
+ 'archery',
627
+ 'other',
185
628
  ]);
186
629
  const musicGenresOpts = opts([
187
- 'pop', 'rock', 'hip_hop', 'rnb', 'jazz', 'classical', 'electronic', 'edm',
188
- 'country', 'folk', 'indie', 'metal', 'punk', 'reggae', 'latin', 'kpop',
189
- 'bollywood', 'sufi', 'ghazal', 'carnatic', 'hindustani_classical', 'devotional',
190
- 'lofi', 'ambient', 'other',
630
+ 'pop',
631
+ 'rock',
632
+ 'hip_hop',
633
+ 'rnb',
634
+ 'jazz',
635
+ 'classical',
636
+ 'electronic',
637
+ 'edm',
638
+ 'country',
639
+ 'folk',
640
+ 'indie',
641
+ 'metal',
642
+ 'punk',
643
+ 'reggae',
644
+ 'latin',
645
+ 'kpop',
646
+ 'bollywood',
647
+ 'sufi',
648
+ 'ghazal',
649
+ 'carnatic',
650
+ 'hindustani_classical',
651
+ 'devotional',
652
+ 'lofi',
653
+ 'ambient',
654
+ 'other',
191
655
  ]);
192
656
  const gamingInterestOpts = opts([
193
- 'hardcore', 'casual', 'mobile_only', 'board_tabletop', 'retro',
194
- 'not_a_gamer', 'prefer_not_to_say',
657
+ 'hardcore',
658
+ 'casual',
659
+ 'mobile_only',
660
+ 'board_tabletop',
661
+ 'retro',
662
+ 'not_a_gamer',
663
+ 'prefer_not_to_say',
195
664
  ]);
196
665
  const readingHabitOpts = opts([
197
- 'voracious', 'regular', 'occasional', 'audiobooks', 'articles_only',
198
- 'not_a_reader', 'prefer_not_to_say',
666
+ 'voracious',
667
+ 'regular',
668
+ 'occasional',
669
+ 'audiobooks',
670
+ 'articles_only',
671
+ 'not_a_reader',
672
+ 'prefer_not_to_say',
199
673
  ]);
200
674
  const artApreciationOpts = opts([
201
- 'creator', 'hobbyist', 'appreciator', 'casual', 'not_into_art', 'prefer_not_to_say',
675
+ 'creator',
676
+ 'hobbyist',
677
+ 'appreciator',
678
+ 'casual',
679
+ 'not_into_art',
680
+ 'prefer_not_to_say',
202
681
  ]);
203
682
  const eventPreferenceOpts = opts([
204
- 'concerts', 'festivals', 'sports_events', 'comedy_shows', 'theater_plays',
205
- 'art_exhibitions', 'food_festivals', 'book_readings', 'hackathons',
206
- 'spiritual_gatherings', 'house_parties', 'club_nights', 'outdoor_adventures',
207
- 'workshops', 'prefer_not_to_say',
683
+ 'concerts',
684
+ 'festivals',
685
+ 'sports_events',
686
+ 'comedy_shows',
687
+ 'theater_plays',
688
+ 'art_exhibitions',
689
+ 'food_festivals',
690
+ 'book_readings',
691
+ 'hackathons',
692
+ 'spiritual_gatherings',
693
+ 'house_parties',
694
+ 'club_nights',
695
+ 'outdoor_adventures',
696
+ 'workshops',
697
+ 'prefer_not_to_say',
208
698
  ]);
209
699
  const riskAppetiteOpts = opts([
210
- 'thrill_seeker', 'adventurous', 'moderate', 'cautious', 'risk_averse', 'prefer_not_to_say',
700
+ 'thrill_seeker',
701
+ 'adventurous',
702
+ 'moderate',
703
+ 'cautious',
704
+ 'risk_averse',
705
+ 'prefer_not_to_say',
211
706
  ]);
212
707
  const volunteerInterestOpts = opts([
213
- 'environment', 'animal_welfare', 'education_literacy', 'poverty', 'health',
214
- 'mental_health', 'gender_equality', 'lgbtq_rights', 'disability', 'children',
215
- 'elderly', 'disaster_relief', 'human_rights', 'tech_for_good', 'none', 'prefer_not_to_say',
708
+ 'environment',
709
+ 'animal_welfare',
710
+ 'education_literacy',
711
+ 'poverty',
712
+ 'health',
713
+ 'mental_health',
714
+ 'gender_equality',
715
+ 'lgbtq_rights',
716
+ 'disability',
717
+ 'children',
718
+ 'elderly',
719
+ 'disaster_relief',
720
+ 'human_rights',
721
+ 'tech_for_good',
722
+ 'none',
723
+ 'prefer_not_to_say',
216
724
  ]);
217
725
  const socialCircleSizeOpts = opts([
218
- 'small', 'medium', 'large', 'mostly_solo', 'prefer_not_to_say',
726
+ 'small',
727
+ 'medium',
728
+ 'large',
729
+ 'mostly_solo',
730
+ 'prefer_not_to_say',
219
731
  ]);
220
732
  // ─── 09. Values & Beliefs ────────────────────────────────────────────────────
221
733
  const lifeGoalsOpts = opts([
222
- 'build_family', 'career_success', 'financial_freedom', 'travel_world', 'make_impact',
223
- 'creative_fulfillment', 'spiritual_growth', 'education', 'start_business', 'buy_home',
224
- 'early_retirement', 'health_longevity', 'find_love', 'self_discovery', 'leave_legacy',
734
+ 'build_family',
735
+ 'career_success',
736
+ 'financial_freedom',
737
+ 'travel_world',
738
+ 'make_impact',
739
+ 'creative_fulfillment',
740
+ 'spiritual_growth',
741
+ 'education',
742
+ 'start_business',
743
+ 'buy_home',
744
+ 'early_retirement',
745
+ 'health_longevity',
746
+ 'find_love',
747
+ 'self_discovery',
748
+ 'leave_legacy',
225
749
  'prefer_not_to_say',
226
750
  ]);
227
751
  const politicalOrientationOpts = opts([
228
- 'liberal', 'moderate', 'conservative', 'apolitical', 'other', 'prefer_not_to_say',
752
+ 'liberal',
753
+ 'moderate',
754
+ 'conservative',
755
+ 'apolitical',
756
+ 'other',
757
+ 'prefer_not_to_say',
229
758
  ]);
230
759
  const environmentalValuesOpts = opts([
231
- 'very_eco', 'trying', 'somewhat', 'not_priority', 'prefer_not_to_say',
232
- ]);
233
- const organDonorOpts = opts([
234
- 'yes', 'planning', 'open', 'no', 'prefer_not_to_say',
760
+ 'very_eco',
761
+ 'trying',
762
+ 'somewhat',
763
+ 'not_priority',
764
+ 'prefer_not_to_say',
235
765
  ]);
766
+ const organDonorOpts = opts(['yes', 'planning', 'open', 'no', 'prefer_not_to_say']);
236
767
  const spiritualPracticeOpts = opts([
237
- 'daily_meditation', 'yoga_regular', 'prayer', 'mindfulness', 'nature_spirituality',
238
- 'no_practice', 'exploring', 'prefer_not_to_say',
768
+ 'daily_meditation',
769
+ 'yoga_regular',
770
+ 'prayer',
771
+ 'mindfulness',
772
+ 'nature_spirituality',
773
+ 'no_practice',
774
+ 'exploring',
775
+ 'prefer_not_to_say',
239
776
  ]);
240
777
  const astrologyBeliefOpts = opts([
241
- 'strong_believer', 'casual', 'skeptical', 'dont_believe', 'prefer_not_to_say',
778
+ 'strong_believer',
779
+ 'casual',
780
+ 'skeptical',
781
+ 'dont_believe',
782
+ 'prefer_not_to_say',
242
783
  ]);
243
784
  // ─── 10. Career & Work ───────────────────────────────────────────────────────
244
785
  const careerStageOpts = opts([
245
- 'student', 'just_starting', 'mid_career', 'senior', 'entrepreneur',
246
- 'freelancer', 'career_break', 'retired', 'prefer_not_to_say',
786
+ 'student',
787
+ 'just_starting',
788
+ 'mid_career',
789
+ 'senior',
790
+ 'entrepreneur',
791
+ 'freelancer',
792
+ 'career_break',
793
+ 'retired',
794
+ 'prefer_not_to_say',
247
795
  ]);
248
796
  const workLocationModeOpts = opts([
249
- 'office', 'remote', 'hybrid', 'freelance_flexible', 'not_working', 'prefer_not_to_say',
797
+ 'office',
798
+ 'remote',
799
+ 'hybrid',
800
+ 'freelance_flexible',
801
+ 'not_working',
802
+ 'prefer_not_to_say',
250
803
  ]);
251
804
  const workTravelFrequencyOpts = opts([
252
- 'never', 'rarely', 'monthly', 'weekly', 'constantly', 'prefer_not_to_say',
805
+ 'never',
806
+ 'rarely',
807
+ 'monthly',
808
+ 'weekly',
809
+ 'constantly',
810
+ 'prefer_not_to_say',
253
811
  ]);
254
812
  const retirementPlanOpts = opts([
255
- 'early_retire', 'standard', 'work_forever', 'passion_project', 'no_plan', 'prefer_not_to_say',
813
+ 'early_retire',
814
+ 'standard',
815
+ 'work_forever',
816
+ 'passion_project',
817
+ 'no_plan',
818
+ 'prefer_not_to_say',
256
819
  ]);
257
820
  // ─── 11. Lifestyle & Daily Life ──────────────────────────────────────────────
258
821
  const chronotypeOpts = opts([
259
- 'early_bird', 'night_owl', 'in_between', 'depends', 'prefer_not_to_say',
822
+ 'early_bird',
823
+ 'night_owl',
824
+ 'in_between',
825
+ 'depends',
826
+ 'prefer_not_to_say',
260
827
  ]);
261
828
  const sleepScheduleOpts = opts([
262
- 'before_10pm', '10pm_midnight', 'midnight_2am', 'after_2am', 'irregular', 'prefer_not_to_say',
829
+ 'before_10pm',
830
+ '10pm_midnight',
831
+ 'midnight_2am',
832
+ 'after_2am',
833
+ 'irregular',
834
+ 'prefer_not_to_say',
263
835
  ]);
264
836
  const fitnessLevelOpts = opts([
265
- 'very_active', 'active', 'sometimes', 'rarely', 'not_active', 'prefer_not_to_say',
837
+ 'very_active',
838
+ 'active',
839
+ 'sometimes',
840
+ 'rarely',
841
+ 'not_active',
842
+ 'prefer_not_to_say',
266
843
  ]);
267
844
  const travelFrequencyOpts = opts([
268
- 'every_month', 'few_times_year', 'once_a_year', 'rarely', 'never', 'prefer_not_to_say',
845
+ 'every_month',
846
+ 'few_times_year',
847
+ 'once_a_year',
848
+ 'rarely',
849
+ 'never',
850
+ 'prefer_not_to_say',
269
851
  ]);
270
852
  const livingSituationOpts = opts([
271
- 'alone', 'roommates', 'family', 'partner', 'kids', 'other', 'prefer_not_to_say',
853
+ 'alone',
854
+ 'roommates',
855
+ 'family',
856
+ 'partner',
857
+ 'kids',
858
+ 'other',
859
+ 'prefer_not_to_say',
272
860
  ]);
273
861
  const relocationWillingnessOpts = opts([
274
- 'very_willing', 'open', 'prefer_not', 'cant', 'prefer_not_to_say',
862
+ 'very_willing',
863
+ 'open',
864
+ 'prefer_not',
865
+ 'cant',
866
+ 'prefer_not_to_say',
275
867
  ]);
276
868
  const petPreferenceOpts = opts([
277
- 'dog_owner', 'cat_owner', 'have_other', 'love_no_pets', 'want_someday',
278
- 'allergic', 'not_pet_person', 'prefer_not_to_say',
869
+ 'dog_owner',
870
+ 'cat_owner',
871
+ 'have_other',
872
+ 'love_no_pets',
873
+ 'want_someday',
874
+ 'allergic',
875
+ 'not_pet_person',
876
+ 'prefer_not_to_say',
279
877
  ]);
280
878
  const cookingLevelOpts = opts([
281
- 'chef_level', 'regular', 'follow_recipe', 'basics', 'takeout',
282
- 'willing_to_learn', 'prefer_not_to_say',
879
+ 'chef_level',
880
+ 'regular',
881
+ 'follow_recipe',
882
+ 'basics',
883
+ 'takeout',
884
+ 'willing_to_learn',
885
+ 'prefer_not_to_say',
283
886
  ]);
284
887
  const tidinessOpts = opts([
285
- 'neat_freak', 'generally_tidy', 'organized_chaos', 'messy',
286
- 'need_help', 'prefer_not_to_say',
888
+ 'neat_freak',
889
+ 'generally_tidy',
890
+ 'organized_chaos',
891
+ 'messy',
892
+ 'need_help',
893
+ 'prefer_not_to_say',
287
894
  ]);
288
895
  const choresSplitOpts = opts([
289
- 'equal_split', 'flexible', 'one_cooks_one_cleans', 'hire_help',
290
- 'dont_care', 'prefer_not_to_say',
896
+ 'equal_split',
897
+ 'flexible',
898
+ 'one_cooks_one_cleans',
899
+ 'hire_help',
900
+ 'dont_care',
901
+ 'prefer_not_to_say',
291
902
  ]);
292
903
  const domesticRoleOpts = opts([
293
- 'traditional', 'modern_equal', 'flexible', 'dont_believe_in_roles', 'prefer_not_to_say',
904
+ 'traditional',
905
+ 'modern_equal',
906
+ 'flexible',
907
+ 'dont_believe_in_roles',
908
+ 'prefer_not_to_say',
294
909
  ]);
295
910
  const fashionStyleOpts = opts([
296
- 'casual', 'streetwear', 'smart_casual', 'classic', 'bohemian', 'minimalist',
297
- 'trendy', 'athleisure', 'traditional', 'dont_think', 'prefer_not_to_say',
911
+ 'casual',
912
+ 'streetwear',
913
+ 'smart_casual',
914
+ 'classic',
915
+ 'bohemian',
916
+ 'minimalist',
917
+ 'trendy',
918
+ 'athleisure',
919
+ 'traditional',
920
+ 'dont_think',
921
+ 'prefer_not_to_say',
298
922
  ]);
299
923
  const hygieneStandardOpts = opts([
300
- 'meticulous', 'clean', 'average', 'relaxed', 'prefer_not_to_say',
924
+ 'meticulous',
925
+ 'clean',
926
+ 'average',
927
+ 'relaxed',
928
+ 'prefer_not_to_say',
301
929
  ]);
302
930
  const vacationStyleOpts = opts([
303
- 'beach', 'adventure', 'city', 'cultural', 'backpacking', 'luxury',
304
- 'road_trips', 'staycation', 'wellness', 'prefer_not_to_say',
931
+ 'beach',
932
+ 'adventure',
933
+ 'city',
934
+ 'cultural',
935
+ 'backpacking',
936
+ 'luxury',
937
+ 'road_trips',
938
+ 'staycation',
939
+ 'wellness',
940
+ 'prefer_not_to_say',
305
941
  ]);
306
942
  const urbanRuralOpts = opts([
307
- 'big_city', 'small_city', 'suburbs', 'rural', 'nomadic', 'prefer_not_to_say',
943
+ 'big_city',
944
+ 'small_city',
945
+ 'suburbs',
946
+ 'rural',
947
+ 'nomadic',
948
+ 'prefer_not_to_say',
308
949
  ]);
309
950
  const climatePreferenceOpts = opts([
310
- 'tropical', 'temperate', 'cold', 'dry', 'no_preference', 'prefer_not_to_say',
951
+ 'tropical',
952
+ 'temperate',
953
+ 'cold',
954
+ 'dry',
955
+ 'no_preference',
956
+ 'prefer_not_to_say',
311
957
  ]);
312
958
  const carOwnershipOpts = opts([
313
- 'own_car', 'planning', 'no_car', 'no_car_by_choice', 'prefer_not_to_say',
959
+ 'own_car',
960
+ 'planning',
961
+ 'no_car',
962
+ 'no_car_by_choice',
963
+ 'prefer_not_to_say',
314
964
  ]);
315
965
  const drivingAbilityOpts = opts([
316
- 'licensed', 'licensed_rarely', 'learning', 'no_license', 'prefer_not_to_say',
966
+ 'licensed',
967
+ 'licensed_rarely',
968
+ 'learning',
969
+ 'no_license',
970
+ 'prefer_not_to_say',
317
971
  ]);
318
972
  const timeManagementOpts = opts([
319
- 'always_early', 'on_time', 'fashionably_late', 'running_late',
320
- 'time_is_construct', 'prefer_not_to_say',
973
+ 'always_early',
974
+ 'on_time',
975
+ 'fashionably_late',
976
+ 'running_late',
977
+ 'time_is_construct',
978
+ 'prefer_not_to_say',
321
979
  ]);
322
980
  const screenTimeOpts = opts([
323
- 'minimal', 'moderate', 'heavy', 'digital_detox', 'prefer_not_to_say',
981
+ 'minimal',
982
+ 'moderate',
983
+ 'heavy',
984
+ 'digital_detox',
985
+ 'prefer_not_to_say',
324
986
  ]);
325
987
  const socialMediaUsageOpts = opts([
326
- 'very_active', 'regular', 'lurker', 'minimal', 'no_social', 'prefer_not_to_say',
988
+ 'very_active',
989
+ 'regular',
990
+ 'lurker',
991
+ 'minimal',
992
+ 'no_social',
993
+ 'prefer_not_to_say',
327
994
  ]);
328
995
  const bodyModificationsOpts = opts([
329
- 'tattoos', 'piercings', 'nose_piercing', 'tongue_piercing', 'none',
330
- 'open_to_it', 'prefer_not_to_say',
996
+ 'tattoos',
997
+ 'piercings',
998
+ 'nose_piercing',
999
+ 'tongue_piercing',
1000
+ 'none',
1001
+ 'open_to_it',
1002
+ 'prefer_not_to_say',
331
1003
  ]);
332
1004
  const earPiercingsOpts = opts([
333
- 'none', 'single_lobe', 'multiple', 'stretched', 'prefer_not_to_say',
1005
+ 'none',
1006
+ 'single_lobe',
1007
+ 'multiple',
1008
+ 'stretched',
1009
+ 'prefer_not_to_say',
334
1010
  ]);
335
1011
  const sunSignOpts = opts([
336
- 'aries', 'taurus', 'gemini', 'cancer', 'leo', 'virgo', 'libra', 'scorpio',
337
- 'sagittarius', 'capricorn', 'aquarius', 'pisces', 'prefer_not_to_say',
1012
+ 'aries',
1013
+ 'taurus',
1014
+ 'gemini',
1015
+ 'cancer',
1016
+ 'leo',
1017
+ 'virgo',
1018
+ 'libra',
1019
+ 'scorpio',
1020
+ 'sagittarius',
1021
+ 'capricorn',
1022
+ 'aquarius',
1023
+ 'pisces',
1024
+ 'prefer_not_to_say',
338
1025
  ]);
339
1026
  const loveLanguageOpts = opts([
340
- 'words_of_affirmation', 'quality_time', 'receiving_gifts', 'acts_of_service',
341
- 'physical_touch', 'prefer_not_to_say',
1027
+ 'words_of_affirmation',
1028
+ 'quality_time',
1029
+ 'receiving_gifts',
1030
+ 'acts_of_service',
1031
+ 'physical_touch',
1032
+ 'prefer_not_to_say',
342
1033
  ]);
343
1034
  // ─── 12. Cognitive & Intellectual ────────────────────────────────────────────
344
1035
  const intellectualNeedOpts = opts([
345
- 'essential', 'very_important', 'nice_to_have', 'not_important', 'prefer_not_to_say',
1036
+ 'essential',
1037
+ 'very_important',
1038
+ 'nice_to_have',
1039
+ 'not_important',
1040
+ 'prefer_not_to_say',
346
1041
  ]);
347
1042
  const cognitiveBandOpts = opts([
348
- 'analytical', 'creative', 'balanced', 'practical', 'philosophical', 'prefer_not_to_say',
1043
+ 'analytical',
1044
+ 'creative',
1045
+ 'balanced',
1046
+ 'practical',
1047
+ 'philosophical',
1048
+ 'prefer_not_to_say',
349
1049
  ]);
350
1050
  const learningPathOpts = opts([
351
- 'self_taught', 'formal', 'experiential', 'social', 'mixed', 'prefer_not_to_say',
1051
+ 'self_taught',
1052
+ 'formal',
1053
+ 'experiential',
1054
+ 'social',
1055
+ 'mixed',
1056
+ 'prefer_not_to_say',
352
1057
  ]);
353
1058
  const knowledgeAreasOpts = opts([
354
- 'technology', 'science', 'arts', 'business', 'health', 'law', 'psychology',
355
- 'philosophy', 'history', 'languages', 'math', 'environment', 'education',
356
- 'sports', 'cooking_food', 'music_knowledge', 'other', 'prefer_not_to_say',
1059
+ 'technology',
1060
+ 'science',
1061
+ 'arts',
1062
+ 'business',
1063
+ 'health',
1064
+ 'law',
1065
+ 'psychology',
1066
+ 'philosophy',
1067
+ 'history',
1068
+ 'languages',
1069
+ 'math',
1070
+ 'environment',
1071
+ 'education',
1072
+ 'sports',
1073
+ 'cooking_food',
1074
+ 'music_knowledge',
1075
+ 'other',
1076
+ 'prefer_not_to_say',
357
1077
  ]);
358
1078
  const learningMethodsOpts = opts([
359
- 'reading', 'videos', 'podcasts', 'courses', 'workshops', 'mentorship',
360
- 'hands_on', 'discussion', 'prefer_not_to_say',
1079
+ 'reading',
1080
+ 'videos',
1081
+ 'podcasts',
1082
+ 'courses',
1083
+ 'workshops',
1084
+ 'mentorship',
1085
+ 'hands_on',
1086
+ 'discussion',
1087
+ 'prefer_not_to_say',
361
1088
  ]);
362
1089
  const intellectualExperienceOpts = opts([
363
- 'expert', 'advanced', 'intermediate', 'growing', 'beginner', 'prefer_not_to_say',
1090
+ 'expert',
1091
+ 'advanced',
1092
+ 'intermediate',
1093
+ 'growing',
1094
+ 'beginner',
1095
+ 'prefer_not_to_say',
364
1096
  ]);
365
1097
  const intellectualGoalsOpts = opts([
366
- 'master_skill', 'write_book', 'learn_language', 'get_degree', 'start_research',
367
- 'teach_others', 'build_something', 'none_specific', 'prefer_not_to_say',
1098
+ 'master_skill',
1099
+ 'write_book',
1100
+ 'learn_language',
1101
+ 'get_degree',
1102
+ 'start_research',
1103
+ 'teach_others',
1104
+ 'build_something',
1105
+ 'none_specific',
1106
+ 'prefer_not_to_say',
368
1107
  ]);
369
1108
  const goalSettingStyleOpts = opts([
370
- 'detailed_planner', 'broad_goals', 'vision_board', 'go_with_flow',
371
- 'no_goals', 'prefer_not_to_say',
1109
+ 'detailed_planner',
1110
+ 'broad_goals',
1111
+ 'vision_board',
1112
+ 'go_with_flow',
1113
+ 'no_goals',
1114
+ 'prefer_not_to_say',
372
1115
  ]);
373
1116
  const teachingMentoringOpts = opts([
374
- 'love_teaching', 'enjoy', 'neutral', 'prefer_learning', 'not_interested', 'prefer_not_to_say',
1117
+ 'love_teaching',
1118
+ 'enjoy',
1119
+ 'neutral',
1120
+ 'prefer_learning',
1121
+ 'not_interested',
1122
+ 'prefer_not_to_say',
375
1123
  ]);
376
1124
  // ─── 13. Relationship & Intimacy ─────────────────────────────────────────────
377
1125
  const intimacyImportanceOpts = opts([
378
- 'very_important', 'important', 'moderate', 'low', 'not_important', 'prefer_not_to_say',
1126
+ 'very_important',
1127
+ 'important',
1128
+ 'moderate',
1129
+ 'low',
1130
+ 'not_important',
1131
+ 'prefer_not_to_say',
379
1132
  ]);
380
1133
  const loveLanguageDetailedOpts = opts([
381
- 'words_of_affirmation', 'quality_time', 'receiving_gifts', 'acts_of_service',
382
- 'physical_touch', 'prefer_not_to_say',
1134
+ 'words_of_affirmation',
1135
+ 'quality_time',
1136
+ 'receiving_gifts',
1137
+ 'acts_of_service',
1138
+ 'physical_touch',
1139
+ 'prefer_not_to_say',
383
1140
  ]);
384
1141
  const affectionLevelOpts = opts([
385
- 'very_affectionate', 'moderately', 'reserved', 'not_affectionate',
386
- 'depends', 'prefer_not_to_say',
387
- ]);
388
- const pdaComfortOpts = opts([
389
- 'love_it', 'some', 'minimal', 'none', 'prefer_not_to_say',
1142
+ 'very_affectionate',
1143
+ 'moderately',
1144
+ 'reserved',
1145
+ 'not_affectionate',
1146
+ 'depends',
1147
+ 'prefer_not_to_say',
390
1148
  ]);
1149
+ const pdaComfortOpts = opts(['love_it', 'some', 'minimal', 'none', 'prefer_not_to_say']);
391
1150
  const conflictStyleOpts = opts([
392
- 'talk_it_out', 'cool_off_first', 'avoid_conflict', 'compromise',
393
- 'need_mediator', 'prefer_not_to_say',
1151
+ 'talk_it_out',
1152
+ 'cool_off_first',
1153
+ 'avoid_conflict',
1154
+ 'compromise',
1155
+ 'need_mediator',
1156
+ 'prefer_not_to_say',
394
1157
  ]);
395
1158
  const videoDatingComfortOpts = opts([
396
- 'love_it', 'open', 'prefer_not', 'never', 'prefer_not_to_say',
1159
+ 'love_it',
1160
+ 'open',
1161
+ 'prefer_not',
1162
+ 'never',
1163
+ 'prefer_not_to_say',
397
1164
  ]);
398
1165
  const safetyPreferenceOpts = opts([
399
- 'public_place', 'share_location', 'video_first', 'bring_friend',
400
- 'no_preference', 'prefer_not_to_say',
1166
+ 'public_place',
1167
+ 'share_location',
1168
+ 'video_first',
1169
+ 'bring_friend',
1170
+ 'no_preference',
1171
+ 'prefer_not_to_say',
401
1172
  ]);
402
1173
  const datePreferenceOpts = opts([
403
- 'coffee', 'dinner', 'drinks', 'outdoor', 'cultural', 'cooking',
404
- 'adventure', 'picnic', 'movie', 'game_night', 'prefer_not_to_say',
1174
+ 'coffee',
1175
+ 'dinner',
1176
+ 'drinks',
1177
+ 'outdoor',
1178
+ 'cultural',
1179
+ 'cooking',
1180
+ 'adventure',
1181
+ 'picnic',
1182
+ 'movie',
1183
+ 'game_night',
1184
+ 'prefer_not_to_say',
405
1185
  ]);
406
1186
  const sexDriveOpts = opts([
407
- 'very_high', 'high', 'moderate', 'low', 'very_low', 'varies', 'prefer_not_to_say',
1187
+ 'very_high',
1188
+ 'high',
1189
+ 'moderate',
1190
+ 'low',
1191
+ 'very_low',
1192
+ 'varies',
1193
+ 'prefer_not_to_say',
408
1194
  ]);
409
1195
  const sexualActivityLevelOpts = opts([
410
- 'very_active', 'active', 'moderate', 'low', 'abstinent', 'prefer_not_to_say',
1196
+ 'very_active',
1197
+ 'active',
1198
+ 'moderate',
1199
+ 'low',
1200
+ 'abstinent',
1201
+ 'prefer_not_to_say',
411
1202
  ]);
412
1203
  const kinkOpennessOpts = opts([
413
- 'very_open', 'somewhat', 'vanilla', 'not_interested', 'prefer_not_to_say',
1204
+ 'very_open',
1205
+ 'somewhat',
1206
+ 'vanilla',
1207
+ 'not_interested',
1208
+ 'prefer_not_to_say',
414
1209
  ]);
415
1210
  const concurrentPartnersOpts = opts([
416
- 'strictly_one', 'open_to_discussion', 'polyamorous', 'depends', 'prefer_not_to_say',
1211
+ 'strictly_one',
1212
+ 'open_to_discussion',
1213
+ 'polyamorous',
1214
+ 'depends',
1215
+ 'prefer_not_to_say',
417
1216
  ]);
418
1217
  // ─── 14. Family & Home ───────────────────────────────────────────────────────
419
1218
  const familyTypeOpts = opts([
420
- 'nuclear', 'joint', 'single_parent', 'blended', 'no_family', 'prefer_not_to_say',
1219
+ 'nuclear',
1220
+ 'joint',
1221
+ 'single_parent',
1222
+ 'blended',
1223
+ 'no_family',
1224
+ 'prefer_not_to_say',
421
1225
  ]);
422
1226
  const parentingStyleOpts = opts([
423
- 'authoritative', 'permissive', 'attachment', 'helicopter', 'free_range',
424
- 'equal_co_parent', 'not_sure', 'not_applicable', 'prefer_not_to_say',
1227
+ 'authoritative',
1228
+ 'permissive',
1229
+ 'attachment',
1230
+ 'helicopter',
1231
+ 'free_range',
1232
+ 'equal_co_parent',
1233
+ 'not_sure',
1234
+ 'not_applicable',
1235
+ 'prefer_not_to_say',
425
1236
  ]);
426
1237
  const caregivingResponsibilityOpts = opts([
427
- 'elderly_parents', 'disabled_family', 'children', 'shared', 'none',
428
- 'future', 'prefer_not_to_say',
1238
+ 'elderly_parents',
1239
+ 'disabled_family',
1240
+ 'children',
1241
+ 'shared',
1242
+ 'none',
1243
+ 'future',
1244
+ 'prefer_not_to_say',
429
1245
  ]);
430
1246
  const familyBuildingOpts = opts([
431
- 'natural', 'adoption', 'foster', 'ivf', 'surrogacy', 'co_parenting', 'prefer_not_to_say',
1247
+ 'natural',
1248
+ 'adoption',
1249
+ 'foster',
1250
+ 'ivf',
1251
+ 'surrogacy',
1252
+ 'co_parenting',
1253
+ 'prefer_not_to_say',
432
1254
  ]);
433
1255
  const weddingStyleOpts = opts([
434
- 'grand', 'intimate', 'courthouse', 'destination', 'elopement',
435
- 'dont_care', 'not_marriage', 'prefer_not_to_say',
1256
+ 'grand',
1257
+ 'intimate',
1258
+ 'courthouse',
1259
+ 'destination',
1260
+ 'elopement',
1261
+ 'dont_care',
1262
+ 'not_marriage',
1263
+ 'prefer_not_to_say',
436
1264
  ]);
437
1265
  const giftGivingStyleOpts = opts([
438
- 'lavish', 'thoughtful', 'practical', 'experiences', 'handmade',
439
- 'minimal', 'prefer_not_to_say',
1266
+ 'lavish',
1267
+ 'thoughtful',
1268
+ 'practical',
1269
+ 'experiences',
1270
+ 'handmade',
1271
+ 'minimal',
1272
+ 'prefer_not_to_say',
440
1273
  ]);
441
1274
  const contraceptionViewOpts = opts([
442
- 'pro_contraception', 'open', 'natural_methods', 'against',
443
- 'not_applicable', 'prefer_not_to_say',
1275
+ 'pro_contraception',
1276
+ 'open',
1277
+ 'natural_methods',
1278
+ 'against',
1279
+ 'not_applicable',
1280
+ 'prefer_not_to_say',
444
1281
  ]);
445
1282
  const parentsExpectationOpts = opts([
446
- 'very_involved', 'somewhat', 'independent', 'no_contact', 'prefer_not_to_say',
1283
+ 'very_involved',
1284
+ 'somewhat',
1285
+ 'independent',
1286
+ 'no_contact',
1287
+ 'prefer_not_to_say',
1288
+ ]);
1289
+ const parentOccupationOpts = opts([
1290
+ 'it_software',
1291
+ 'engineering',
1292
+ 'healthcare',
1293
+ 'education',
1294
+ 'finance_accounting',
1295
+ 'arts_entertainment',
1296
+ 'media_communication',
1297
+ 'business_management',
1298
+ 'government_public',
1299
+ 'legal',
1300
+ 'science_research',
1301
+ 'agriculture',
1302
+ 'hospitality_travel',
1303
+ 'real_estate',
1304
+ 'retail_ecommerce',
1305
+ 'manufacturing',
1306
+ 'self_employed',
1307
+ 'homemaker',
1308
+ 'retired',
1309
+ 'deceased',
1310
+ 'other',
1311
+ 'prefer_not_to_say',
1312
+ ]);
1313
+ const familyAffluenceOpts = opts([
1314
+ 'lower_middle',
1315
+ 'middle',
1316
+ 'upper_middle',
1317
+ 'affluent',
1318
+ 'wealthy',
1319
+ 'prefer_not_to_say',
1320
+ ]);
1321
+ const familyValuesOpts = opts([
1322
+ 'orthodox',
1323
+ 'moderate',
1324
+ 'liberal',
1325
+ 'very_liberal',
1326
+ 'prefer_not_to_say',
1327
+ ]);
1328
+ const profileCreatedByOpts = opts([
1329
+ 'self',
1330
+ 'parent',
1331
+ 'sibling',
1332
+ 'friend',
1333
+ 'relative',
1334
+ 'other',
447
1335
  ]);
448
1336
  // ─── 15. Finance & Legal ─────────────────────────────────────────────────────
449
1337
  const incomeRangeOpts = opts([
450
- 'under_3l', '3l_6l', '6l_10l', '10l_15l', '15l_25l', '25l_50l',
451
- '50l_1cr', 'above_1cr', 'prefer_not_to_say',
1338
+ 'under_3l',
1339
+ '3l_6l',
1340
+ '6l_10l',
1341
+ '10l_15l',
1342
+ '15l_25l',
1343
+ '25l_50l',
1344
+ '50l_1cr',
1345
+ 'above_1cr',
1346
+ 'prefer_not_to_say',
452
1347
  ]);
453
1348
  const financialAttitudeOpts = opts([
454
- 'saver', 'spender', 'balanced', 'investor', 'minimalist', 'prefer_not_to_say',
1349
+ 'saver',
1350
+ 'spender',
1351
+ 'balanced',
1352
+ 'investor',
1353
+ 'minimalist',
1354
+ 'prefer_not_to_say',
455
1355
  ]);
456
1356
  const incomeSourcesOpts = opts([
457
- 'salary', 'business', 'freelance', 'investments', 'rental', 'family',
458
- 'pension', 'no_income', 'prefer_not_to_say',
1357
+ 'salary',
1358
+ 'business',
1359
+ 'freelance',
1360
+ 'investments',
1361
+ 'rental',
1362
+ 'family',
1363
+ 'pension',
1364
+ 'no_income',
1365
+ 'prefer_not_to_say',
459
1366
  ]);
460
1367
  const financialIntegrationOpts = opts([
461
- 'fully_joint', 'mostly_joint', 'split', 'proportional', 'separate', 'prefer_not_to_say',
1368
+ 'fully_joint',
1369
+ 'mostly_joint',
1370
+ 'split',
1371
+ 'proportional',
1372
+ 'separate',
1373
+ 'prefer_not_to_say',
462
1374
  ]);
463
1375
  const debtStatusOpts = opts([
464
- 'debt_free', 'student_loans', 'mortgage', 'manageable', 'significant', 'prefer_not_to_say',
1376
+ 'debt_free',
1377
+ 'student_loans',
1378
+ 'mortgage',
1379
+ 'manageable',
1380
+ 'significant',
1381
+ 'prefer_not_to_say',
465
1382
  ]);
466
1383
  const financialStabilityOpts = opts([
467
- 'very_stable', 'stable', 'building', 'unstable', 'in_crisis', 'prefer_not_to_say',
1384
+ 'very_stable',
1385
+ 'stable',
1386
+ 'building',
1387
+ 'unstable',
1388
+ 'in_crisis',
1389
+ 'prefer_not_to_say',
468
1390
  ]);
469
1391
  const creditScoreOpts = opts([
470
- 'excellent', 'good', 'fair', 'poor', 'dont_know', 'not_applicable', 'prefer_not_to_say',
1392
+ 'excellent',
1393
+ 'good',
1394
+ 'fair',
1395
+ 'poor',
1396
+ 'dont_know',
1397
+ 'not_applicable',
1398
+ 'prefer_not_to_say',
471
1399
  ]);
472
1400
  const prenupViewOpts = opts([
473
- 'strongly_for', 'open', 'neutral', 'against', 'strongly_against', 'prefer_not_to_say',
1401
+ 'strongly_for',
1402
+ 'open',
1403
+ 'neutral',
1404
+ 'against',
1405
+ 'strongly_against',
1406
+ 'prefer_not_to_say',
474
1407
  ]);
475
1408
  const lifeInsuranceOpts = opts([
476
- 'have_it', 'planning', 'dont_have', 'not_needed', 'prefer_not_to_say',
1409
+ 'have_it',
1410
+ 'planning',
1411
+ 'dont_have',
1412
+ 'not_needed',
1413
+ 'prefer_not_to_say',
477
1414
  ]);
478
1415
  const healthInsuranceOpts = opts([
479
- 'comprehensive', 'basic', 'employer', 'none', 'prefer_not_to_say',
1416
+ 'comprehensive',
1417
+ 'basic',
1418
+ 'employer',
1419
+ 'none',
1420
+ 'prefer_not_to_say',
480
1421
  ]);
481
1422
  const citizenshipOpts = opts([
482
- 'citizen', 'permanent_resident', 'work_visa', 'student_visa', 'dual_citizen',
483
- 'other', 'prefer_not_to_say',
484
- ]);
485
- const legalIssuesOpts = opts([
486
- 'none', 'minor_past', 'ongoing', 'prefer_not_to_say',
1423
+ 'citizen',
1424
+ 'permanent_resident',
1425
+ 'work_visa',
1426
+ 'student_visa',
1427
+ 'dual_citizen',
1428
+ 'other',
1429
+ 'prefer_not_to_say',
487
1430
  ]);
1431
+ const legalIssuesOpts = opts(['none', 'minor_past', 'ongoing', 'prefer_not_to_say']);
488
1432
  const drivingRecordOpts = opts([
489
- 'clean', 'minor', 'dui_past', 'no_license', 'prefer_not_to_say',
1433
+ 'clean',
1434
+ 'minor',
1435
+ 'dui_past',
1436
+ 'no_license',
1437
+ 'prefer_not_to_say',
490
1438
  ]);
491
1439
  const billSplittingOpts = opts([
492
- 'always_split', 'alternate', 'whoever_invites', 'traditional',
493
- 'whoever_offers', 'dont_care', 'prefer_not_to_say',
1440
+ 'always_split',
1441
+ 'alternate',
1442
+ 'whoever_invites',
1443
+ 'traditional',
1444
+ 'whoever_offers',
1445
+ 'dont_care',
1446
+ 'prefer_not_to_say',
1447
+ ]);
1448
+ const countryOfResidenceOpts = opts([
1449
+ 'india',
1450
+ 'usa',
1451
+ 'uk',
1452
+ 'canada',
1453
+ 'australia',
1454
+ 'uae',
1455
+ 'singapore',
1456
+ 'malaysia',
1457
+ 'germany',
1458
+ 'new_zealand',
1459
+ 'south_africa',
1460
+ 'saudi_arabia',
1461
+ 'qatar',
1462
+ 'bahrain',
1463
+ 'kuwait',
1464
+ 'oman',
1465
+ 'other',
1466
+ 'prefer_not_to_say',
1467
+ ]);
1468
+ const visaTypeOpts = opts([
1469
+ 'h1b',
1470
+ 'l1',
1471
+ 'eb1',
1472
+ 'eb2',
1473
+ 'eb3',
1474
+ 'opt',
1475
+ 'green_card',
1476
+ 'citizen',
1477
+ 'work_permit',
1478
+ 'student',
1479
+ 'other',
1480
+ 'not_applicable',
1481
+ 'prefer_not_to_say',
494
1482
  ]);
495
1483
  // ─── 16. Health & Wellness ───────────────────────────────────────────────────
496
1484
  const accessibilityNeedsOpts = opts([
497
- 'none', 'physical', 'visual', 'hearing', 'cognitive', 'chronic_condition',
498
- 'multiple', 'prefer_not_to_say',
1485
+ 'none',
1486
+ 'physical',
1487
+ 'visual',
1488
+ 'hearing',
1489
+ 'cognitive',
1490
+ 'chronic_condition',
1491
+ 'multiple',
1492
+ 'prefer_not_to_say',
499
1493
  ]);
500
1494
  const chronicConditionOpts = opts([
501
- 'none', 'diabetes', 'hypertension', 'asthma', 'thyroid', 'autoimmune',
502
- 'mental_health', 'other', 'multiple', 'prefer_not_to_say',
1495
+ 'none',
1496
+ 'diabetes',
1497
+ 'hypertension',
1498
+ 'asthma',
1499
+ 'thyroid',
1500
+ 'autoimmune',
1501
+ 'mental_health',
1502
+ 'other',
1503
+ 'multiple',
1504
+ 'prefer_not_to_say',
503
1505
  ]);
504
1506
  const criticalIllnessHistoryOpts = opts([
505
- 'none', 'cancer_remission', 'heart', 'other_managed', 'currently_treating', 'prefer_not_to_say',
1507
+ 'none',
1508
+ 'cancer_remission',
1509
+ 'heart',
1510
+ 'other_managed',
1511
+ 'currently_treating',
1512
+ 'prefer_not_to_say',
506
1513
  ]);
507
1514
  const neurodiversityOpts = opts([
508
- 'neurotypical', 'adhd', 'autism', 'dyslexia', 'bipolar', 'ocd',
509
- 'other', 'multiple', 'prefer_not_to_say',
1515
+ 'neurotypical',
1516
+ 'adhd',
1517
+ 'autism',
1518
+ 'dyslexia',
1519
+ 'bipolar',
1520
+ 'ocd',
1521
+ 'other',
1522
+ 'multiple',
1523
+ 'prefer_not_to_say',
510
1524
  ]);
511
1525
  const personalityDisorderAwarenessOpts = opts([
512
- 'no', 'diagnosed_managing', 'suspected', 'in_treatment', 'prefer_not_to_say',
1526
+ 'no',
1527
+ 'diagnosed_managing',
1528
+ 'suspected',
1529
+ 'in_treatment',
1530
+ 'prefer_not_to_say',
513
1531
  ]);
514
1532
  const therapyOpennessOpts = opts([
515
- 'currently_in', 'past_positive', 'open', 'not_for_me', 'never_considered', 'prefer_not_to_say',
1533
+ 'currently_in',
1534
+ 'past_positive',
1535
+ 'open',
1536
+ 'not_for_me',
1537
+ 'never_considered',
1538
+ 'prefer_not_to_say',
516
1539
  ]);
517
1540
  const recoveryStatusOpts = opts([
518
- 'not_applicable', 'in_recovery', 'long_term_sober', 'working_on_it', 'prefer_not_to_say',
1541
+ 'not_applicable',
1542
+ 'in_recovery',
1543
+ 'long_term_sober',
1544
+ 'working_on_it',
1545
+ 'prefer_not_to_say',
519
1546
  ]);
520
1547
  const phobiasOpts = opts([
521
- 'heights', 'flying', 'spiders', 'water', 'crowds', 'darkness', 'needles',
522
- 'blood', 'enclosed_spaces', 'dogs', 'snakes', 'none', 'prefer_not_to_say',
1548
+ 'heights',
1549
+ 'flying',
1550
+ 'spiders',
1551
+ 'water',
1552
+ 'crowds',
1553
+ 'darkness',
1554
+ 'needles',
1555
+ 'blood',
1556
+ 'enclosed_spaces',
1557
+ 'dogs',
1558
+ 'snakes',
1559
+ 'none',
1560
+ 'prefer_not_to_say',
523
1561
  ]);
524
1562
  const fertilityStatusOpts = opts([
525
- 'no_issues', 'tested_fine', 'undergoing_treatment', 'known_challenges',
526
- 'not_tested', 'not_applicable', 'prefer_not_to_say',
1563
+ 'no_issues',
1564
+ 'tested_fine',
1565
+ 'undergoing_treatment',
1566
+ 'known_challenges',
1567
+ 'not_tested',
1568
+ 'not_applicable',
1569
+ 'prefer_not_to_say',
527
1570
  ]);
528
1571
  const snoringHabitOpts = opts([
529
- 'never', 'sometimes', 'regularly', 'use_cpap', 'dont_know', 'prefer_not_to_say',
1572
+ 'never',
1573
+ 'sometimes',
1574
+ 'regularly',
1575
+ 'use_cpap',
1576
+ 'dont_know',
1577
+ 'prefer_not_to_say',
530
1578
  ]);
531
1579
  const allergiesOpts = opts([
532
- 'peanuts', 'shellfish', 'dairy', 'gluten', 'eggs', 'soy', 'pollen', 'dust',
533
- 'pet_dander', 'latex', 'medication', 'insect_stings', 'none', 'prefer_not_to_say',
1580
+ 'peanuts',
1581
+ 'shellfish',
1582
+ 'dairy',
1583
+ 'gluten',
1584
+ 'eggs',
1585
+ 'soy',
1586
+ 'pollen',
1587
+ 'dust',
1588
+ 'pet_dander',
1589
+ 'latex',
1590
+ 'medication',
1591
+ 'insect_stings',
1592
+ 'none',
1593
+ 'prefer_not_to_say',
534
1594
  ]);
535
1595
  const bloodTypeOpts = opts([
536
- 'a_positive', 'a_negative', 'b_positive', 'b_negative', 'ab_positive',
537
- 'ab_negative', 'o_positive', 'o_negative', 'dont_know', 'prefer_not_to_say',
538
- ]);
539
- const rhFactorOpts = opts([
540
- 'positive', 'negative', 'dont_know', 'prefer_not_to_say',
1596
+ 'a_positive',
1597
+ 'a_negative',
1598
+ 'b_positive',
1599
+ 'b_negative',
1600
+ 'ab_positive',
1601
+ 'ab_negative',
1602
+ 'o_positive',
1603
+ 'o_negative',
1604
+ 'dont_know',
1605
+ 'prefer_not_to_say',
541
1606
  ]);
1607
+ const rhFactorOpts = opts(['positive', 'negative', 'dont_know', 'prefer_not_to_say']);
542
1608
  const geneticCarrierOpts = opts([
543
- 'not_carrier', 'carrier', 'tested_clear', 'not_tested', 'prefer_not_to_say',
1609
+ 'not_carrier',
1610
+ 'carrier',
1611
+ 'tested_clear',
1612
+ 'not_tested',
1613
+ 'prefer_not_to_say',
544
1614
  ]);
545
1615
  const geneticCounselingOpts = opts([
546
- 'already_done', 'open', 'not_needed', 'against', 'prefer_not_to_say',
1616
+ 'already_done',
1617
+ 'open',
1618
+ 'not_needed',
1619
+ 'against',
1620
+ 'prefer_not_to_say',
547
1621
  ]);
548
1622
  const vaccinationsOpts = opts([
549
- 'covid_full', 'covid_boosted', 'flu_annual', 'hpv', 'hepatitis', 'tetanus',
550
- 'mmr', 'all_standard', 'none', 'prefer_not_to_say',
1623
+ 'covid_full',
1624
+ 'covid_boosted',
1625
+ 'flu_annual',
1626
+ 'hpv',
1627
+ 'hepatitis',
1628
+ 'tetanus',
1629
+ 'mmr',
1630
+ 'all_standard',
1631
+ 'none',
1632
+ 'prefer_not_to_say',
551
1633
  ]);
552
1634
  const healthSafetyPracticeOpts = opts([
553
- 'very_careful', 'mostly', 'average', 'relaxed', 'prefer_not_to_say',
1635
+ 'very_careful',
1636
+ 'mostly',
1637
+ 'average',
1638
+ 'relaxed',
1639
+ 'prefer_not_to_say',
554
1640
  ]);
555
1641
  const bodyPositivityOpts = opts([
556
- 'very_positive', 'positive', 'working_on_it', 'struggles', 'prefer_not_to_say',
1642
+ 'very_positive',
1643
+ 'positive',
1644
+ 'working_on_it',
1645
+ 'struggles',
1646
+ 'prefer_not_to_say',
557
1647
  ]);
558
1648
  const performanceDrugsOpts = opts([
559
- 'never', 'past_use', 'currently', 'supplements_only', 'prefer_not_to_say',
1649
+ 'never',
1650
+ 'past_use',
1651
+ 'currently',
1652
+ 'supplements_only',
1653
+ 'prefer_not_to_say',
560
1654
  ]);
561
1655
  const appearanceSurgeryOpts = opts([
562
- 'never', 'have_had', 'open', 'against', 'prefer_not_to_say',
1656
+ 'never',
1657
+ 'have_had',
1658
+ 'open',
1659
+ 'against',
1660
+ 'prefer_not_to_say',
563
1661
  ]);
564
1662
  const mentalHealthOpennessOpts = opts([
565
- 'very_open', 'somewhat', 'private', 'uncomfortable', 'prefer_not_to_say',
1663
+ 'very_open',
1664
+ 'somewhat',
1665
+ 'private',
1666
+ 'uncomfortable',
1667
+ 'prefer_not_to_say',
566
1668
  ]);
567
1669
  const stressManagementOpts = opts([
568
- 'exercise', 'meditation', 'therapy', 'social', 'creative', 'nature',
569
- 'unhealthy', 'dont_manage', 'prefer_not_to_say',
1670
+ 'exercise',
1671
+ 'meditation',
1672
+ 'therapy',
1673
+ 'social',
1674
+ 'creative',
1675
+ 'nature',
1676
+ 'unhealthy',
1677
+ 'dont_manage',
1678
+ 'prefer_not_to_say',
570
1679
  ]);
571
1680
  // ─── Location sub-schema ─────────────────────────────────────────────────────
572
1681
  const locationSchema = z.object({
573
1682
  display: z.string(),
574
- coordinates: z.object({
1683
+ coordinates: z
1684
+ .object({
575
1685
  lat: z.number(),
576
1686
  lng: z.number(),
577
- }).optional(),
1687
+ })
1688
+ .optional(),
578
1689
  });
579
1690
  // ─── Family member sub-schema (object_array itemShape) ───────────────────────
580
1691
  const familyMemberSchema = z.object({
@@ -600,15 +1711,21 @@ export const fullProfileSchema = z.object({
600
1711
  mbtiType: mbtiTypeOpts.optional(),
601
1712
  // ── 02. Story & Prompts ────────────────────────────────────────────────────
602
1713
  bio: z.string().trim().max(500).optional(),
603
- prompts: z.array(z.object({
1714
+ prompts: z
1715
+ .array(z.object({
604
1716
  prompt: z.string(),
605
1717
  answer: z.string().max(250),
606
- })).min(1).max(3).optional(),
607
- voicePrompt: z.object({
1718
+ }))
1719
+ .min(1)
1720
+ .max(3)
1721
+ .optional(),
1722
+ voicePrompt: z
1723
+ .object({
608
1724
  url: z.string().url(),
609
1725
  assetId: z.string(),
610
1726
  durationSeconds: z.number().max(30),
611
- }).optional(),
1727
+ })
1728
+ .optional(),
612
1729
  bornTo: z.string().trim().max(200).optional(),
613
1730
  senseOfSelf: z.string().trim().max(200).optional(),
614
1731
  selfKeywords: z.array(selfKeywordsOpts).max(5).optional(),
@@ -637,6 +1754,17 @@ export const fullProfileSchema = z.object({
637
1754
  cannabis: cannabisOpts.optional(),
638
1755
  childrenPlans: childrenPlansOpts.optional(),
639
1756
  lookingForEntrepreneur: lookingForEntrepreneurOpts.optional(),
1757
+ subCaste: z.string().trim().max(100).optional(),
1758
+ gotra: z.string().trim().max(100).optional(),
1759
+ nakshatra: nakshatraOpts.optional(),
1760
+ rashi: rashiOpts.optional(),
1761
+ birthTime: z.string().regex(/^\d{2}:\d{2}$/).optional(),
1762
+ birthPlace: z.string().trim().max(100).optional(),
1763
+ numberOfChildren: z.number().int().min(0).max(10).optional(),
1764
+ previousMarriages: z.number().int().min(0).max(5).optional(),
1765
+ nativePlace: z.string().trim().max(100).optional(),
1766
+ hometownState: hometownStateOpts.optional(),
1767
+ preferredGenders: z.array(genderOpts).optional(),
640
1768
  // ── 04. What I'm Looking For ───────────────────────────────────────────────
641
1769
  whatImLookingFor: z.string().trim().max(300).optional(),
642
1770
  relationshipRole: z.array(relationshipRoleOpts).max(3).optional(),
@@ -761,6 +1889,13 @@ export const fullProfileSchema = z.object({
761
1889
  contraceptionView: contraceptionViewOpts.optional(),
762
1890
  parentsExpectation: parentsExpectationOpts.optional(),
763
1891
  parentsContactNumber: z.string().trim().max(15).optional(),
1892
+ fatherOccupation: parentOccupationOpts.optional(),
1893
+ motherOccupation: parentOccupationOpts.optional(),
1894
+ numberOfSiblings: z.number().int().min(0).max(10).optional(),
1895
+ siblingsMarried: z.number().int().min(0).max(10).optional(),
1896
+ familyAffluence: familyAffluenceOpts.optional(),
1897
+ familyValues: familyValuesOpts.optional(),
1898
+ profileCreatedBy: profileCreatedByOpts.optional(),
764
1899
  // ── 15. Finance & Legal (Tier 3) ───────────────────────────────────────────
765
1900
  incomeRange: incomeRangeOpts.optional(),
766
1901
  financialAttitude: financialAttitudeOpts.optional(),
@@ -776,6 +1911,9 @@ export const fullProfileSchema = z.object({
776
1911
  legalIssues: legalIssuesOpts.optional(),
777
1912
  drivingRecord: drivingRecordOpts.optional(),
778
1913
  billSplitting: billSplittingOpts.optional(),
1914
+ grewUpIn: z.string().trim().max(100).optional(),
1915
+ countryOfResidence: countryOfResidenceOpts.optional(),
1916
+ visaType: visaTypeOpts.optional(),
779
1917
  // ── 16. Health & Wellness (Tier 3) ─────────────────────────────────────────
780
1918
  accessibilityNeeds: accessibilityNeedsOpts.optional(),
781
1919
  chronicCondition: chronicConditionOpts.optional(),
@@ -799,6 +1937,9 @@ export const fullProfileSchema = z.object({
799
1937
  appearanceSurgery: appearanceSurgeryOpts.optional(),
800
1938
  mentalHealthOpenness: mentalHealthOpennessOpts.optional(),
801
1939
  stressManagement: stressManagementOpts.optional(),
1940
+ // ── Meta Fields (system-level) ───────────────────────────────────────────────
1941
+ hardPreferences: z.array(z.string()).optional(),
1942
+ softFilters: z.array(z.string()).optional(),
802
1943
  });
803
1944
  // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
804
1945
  // createProfileSchema — onboarding fields only (isOnboarding: true)
@@ -816,12 +1957,22 @@ export const createProfileSchema = z.object({
816
1957
  sexualOrientation: sexualOrientationOpts,
817
1958
  relationshipStructure: relationshipStructureOpts,
818
1959
  bio: z.string().trim().max(500),
819
- prompts: z.array(z.object({
1960
+ prompts: z
1961
+ .array(z.object({
820
1962
  prompt: z.string(),
821
1963
  answer: z.string().max(250),
822
- })).min(1).max(3),
1964
+ }))
1965
+ .min(1)
1966
+ .max(3),
1967
+ // New required onboarding fields for matchmaking
1968
+ preferredGenders: z.array(genderOpts).min(1),
1969
+ hometownState: hometownStateOpts,
1970
+ familyReligion: religionOpts,
1971
+ motherTongue: motherTongueOpts,
1972
+ relationshipStatus: relationshipStatusOpts,
823
1973
  // Optional onboarding fields (isOnboardingOptional: true)
824
1974
  mbtiType: mbtiTypeOpts.optional(),
1975
+ preferredAgeRange: z.number().min(18).max(70).optional(),
825
1976
  });
826
1977
  // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
827
1978
  // updateProfileSchema — all fields optional