dating-schema 0.5.0 → 0.7.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 +48 -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 +808 -12
  49. package/dist/profile.d.ts.map +1 -1
  50. package/dist/profile.js +1460 -267
  51. package/dist/profile.js.map +1 -1
  52. package/package.json +48 -48
package/dist/profile.js CHANGED
@@ -13,568 +13,1707 @@ 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
+ 'cricket',
628
+ 'football',
629
+ 'badminton',
630
+ 'tennis',
631
+ 'basketball',
632
+ 'table_tennis',
633
+ 'skating',
634
+ 'dj',
635
+ 'binge_watching',
636
+ 'k_drama',
637
+ 'backpacking',
638
+ 'road_trips',
639
+ 'stargazing',
640
+ 'journaling',
641
+ 'self_improvement',
642
+ 'activism',
643
+ 'mentoring',
644
+ 'networking',
645
+ 'entrepreneurship',
646
+ 'languages',
647
+ 'science',
648
+ 'interior_design',
649
+ 'fashion',
650
+ 'skincare',
651
+ 'thrifting',
652
+ 'street_food',
653
+ 'fine_dining',
654
+ 'food_photography',
655
+ 'other',
185
656
  ]);
186
657
  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',
658
+ 'pop',
659
+ 'rock',
660
+ 'hip_hop',
661
+ 'rnb',
662
+ 'jazz',
663
+ 'classical',
664
+ 'electronic',
665
+ 'edm',
666
+ 'country',
667
+ 'folk',
668
+ 'indie',
669
+ 'metal',
670
+ 'punk',
671
+ 'reggae',
672
+ 'latin',
673
+ 'kpop',
674
+ 'bollywood',
675
+ 'sufi',
676
+ 'ghazal',
677
+ 'carnatic',
678
+ 'hindustani_classical',
679
+ 'devotional',
680
+ 'lofi',
681
+ 'ambient',
682
+ 'other',
191
683
  ]);
192
684
  const gamingInterestOpts = opts([
193
- 'hardcore', 'casual', 'mobile_only', 'board_tabletop', 'retro',
194
- 'not_a_gamer', 'prefer_not_to_say',
685
+ 'hardcore',
686
+ 'casual',
687
+ 'mobile_only',
688
+ 'board_tabletop',
689
+ 'retro',
690
+ 'not_a_gamer',
691
+ 'prefer_not_to_say',
195
692
  ]);
196
693
  const readingHabitOpts = opts([
197
- 'voracious', 'regular', 'occasional', 'audiobooks', 'articles_only',
198
- 'not_a_reader', 'prefer_not_to_say',
694
+ 'voracious',
695
+ 'regular',
696
+ 'occasional',
697
+ 'audiobooks',
698
+ 'articles_only',
699
+ 'not_a_reader',
700
+ 'prefer_not_to_say',
199
701
  ]);
200
702
  const artApreciationOpts = opts([
201
- 'creator', 'hobbyist', 'appreciator', 'casual', 'not_into_art', 'prefer_not_to_say',
703
+ 'creator',
704
+ 'hobbyist',
705
+ 'appreciator',
706
+ 'casual',
707
+ 'not_into_art',
708
+ 'prefer_not_to_say',
202
709
  ]);
203
710
  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',
711
+ 'concerts',
712
+ 'festivals',
713
+ 'sports_events',
714
+ 'comedy_shows',
715
+ 'theater_plays',
716
+ 'art_exhibitions',
717
+ 'food_festivals',
718
+ 'book_readings',
719
+ 'hackathons',
720
+ 'spiritual_gatherings',
721
+ 'house_parties',
722
+ 'club_nights',
723
+ 'outdoor_adventures',
724
+ 'workshops',
725
+ 'prefer_not_to_say',
208
726
  ]);
209
727
  const riskAppetiteOpts = opts([
210
- 'thrill_seeker', 'adventurous', 'moderate', 'cautious', 'risk_averse', 'prefer_not_to_say',
728
+ 'thrill_seeker',
729
+ 'adventurous',
730
+ 'moderate',
731
+ 'cautious',
732
+ 'risk_averse',
733
+ 'prefer_not_to_say',
211
734
  ]);
212
735
  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',
736
+ 'environment',
737
+ 'animal_welfare',
738
+ 'education_literacy',
739
+ 'poverty',
740
+ 'health',
741
+ 'mental_health',
742
+ 'gender_equality',
743
+ 'lgbtq_rights',
744
+ 'disability',
745
+ 'children',
746
+ 'elderly',
747
+ 'disaster_relief',
748
+ 'human_rights',
749
+ 'tech_for_good',
750
+ 'none',
751
+ 'prefer_not_to_say',
216
752
  ]);
217
753
  const socialCircleSizeOpts = opts([
218
- 'small', 'medium', 'large', 'mostly_solo', 'prefer_not_to_say',
754
+ 'small',
755
+ 'medium',
756
+ 'large',
757
+ 'mostly_solo',
758
+ 'prefer_not_to_say',
219
759
  ]);
220
760
  // ─── 09. Values & Beliefs ────────────────────────────────────────────────────
221
761
  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',
762
+ 'build_family',
763
+ 'career_success',
764
+ 'financial_freedom',
765
+ 'travel_world',
766
+ 'make_impact',
767
+ 'creative_fulfillment',
768
+ 'spiritual_growth',
769
+ 'education',
770
+ 'start_business',
771
+ 'buy_home',
772
+ 'early_retirement',
773
+ 'health_longevity',
774
+ 'find_love',
775
+ 'self_discovery',
776
+ 'leave_legacy',
225
777
  'prefer_not_to_say',
226
778
  ]);
227
779
  const politicalOrientationOpts = opts([
228
- 'liberal', 'moderate', 'conservative', 'apolitical', 'other', 'prefer_not_to_say',
780
+ 'liberal',
781
+ 'moderate',
782
+ 'conservative',
783
+ 'apolitical',
784
+ 'other',
785
+ 'prefer_not_to_say',
229
786
  ]);
230
787
  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',
788
+ 'very_eco',
789
+ 'trying',
790
+ 'somewhat',
791
+ 'not_priority',
792
+ 'prefer_not_to_say',
235
793
  ]);
794
+ const organDonorOpts = opts(['yes', 'planning', 'open', 'no', 'prefer_not_to_say']);
236
795
  const spiritualPracticeOpts = opts([
237
- 'daily_meditation', 'yoga_regular', 'prayer', 'mindfulness', 'nature_spirituality',
238
- 'no_practice', 'exploring', 'prefer_not_to_say',
796
+ 'daily_meditation',
797
+ 'yoga_regular',
798
+ 'prayer',
799
+ 'mindfulness',
800
+ 'nature_spirituality',
801
+ 'no_practice',
802
+ 'exploring',
803
+ 'prefer_not_to_say',
239
804
  ]);
240
805
  const astrologyBeliefOpts = opts([
241
- 'strong_believer', 'casual', 'skeptical', 'dont_believe', 'prefer_not_to_say',
806
+ 'strong_believer',
807
+ 'casual',
808
+ 'skeptical',
809
+ 'dont_believe',
810
+ 'prefer_not_to_say',
242
811
  ]);
243
812
  // ─── 10. Career & Work ───────────────────────────────────────────────────────
244
813
  const careerStageOpts = opts([
245
- 'student', 'just_starting', 'mid_career', 'senior', 'entrepreneur',
246
- 'freelancer', 'career_break', 'retired', 'prefer_not_to_say',
814
+ 'student',
815
+ 'just_starting',
816
+ 'mid_career',
817
+ 'senior',
818
+ 'entrepreneur',
819
+ 'freelancer',
820
+ 'career_break',
821
+ 'retired',
822
+ 'prefer_not_to_say',
247
823
  ]);
248
824
  const workLocationModeOpts = opts([
249
- 'office', 'remote', 'hybrid', 'freelance_flexible', 'not_working', 'prefer_not_to_say',
825
+ 'office',
826
+ 'remote',
827
+ 'hybrid',
828
+ 'freelance_flexible',
829
+ 'not_working',
830
+ 'prefer_not_to_say',
250
831
  ]);
251
832
  const workTravelFrequencyOpts = opts([
252
- 'never', 'rarely', 'monthly', 'weekly', 'constantly', 'prefer_not_to_say',
833
+ 'never',
834
+ 'rarely',
835
+ 'monthly',
836
+ 'weekly',
837
+ 'constantly',
838
+ 'prefer_not_to_say',
253
839
  ]);
254
840
  const retirementPlanOpts = opts([
255
- 'early_retire', 'standard', 'work_forever', 'passion_project', 'no_plan', 'prefer_not_to_say',
841
+ 'early_retire',
842
+ 'standard',
843
+ 'work_forever',
844
+ 'passion_project',
845
+ 'no_plan',
846
+ 'prefer_not_to_say',
256
847
  ]);
257
848
  // ─── 11. Lifestyle & Daily Life ──────────────────────────────────────────────
258
849
  const chronotypeOpts = opts([
259
- 'early_bird', 'night_owl', 'in_between', 'depends', 'prefer_not_to_say',
850
+ 'early_bird',
851
+ 'night_owl',
852
+ 'in_between',
853
+ 'depends',
854
+ 'prefer_not_to_say',
260
855
  ]);
261
856
  const sleepScheduleOpts = opts([
262
- 'before_10pm', '10pm_midnight', 'midnight_2am', 'after_2am', 'irregular', 'prefer_not_to_say',
857
+ 'before_10pm',
858
+ '10pm_midnight',
859
+ 'midnight_2am',
860
+ 'after_2am',
861
+ 'irregular',
862
+ 'prefer_not_to_say',
263
863
  ]);
264
864
  const fitnessLevelOpts = opts([
265
- 'very_active', 'active', 'sometimes', 'rarely', 'not_active', 'prefer_not_to_say',
865
+ 'very_active',
866
+ 'active',
867
+ 'sometimes',
868
+ 'rarely',
869
+ 'not_active',
870
+ 'prefer_not_to_say',
266
871
  ]);
267
872
  const travelFrequencyOpts = opts([
268
- 'every_month', 'few_times_year', 'once_a_year', 'rarely', 'never', 'prefer_not_to_say',
873
+ 'every_month',
874
+ 'few_times_year',
875
+ 'once_a_year',
876
+ 'rarely',
877
+ 'never',
878
+ 'prefer_not_to_say',
269
879
  ]);
270
880
  const livingSituationOpts = opts([
271
- 'alone', 'roommates', 'family', 'partner', 'kids', 'other', 'prefer_not_to_say',
881
+ 'alone',
882
+ 'roommates',
883
+ 'family',
884
+ 'partner',
885
+ 'kids',
886
+ 'other',
887
+ 'prefer_not_to_say',
272
888
  ]);
273
889
  const relocationWillingnessOpts = opts([
274
- 'very_willing', 'open', 'prefer_not', 'cant', 'prefer_not_to_say',
890
+ 'very_willing',
891
+ 'open',
892
+ 'prefer_not',
893
+ 'cant',
894
+ 'prefer_not_to_say',
275
895
  ]);
276
896
  const petPreferenceOpts = opts([
277
- 'dog_owner', 'cat_owner', 'have_other', 'love_no_pets', 'want_someday',
278
- 'allergic', 'not_pet_person', 'prefer_not_to_say',
897
+ 'dog_owner',
898
+ 'cat_owner',
899
+ 'have_other',
900
+ 'love_no_pets',
901
+ 'want_someday',
902
+ 'allergic',
903
+ 'not_pet_person',
904
+ 'prefer_not_to_say',
279
905
  ]);
280
906
  const cookingLevelOpts = opts([
281
- 'chef_level', 'regular', 'follow_recipe', 'basics', 'takeout',
282
- 'willing_to_learn', 'prefer_not_to_say',
907
+ 'chef_level',
908
+ 'regular',
909
+ 'follow_recipe',
910
+ 'basics',
911
+ 'takeout',
912
+ 'willing_to_learn',
913
+ 'prefer_not_to_say',
283
914
  ]);
284
915
  const tidinessOpts = opts([
285
- 'neat_freak', 'generally_tidy', 'organized_chaos', 'messy',
286
- 'need_help', 'prefer_not_to_say',
916
+ 'neat_freak',
917
+ 'generally_tidy',
918
+ 'organized_chaos',
919
+ 'messy',
920
+ 'need_help',
921
+ 'prefer_not_to_say',
287
922
  ]);
288
923
  const choresSplitOpts = opts([
289
- 'equal_split', 'flexible', 'one_cooks_one_cleans', 'hire_help',
290
- 'dont_care', 'prefer_not_to_say',
924
+ 'equal_split',
925
+ 'flexible',
926
+ 'one_cooks_one_cleans',
927
+ 'hire_help',
928
+ 'dont_care',
929
+ 'prefer_not_to_say',
291
930
  ]);
292
931
  const domesticRoleOpts = opts([
293
- 'traditional', 'modern_equal', 'flexible', 'dont_believe_in_roles', 'prefer_not_to_say',
932
+ 'traditional',
933
+ 'modern_equal',
934
+ 'flexible',
935
+ 'dont_believe_in_roles',
936
+ 'prefer_not_to_say',
294
937
  ]);
295
938
  const fashionStyleOpts = opts([
296
- 'casual', 'streetwear', 'smart_casual', 'classic', 'bohemian', 'minimalist',
297
- 'trendy', 'athleisure', 'traditional', 'dont_think', 'prefer_not_to_say',
939
+ 'casual',
940
+ 'streetwear',
941
+ 'smart_casual',
942
+ 'classic',
943
+ 'bohemian',
944
+ 'minimalist',
945
+ 'trendy',
946
+ 'athleisure',
947
+ 'traditional',
948
+ 'dont_think',
949
+ 'prefer_not_to_say',
298
950
  ]);
299
951
  const hygieneStandardOpts = opts([
300
- 'meticulous', 'clean', 'average', 'relaxed', 'prefer_not_to_say',
952
+ 'meticulous',
953
+ 'clean',
954
+ 'average',
955
+ 'relaxed',
956
+ 'prefer_not_to_say',
301
957
  ]);
302
958
  const vacationStyleOpts = opts([
303
- 'beach', 'adventure', 'city', 'cultural', 'backpacking', 'luxury',
304
- 'road_trips', 'staycation', 'wellness', 'prefer_not_to_say',
959
+ 'beach',
960
+ 'adventure',
961
+ 'city',
962
+ 'cultural',
963
+ 'backpacking',
964
+ 'luxury',
965
+ 'road_trips',
966
+ 'staycation',
967
+ 'wellness',
968
+ 'prefer_not_to_say',
305
969
  ]);
306
970
  const urbanRuralOpts = opts([
307
- 'big_city', 'small_city', 'suburbs', 'rural', 'nomadic', 'prefer_not_to_say',
971
+ 'big_city',
972
+ 'small_city',
973
+ 'suburbs',
974
+ 'rural',
975
+ 'nomadic',
976
+ 'prefer_not_to_say',
308
977
  ]);
309
978
  const climatePreferenceOpts = opts([
310
- 'tropical', 'temperate', 'cold', 'dry', 'no_preference', 'prefer_not_to_say',
979
+ 'tropical',
980
+ 'temperate',
981
+ 'cold',
982
+ 'dry',
983
+ 'no_preference',
984
+ 'prefer_not_to_say',
311
985
  ]);
312
986
  const carOwnershipOpts = opts([
313
- 'own_car', 'planning', 'no_car', 'no_car_by_choice', 'prefer_not_to_say',
987
+ 'own_car',
988
+ 'planning',
989
+ 'no_car',
990
+ 'no_car_by_choice',
991
+ 'prefer_not_to_say',
314
992
  ]);
315
993
  const drivingAbilityOpts = opts([
316
- 'licensed', 'licensed_rarely', 'learning', 'no_license', 'prefer_not_to_say',
994
+ 'licensed',
995
+ 'licensed_rarely',
996
+ 'learning',
997
+ 'no_license',
998
+ 'prefer_not_to_say',
317
999
  ]);
318
1000
  const timeManagementOpts = opts([
319
- 'always_early', 'on_time', 'fashionably_late', 'running_late',
320
- 'time_is_construct', 'prefer_not_to_say',
1001
+ 'always_early',
1002
+ 'on_time',
1003
+ 'fashionably_late',
1004
+ 'running_late',
1005
+ 'time_is_construct',
1006
+ 'prefer_not_to_say',
321
1007
  ]);
322
1008
  const screenTimeOpts = opts([
323
- 'minimal', 'moderate', 'heavy', 'digital_detox', 'prefer_not_to_say',
1009
+ 'minimal',
1010
+ 'moderate',
1011
+ 'heavy',
1012
+ 'digital_detox',
1013
+ 'prefer_not_to_say',
324
1014
  ]);
325
1015
  const socialMediaUsageOpts = opts([
326
- 'very_active', 'regular', 'lurker', 'minimal', 'no_social', 'prefer_not_to_say',
1016
+ 'very_active',
1017
+ 'regular',
1018
+ 'lurker',
1019
+ 'minimal',
1020
+ 'no_social',
1021
+ 'prefer_not_to_say',
327
1022
  ]);
328
1023
  const bodyModificationsOpts = opts([
329
- 'tattoos', 'piercings', 'nose_piercing', 'tongue_piercing', 'none',
330
- 'open_to_it', 'prefer_not_to_say',
1024
+ 'tattoos',
1025
+ 'piercings',
1026
+ 'nose_piercing',
1027
+ 'tongue_piercing',
1028
+ 'none',
1029
+ 'open_to_it',
1030
+ 'prefer_not_to_say',
331
1031
  ]);
332
1032
  const earPiercingsOpts = opts([
333
- 'none', 'single_lobe', 'multiple', 'stretched', 'prefer_not_to_say',
1033
+ 'none',
1034
+ 'single_lobe',
1035
+ 'multiple',
1036
+ 'stretched',
1037
+ 'prefer_not_to_say',
334
1038
  ]);
335
1039
  const sunSignOpts = opts([
336
- 'aries', 'taurus', 'gemini', 'cancer', 'leo', 'virgo', 'libra', 'scorpio',
337
- 'sagittarius', 'capricorn', 'aquarius', 'pisces', 'prefer_not_to_say',
1040
+ 'aries',
1041
+ 'taurus',
1042
+ 'gemini',
1043
+ 'cancer',
1044
+ 'leo',
1045
+ 'virgo',
1046
+ 'libra',
1047
+ 'scorpio',
1048
+ 'sagittarius',
1049
+ 'capricorn',
1050
+ 'aquarius',
1051
+ 'pisces',
1052
+ 'prefer_not_to_say',
338
1053
  ]);
339
1054
  const loveLanguageOpts = opts([
340
- 'words_of_affirmation', 'quality_time', 'receiving_gifts', 'acts_of_service',
341
- 'physical_touch', 'prefer_not_to_say',
1055
+ 'words_of_affirmation',
1056
+ 'quality_time',
1057
+ 'receiving_gifts',
1058
+ 'acts_of_service',
1059
+ 'physical_touch',
1060
+ 'prefer_not_to_say',
342
1061
  ]);
343
1062
  // ─── 12. Cognitive & Intellectual ────────────────────────────────────────────
344
1063
  const intellectualNeedOpts = opts([
345
- 'essential', 'very_important', 'nice_to_have', 'not_important', 'prefer_not_to_say',
1064
+ 'essential',
1065
+ 'very_important',
1066
+ 'nice_to_have',
1067
+ 'not_important',
1068
+ 'prefer_not_to_say',
346
1069
  ]);
347
1070
  const cognitiveBandOpts = opts([
348
- 'analytical', 'creative', 'balanced', 'practical', 'philosophical', 'prefer_not_to_say',
1071
+ 'analytical',
1072
+ 'creative',
1073
+ 'balanced',
1074
+ 'practical',
1075
+ 'philosophical',
1076
+ 'prefer_not_to_say',
349
1077
  ]);
350
1078
  const learningPathOpts = opts([
351
- 'self_taught', 'formal', 'experiential', 'social', 'mixed', 'prefer_not_to_say',
1079
+ 'self_taught',
1080
+ 'formal',
1081
+ 'experiential',
1082
+ 'social',
1083
+ 'mixed',
1084
+ 'prefer_not_to_say',
352
1085
  ]);
353
1086
  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',
1087
+ 'technology',
1088
+ 'science',
1089
+ 'arts',
1090
+ 'business',
1091
+ 'health',
1092
+ 'law',
1093
+ 'psychology',
1094
+ 'philosophy',
1095
+ 'history',
1096
+ 'languages',
1097
+ 'math',
1098
+ 'environment',
1099
+ 'education',
1100
+ 'sports',
1101
+ 'cooking_food',
1102
+ 'music_knowledge',
1103
+ 'other',
1104
+ 'prefer_not_to_say',
357
1105
  ]);
358
1106
  const learningMethodsOpts = opts([
359
- 'reading', 'videos', 'podcasts', 'courses', 'workshops', 'mentorship',
360
- 'hands_on', 'discussion', 'prefer_not_to_say',
1107
+ 'reading',
1108
+ 'videos',
1109
+ 'podcasts',
1110
+ 'courses',
1111
+ 'workshops',
1112
+ 'mentorship',
1113
+ 'hands_on',
1114
+ 'discussion',
1115
+ 'prefer_not_to_say',
361
1116
  ]);
362
1117
  const intellectualExperienceOpts = opts([
363
- 'expert', 'advanced', 'intermediate', 'growing', 'beginner', 'prefer_not_to_say',
1118
+ 'expert',
1119
+ 'advanced',
1120
+ 'intermediate',
1121
+ 'growing',
1122
+ 'beginner',
1123
+ 'prefer_not_to_say',
364
1124
  ]);
365
1125
  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',
1126
+ 'master_skill',
1127
+ 'write_book',
1128
+ 'learn_language',
1129
+ 'get_degree',
1130
+ 'start_research',
1131
+ 'teach_others',
1132
+ 'build_something',
1133
+ 'none_specific',
1134
+ 'prefer_not_to_say',
368
1135
  ]);
369
1136
  const goalSettingStyleOpts = opts([
370
- 'detailed_planner', 'broad_goals', 'vision_board', 'go_with_flow',
371
- 'no_goals', 'prefer_not_to_say',
1137
+ 'detailed_planner',
1138
+ 'broad_goals',
1139
+ 'vision_board',
1140
+ 'go_with_flow',
1141
+ 'no_goals',
1142
+ 'prefer_not_to_say',
372
1143
  ]);
373
1144
  const teachingMentoringOpts = opts([
374
- 'love_teaching', 'enjoy', 'neutral', 'prefer_learning', 'not_interested', 'prefer_not_to_say',
1145
+ 'love_teaching',
1146
+ 'enjoy',
1147
+ 'neutral',
1148
+ 'prefer_learning',
1149
+ 'not_interested',
1150
+ 'prefer_not_to_say',
375
1151
  ]);
376
1152
  // ─── 13. Relationship & Intimacy ─────────────────────────────────────────────
377
1153
  const intimacyImportanceOpts = opts([
378
- 'very_important', 'important', 'moderate', 'low', 'not_important', 'prefer_not_to_say',
1154
+ 'very_important',
1155
+ 'important',
1156
+ 'moderate',
1157
+ 'low',
1158
+ 'not_important',
1159
+ 'prefer_not_to_say',
379
1160
  ]);
380
1161
  const loveLanguageDetailedOpts = opts([
381
- 'words_of_affirmation', 'quality_time', 'receiving_gifts', 'acts_of_service',
382
- 'physical_touch', 'prefer_not_to_say',
1162
+ 'words_of_affirmation',
1163
+ 'quality_time',
1164
+ 'receiving_gifts',
1165
+ 'acts_of_service',
1166
+ 'physical_touch',
1167
+ 'prefer_not_to_say',
383
1168
  ]);
384
1169
  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',
1170
+ 'very_affectionate',
1171
+ 'moderately',
1172
+ 'reserved',
1173
+ 'not_affectionate',
1174
+ 'depends',
1175
+ 'prefer_not_to_say',
390
1176
  ]);
1177
+ const pdaComfortOpts = opts(['love_it', 'some', 'minimal', 'none', 'prefer_not_to_say']);
391
1178
  const conflictStyleOpts = opts([
392
- 'talk_it_out', 'cool_off_first', 'avoid_conflict', 'compromise',
393
- 'need_mediator', 'prefer_not_to_say',
1179
+ 'talk_it_out',
1180
+ 'cool_off_first',
1181
+ 'avoid_conflict',
1182
+ 'compromise',
1183
+ 'need_mediator',
1184
+ 'prefer_not_to_say',
394
1185
  ]);
395
1186
  const videoDatingComfortOpts = opts([
396
- 'love_it', 'open', 'prefer_not', 'never', 'prefer_not_to_say',
1187
+ 'love_it',
1188
+ 'open',
1189
+ 'prefer_not',
1190
+ 'never',
1191
+ 'prefer_not_to_say',
397
1192
  ]);
398
1193
  const safetyPreferenceOpts = opts([
399
- 'public_place', 'share_location', 'video_first', 'bring_friend',
400
- 'no_preference', 'prefer_not_to_say',
1194
+ 'public_place',
1195
+ 'share_location',
1196
+ 'video_first',
1197
+ 'bring_friend',
1198
+ 'no_preference',
1199
+ 'prefer_not_to_say',
401
1200
  ]);
402
1201
  const datePreferenceOpts = opts([
403
- 'coffee', 'dinner', 'drinks', 'outdoor', 'cultural', 'cooking',
404
- 'adventure', 'picnic', 'movie', 'game_night', 'prefer_not_to_say',
1202
+ 'coffee',
1203
+ 'dinner',
1204
+ 'drinks',
1205
+ 'outdoor',
1206
+ 'cultural',
1207
+ 'cooking',
1208
+ 'adventure',
1209
+ 'picnic',
1210
+ 'movie',
1211
+ 'game_night',
1212
+ 'prefer_not_to_say',
405
1213
  ]);
406
1214
  const sexDriveOpts = opts([
407
- 'very_high', 'high', 'moderate', 'low', 'very_low', 'varies', 'prefer_not_to_say',
1215
+ 'very_high',
1216
+ 'high',
1217
+ 'moderate',
1218
+ 'low',
1219
+ 'very_low',
1220
+ 'varies',
1221
+ 'prefer_not_to_say',
408
1222
  ]);
409
1223
  const sexualActivityLevelOpts = opts([
410
- 'very_active', 'active', 'moderate', 'low', 'abstinent', 'prefer_not_to_say',
1224
+ 'very_active',
1225
+ 'active',
1226
+ 'moderate',
1227
+ 'low',
1228
+ 'abstinent',
1229
+ 'prefer_not_to_say',
411
1230
  ]);
412
1231
  const kinkOpennessOpts = opts([
413
- 'very_open', 'somewhat', 'vanilla', 'not_interested', 'prefer_not_to_say',
1232
+ 'very_open',
1233
+ 'somewhat',
1234
+ 'vanilla',
1235
+ 'not_interested',
1236
+ 'prefer_not_to_say',
414
1237
  ]);
415
1238
  const concurrentPartnersOpts = opts([
416
- 'strictly_one', 'open_to_discussion', 'polyamorous', 'depends', 'prefer_not_to_say',
1239
+ 'strictly_one',
1240
+ 'open_to_discussion',
1241
+ 'polyamorous',
1242
+ 'depends',
1243
+ 'prefer_not_to_say',
417
1244
  ]);
418
1245
  // ─── 14. Family & Home ───────────────────────────────────────────────────────
419
1246
  const familyTypeOpts = opts([
420
- 'nuclear', 'joint', 'single_parent', 'blended', 'no_family', 'prefer_not_to_say',
1247
+ 'nuclear',
1248
+ 'joint',
1249
+ 'single_parent',
1250
+ 'blended',
1251
+ 'no_family',
1252
+ 'prefer_not_to_say',
421
1253
  ]);
422
1254
  const parentingStyleOpts = opts([
423
- 'authoritative', 'permissive', 'attachment', 'helicopter', 'free_range',
424
- 'equal_co_parent', 'not_sure', 'not_applicable', 'prefer_not_to_say',
1255
+ 'authoritative',
1256
+ 'permissive',
1257
+ 'attachment',
1258
+ 'helicopter',
1259
+ 'free_range',
1260
+ 'equal_co_parent',
1261
+ 'not_sure',
1262
+ 'not_applicable',
1263
+ 'prefer_not_to_say',
425
1264
  ]);
426
1265
  const caregivingResponsibilityOpts = opts([
427
- 'elderly_parents', 'disabled_family', 'children', 'shared', 'none',
428
- 'future', 'prefer_not_to_say',
1266
+ 'elderly_parents',
1267
+ 'disabled_family',
1268
+ 'children',
1269
+ 'shared',
1270
+ 'none',
1271
+ 'future',
1272
+ 'prefer_not_to_say',
429
1273
  ]);
430
1274
  const familyBuildingOpts = opts([
431
- 'natural', 'adoption', 'foster', 'ivf', 'surrogacy', 'co_parenting', 'prefer_not_to_say',
1275
+ 'natural',
1276
+ 'adoption',
1277
+ 'foster',
1278
+ 'ivf',
1279
+ 'surrogacy',
1280
+ 'co_parenting',
1281
+ 'prefer_not_to_say',
432
1282
  ]);
433
1283
  const weddingStyleOpts = opts([
434
- 'grand', 'intimate', 'courthouse', 'destination', 'elopement',
435
- 'dont_care', 'not_marriage', 'prefer_not_to_say',
1284
+ 'grand',
1285
+ 'intimate',
1286
+ 'courthouse',
1287
+ 'destination',
1288
+ 'elopement',
1289
+ 'dont_care',
1290
+ 'not_marriage',
1291
+ 'prefer_not_to_say',
436
1292
  ]);
437
1293
  const giftGivingStyleOpts = opts([
438
- 'lavish', 'thoughtful', 'practical', 'experiences', 'handmade',
439
- 'minimal', 'prefer_not_to_say',
1294
+ 'lavish',
1295
+ 'thoughtful',
1296
+ 'practical',
1297
+ 'experiences',
1298
+ 'handmade',
1299
+ 'minimal',
1300
+ 'prefer_not_to_say',
440
1301
  ]);
441
1302
  const contraceptionViewOpts = opts([
442
- 'pro_contraception', 'open', 'natural_methods', 'against',
443
- 'not_applicable', 'prefer_not_to_say',
1303
+ 'pro_contraception',
1304
+ 'open',
1305
+ 'natural_methods',
1306
+ 'against',
1307
+ 'not_applicable',
1308
+ 'prefer_not_to_say',
444
1309
  ]);
445
1310
  const parentsExpectationOpts = opts([
446
- 'very_involved', 'somewhat', 'independent', 'no_contact', 'prefer_not_to_say',
1311
+ 'very_involved',
1312
+ 'somewhat',
1313
+ 'independent',
1314
+ 'no_contact',
1315
+ 'prefer_not_to_say',
1316
+ ]);
1317
+ const parentOccupationOpts = opts([
1318
+ 'it_software',
1319
+ 'engineering',
1320
+ 'healthcare',
1321
+ 'education',
1322
+ 'finance_accounting',
1323
+ 'arts_entertainment',
1324
+ 'media_communication',
1325
+ 'business_management',
1326
+ 'government_public',
1327
+ 'legal',
1328
+ 'science_research',
1329
+ 'agriculture',
1330
+ 'hospitality_travel',
1331
+ 'real_estate',
1332
+ 'retail_ecommerce',
1333
+ 'manufacturing',
1334
+ 'self_employed',
1335
+ 'homemaker',
1336
+ 'retired',
1337
+ 'deceased',
1338
+ 'other',
1339
+ 'prefer_not_to_say',
1340
+ ]);
1341
+ const familyAffluenceOpts = opts([
1342
+ 'lower_middle',
1343
+ 'middle',
1344
+ 'upper_middle',
1345
+ 'affluent',
1346
+ 'wealthy',
1347
+ 'prefer_not_to_say',
1348
+ ]);
1349
+ const familyValuesOpts = opts([
1350
+ 'orthodox',
1351
+ 'moderate',
1352
+ 'liberal',
1353
+ 'very_liberal',
1354
+ 'prefer_not_to_say',
1355
+ ]);
1356
+ const profileCreatedByOpts = opts([
1357
+ 'self',
1358
+ 'parent',
1359
+ 'sibling',
1360
+ 'friend',
1361
+ 'relative',
1362
+ 'other',
447
1363
  ]);
448
1364
  // ─── 15. Finance & Legal ─────────────────────────────────────────────────────
449
1365
  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',
1366
+ 'under_3l',
1367
+ '3l_6l',
1368
+ '6l_10l',
1369
+ '10l_15l',
1370
+ '15l_25l',
1371
+ '25l_50l',
1372
+ '50l_1cr',
1373
+ 'above_1cr',
1374
+ 'prefer_not_to_say',
452
1375
  ]);
453
1376
  const financialAttitudeOpts = opts([
454
- 'saver', 'spender', 'balanced', 'investor', 'minimalist', 'prefer_not_to_say',
1377
+ 'saver',
1378
+ 'spender',
1379
+ 'balanced',
1380
+ 'investor',
1381
+ 'minimalist',
1382
+ 'prefer_not_to_say',
455
1383
  ]);
456
1384
  const incomeSourcesOpts = opts([
457
- 'salary', 'business', 'freelance', 'investments', 'rental', 'family',
458
- 'pension', 'no_income', 'prefer_not_to_say',
1385
+ 'salary',
1386
+ 'business',
1387
+ 'freelance',
1388
+ 'investments',
1389
+ 'rental',
1390
+ 'family',
1391
+ 'pension',
1392
+ 'no_income',
1393
+ 'prefer_not_to_say',
459
1394
  ]);
460
1395
  const financialIntegrationOpts = opts([
461
- 'fully_joint', 'mostly_joint', 'split', 'proportional', 'separate', 'prefer_not_to_say',
1396
+ 'fully_joint',
1397
+ 'mostly_joint',
1398
+ 'split',
1399
+ 'proportional',
1400
+ 'separate',
1401
+ 'prefer_not_to_say',
462
1402
  ]);
463
1403
  const debtStatusOpts = opts([
464
- 'debt_free', 'student_loans', 'mortgage', 'manageable', 'significant', 'prefer_not_to_say',
1404
+ 'debt_free',
1405
+ 'student_loans',
1406
+ 'mortgage',
1407
+ 'manageable',
1408
+ 'significant',
1409
+ 'prefer_not_to_say',
465
1410
  ]);
466
1411
  const financialStabilityOpts = opts([
467
- 'very_stable', 'stable', 'building', 'unstable', 'in_crisis', 'prefer_not_to_say',
1412
+ 'very_stable',
1413
+ 'stable',
1414
+ 'building',
1415
+ 'unstable',
1416
+ 'in_crisis',
1417
+ 'prefer_not_to_say',
468
1418
  ]);
469
1419
  const creditScoreOpts = opts([
470
- 'excellent', 'good', 'fair', 'poor', 'dont_know', 'not_applicable', 'prefer_not_to_say',
1420
+ 'excellent',
1421
+ 'good',
1422
+ 'fair',
1423
+ 'poor',
1424
+ 'dont_know',
1425
+ 'not_applicable',
1426
+ 'prefer_not_to_say',
471
1427
  ]);
472
1428
  const prenupViewOpts = opts([
473
- 'strongly_for', 'open', 'neutral', 'against', 'strongly_against', 'prefer_not_to_say',
1429
+ 'strongly_for',
1430
+ 'open',
1431
+ 'neutral',
1432
+ 'against',
1433
+ 'strongly_against',
1434
+ 'prefer_not_to_say',
474
1435
  ]);
475
1436
  const lifeInsuranceOpts = opts([
476
- 'have_it', 'planning', 'dont_have', 'not_needed', 'prefer_not_to_say',
1437
+ 'have_it',
1438
+ 'planning',
1439
+ 'dont_have',
1440
+ 'not_needed',
1441
+ 'prefer_not_to_say',
477
1442
  ]);
478
1443
  const healthInsuranceOpts = opts([
479
- 'comprehensive', 'basic', 'employer', 'none', 'prefer_not_to_say',
1444
+ 'comprehensive',
1445
+ 'basic',
1446
+ 'employer',
1447
+ 'none',
1448
+ 'prefer_not_to_say',
480
1449
  ]);
481
1450
  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',
1451
+ 'citizen',
1452
+ 'permanent_resident',
1453
+ 'work_visa',
1454
+ 'student_visa',
1455
+ 'dual_citizen',
1456
+ 'other',
1457
+ 'prefer_not_to_say',
487
1458
  ]);
1459
+ const legalIssuesOpts = opts(['none', 'minor_past', 'ongoing', 'prefer_not_to_say']);
488
1460
  const drivingRecordOpts = opts([
489
- 'clean', 'minor', 'dui_past', 'no_license', 'prefer_not_to_say',
1461
+ 'clean',
1462
+ 'minor',
1463
+ 'dui_past',
1464
+ 'no_license',
1465
+ 'prefer_not_to_say',
490
1466
  ]);
491
1467
  const billSplittingOpts = opts([
492
- 'always_split', 'alternate', 'whoever_invites', 'traditional',
493
- 'whoever_offers', 'dont_care', 'prefer_not_to_say',
1468
+ 'always_split',
1469
+ 'alternate',
1470
+ 'whoever_invites',
1471
+ 'traditional',
1472
+ 'whoever_offers',
1473
+ 'dont_care',
1474
+ 'prefer_not_to_say',
1475
+ ]);
1476
+ const countryOfResidenceOpts = opts([
1477
+ 'india',
1478
+ 'usa',
1479
+ 'uk',
1480
+ 'canada',
1481
+ 'australia',
1482
+ 'uae',
1483
+ 'singapore',
1484
+ 'malaysia',
1485
+ 'germany',
1486
+ 'new_zealand',
1487
+ 'south_africa',
1488
+ 'saudi_arabia',
1489
+ 'qatar',
1490
+ 'bahrain',
1491
+ 'kuwait',
1492
+ 'oman',
1493
+ 'other',
1494
+ 'prefer_not_to_say',
1495
+ ]);
1496
+ const visaTypeOpts = opts([
1497
+ 'h1b',
1498
+ 'l1',
1499
+ 'eb1',
1500
+ 'eb2',
1501
+ 'eb3',
1502
+ 'opt',
1503
+ 'green_card',
1504
+ 'citizen',
1505
+ 'work_permit',
1506
+ 'student',
1507
+ 'other',
1508
+ 'not_applicable',
1509
+ 'prefer_not_to_say',
494
1510
  ]);
495
1511
  // ─── 16. Health & Wellness ───────────────────────────────────────────────────
496
1512
  const accessibilityNeedsOpts = opts([
497
- 'none', 'physical', 'visual', 'hearing', 'cognitive', 'chronic_condition',
498
- 'multiple', 'prefer_not_to_say',
1513
+ 'none',
1514
+ 'physical',
1515
+ 'visual',
1516
+ 'hearing',
1517
+ 'cognitive',
1518
+ 'chronic_condition',
1519
+ 'multiple',
1520
+ 'prefer_not_to_say',
499
1521
  ]);
500
1522
  const chronicConditionOpts = opts([
501
- 'none', 'diabetes', 'hypertension', 'asthma', 'thyroid', 'autoimmune',
502
- 'mental_health', 'other', 'multiple', 'prefer_not_to_say',
1523
+ 'none',
1524
+ 'diabetes',
1525
+ 'hypertension',
1526
+ 'asthma',
1527
+ 'thyroid',
1528
+ 'autoimmune',
1529
+ 'mental_health',
1530
+ 'other',
1531
+ 'multiple',
1532
+ 'prefer_not_to_say',
503
1533
  ]);
504
1534
  const criticalIllnessHistoryOpts = opts([
505
- 'none', 'cancer_remission', 'heart', 'other_managed', 'currently_treating', 'prefer_not_to_say',
1535
+ 'none',
1536
+ 'cancer_remission',
1537
+ 'heart',
1538
+ 'other_managed',
1539
+ 'currently_treating',
1540
+ 'prefer_not_to_say',
506
1541
  ]);
507
1542
  const neurodiversityOpts = opts([
508
- 'neurotypical', 'adhd', 'autism', 'dyslexia', 'bipolar', 'ocd',
509
- 'other', 'multiple', 'prefer_not_to_say',
1543
+ 'neurotypical',
1544
+ 'adhd',
1545
+ 'autism',
1546
+ 'dyslexia',
1547
+ 'bipolar',
1548
+ 'ocd',
1549
+ 'other',
1550
+ 'multiple',
1551
+ 'prefer_not_to_say',
510
1552
  ]);
511
1553
  const personalityDisorderAwarenessOpts = opts([
512
- 'no', 'diagnosed_managing', 'suspected', 'in_treatment', 'prefer_not_to_say',
1554
+ 'no',
1555
+ 'diagnosed_managing',
1556
+ 'suspected',
1557
+ 'in_treatment',
1558
+ 'prefer_not_to_say',
513
1559
  ]);
514
1560
  const therapyOpennessOpts = opts([
515
- 'currently_in', 'past_positive', 'open', 'not_for_me', 'never_considered', 'prefer_not_to_say',
1561
+ 'currently_in',
1562
+ 'past_positive',
1563
+ 'open',
1564
+ 'not_for_me',
1565
+ 'never_considered',
1566
+ 'prefer_not_to_say',
516
1567
  ]);
517
1568
  const recoveryStatusOpts = opts([
518
- 'not_applicable', 'in_recovery', 'long_term_sober', 'working_on_it', 'prefer_not_to_say',
1569
+ 'not_applicable',
1570
+ 'in_recovery',
1571
+ 'long_term_sober',
1572
+ 'working_on_it',
1573
+ 'prefer_not_to_say',
519
1574
  ]);
520
1575
  const phobiasOpts = opts([
521
- 'heights', 'flying', 'spiders', 'water', 'crowds', 'darkness', 'needles',
522
- 'blood', 'enclosed_spaces', 'dogs', 'snakes', 'none', 'prefer_not_to_say',
1576
+ 'heights',
1577
+ 'flying',
1578
+ 'spiders',
1579
+ 'water',
1580
+ 'crowds',
1581
+ 'darkness',
1582
+ 'needles',
1583
+ 'blood',
1584
+ 'enclosed_spaces',
1585
+ 'dogs',
1586
+ 'snakes',
1587
+ 'none',
1588
+ 'prefer_not_to_say',
523
1589
  ]);
524
1590
  const fertilityStatusOpts = opts([
525
- 'no_issues', 'tested_fine', 'undergoing_treatment', 'known_challenges',
526
- 'not_tested', 'not_applicable', 'prefer_not_to_say',
1591
+ 'no_issues',
1592
+ 'tested_fine',
1593
+ 'undergoing_treatment',
1594
+ 'known_challenges',
1595
+ 'not_tested',
1596
+ 'not_applicable',
1597
+ 'prefer_not_to_say',
527
1598
  ]);
528
1599
  const snoringHabitOpts = opts([
529
- 'never', 'sometimes', 'regularly', 'use_cpap', 'dont_know', 'prefer_not_to_say',
1600
+ 'never',
1601
+ 'sometimes',
1602
+ 'regularly',
1603
+ 'use_cpap',
1604
+ 'dont_know',
1605
+ 'prefer_not_to_say',
530
1606
  ]);
531
1607
  const allergiesOpts = opts([
532
- 'peanuts', 'shellfish', 'dairy', 'gluten', 'eggs', 'soy', 'pollen', 'dust',
533
- 'pet_dander', 'latex', 'medication', 'insect_stings', 'none', 'prefer_not_to_say',
1608
+ 'peanuts',
1609
+ 'shellfish',
1610
+ 'dairy',
1611
+ 'gluten',
1612
+ 'eggs',
1613
+ 'soy',
1614
+ 'pollen',
1615
+ 'dust',
1616
+ 'pet_dander',
1617
+ 'latex',
1618
+ 'medication',
1619
+ 'insect_stings',
1620
+ 'none',
1621
+ 'prefer_not_to_say',
534
1622
  ]);
535
1623
  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',
1624
+ 'a_positive',
1625
+ 'a_negative',
1626
+ 'b_positive',
1627
+ 'b_negative',
1628
+ 'ab_positive',
1629
+ 'ab_negative',
1630
+ 'o_positive',
1631
+ 'o_negative',
1632
+ 'dont_know',
1633
+ 'prefer_not_to_say',
541
1634
  ]);
1635
+ const rhFactorOpts = opts(['positive', 'negative', 'dont_know', 'prefer_not_to_say']);
542
1636
  const geneticCarrierOpts = opts([
543
- 'not_carrier', 'carrier', 'tested_clear', 'not_tested', 'prefer_not_to_say',
1637
+ 'not_carrier',
1638
+ 'carrier',
1639
+ 'tested_clear',
1640
+ 'not_tested',
1641
+ 'prefer_not_to_say',
544
1642
  ]);
545
1643
  const geneticCounselingOpts = opts([
546
- 'already_done', 'open', 'not_needed', 'against', 'prefer_not_to_say',
1644
+ 'already_done',
1645
+ 'open',
1646
+ 'not_needed',
1647
+ 'against',
1648
+ 'prefer_not_to_say',
547
1649
  ]);
548
1650
  const vaccinationsOpts = opts([
549
- 'covid_full', 'covid_boosted', 'flu_annual', 'hpv', 'hepatitis', 'tetanus',
550
- 'mmr', 'all_standard', 'none', 'prefer_not_to_say',
1651
+ 'covid_full',
1652
+ 'covid_boosted',
1653
+ 'flu_annual',
1654
+ 'hpv',
1655
+ 'hepatitis',
1656
+ 'tetanus',
1657
+ 'mmr',
1658
+ 'all_standard',
1659
+ 'none',
1660
+ 'prefer_not_to_say',
551
1661
  ]);
552
1662
  const healthSafetyPracticeOpts = opts([
553
- 'very_careful', 'mostly', 'average', 'relaxed', 'prefer_not_to_say',
1663
+ 'very_careful',
1664
+ 'mostly',
1665
+ 'average',
1666
+ 'relaxed',
1667
+ 'prefer_not_to_say',
554
1668
  ]);
555
1669
  const bodyPositivityOpts = opts([
556
- 'very_positive', 'positive', 'working_on_it', 'struggles', 'prefer_not_to_say',
1670
+ 'very_positive',
1671
+ 'positive',
1672
+ 'working_on_it',
1673
+ 'struggles',
1674
+ 'prefer_not_to_say',
557
1675
  ]);
558
1676
  const performanceDrugsOpts = opts([
559
- 'never', 'past_use', 'currently', 'supplements_only', 'prefer_not_to_say',
1677
+ 'never',
1678
+ 'past_use',
1679
+ 'currently',
1680
+ 'supplements_only',
1681
+ 'prefer_not_to_say',
560
1682
  ]);
561
1683
  const appearanceSurgeryOpts = opts([
562
- 'never', 'have_had', 'open', 'against', 'prefer_not_to_say',
1684
+ 'never',
1685
+ 'have_had',
1686
+ 'open',
1687
+ 'against',
1688
+ 'prefer_not_to_say',
563
1689
  ]);
564
1690
  const mentalHealthOpennessOpts = opts([
565
- 'very_open', 'somewhat', 'private', 'uncomfortable', 'prefer_not_to_say',
1691
+ 'very_open',
1692
+ 'somewhat',
1693
+ 'private',
1694
+ 'uncomfortable',
1695
+ 'prefer_not_to_say',
566
1696
  ]);
567
1697
  const stressManagementOpts = opts([
568
- 'exercise', 'meditation', 'therapy', 'social', 'creative', 'nature',
569
- 'unhealthy', 'dont_manage', 'prefer_not_to_say',
1698
+ 'exercise',
1699
+ 'meditation',
1700
+ 'therapy',
1701
+ 'social',
1702
+ 'creative',
1703
+ 'nature',
1704
+ 'unhealthy',
1705
+ 'dont_manage',
1706
+ 'prefer_not_to_say',
570
1707
  ]);
571
1708
  // ─── Location sub-schema ─────────────────────────────────────────────────────
572
1709
  const locationSchema = z.object({
573
1710
  display: z.string(),
574
- coordinates: z.object({
1711
+ coordinates: z
1712
+ .object({
575
1713
  lat: z.number(),
576
1714
  lng: z.number(),
577
- }).optional(),
1715
+ })
1716
+ .optional(),
578
1717
  });
579
1718
  // ─── Family member sub-schema (object_array itemShape) ───────────────────────
580
1719
  const familyMemberSchema = z.object({
@@ -600,15 +1739,21 @@ export const fullProfileSchema = z.object({
600
1739
  mbtiType: mbtiTypeOpts.optional(),
601
1740
  // ── 02. Story & Prompts ────────────────────────────────────────────────────
602
1741
  bio: z.string().trim().max(500).optional(),
603
- prompts: z.array(z.object({
1742
+ prompts: z
1743
+ .array(z.object({
604
1744
  prompt: z.string(),
605
1745
  answer: z.string().max(250),
606
- })).min(1).max(3).optional(),
607
- voicePrompt: z.object({
1746
+ }))
1747
+ .min(1)
1748
+ .max(3)
1749
+ .optional(),
1750
+ voicePrompt: z
1751
+ .object({
608
1752
  url: z.string().url(),
609
1753
  assetId: z.string(),
610
1754
  durationSeconds: z.number().max(30),
611
- }).optional(),
1755
+ })
1756
+ .optional(),
612
1757
  bornTo: z.string().trim().max(200).optional(),
613
1758
  senseOfSelf: z.string().trim().max(200).optional(),
614
1759
  selfKeywords: z.array(selfKeywordsOpts).max(5).optional(),
@@ -637,6 +1782,20 @@ export const fullProfileSchema = z.object({
637
1782
  cannabis: cannabisOpts.optional(),
638
1783
  childrenPlans: childrenPlansOpts.optional(),
639
1784
  lookingForEntrepreneur: lookingForEntrepreneurOpts.optional(),
1785
+ subCaste: z.string().trim().max(100).optional(),
1786
+ gotra: z.string().trim().max(100).optional(),
1787
+ nakshatra: nakshatraOpts.optional(),
1788
+ rashi: rashiOpts.optional(),
1789
+ birthTime: z
1790
+ .string()
1791
+ .regex(/^\d{2}:\d{2}$/)
1792
+ .optional(),
1793
+ birthPlace: z.string().trim().max(100).optional(),
1794
+ numberOfChildren: z.number().int().min(0).max(10).optional(),
1795
+ previousMarriages: z.number().int().min(0).max(5).optional(),
1796
+ nativePlace: z.string().trim().max(100).optional(),
1797
+ hometownState: hometownStateOpts.optional(),
1798
+ preferredGenders: z.array(genderOpts).optional(),
640
1799
  // ── 04. What I'm Looking For ───────────────────────────────────────────────
641
1800
  whatImLookingFor: z.string().trim().max(300).optional(),
642
1801
  relationshipRole: z.array(relationshipRoleOpts).max(3).optional(),
@@ -761,6 +1920,13 @@ export const fullProfileSchema = z.object({
761
1920
  contraceptionView: contraceptionViewOpts.optional(),
762
1921
  parentsExpectation: parentsExpectationOpts.optional(),
763
1922
  parentsContactNumber: z.string().trim().max(15).optional(),
1923
+ fatherOccupation: parentOccupationOpts.optional(),
1924
+ motherOccupation: parentOccupationOpts.optional(),
1925
+ numberOfSiblings: z.number().int().min(0).max(10).optional(),
1926
+ siblingsMarried: z.number().int().min(0).max(10).optional(),
1927
+ familyAffluence: familyAffluenceOpts.optional(),
1928
+ familyValues: familyValuesOpts.optional(),
1929
+ profileCreatedBy: profileCreatedByOpts.optional(),
764
1930
  // ── 15. Finance & Legal (Tier 3) ───────────────────────────────────────────
765
1931
  incomeRange: incomeRangeOpts.optional(),
766
1932
  financialAttitude: financialAttitudeOpts.optional(),
@@ -776,6 +1942,9 @@ export const fullProfileSchema = z.object({
776
1942
  legalIssues: legalIssuesOpts.optional(),
777
1943
  drivingRecord: drivingRecordOpts.optional(),
778
1944
  billSplitting: billSplittingOpts.optional(),
1945
+ grewUpIn: z.string().trim().max(100).optional(),
1946
+ countryOfResidence: countryOfResidenceOpts.optional(),
1947
+ visaType: visaTypeOpts.optional(),
779
1948
  // ── 16. Health & Wellness (Tier 3) ─────────────────────────────────────────
780
1949
  accessibilityNeeds: accessibilityNeedsOpts.optional(),
781
1950
  chronicCondition: chronicConditionOpts.optional(),
@@ -799,12 +1968,15 @@ export const fullProfileSchema = z.object({
799
1968
  appearanceSurgery: appearanceSurgeryOpts.optional(),
800
1969
  mentalHealthOpenness: mentalHealthOpennessOpts.optional(),
801
1970
  stressManagement: stressManagementOpts.optional(),
1971
+ // ── Meta Fields (system-level) ───────────────────────────────────────────────
1972
+ hardPreferences: z.array(z.string()).optional(),
1973
+ softFilters: z.array(z.string()).optional(),
802
1974
  });
803
1975
  // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
804
1976
  // createProfileSchema — onboarding fields only (isOnboarding: true)
805
1977
  // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
806
1978
  export const createProfileSchema = z.object({
807
- // Required onboarding fields (isOnboarding: true, NOT isOnboardingOptional, NOT optional)
1979
+ // Required onboarding fields
808
1980
  photos: z.array(photoSchema).min(2).max(6),
809
1981
  displayName: z.string().trim().max(50),
810
1982
  dateOfBirth: z.coerce.date(),
@@ -816,12 +1988,33 @@ export const createProfileSchema = z.object({
816
1988
  sexualOrientation: sexualOrientationOpts,
817
1989
  relationshipStructure: relationshipStructureOpts,
818
1990
  bio: z.string().trim().max(500),
819
- prompts: z.array(z.object({
1991
+ preferredGenders: z.array(genderOpts).min(1),
1992
+ familyReligion: religionOpts,
1993
+ motherTongue: motherTongueOpts,
1994
+ relationshipStatus: relationshipStatusOpts,
1995
+ // Optional onboarding fields
1996
+ hometownState: hometownStateOpts.optional(),
1997
+ personalReligion: religionOpts.optional(),
1998
+ height: heightOpts.optional(),
1999
+ educationLevel: educationLevelOpts.optional(),
2000
+ profession: professionOpts.optional(),
2001
+ hobbies: z.array(hobbiesOpts).max(10).optional(),
2002
+ diet: dietOpts.optional(),
2003
+ smoking: smokingOpts.optional(),
2004
+ alcohol: alcoholOpts.optional(),
2005
+ favouriteBooks: z.array(z.string().trim().max(200)).max(5).optional(),
2006
+ favouriteShows: z.array(z.string().trim().max(200)).max(5).optional(),
2007
+ idols: z.array(z.string().trim().max(200)).max(5).optional(),
2008
+ favouriteYoutubeChannels: z.array(z.string().trim().max(200)).max(5).optional(),
2009
+ mbtiType: mbtiTypeOpts.optional(),
2010
+ prompts: z
2011
+ .array(z.object({
820
2012
  prompt: z.string(),
821
2013
  answer: z.string().max(250),
822
- })).min(1).max(3),
823
- // Optional onboarding fields (isOnboardingOptional: true)
824
- mbtiType: mbtiTypeOpts.optional(),
2014
+ }))
2015
+ .max(3)
2016
+ .optional(),
2017
+ preferredAgeRange: z.number().min(18).max(70).optional(),
825
2018
  });
826
2019
  // ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
827
2020
  // updateProfileSchema — all fields optional