From 5c8c9cc9a5215e66d3b5963a38019fe793fff4bd Mon Sep 17 00:00:00 2001 From: Jamie Brunton Date: Sat, 5 Sep 2026 20:24:27 +0100 Subject: [PATCH] docs(catalogue): finalise spicy question draft --- .../question-drafts/play-safe-spicy-v1.json | 2228 ++++++++--------- .../question-drafts/play-safe-spicy-v1.md | 30 +- scripts/validate-question-draft.mjs | 77 +- 3 files changed, 1205 insertions(+), 1130 deletions(-) diff --git a/docs/product/question-drafts/play-safe-spicy-v1.json b/docs/product/question-drafts/play-safe-spicy-v1.json index 873a101..db00a13 100644 --- a/docs/product/question-drafts/play-safe-spicy-v1.json +++ b/docs/product/question-drafts/play-safe-spicy-v1.json @@ -74,7 +74,7 @@ "pack_slug": "flirty-communication", "text": "Send your partner a message describing the kind of attention you would love later.", "partner_text": "Receive a message from your partner describing the kind of attention they would love later.", - "intensity": 2, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -90,7 +90,7 @@ "pack_slug": "flirty-communication", "text": "Receive a message from your partner describing the kind of attention they would love later.", "partner_text": "Send your partner a message describing the kind of attention you would love later.", - "intensity": 2, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -106,7 +106,7 @@ "pack_slug": "flirty-communication", "text": "Ask your partner to choose one compliment you should hear in a more intimate setting.", "partner_text": "Choose one compliment your partner should hear in a more intimate setting.", - "intensity": 2, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -122,7 +122,7 @@ "pack_slug": "flirty-communication", "text": "Choose one compliment your partner should hear in a more intimate setting.", "partner_text": "Ask your partner to choose one compliment you should hear in a more intimate setting.", - "intensity": 2, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -138,7 +138,7 @@ "pack_slug": "flirty-communication", "text": "Tell your partner one private thought that makes you feel closer to them.", "partner_text": "Hear one private thought from your partner that makes them feel closer to you.", - "intensity": 2, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -154,7 +154,7 @@ "pack_slug": "flirty-communication", "text": "Hear one private thought from your partner that makes them feel closer to you.", "partner_text": "Tell your partner one private thought that makes you feel closer to them.", - "intensity": 2, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -170,7 +170,7 @@ "pack_slug": "flirty-communication", "text": "Ask your partner to give you a private instruction in a message.", "partner_text": "Give your partner a private instruction in a message.", - "intensity": 2, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -186,7 +186,7 @@ "pack_slug": "flirty-communication", "text": "Give your partner a private instruction in a message.", "partner_text": "Ask your partner to give you a private instruction in a message.", - "intensity": 2, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -298,7 +298,7 @@ "pack_slug": "flirty-communication", "text": "Ask your partner to tell you one private wish they want you to consider.", "partner_text": "Tell your partner one private wish you want them to consider.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -306,7 +306,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner is open to receiving a direct private wish and the other is ready to name one." }, { @@ -314,7 +314,7 @@ "pack_slug": "flirty-communication", "text": "Tell your partner one private wish you want them to consider.", "partner_text": "Ask your partner to tell you one private wish they want you to consider.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -322,7 +322,7 @@ "required_props": null, "inverse_of": "191de6c6-c82c-4bea-8491-8039a9711796", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner is open to receiving a direct private wish and the other is ready to name one." }, { @@ -330,7 +330,7 @@ "pack_slug": "anticipation", "text": "Let your partner choose a small signal that means they want your attention.", "partner_text": "Choose a small signal that tells your partner you want their attention.", - "intensity": 2, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -346,7 +346,7 @@ "pack_slug": "anticipation", "text": "Choose a small signal that tells your partner you want their attention.", "partner_text": "Let your partner choose a small signal that means they want your attention.", - "intensity": 2, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -522,7 +522,7 @@ "pack_slug": "anticipation", "text": "Ask your partner to plan a private surprise within limits you agree first.", "partner_text": "Plan a private surprise for your partner within limits you agree first.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -530,7 +530,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants a contained surprise and the other wants to lead it safely." }, { @@ -538,7 +538,7 @@ "pack_slug": "anticipation", "text": "Plan a private surprise for your partner within limits you agree first.", "partner_text": "Ask your partner to plan a private surprise within limits you agree first.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -546,7 +546,7 @@ "required_props": null, "inverse_of": "e8588b1e-f3c5-4ac6-8b21-0d8da3c023c2", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants a contained surprise and the other wants to lead it safely." }, { @@ -554,7 +554,7 @@ "pack_slug": "anticipation", "text": "Let your partner choose the order of a private experience without telling you.", "partner_text": "Choose the order of a private experience without telling your partner.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -562,7 +562,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants uncertainty within an agreed experience and the other wants to choreograph it." }, { @@ -570,7 +570,7 @@ "pack_slug": "anticipation", "text": "Choose the order of a private experience without telling your partner.", "partner_text": "Let your partner choose the order of a private experience without telling you.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -578,7 +578,7 @@ "required_props": null, "inverse_of": "895af0c1-4cbb-40a2-878a-052fb1dceab4", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants uncertainty within an agreed experience and the other wants to choreograph it." }, { @@ -746,7 +746,7 @@ "pack_slug": "taking-the-lead", "text": "Decide the private role you want your partner to play for you.", "partner_text": "Play the private role your partner chooses for you.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -754,7 +754,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants to direct a role-based encounter and the other wants to inhabit the chosen role." }, { @@ -762,7 +762,7 @@ "pack_slug": "taking-the-lead", "text": "Play the private role your partner chooses for you.", "partner_text": "Decide the private role you want your partner to play for you.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -770,7 +770,7 @@ "required_props": null, "inverse_of": "4036d1e6-3135-4d6c-8130-04289df1ddc9", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants to direct a role-based encounter and the other wants to inhabit the chosen role." }, { @@ -778,7 +778,7 @@ "pack_slug": "taking-the-lead", "text": "Set the rules for a private game your partner agrees to play.", "partner_text": "Play a private game using rules your partner sets.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -786,7 +786,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants to set a consensual frame and the other wants to play within it." }, { @@ -794,7 +794,7 @@ "pack_slug": "taking-the-lead", "text": "Play a private game using rules your partner sets.", "partner_text": "Set the rules for a private game your partner agrees to play.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -802,7 +802,7 @@ "required_props": null, "inverse_of": "de9a2323-f421-4fce-8859-7bb4ab428a4c", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants to set a consensual frame and the other wants to play within it." }, { @@ -810,7 +810,7 @@ "pack_slug": "taking-the-lead", "text": "Choose when your partner may take the next step in a private encounter.", "partner_text": "Let your partner choose when you may take the next step in a private encounter.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -818,7 +818,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants to control pacing and the other wants to receive a clear cue." }, { @@ -826,7 +826,7 @@ "pack_slug": "taking-the-lead", "text": "Let your partner choose when you may take the next step in a private encounter.", "partner_text": "Choose when your partner may take the next step in a private encounter.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -834,7 +834,7 @@ "required_props": null, "inverse_of": "9eda7c6c-53bc-4481-8b13-48f8e487d040", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants to control pacing and the other wants to receive a clear cue." }, { @@ -1002,71 +1002,7 @@ "pack_slug": "following", "text": "Let your partner decide the sequence of an agreed private experience.", "partner_text": "Decide the sequence of an agreed private experience for your partner.", - "intensity": 4, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": null, - "review_status": "draft", - "policy_risk": "edge", - "intended_outcome": "One partner wants to follow an agreed sequence and the other wants to lead it." - }, - { - "id": "713a9c15-cb83-484c-85ab-e7c03898eb07", - "pack_slug": "following", - "text": "Decide the sequence of an agreed private experience for your partner.", - "partner_text": "Let your partner decide the sequence of an agreed private experience.", - "intensity": 4, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": "1ca6b528-885b-4a10-8070-0975e37ef685", - "review_status": "draft", - "policy_risk": "edge", - "intended_outcome": "One partner wants to follow an agreed sequence and the other wants to lead it." - }, - { - "id": "56419595-d461-487c-8f02-3429aebc8b9a", - "pack_slug": "following", - "text": "Follow a private role your partner sets after discussing your limits.", - "partner_text": "Set a private role for your partner after discussing their limits.", - "intensity": 4, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": null, - "review_status": "draft", - "policy_risk": "edge", - "intended_outcome": "One partner wants to follow a defined role and the other wants to set it within agreed limits." - }, - { - "id": "32ba1560-f05d-4065-88de-472586b64970", - "pack_slug": "following", - "text": "Set a private role for your partner after discussing their limits.", - "partner_text": "Follow a private role your partner sets after discussing your limits.", - "intensity": 4, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": "56419595-d461-487c-8f02-3429aebc8b9a", - "review_status": "draft", - "policy_risk": "edge", - "intended_outcome": "One partner wants to follow a defined role and the other wants to set it within agreed limits." - }, - { - "id": "fa7f3727-9acb-4b7b-8b0d-34545647bc77", - "pack_slug": "shared-control", - "text": "Choose one element of a private date while your partner chooses the other.", - "partner_text": "Choose one element of a private date while your partner chooses the other.", - "intensity": 2, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -1075,20 +1011,68 @@ "inverse_of": null, "review_status": "draft", "policy_risk": "low", - "intended_outcome": "Both partners want to co-create a private date with equal input." + "intended_outcome": "One partner wants to follow an agreed sequence and the other wants to lead it." }, { - "id": "9446dd26-cd3f-4357-8ac0-c8551a7b8303", - "pack_slug": "shared-control", - "text": "Choose one element of a private date while your partner chooses the other.", - "partner_text": "Choose one element of a private date while your partner chooses the other.", - "intensity": 2, + "id": "713a9c15-cb83-484c-85ab-e7c03898eb07", + "pack_slug": "following", + "text": "Decide the sequence of an agreed private experience for your partner.", + "partner_text": "Let your partner decide the sequence of an agreed private experience.", + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, "target_user_genders": null, "required_props": null, - "inverse_of": "fa7f3727-9acb-4b7b-8b0d-34545647bc77", + "inverse_of": "1ca6b528-885b-4a10-8070-0975e37ef685", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to follow an agreed sequence and the other wants to lead it." + }, + { + "id": "56419595-d461-487c-8f02-3429aebc8b9a", + "pack_slug": "following", + "text": "Follow a private role your partner sets after discussing your limits.", + "partner_text": "Set a private role for your partner after discussing their limits.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": null, + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to follow a defined role and the other wants to set it within agreed limits." + }, + { + "id": "32ba1560-f05d-4065-88de-472586b64970", + "pack_slug": "following", + "text": "Set a private role for your partner after discussing their limits.", + "partner_text": "Follow a private role your partner sets after discussing your limits.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "56419595-d461-487c-8f02-3429aebc8b9a", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to follow a defined role and the other wants to set it within agreed limits." + }, + { + "id": "fa7f3727-9acb-4b7b-8b0d-34545647bc77", + "pack_slug": "shared-control", + "text": "Choose one element of a private date while your partner chooses the other.", + "partner_text": null, + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": null, "review_status": "draft", "policy_risk": "low", "intended_outcome": "Both partners want to co-create a private date with equal input." @@ -1097,7 +1081,7 @@ "id": "9e9dac4e-a718-4573-8ab2-cca7a1c5a4ea", "pack_slug": "shared-control", "text": "Take turns choosing how you show affection during a private evening.", - "partner_text": "Take turns choosing how you show affection during a private evening.", + "partner_text": null, "intensity": 2, "question_type": "swipe", "config": {}, @@ -1109,27 +1093,11 @@ "policy_risk": "low", "intended_outcome": "Both partners want alternating opportunities to initiate affection." }, - { - "id": "59d0c220-6464-485f-8a62-04560dad04e5", - "pack_slug": "shared-control", - "text": "Take turns choosing how you show affection during a private evening.", - "partner_text": "Take turns choosing how you show affection during a private evening.", - "intensity": 2, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": "9e9dac4e-a718-4573-8ab2-cca7a1c5a4ea", - "review_status": "draft", - "policy_risk": "low", - "intended_outcome": "Both partners want alternating opportunities to initiate affection." - }, { "id": "9f1746b7-8f9a-4544-8cea-6596bc5a41f0", "pack_slug": "shared-control", "text": "Create a private list of three ideas and let your partner pick one for you.", - "partner_text": "Create a private list of three ideas and let your partner pick one for you.", + "partner_text": null, "intensity": 3, "question_type": "swipe", "config": {}, @@ -1141,27 +1109,11 @@ "policy_risk": "low", "intended_outcome": "Both partners want to offer choices and select an experience for each other." }, - { - "id": "b24f30ff-5d34-4fc7-8734-9ffabd67dfe9", - "pack_slug": "shared-control", - "text": "Create a private list of three ideas and let your partner pick one for you.", - "partner_text": "Create a private list of three ideas and let your partner pick one for you.", - "intensity": 3, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": "9f1746b7-8f9a-4544-8cea-6596bc5a41f0", - "review_status": "draft", - "policy_risk": "low", - "intended_outcome": "Both partners want to offer choices and select an experience for each other." - }, { "id": "211a7986-9bc1-45d9-806f-77ca21f6a405", "pack_slug": "shared-control", "text": "Agree that each of you gets one turn to direct part of a private experience.", - "partner_text": "Agree that each of you gets one turn to direct part of a private experience.", + "partner_text": null, "intensity": 3, "question_type": "swipe", "config": {}, @@ -1173,27 +1125,11 @@ "policy_risk": "low", "intended_outcome": "Both partners want shared leadership with clear turns." }, - { - "id": "85d218a4-d8f7-478f-8c2e-fc50159fbe06", - "pack_slug": "shared-control", - "text": "Agree that each of you gets one turn to direct part of a private experience.", - "partner_text": "Agree that each of you gets one turn to direct part of a private experience.", - "intensity": 3, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": "211a7986-9bc1-45d9-806f-77ca21f6a405", - "review_status": "draft", - "policy_risk": "low", - "intended_outcome": "Both partners want shared leadership with clear turns." - }, { "id": "7be1cdfb-06f7-4ff2-8873-03fab1c826a6", "pack_slug": "shared-control", "text": "Choose a private challenge for your partner and accept one from them.", - "partner_text": "Choose a private challenge for your partner and accept one from them.", + "partner_text": null, "intensity": 3, "question_type": "swipe", "config": {}, @@ -1205,27 +1141,11 @@ "policy_risk": "low", "intended_outcome": "Both partners want to exchange playful, consensual challenges." }, - { - "id": "a8ec9b86-791c-4e39-88b5-0ac2919a1e57", - "pack_slug": "shared-control", - "text": "Choose a private challenge for your partner and accept one from them.", - "partner_text": "Choose a private challenge for your partner and accept one from them.", - "intensity": 3, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": "7be1cdfb-06f7-4ff2-8873-03fab1c826a6", - "review_status": "draft", - "policy_risk": "low", - "intended_outcome": "Both partners want to exchange playful, consensual challenges." - }, { "id": "d603b7c6-69be-49e7-8af1-91b70cba904c", "pack_slug": "shared-control", "text": "Take turns naming one thing you want and one thing you are willing to give.", - "partner_text": "Take turns naming one thing you want and one thing you are willing to give.", + "partner_text": null, "intensity": 4, "question_type": "swipe", "config": {}, @@ -1237,27 +1157,11 @@ "policy_risk": "edge", "intended_outcome": "Both partners want to negotiate desire through reciprocal offers." }, - { - "id": "df517093-e40e-4966-8798-6841e6c347a1", - "pack_slug": "shared-control", - "text": "Take turns naming one thing you want and one thing you are willing to give.", - "partner_text": "Take turns naming one thing you want and one thing you are willing to give.", - "intensity": 4, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": "d603b7c6-69be-49e7-8af1-91b70cba904c", - "review_status": "draft", - "policy_risk": "edge", - "intended_outcome": "Both partners want to negotiate desire through reciprocal offers." - }, { "id": "291a4c39-4a77-4fa8-86a5-948fc5a5e4fc", "pack_slug": "shared-control", "text": "Agree that either partner can change the direction of a private experience once.", - "partner_text": "Agree that either partner can change the direction of a private experience once.", + "partner_text": null, "intensity": 4, "question_type": "swipe", "config": {}, @@ -1269,22 +1173,6 @@ "policy_risk": "edge", "intended_outcome": "Both partners want shared control and permission to redirect the experience." }, - { - "id": "18bb8a37-80b2-473b-8b60-44444762f7f2", - "pack_slug": "shared-control", - "text": "Agree that either partner can change the direction of a private experience once.", - "partner_text": "Agree that either partner can change the direction of a private experience once.", - "intensity": 4, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": "291a4c39-4a77-4fa8-86a5-948fc5a5e4fc", - "review_status": "draft", - "policy_risk": "edge", - "intended_outcome": "Both partners want shared control and permission to redirect the experience." - }, { "id": "ee1b0ff7-97d3-4162-837d-b26199fee564", "pack_slug": "boundaries-check-ins", @@ -1450,7 +1338,7 @@ "pack_slug": "boundaries-check-ins", "text": "Ask your partner to set one firm limit before you lead a private experience.", "partner_text": "Set one firm limit before your partner leads a private experience.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -1458,7 +1346,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants to lead only with a clear limit and the other wants to set it." }, { @@ -1466,7 +1354,7 @@ "pack_slug": "boundaries-check-ins", "text": "Set one firm limit before your partner leads a private experience.", "partner_text": "Ask your partner to set one firm limit before you lead a private experience.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -1474,7 +1362,7 @@ "required_props": null, "inverse_of": "8ddbd259-49dc-45db-8704-a38b294c8eb6", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants to lead only with a clear limit and the other wants to set it." }, { @@ -1482,7 +1370,7 @@ "pack_slug": "boundaries-check-ins", "text": "Ask your partner to tell you what would make them stop a private experience.", "partner_text": "Tell your partner what would make you stop a private experience.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -1490,7 +1378,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants clarity about stopping conditions and the other wants to define them." }, { @@ -1498,7 +1386,7 @@ "pack_slug": "boundaries-check-ins", "text": "Tell your partner what would make you stop a private experience.", "partner_text": "Ask your partner to tell you what would make them stop a private experience.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -1506,7 +1394,7 @@ "required_props": null, "inverse_of": "f7bc5aed-067a-482d-8f6c-fba95dcc35ff", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants clarity about stopping conditions and the other wants to define them." }, { @@ -1674,7 +1562,7 @@ "pack_slug": "aftercare-reconnection", "text": "Ask your partner to choose one way you can make them feel cared for after an intense private experience.", "partner_text": "Choose one way your partner can make you feel cared for after an intense private experience.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -1682,7 +1570,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants to provide deliberate care and the other wants to specify it." }, { @@ -1690,7 +1578,7 @@ "pack_slug": "aftercare-reconnection", "text": "Choose one way your partner can make you feel cared for after an intense private experience.", "partner_text": "Ask your partner to choose one way you can make them feel cared for after an intense private experience.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -1698,7 +1586,7 @@ "required_props": null, "inverse_of": "4aa7a02a-6e44-4d9a-81b2-442dd83edce7", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants to provide deliberate care and the other wants to specify it." }, { @@ -1706,7 +1594,7 @@ "pack_slug": "aftercare-reconnection", "text": "Tell your partner what you need from them if a private experience leaves you feeling exposed.", "partner_text": "Hear what your partner needs if a private experience leaves them feeling exposed.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -1714,7 +1602,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants to name a vulnerability need and the other wants to meet it." }, { @@ -1722,7 +1610,7 @@ "pack_slug": "aftercare-reconnection", "text": "Hear what your partner needs if a private experience leaves them feeling exposed.", "partner_text": "Tell your partner what you need from them if a private experience leaves you feeling exposed.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -1730,7 +1618,7 @@ "required_props": null, "inverse_of": "1fea6d51-a3a8-464a-8d0e-35753249bb8e", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner wants to name a vulnerability need and the other wants to meet it." }, { @@ -1898,103 +1786,7 @@ "pack_slug": "giving-receiving-attention", "text": "Ask your partner to give you their full focus while you set the pace.", "partner_text": "Give your partner your full focus while they set the pace.", - "intensity": 4, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": null, - "review_status": "draft", - "policy_risk": "edge", - "intended_outcome": "One partner wants to lead the pace while receiving undivided attention from the other." - }, - { - "id": "35de4a10-5eab-46b7-8a87-4a687a96d3b9", - "pack_slug": "giving-receiving-attention", - "text": "Give your partner your full focus while they set the pace.", - "partner_text": "Ask your partner to give you their full focus while you set the pace.", - "intensity": 4, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": "e7703b5b-e617-48de-8879-7e512ec232e2", - "review_status": "draft", - "policy_risk": "edge", - "intended_outcome": "One partner wants to lead the pace while receiving undivided attention from the other." - }, - { - "id": "f97d91a3-0521-4b4c-8afb-2474793d62a4", - "pack_slug": "giving-receiving-attention", - "text": "Let your partner ask for one kind of private attention you will focus on giving.", - "partner_text": "Ask your partner for one kind of private attention they will focus on giving.", - "intensity": 4, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": null, - "review_status": "draft", - "policy_risk": "edge", - "intended_outcome": "One partner wants to fulfil a focused request and the other wants to make one." - }, - { - "id": "c0c21ba9-61be-44db-8281-35354e2478a3", - "pack_slug": "giving-receiving-attention", - "text": "Ask your partner for one kind of private attention they will focus on giving.", - "partner_text": "Let your partner ask for one kind of private attention you will focus on giving.", - "intensity": 4, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": "f97d91a3-0521-4b4c-8afb-2474793d62a4", - "review_status": "draft", - "policy_risk": "edge", - "intended_outcome": "One partner wants to fulfil a focused request and the other wants to make one." - }, - { - "id": "12d4a51b-c379-46f7-8167-312e0fca1cfb", - "pack_slug": "giving-receiving-attention", - "text": "Choose how you want your partner to make you feel desired in private.", - "partner_text": "Make your partner feel desired in private in the way they choose.", - "intensity": 4, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": null, - "review_status": "draft", - "policy_risk": "edge", - "intended_outcome": "One partner wants to name a desired experience and the other wants to deliver it." - }, - { - "id": "822eed5b-24d6-4a75-8df5-98afcc6d52b3", - "pack_slug": "giving-receiving-attention", - "text": "Make your partner feel desired in private in the way they choose.", - "partner_text": "Choose how you want your partner to make you feel desired in private.", - "intensity": 4, - "question_type": "swipe", - "config": {}, - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "inverse_of": "12d4a51b-c379-46f7-8167-312e0fca1cfb", - "review_status": "draft", - "policy_risk": "edge", - "intended_outcome": "One partner wants to name a desired experience and the other wants to deliver it." - }, - { - "id": "037d46e0-3b4f-4902-896b-6bd9cf20a4f2", - "pack_slug": "sensory-cues", - "text": "Choose a scent that you want your partner to wear for a close evening.", - "partner_text": "Choose a scent that you want your partner to wear for a close evening.", - "intensity": 2, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2003,20 +1795,100 @@ "inverse_of": null, "review_status": "draft", "policy_risk": "low", - "intended_outcome": "One partner selects a scent cue for the other to use on their next intentional date night." + "intended_outcome": "One partner wants to lead the pace while receiving undivided attention from the other." }, { - "id": "7bdb1217-55fa-4172-84d5-cc6fa5875bac", + "id": "35de4a10-5eab-46b7-8a87-4a687a96d3b9", + "pack_slug": "giving-receiving-attention", + "text": "Give your partner your full focus while they set the pace.", + "partner_text": "Ask your partner to give you their full focus while you set the pace.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "e7703b5b-e617-48de-8879-7e512ec232e2", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to lead the pace while receiving undivided attention from the other." + }, + { + "id": "f97d91a3-0521-4b4c-8afb-2474793d62a4", + "pack_slug": "giving-receiving-attention", + "text": "Let your partner ask for one kind of private attention you will focus on giving.", + "partner_text": "Ask your partner for one kind of private attention they will focus on giving.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": null, + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to fulfil a focused request and the other wants to make one." + }, + { + "id": "c0c21ba9-61be-44db-8281-35354e2478a3", + "pack_slug": "giving-receiving-attention", + "text": "Ask your partner for one kind of private attention they will focus on giving.", + "partner_text": "Let your partner ask for one kind of private attention you will focus on giving.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "f97d91a3-0521-4b4c-8afb-2474793d62a4", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to fulfil a focused request and the other wants to make one." + }, + { + "id": "12d4a51b-c379-46f7-8167-312e0fca1cfb", + "pack_slug": "giving-receiving-attention", + "text": "Choose how you want your partner to make you feel desired in private.", + "partner_text": "Make your partner feel desired in private in the way they choose.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": null, + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to name a desired experience and the other wants to deliver it." + }, + { + "id": "822eed5b-24d6-4a75-8df5-98afcc6d52b3", + "pack_slug": "giving-receiving-attention", + "text": "Make your partner feel desired in private in the way they choose.", + "partner_text": "Choose how you want your partner to make you feel desired in private.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "12d4a51b-c379-46f7-8167-312e0fca1cfb", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to name a desired experience and the other wants to deliver it." + }, + { + "id": "037d46e0-3b4f-4902-896b-6bd9cf20a4f2", "pack_slug": "sensory-cues", "text": "Choose a scent that you want your partner to wear for a close evening.", - "partner_text": "Choose a scent that you want your partner to wear for a close evening.", + "partner_text": null, "intensity": 2, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, "target_user_genders": null, "required_props": null, - "inverse_of": "037d46e0-3b4f-4902-896b-6bd9cf20a4f2", + "inverse_of": null, "review_status": "draft", "policy_risk": "low", "intended_outcome": "One partner selects a scent cue for the other to use on their next intentional date night." @@ -2122,7 +1994,7 @@ "pack_slug": "sensory-cues", "text": "Let your partner ask you to focus only on their voice for a few uninterrupted minutes.", "partner_text": "Ask your partner to focus only on your voice for a few uninterrupted minutes.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2130,7 +2002,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "The proposer receives undivided, voice-led attention in private." }, { @@ -2138,7 +2010,7 @@ "pack_slug": "sensory-cues", "text": "Ask your partner to focus only on your voice for a few uninterrupted minutes.", "partner_text": "Let your partner ask you to focus only on their voice for a few uninterrupted minutes.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2146,7 +2018,7 @@ "required_props": null, "inverse_of": "2fc33011-085d-475e-84e0-0a6a25eebcd5", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "The proposer receives undivided, voice-led attention in private." }, { @@ -2186,7 +2058,7 @@ "pack_slug": "sensory-cues", "text": "Let your partner choose one song and ask you to stay close with them until it ends.", "partner_text": "Choose one song and ask your partner to stay close with you until it ends.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2194,7 +2066,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "The couple agrees to a deliberate, uninterrupted closeness ritual around one song." }, { @@ -2202,7 +2074,7 @@ "pack_slug": "sensory-cues", "text": "Choose one song and ask your partner to stay close with you until it ends.", "partner_text": "Let your partner choose one song and ask you to stay close with them until it ends.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2210,7 +2082,7 @@ "required_props": null, "inverse_of": "1b150b40-a1b2-4615-8d18-9e778ba692e6", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "The couple agrees to a deliberate, uninterrupted closeness ritual around one song." }, { @@ -2346,7 +2218,7 @@ "pack_slug": "private-performance", "text": "Let your partner tell you, face to face, the version of you they find hardest to resist.", "partner_text": "Tell your partner, face to face, the version of them you find hardest to resist.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2354,7 +2226,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "The couple shares a direct, personal desire statement." }, { @@ -2362,7 +2234,7 @@ "pack_slug": "private-performance", "text": "Tell your partner, face to face, the version of them you find hardest to resist.", "partner_text": "Let your partner tell you, face to face, the version of you they find hardest to resist.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2370,7 +2242,7 @@ "required_props": null, "inverse_of": "232f7716-1cf7-49d5-8e0b-dacc900eaf43", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "The couple shares a direct, personal desire statement." }, { @@ -2442,7 +2314,7 @@ "pack_slug": "private-performance", "text": "Let your partner ask you to sit back while they set the pace for the first part of your evening.", "partner_text": "Ask your partner to sit back while you set the pace for the first part of your evening.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2450,7 +2322,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "The proposer leads the opening part of a mutually agreed private evening." }, { @@ -2458,7 +2330,7 @@ "pack_slug": "private-performance", "text": "Ask your partner to sit back while you set the pace for the first part of your evening.", "partner_text": "Let your partner ask you to sit back while they set the pace for the first part of your evening.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2466,7 +2338,7 @@ "required_props": null, "inverse_of": "e30de43d-62ee-41db-8059-2b75eb50e375", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "The proposer leads the opening part of a mutually agreed private evening." }, { @@ -2602,7 +2474,7 @@ "pack_slug": "clothes-confidence", "text": "Let your partner choose the dress code for a private evening, within limits you both agree first.", "partner_text": "Choose the dress code for a private evening, within limits you both agree first.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2610,7 +2482,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner leads the evening's agreed presentation and atmosphere." }, { @@ -2618,7 +2490,7 @@ "pack_slug": "clothes-confidence", "text": "Choose the dress code for a private evening, within limits you both agree first.", "partner_text": "Let your partner choose the dress code for a private evening, within limits you both agree first.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2626,7 +2498,7 @@ "required_props": null, "inverse_of": "cb2f95fc-3154-4a7f-8217-2076eeff99b2", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner leads the evening's agreed presentation and atmosphere." }, { @@ -2698,7 +2570,7 @@ "pack_slug": "clothes-confidence", "text": "Let your partner ask you to get ready slowly while they give you one sincere compliment at each step.", "partner_text": "Ask your partner to get ready slowly while you give them one sincere compliment at each step.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2706,7 +2578,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "The proposer gives the receiver a paced confidence ritual before a night together." }, { @@ -2714,7 +2586,7 @@ "pack_slug": "clothes-confidence", "text": "Ask your partner to get ready slowly while you give them one sincere compliment at each step.", "partner_text": "Let your partner ask you to get ready slowly while they give you one sincere compliment at each step.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2722,7 +2594,7 @@ "required_props": null, "inverse_of": "bce468e8-e16b-4248-88c1-0f8bc0be6241", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "The proposer gives the receiver a paced confidence ritual before a night together." }, { @@ -2858,7 +2730,7 @@ "pack_slug": "fantasy-exchange", "text": "Let your partner propose a fictional version of that evening where they get to surprise you, and you choose the boundaries first.", "partner_text": "Propose a fictional version of that evening where you get to surprise your partner, and they choose the boundaries first.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2866,7 +2738,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner proposes an agreed fantasy frame, with the receiver setting limits." }, { @@ -2874,7 +2746,7 @@ "pack_slug": "fantasy-exchange", "text": "Propose a fictional version of that evening where you get to surprise your partner, and they choose the boundaries first.", "partner_text": "Let your partner propose a fictional version of that evening where they get to surprise you, and you choose the boundaries first.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2882,7 +2754,7 @@ "required_props": null, "inverse_of": "fa8250f6-5941-4c8f-8b59-523841184235", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "One partner proposes an agreed fantasy frame, with the receiver setting limits." }, { @@ -2954,7 +2826,7 @@ "pack_slug": "fantasy-exchange", "text": "Let your partner ask you what you would want them to take charge of in an imaginary evening.", "partner_text": "Ask your partner what they would want you to take charge of in an imaginary evening.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2962,7 +2834,7 @@ "required_props": null, "inverse_of": null, "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "The receiver identifies one area of leadership they would welcome in fantasy." }, { @@ -2970,7 +2842,7 @@ "pack_slug": "fantasy-exchange", "text": "Ask your partner what they would want you to take charge of in an imaginary evening.", "partner_text": "Let your partner ask you what you would want them to take charge of in an imaginary evening.", - "intensity": 4, + "intensity": 3, "question_type": "swipe", "config": {}, "allowed_couple_genders": null, @@ -2978,7 +2850,7 @@ "required_props": null, "inverse_of": "70ca9ee4-45cb-484c-8a64-517d8253f6c7", "review_status": "draft", - "policy_risk": "edge", + "policy_risk": "low", "intended_outcome": "The receiver identifies one area of leadership they would welcome in fantasy." }, { @@ -4408,8 +4280,8 @@ { "id": "81675895-acc1-4130-8416-95a81cde2d02", "pack_slug": "sensory-cues", - "text": "A quiet, eyes-closed music moment together before your next date.", - "partner_text": null, + "text": "Choose a song for your partner to hear with their eyes closed before a date.", + "partner_text": "Listen with your eyes closed to a song your partner chose before a date.", "intensity": 3, "question_type": "swipe", "config": {}, @@ -4419,13 +4291,13 @@ "inverse_of": null, "review_status": "draft", "policy_risk": "low", - "intended_outcome": "The pair agrees to begin a date with focused shared listening." + "intended_outcome": "One partner chooses a focused listening cue and the other accepts the invitation to receive it." }, { "id": "4616a26b-c703-476b-837c-d0d0289e1eba", "pack_slug": "sensory-cues", - "text": "Make a list of five sounds that help you feel relaxed and close.", - "partner_text": null, + "text": "Create a five-sound playlist designed to help your partner relax.", + "partner_text": "Listen to the five-sound playlist your partner created to help you relax.", "intensity": 3, "question_type": "swipe", "config": {}, @@ -4435,13 +4307,13 @@ "inverse_of": null, "review_status": "draft", "policy_risk": "low", - "intended_outcome": "The couple creates a personal sound-based mood guide." + "intended_outcome": "One partner creates a calming sound cue and the other receives a personal atmosphere plan." }, { "id": "5ac75495-2d84-42d0-8117-f12219db00d5", "pack_slug": "sensory-cues", - "text": "Spend ten minutes in silence, staying close and checking in afterward about how it felt.", - "partner_text": null, + "text": "Lead ten quiet minutes together, then invite your partner to say how it felt.", + "partner_text": "Let your partner lead ten quiet minutes together, then tell them how it felt.", "intensity": 4, "question_type": "swipe", "config": {}, @@ -4451,13 +4323,13 @@ "inverse_of": null, "review_status": "draft", "policy_risk": "edge", - "intended_outcome": "The couple tries a deliberate quiet closeness exercise followed by a check-in." + "intended_outcome": "One partner sets a quiet pace and the other agrees to reflect on the experience afterward." }, { "id": "99afc3b9-779a-43d5-87f1-dea81e9a4130", "pack_slug": "private-performance", - "text": "Take turns giving each other a dramatic, affectionate introduction.", - "partner_text": null, + "text": "Give your partner a dramatic, affectionate introduction.", + "partner_text": "Receive a dramatic, affectionate introduction from your partner.", "intensity": 2, "question_type": "swipe", "config": {}, @@ -4467,13 +4339,13 @@ "inverse_of": null, "review_status": "draft", "policy_risk": "low", - "intended_outcome": "Each partner performs a playful confidence-building introduction." + "intended_outcome": "One partner offers playful praise while the other receives a confidence-building performance." }, { "id": "ad9432ef-79f8-4bd0-85ba-3fc0a7ecb49d", "pack_slug": "private-performance", - "text": "Choose one song each for a private dance together.", - "partner_text": null, + "text": "Choose a song and invite your partner to dance to it with you.", + "partner_text": "Accept your partner’s invitation to dance to the song they chose.", "intensity": 3, "question_type": "swipe", "config": {}, @@ -4483,13 +4355,13 @@ "inverse_of": null, "review_status": "draft", "policy_risk": "low", - "intended_outcome": "The pair shares two intentionally selected dances." + "intended_outcome": "One partner sets a musical invitation and the other agrees to join the private dance." }, { "id": "bd35ebb6-8b78-4b77-8bea-e782dc9dac15", "pack_slug": "private-performance", - "text": "Read each other a short note about what makes a date feel exciting.", - "partner_text": null, + "text": "Write a short note about what makes a date feel exciting and read it to your partner.", + "partner_text": "Hear your partner read a short note about what makes a date feel exciting.", "intensity": 3, "question_type": "swipe", "config": {}, @@ -4499,13 +4371,13 @@ "inverse_of": null, "review_status": "draft", "policy_risk": "low", - "intended_outcome": "Each partner names what builds anticipation for them." + "intended_outcome": "One partner shares a personal source of anticipation and the other receives it directly." }, { "id": "ef004056-c670-4ccb-86eb-0504ab20a37b", "pack_slug": "private-performance", - "text": "Take turns leading a five-minute close moment, with either person able to pause it.", - "partner_text": null, + "text": "Lead a five-minute close moment while your partner can pause it.", + "partner_text": "Let your partner lead a five-minute close moment while you can pause it.", "intensity": 4, "question_type": "swipe", "config": {}, @@ -4515,13 +4387,13 @@ "inverse_of": null, "review_status": "draft", "policy_risk": "edge", - "intended_outcome": "The partners alternate leadership with clear stop control." + "intended_outcome": "One partner takes a brief lead while the other retains a clear option to pause." }, { "id": "c1f81833-1668-4b34-8a46-1f0e04dce0bf", "pack_slug": "clothes-confidence", - "text": "Choose one small style detail for each other's next date-night look.", - "partner_text": null, + "text": "Choose one small style detail for your partner’s next date-night look.", + "partner_text": "Wear the small style detail your partner chose for your next date-night look.", "intensity": 2, "question_type": "swipe", "config": {}, @@ -4531,7 +4403,7 @@ "inverse_of": null, "review_status": "draft", "policy_risk": "low", - "intended_outcome": "Each partner receives a playful style suggestion." + "intended_outcome": "One partner suggests a playful style detail and the other chooses whether to wear it." }, { "id": "b2fff3a0-5e31-481b-8d10-dc09d1acabf3", @@ -4696,7 +4568,7 @@ { "id": "781484ce-77e4-44a3-8e20-bc42caa66f62", "pack_slug": "roleplay", - "text": "Trying a roleplay where one person leads the scene and you switch roles halfway through.", + "text": "Try a roleplay where one person leads the scene and you switch roles halfway through.", "partner_text": null, "intensity": 4, "question_type": "swipe", @@ -4760,7 +4632,7 @@ { "id": "f986c8c4-a6b0-4a91-8188-45e6d7db6ea4", "pack_slug": "settings-atmosphere", - "text": "A private evening where you begin by agreeing what would make each of you feel cared for.", + "text": "Plan a private evening where you begin by agreeing what would make each of you feel cared for.", "partner_text": null, "intensity": 4, "question_type": "swipe", @@ -4776,7 +4648,7 @@ { "id": "9e304cde-e9ee-4028-877d-b74a067fe1d3", "pack_slug": "surprise-novelty", - "text": "Swapping one sealed note with a date-night idea inside.", + "text": "Swap one sealed note with a date-night idea inside.", "partner_text": null, "intensity": 2, "question_type": "swipe", @@ -4856,7 +4728,7 @@ { "id": "ec387dc2-2fab-443e-8ca7-5682314c8312", "pack_slug": "long-distance-desire", - "text": "A private call where you share one hope and one boundary for your next time alone together.", + "text": "Have a private call where you share one hope and one boundary for your next time alone together.", "partner_text": null, "intensity": 4, "question_type": "swipe", @@ -4875,8 +4747,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Write about a compliment you want to hear before a close moment.", + "pack_slug": "flirty-communication", + "text": "Write the compliment you most want your partner to give you before a close moment.", "partner_text": null, "intensity": 2, "question_type": "text_answer", @@ -4885,7 +4757,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a compliment you want to hear before a close moment and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns the exact reassurance that makes you feel wanted and can use it as a sincere opening." }, { "id": "05e24051-4b5b-4a70-85f3-791fa0cc70b2", @@ -4893,8 +4765,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Write about a kind of invitation that makes you feel wanted.", + "pack_slug": "flirty-communication", + "text": "Finish this sentence for your partner: “When you look at me like that, I want you to know...”", "partner_text": null, "intensity": 2, "question_type": "text_answer", @@ -4903,7 +4775,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a kind of invitation that makes you feel wanted and can use that detail to begin a private conversation." + "intended_outcome": "Your partner receives a personal signal about the effect their attention has on you." }, { "id": "d066d491-9bd1-4ca4-8deb-395242249dd3", @@ -4911,17 +4783,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Write about the first sign that helps you relax into affection.", + "pack_slug": "flirty-communication", + "text": "Write a one-line invitation that would make you smile if your partner sent it unexpectedly.", "partner_text": null, - "intensity": 2, + "intensity": 3, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about the first sign that helps you relax into affection and can use that detail to begin a private conversation." + "intended_outcome": "Your partner gets a ready-to-use private message and learns the tone that draws you in." }, { "id": "cbf21d70-48e9-4a33-8e40-bddeb42a7d48", @@ -4929,17 +4801,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "surprise-novelty", - "text": "Write about a romantic surprise you would enjoy receiving.", + "pack_slug": "flirty-communication", + "text": "Describe the kind of teasing remark that feels playful to you rather than awkward.", "partner_text": null, - "intensity": 2, + "intensity": 3, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a romantic surprise you would enjoy receiving and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns your preferred style of flirtation and a boundary around what keeps it fun." }, { "id": "7e3997e3-af44-44f9-8e28-a6031813e7a0", @@ -4947,17 +4819,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Write about a detail that makes kissing feel more intentional.", + "pack_slug": "flirty-communication", + "text": "Tell your partner one thing they do that immediately changes the mood between you.", "partner_text": null, - "intensity": 2, + "intensity": 3, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a detail that makes kissing feel more intentional and can use that detail to begin a private conversation." + "intended_outcome": "Your partner discovers a specific behaviour worth repeating when you both want more closeness." }, { "id": "ffec43f7-cddd-4d00-8dc8-53431e7861a7", @@ -4965,17 +4837,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "anticipation", - "text": "Write about a memory that still makes you blush.", + "pack_slug": "flirty-communication", + "text": "Write the boldest thing you would like your partner to say to you privately, in your own words.", "partner_text": null, - "intensity": 2, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a memory that still makes you blush and can use that detail to begin a private conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner receives direct permission to use language that feels exciting to you." }, { "id": "aaee2618-2b3b-433d-88f4-345fddba6438", @@ -4983,17 +4855,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Write about the sort of attention that makes you feel pursued.", + "pack_slug": "flirty-communication", + "text": "Describe a private conversation you would love to have when you both feel especially open.", "partner_text": null, - "intensity": 2, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about the sort of attention that makes you feel pursued and can use that detail to begin a private conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner learns the subject you are curious to explore and can choose a comfortable time to start it." }, { "id": "1cb96c3b-f8ab-4189-8ad1-dc4ecaac69d5", @@ -5001,8 +4873,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Write about a playful message you would save from your partner.", + "pack_slug": "anticipation", + "text": "Describe the ideal first hint that a special evening together is coming.", "partner_text": null, "intensity": 2, "question_type": "text_answer", @@ -5011,7 +4883,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a playful message you would save from your partner and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns how to build anticipation in a way that feels welcome rather than vague." }, { "id": "b837b28c-089e-4cb0-864b-da0ce14588ab", @@ -5019,8 +4891,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Write about a date mood that makes you feel especially connected.", + "pack_slug": "anticipation", + "text": "Write the kind of message that would make you look forward to seeing your partner later.", "partner_text": null, "intensity": 2, "question_type": "text_answer", @@ -5029,7 +4901,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a date mood that makes you feel especially connected and can use that detail to begin a private conversation." + "intended_outcome": "Your partner gets a concrete cue they can send before you reconnect." }, { "id": "76a6e182-0d21-4c54-876a-b7f642990c67", @@ -5037,17 +4909,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "long-distance-desire", - "text": "Write about a way your partner can make a reunion feel warmer.", + "pack_slug": "anticipation", + "text": "Tell your partner what preparation would make you feel more relaxed before a private date at home.", "partner_text": null, - "intensity": 2, + "intensity": 3, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a way your partner can make a reunion feel warmer and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns a practical condition that helps you arrive present and receptive." }, { "id": "16291ff0-0572-479b-83cd-b772af4cc382", @@ -5055,17 +4927,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "fantasy-exchange", - "text": "Write about a private fantasy you are ready to name.", + "pack_slug": "anticipation", + "text": "Describe a small change to your usual evening routine that would make it feel more intentional.", "partner_text": null, - "intensity": 2, + "intensity": 3, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a private fantasy you are ready to name and can use that detail to begin a private conversation." + "intended_outcome": "Your partner receives one realistic ritual to create a sense of occasion together." }, { "id": "15daa6a1-1000-49fc-8380-8f82d084ab3c", @@ -5074,16 +4946,16 @@ "required_props": null, "review_status": "draft", "pack_slug": "anticipation", - "text": "Write about a curiosity you prefer to discuss before trying.", + "text": "Write what you would enjoy being asked to choose before your next intimate evening.", "partner_text": null, - "intensity": 2, + "intensity": 3, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a curiosity you prefer to discuss before trying and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns where offering you a choice creates more excitement." }, { "id": "56892de1-96d8-4eed-854b-328423730f19", @@ -5091,17 +4963,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "roleplay", - "text": "Write about a role you would enjoy taking in a playful scenario.", + "pack_slug": "anticipation", + "text": "Share one private surprise you would genuinely enjoy your partner planning for you.", "partner_text": null, - "intensity": 2, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a role you would enjoy taking in a playful scenario and can use that detail to begin a private conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner receives a clear idea for an unexpected gesture, including the kind of surprise you welcome." }, { "id": "bc549b37-393f-42e2-8651-c71eb1eb3268", @@ -5109,17 +4981,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "roleplay", - "text": "Write about a role you would enjoy offering your partner.", + "pack_slug": "anticipation", + "text": "Write a short countdown message you would like to receive before a night focused on the two of you.", "partner_text": null, - "intensity": 2, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a role you would enjoy offering your partner and can use that detail to begin a private conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner gets language that builds suspense without guessing what would land well." }, { "id": "f04e87ab-3ad8-4c68-8b21-3469f80332bc", @@ -5127,8 +4999,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "following", - "text": "Write about a change of pace that would feel exciting.", + "pack_slug": "taking-the-lead", + "text": "Describe one part of a date where you would enjoy deciding what happens next.", "partner_text": null, "intensity": 2, "question_type": "text_answer", @@ -5137,7 +5009,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a change of pace that would feel exciting and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns a low-pressure moment where your initiative would feel attractive." }, { "id": "b3191b9d-f8a5-41a7-81e7-c5f408f80a50", @@ -5145,8 +5017,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "settings-atmosphere", - "text": "Write about a setting that would make you feel more open.", + "pack_slug": "taking-the-lead", + "text": "Write an invitation you would feel confident making when you want more one-to-one time.", "partner_text": null, "intensity": 2, "question_type": "text_answer", @@ -5155,7 +5027,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a setting that would make you feel more open and can use that detail to begin a private conversation." + "intended_outcome": "Your partner receives a phrase that makes your interest unmistakable and easy to answer." }, { "id": "f58169f1-55b4-42b6-8529-eab6ac3a4601", @@ -5163,17 +5035,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "surprise-novelty", - "text": "Write about a kind of surprise that feels good rather than stressful.", + "pack_slug": "taking-the-lead", + "text": "Tell your partner what kind of plan you would enjoy taking charge of from start to finish.", "partner_text": null, - "intensity": 2, + "intensity": 3, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a kind of surprise that feels good rather than stressful and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns which shared experience you want to own and can leave space for you to lead it." }, { "id": "a84b3102-d8ff-4165-802e-b3ef9862bc34", @@ -5181,17 +5053,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Write about a boundary you want treated as important.", + "pack_slug": "taking-the-lead", + "text": "Describe how you would like your partner to respond when you make a bold suggestion.", "partner_text": null, - "intensity": 2, + "intensity": 3, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a boundary you want treated as important and can use that detail to begin a private conversation." + "intended_outcome": "Your partner gets a practical guide for encouraging your confidence in the moment." }, { "id": "75a70ca3-c892-4876-8c75-528401d3a203", @@ -5199,17 +5071,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Write about a check-in phrase that would make you feel safer.", + "pack_slug": "taking-the-lead", + "text": "Write one decision you would like to make for both of you during a private evening.", "partner_text": null, - "intensity": 2, + "intensity": 3, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a check-in phrase that would make you feel safer and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns the kind of authority you want to try, with a concrete decision to hand over." }, { "id": "689cd3ce-f864-45d1-8b92-909be73c8101", @@ -5217,17 +5089,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Write about a private idea you would only explore gradually.", + "pack_slug": "taking-the-lead", + "text": "Describe a confident version of yourself you would like your partner to see more often.", "partner_text": null, - "intensity": 2, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a private idea you would only explore gradually and can use that detail to begin a private conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner learns what confidence looks like for you and how they can invite it out." }, { "id": "a7d96f65-6814-409d-8b54-39492da0d35f", @@ -5236,16 +5108,16 @@ "required_props": null, "review_status": "draft", "pack_slug": "taking-the-lead", - "text": "Write about the moment you would want a partner to lead.", + "text": "Write the private challenge you would like to set for your partner, including what would make it exciting.", "partner_text": null, - "intensity": 2, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about the moment you would want a partner to lead and can use that detail to begin a private conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner receives a consensual challenge with the reason it appeals to you." }, { "id": "5fef9957-1b0c-4ee3-872b-61d6a397101a", @@ -5253,8 +5125,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "taking-the-lead", - "text": "Write about the moment you would rather choose the direction.", + "pack_slug": "following", + "text": "Tell your partner one decision you would enjoy not having to make on a date.", "partner_text": null, "intensity": 2, "question_type": "text_answer", @@ -5263,7 +5135,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about the moment you would rather choose the direction and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns a simple place where taking initiative would feel caring." }, { "id": "a854373f-8c19-4d76-847a-e92da9c249f6", @@ -5272,7 +5144,7 @@ "required_props": null, "review_status": "draft", "pack_slug": "following", - "text": "Write about a sign that you want more time to warm up.", + "text": "Describe the kind of invitation that makes it easy for you to say yes.", "partner_text": null, "intensity": 2, "question_type": "text_answer", @@ -5281,7 +5153,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a sign that you want more time to warm up and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns the wording and atmosphere that lower pressure for you." }, { "id": "4532252e-e722-4055-82b2-62a2614c74aa", @@ -5289,17 +5161,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "aftercare-reconnection", - "text": "Write about a way to reconnect after a vulnerable conversation.", + "pack_slug": "following", + "text": "Write what helps you trust your partner’s lead during a more intimate moment.", "partner_text": null, - "intensity": 2, + "intensity": 3, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a way to reconnect after a vulnerable conversation and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns the specific reassurance or check-in that helps you relax into their plan." }, { "id": "05b69bff-18d6-4b59-881f-36af5bcc052f", @@ -5307,17 +5179,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "shared-control", - "text": "Write about a detail that would make a private plan feel like yours.", + "pack_slug": "following", + "text": "Share one surprise choice you would enjoy your partner making for you.", "partner_text": null, - "intensity": 2, + "intensity": 3, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a detail that would make a private plan feel like yours and can use that detail to begin a private conversation." + "intended_outcome": "Your partner gets a defined area where surprise feels exciting and safe." }, { "id": "da103b20-737d-4fb1-845e-c2881d0803bc", @@ -5325,17 +5197,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Describe a compliment you want to hear before a close moment.", + "pack_slug": "following", + "text": "Describe how you want your partner to check that you are still enjoying their lead.", "partner_text": null, - "intensity": 2, + "intensity": 3, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a compliment you want to hear before a close moment and can use that detail to begin a private conversation." + "intended_outcome": "Your partner receives a clear check-in preference they can use without breaking the mood." }, { "id": "e36bb2ed-4fea-4b6c-8018-35b77a0d1565", @@ -5343,17 +5215,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Describe a kind of invitation that makes you feel wanted.", + "pack_slug": "following", + "text": "Write about a private situation where you would like to be guided step by step, in your own terms.", "partner_text": null, - "intensity": 2, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a kind of invitation that makes you feel wanted and can use that detail to begin a private conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner learns the type of guidance you are curious about and the limits you want respected." }, { "id": "35b9203d-dfd0-4dec-896d-f82eb5668bab", @@ -5361,17 +5233,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Describe the first sign that helps you relax into affection.", + "pack_slug": "following", + "text": "Tell your partner what would make it feel exciting to let them choose the pace for a while.", "partner_text": null, - "intensity": 2, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about the first sign that helps you relax into affection and can use that detail to begin a private conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner learns the conditions that make you comfortable giving them more influence." }, { "id": "0370cf39-1b50-465d-869f-7ba830fc581e", @@ -5379,8 +5251,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "surprise-novelty", - "text": "Describe a romantic surprise you would enjoy receiving.", + "pack_slug": "shared-control", + "text": "Name one decision you want to make together before your next close evening.", "partner_text": null, "intensity": 2, "question_type": "text_answer", @@ -5389,7 +5261,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a romantic surprise you would enjoy receiving and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns where collaboration matters most to you and can plan it jointly." }, { "id": "6f953e60-bb58-4552-8c60-525c9a39b798", @@ -5397,8 +5269,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Describe a detail that makes kissing feel more intentional.", + "pack_slug": "shared-control", + "text": "Describe your ideal signal for “let’s keep going” during a private moment.", "partner_text": null, "intensity": 2, "question_type": "text_answer", @@ -5407,7 +5279,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a detail that makes kissing feel more intentional and can use that detail to begin a private conversation." + "intended_outcome": "Your partner receives a simple shared cue that makes mutual enthusiasm easier to read." }, { "id": "a737ad68-0c53-4116-8ff9-cab4056c3ad1", @@ -5415,17 +5287,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "anticipation", - "text": "Describe a memory that still makes you blush.", + "pack_slug": "shared-control", + "text": "Write the rule you would like both of you to follow when trying something unfamiliar together.", "partner_text": null, - "intensity": 2, + "intensity": 3, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a memory that still makes you blush and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns a mutual agreement that makes exploration feel safer." }, { "id": "6348b9b3-2ef9-4d27-8068-4d276a0b42bf", @@ -5433,17 +5305,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Describe the sort of attention that makes you feel pursued.", + "pack_slug": "shared-control", + "text": "Tell your partner how you would like to alternate who chooses the next part of a date.", "partner_text": null, - "intensity": 2, + "intensity": 3, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about the sort of attention that makes you feel pursued and can use that detail to begin a private conversation." + "intended_outcome": "Your partner gets a workable rhythm for sharing initiative rather than defaulting to one person." }, { "id": "868481ed-9eff-4c36-8ce1-a60ce329b66a", @@ -5451,17 +5323,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Describe a playful message you would save from your partner.", + "pack_slug": "shared-control", + "text": "Describe one moment where you would enjoy pausing together to decide what you both want.", "partner_text": null, - "intensity": 2, + "intensity": 3, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a playful message you would save from your partner and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns when a joint decision would add connection instead of interrupting it." }, { "id": "73d6a615-8ed9-4c28-8c98-02fa64a24e89", @@ -5469,17 +5341,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Describe a date mood that makes you feel especially connected.", + "pack_slug": "shared-control", + "text": "Write the private agreement that would make you feel brave enough to explore more together.", "partner_text": null, - "intensity": 2, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a date mood that makes you feel especially connected and can use that detail to begin a private conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner receives a concrete mutual promise that supports bolder, consent-led choices." }, { "id": "80ec452b-d3b0-4a46-8c24-d51d4b55e529", @@ -5487,17 +5359,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "long-distance-desire", - "text": "Describe a way your partner can make a reunion feel warmer.", + "pack_slug": "shared-control", + "text": "Share the question you want your partner to ask before either of you raises the intensity.", "partner_text": null, - "intensity": 2, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a way your partner can make a reunion feel warmer and can use that detail to begin a private conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner learns the exact invitation to use before moving into more charged territory." }, { "id": "01f8f53b-f64a-444f-89f1-af16f54de2e6", @@ -5505,8 +5377,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "fantasy-exchange", - "text": "Describe a private fantasy you are ready to name.", + "pack_slug": "boundaries-check-ins", + "text": "Write one phrase that means “I like this, but slower” for you.", "partner_text": null, "intensity": 2, "question_type": "text_answer", @@ -5515,7 +5387,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a private fantasy you are ready to name and can use that detail to begin a private conversation." + "intended_outcome": "Your partner receives a clear signal for adjusting pace without uncertainty." }, { "id": "97b2e7a3-0c35-4abe-89c6-eab6d9466265", @@ -5523,17 +5395,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "anticipation", - "text": "Describe a curiosity you prefer to discuss before trying.", + "pack_slug": "boundaries-check-ins", + "text": "Describe the best way for your partner to ask whether you are comfortable.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a curiosity you prefer to discuss before trying and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns a check-in style that feels caring rather than clinical." }, { "id": "a1741217-5dd7-4dd5-8c99-70002140c3da", @@ -5541,8 +5413,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "roleplay", - "text": "Describe a role you would enjoy taking in a playful scenario.", + "pack_slug": "boundaries-check-ins", + "text": "Tell your partner one thing you need before you can enjoy a more adventurous private plan.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -5551,7 +5423,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a role you would enjoy taking in a playful scenario and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns a condition that turns curiosity into a safer shared possibility." }, { "id": "8479262c-ae4d-4e6c-84e2-e835be1de445", @@ -5559,8 +5431,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "roleplay", - "text": "Describe a role you would enjoy offering your partner.", + "pack_slug": "boundaries-check-ins", + "text": "Write a kind way you would want your partner to respond if you change your mind.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -5569,7 +5441,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a role you would enjoy offering your partner and can use that detail to begin a private conversation." + "intended_outcome": "Your partner gets direct guidance for making a change of plan feel respected and easy." }, { "id": "1361a95f-b6b1-42ee-884c-9497040337ed", @@ -5577,8 +5449,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "following", - "text": "Describe a change of pace that would feel exciting.", + "pack_slug": "boundaries-check-ins", + "text": "Describe one topic you would prefer to discuss before, rather than during, a close moment.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -5587,7 +5459,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a change of pace that would feel exciting and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns what deserves a calm conversation in advance." }, { "id": "e8fc819b-ab8a-4b22-872a-042f9b04f925", @@ -5595,17 +5467,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "settings-atmosphere", - "text": "Describe a setting that would make you feel more open.", + "pack_slug": "boundaries-check-ins", + "text": "Share a boundary that makes you feel more able to be adventurous within it.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a setting that would make you feel more open and can use that detail to begin a private conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner learns the limit that creates freedom rather than reducing the mood." }, { "id": "5eaef369-8ae5-42a3-8ac3-deafc1c930b1", @@ -5613,17 +5485,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "surprise-novelty", - "text": "Describe a kind of surprise that feels good rather than stressful.", + "pack_slug": "boundaries-check-ins", + "text": "Write the reassurance you need when you suggest something that feels vulnerable to say aloud.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a kind of surprise that feels good rather than stressful and can use that detail to begin a private conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner receives a practical response that helps you bring up bolder ideas honestly." }, { "id": "923f31e2-b7c6-460e-89d5-2933a18309d6", @@ -5631,17 +5503,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Describe a boundary you want treated as important.", + "pack_slug": "aftercare-reconnection", + "text": "Describe how you like to reconnect after an especially close moment.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a boundary you want treated as important and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns the small act that helps you feel settled and connected afterward." }, { "id": "65179ffc-ca2b-4b90-8bf1-605d44ecb405", @@ -5649,17 +5521,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Describe a check-in phrase that would make you feel safer.", + "pack_slug": "aftercare-reconnection", + "text": "Write the first question you would like your partner to ask after trying something new together.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a check-in phrase that would make you feel safer and can use that detail to begin a private conversation." + "intended_outcome": "Your partner receives a ready-made invitation for a thoughtful debrief." }, { "id": "d43342d9-a4d9-4dfc-84db-57260e32a2c0", @@ -5667,8 +5539,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Describe a private idea you would only explore gradually.", + "pack_slug": "aftercare-reconnection", + "text": "Tell your partner what makes you feel appreciated after you have been emotionally open.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -5677,7 +5549,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a private idea you would only explore gradually and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns how to recognise your vulnerability in a way that lands." }, { "id": "5c561bb5-57f1-439f-824a-c3fa2abfbb6e", @@ -5685,8 +5557,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "taking-the-lead", - "text": "Describe the moment you would want a partner to lead.", + "pack_slug": "aftercare-reconnection", + "text": "Describe the kind of quiet time you would enjoy sharing once the excitement has passed.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -5695,7 +5567,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about the moment you would want a partner to lead and can use that detail to begin a private conversation." + "intended_outcome": "Your partner gets a concrete picture of the calm connection you want afterward." }, { "id": "60369326-6435-42eb-8427-a17dd8cfa479", @@ -5703,8 +5575,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "taking-the-lead", - "text": "Describe the moment you would rather choose the direction.", + "pack_slug": "aftercare-reconnection", + "text": "Write one thing you would like to hear after you take a private risk together.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -5713,7 +5585,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about the moment you would rather choose the direction and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns the affirmation that helps you feel proud rather than self-conscious." }, { "id": "3930b46f-7095-4b6d-8109-518bbc815f45", @@ -5721,17 +5593,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "following", - "text": "Describe a sign that you want more time to warm up.", + "pack_slug": "aftercare-reconnection", + "text": "Share the part of a close experience you would most want to talk through afterward.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a sign that you want more time to warm up and can use that detail to begin a private conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner learns what reflection would deepen trust and make a future experience better." }, { "id": "4d9e76da-3f75-42e4-8345-7d66a8a1f3b6", @@ -5739,17 +5611,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "aftercare-reconnection", - "text": "Describe a way to reconnect after a vulnerable conversation.", + "pack_slug": "giving-receiving-attention", + "text": "Describe one way your partner can give you their full attention that you rarely ask for.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a way to reconnect after a vulnerable conversation and can use that detail to begin a private conversation." + "intended_outcome": "Your partner discovers a specific act of focus that makes you feel prioritised." }, { "id": "dc83f9c3-ed6d-4e07-8ab8-6de7e5c8d450", @@ -5757,17 +5629,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "shared-control", - "text": "Describe a detail that would make a private plan feel like yours.", + "pack_slug": "giving-receiving-attention", + "text": "Write about a moment when you feel most noticed by your partner.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a detail that would make a private plan feel like yours and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns the context in which their attention has the greatest effect." }, { "id": "ef2f7126-c9ea-47e9-8b57-ba931971f268", @@ -5776,7 +5648,7 @@ "required_props": null, "review_status": "draft", "pack_slug": "giving-receiving-attention", - "text": "Name a compliment you want to hear before a close moment.", + "text": "Tell your partner what you enjoy doing when you want to make them feel desired.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -5785,7 +5657,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a compliment you want to hear before a close moment and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns how you naturally show interest and can recognise the signal." }, { "id": "39a979e7-9119-4c25-831c-6437e9f5af09", @@ -5794,7 +5666,7 @@ "required_props": null, "review_status": "draft", "pack_slug": "giving-receiving-attention", - "text": "Name a kind of invitation that makes you feel wanted.", + "text": "Describe the kind of praise you most enjoy receiving privately.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -5803,7 +5675,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a kind of invitation that makes you feel wanted and can use that detail to begin a private conversation." + "intended_outcome": "Your partner gets a personal guide to language that makes you feel seen." }, { "id": "1ec2a8f4-13c8-4193-8a4b-7a255db0115c", @@ -5812,7 +5684,7 @@ "required_props": null, "review_status": "draft", "pack_slug": "giving-receiving-attention", - "text": "Name the first sign that helps you relax into affection.", + "text": "Write one request you would enjoy hearing from your partner when they want your attention.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -5821,7 +5693,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about the first sign that helps you relax into affection and can use that detail to begin a private conversation." + "intended_outcome": "Your partner receives a low-pressure way to ask directly for more of you." }, { "id": "fe7ebf6a-2499-46ad-85d6-0e54309f3a06", @@ -5829,17 +5701,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "surprise-novelty", - "text": "Name a romantic surprise you would enjoy receiving.", + "pack_slug": "giving-receiving-attention", + "text": "Share the private gesture that would make you feel unmistakably chosen by your partner.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a romantic surprise you would enjoy receiving and can use that detail to begin a private conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner learns a specific, high-impact way to make you feel desired." }, { "id": "14aab6fe-4884-450f-845a-eb6efa731907", @@ -5847,17 +5719,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Name a detail that makes kissing feel more intentional.", + "pack_slug": "sensory-cues", + "text": "Describe a scent that instantly makes an evening feel more intimate to you.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a detail that makes kissing feel more intentional and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns an atmosphere cue they can use when planning a close night in." }, { "id": "128bf979-eba4-42d8-83ec-e033e4a47038", @@ -5865,17 +5737,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "anticipation", - "text": "Name a memory that still makes you blush.", + "pack_slug": "sensory-cues", + "text": "Write about the music that would help you leave everyday stress behind together.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a memory that still makes you blush and can use that detail to begin a private conversation." + "intended_outcome": "Your partner gets a mood-setting choice that supports a more connected evening." }, { "id": "f320050b-82cd-49ad-8f13-a59022500e5a", @@ -5883,8 +5755,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Name the sort of attention that makes you feel pursued.", + "pack_slug": "sensory-cues", + "text": "Tell your partner which kind of lighting makes you feel most confident and relaxed.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -5893,7 +5765,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about the sort of attention that makes you feel pursued and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns a practical way to shape the room around your comfort." }, { "id": "6976eed4-12ea-44da-8d17-8006778d9458", @@ -5901,8 +5773,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Name a playful message you would save from your partner.", + "pack_slug": "sensory-cues", + "text": "Describe a texture, fabric, or cosy detail that makes a private setting feel special.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -5911,7 +5783,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a playful message you would save from your partner and can use that detail to begin a private conversation." + "intended_outcome": "Your partner receives an actionable detail for creating a setting that appeals to you." }, { "id": "85ca0762-b683-4f53-8af3-6c4801a5ced1", @@ -5919,8 +5791,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Name a date mood that makes you feel especially connected.", + "pack_slug": "sensory-cues", + "text": "Write about the sound of your partner’s voice that you find most captivating.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -5929,7 +5801,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a date mood that makes you feel especially connected and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns a vocal quality that makes you feel drawn closer." }, { "id": "3bacb807-ec73-4252-887f-a0a34b180db0", @@ -5937,8 +5809,62 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "long-distance-desire", - "text": "Name a way your partner can make a reunion feel warmer.", + "pack_slug": "sensory-cues", + "text": "Share the full sensory mood you would like your partner to create for an intimate evening.", + "partner_text": null, + "intensity": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner receives a personal brief for a more immersive, intentional atmosphere." + }, + { + "id": "70a99352-4f74-41c1-80b1-4e3a7672694f", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "private-performance", + "text": "Write about a playful thing you would enjoy doing just to make your partner smile in private.", + "partner_text": null, + "intensity": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns a personal expression of your confidence they can encourage." + }, + { + "id": "8b6caa10-8275-4c23-83ac-6b939569d489", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "private-performance", + "text": "Describe a song that would make you feel expressive if you had the room to yourselves.", + "partner_text": null, + "intensity": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner gets a soundtrack that invites a more playful side of you out." + }, + { + "id": "1892ef15-3808-4a98-80d7-4a495c790ecf", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "private-performance", + "text": "Tell your partner what kind of attention helps you feel confident being watched by them.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -5947,61 +5873,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner receives your written answer about a way your partner can make a reunion feel warmer and can use that detail to begin a private conversation." - }, - { - "id": "70a99352-4f74-41c1-80b1-4e3a7672694f", - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "review_status": "draft", - "pack_slug": "fantasy-exchange", - "text": "Name a private fantasy you are ready to name.", - "partner_text": null, - "intensity": 3, - "question_type": "text_answer", - "config": { - "max_length": 500 - }, - "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a private fantasy you are ready to name and can use that detail to begin a private conversation." - }, - { - "id": "8b6caa10-8275-4c23-83ac-6b939569d489", - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "review_status": "draft", - "pack_slug": "anticipation", - "text": "Name a curiosity you prefer to discuss before trying.", - "partner_text": null, - "intensity": 3, - "question_type": "text_answer", - "config": { - "max_length": 500 - }, - "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a curiosity you prefer to discuss before trying and can use that detail to begin a private conversation." - }, - { - "id": "1892ef15-3808-4a98-80d7-4a495c790ecf", - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "review_status": "draft", - "pack_slug": "roleplay", - "text": "Name a role you would enjoy taking in a playful scenario.", - "partner_text": null, - "intensity": 3, - "question_type": "text_answer", - "config": { - "max_length": 500 - }, - "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a role you would enjoy taking in a playful scenario and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns how to make their attention feel encouraging rather than exposing." }, { "id": "3c1e0dc2-f533-4994-8d41-0ec9bc3113c6", @@ -6009,8 +5881,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "roleplay", - "text": "Name a role you would enjoy offering your partner.", + "pack_slug": "private-performance", + "text": "Write a private dare you would enjoy accepting from your partner.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6018,8 +5890,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a role you would enjoy offering your partner and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner receives a consent-led challenge that fits your idea of playful boldness." }, { "id": "060c6b7c-b0d6-4b4e-8311-de7200fd8256", @@ -6027,8 +5899,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "following", - "text": "Name a change of pace that would feel exciting.", + "pack_slug": "private-performance", + "text": "Describe the reaction from your partner that would make you want to be more expressive.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6036,8 +5908,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a change of pace that would feel exciting and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns the feedback that builds your confidence in the moment." }, { "id": "d51404b4-7c24-47e5-8271-3b22984b08c8", @@ -6045,17 +5917,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "settings-atmosphere", - "text": "Name a setting that would make you feel more open.", + "pack_slug": "private-performance", + "text": "Share a private moment where you would enjoy being the centre of your partner’s attention.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a setting that would make you feel more open and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns the kind of focused attention you are curious to receive and can plan it with you." }, { "id": "242a1d05-6b81-4341-8dbf-9fadddd09aae", @@ -6063,17 +5935,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "surprise-novelty", - "text": "Name a kind of surprise that feels good rather than stressful.", + "pack_slug": "clothes-confidence", + "text": "Describe an outfit that makes you feel more like yourself on a date with your partner.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a kind of surprise that feels good rather than stressful and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns the look that supports your confidence and can compliment it specifically." }, { "id": "1d791b70-578e-487e-8e13-f108f4d07b7b", @@ -6081,17 +5953,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Name a boundary you want treated as important.", + "pack_slug": "clothes-confidence", + "text": "Write the colour you would love your partner to notice you wearing.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a boundary you want treated as important and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner gets a small visual detail to notice and celebrate." }, { "id": "3c07cd62-925a-4c2a-80f7-3427d389a25c", @@ -6099,8 +5971,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Name a check-in phrase that would make you feel safer.", + "pack_slug": "clothes-confidence", + "text": "Tell your partner what you would enjoy choosing for them to wear on a private date night.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6108,8 +5980,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a check-in phrase that would make you feel safer and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns your taste and has a clear invitation to let you style part of the evening." }, { "id": "25174e2e-2b8e-4171-8746-e518d2b438cf", @@ -6117,8 +5989,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Name a private idea you would only explore gradually.", + "pack_slug": "clothes-confidence", + "text": "Describe the compliment about your appearance that would feel most meaningful from your partner.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6126,8 +5998,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a private idea you would only explore gradually and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner receives guidance for praise that strengthens your confidence." }, { "id": "e17b0aa4-207e-40b7-843c-3e504e8a2bb8", @@ -6135,8 +6007,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "taking-the-lead", - "text": "Name the moment you would want a partner to lead.", + "pack_slug": "clothes-confidence", + "text": "Write about one detail of getting ready that makes you feel more alluring.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6144,8 +6016,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about the moment you would want a partner to lead and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns the ritual that helps you shift into a more confident mood." }, { "id": "08a23208-e133-42ca-8fea-796f1a42ebb3", @@ -6153,17 +6025,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "taking-the-lead", - "text": "Name the moment you would rather choose the direction.", + "pack_slug": "clothes-confidence", + "text": "Share the private look you would be excited to reveal to your partner, in your own words.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about the moment you would rather choose the direction and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns what kind of reveal feels exciting to you and can respond with the right attention." }, { "id": "c2ea8ca8-187d-412b-8156-ef93c70fddf7", @@ -6171,17 +6043,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "following", - "text": "Name a sign that you want more time to warm up.", + "pack_slug": "fantasy-exchange", + "text": "Write about a fictional romance scene whose mood you would love to borrow for a date.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a sign that you want more time to warm up and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns the emotional tone you are drawn to without needing to guess the reference." }, { "id": "1be698a7-a2b3-442b-89b6-c7725dea9180", @@ -6189,17 +6061,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "aftercare-reconnection", - "text": "Name a way to reconnect after a vulnerable conversation.", + "pack_slug": "fantasy-exchange", + "text": "Describe the kind of imagined setting that makes you feel more adventurous with your partner.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a way to reconnect after a vulnerable conversation and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner receives a setting idea that can inspire a themed evening." }, { "id": "6599136d-4dd0-4afa-8b41-1bbab55d3ce5", @@ -6207,8 +6079,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "shared-control", - "text": "Name a detail that would make a private plan feel like yours.", + "pack_slug": "fantasy-exchange", + "text": "Tell your partner what role you would enjoy imagining for yourself during a playful private scenario.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6216,8 +6088,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a detail that would make a private plan feel like yours and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns the character energy you are curious to try." }, { "id": "e58e67e6-bb89-427c-8556-3877458e0a4d", @@ -6225,8 +6097,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Explain a compliment you want to hear before a close moment.", + "pack_slug": "fantasy-exchange", + "text": "Write a fictional opening line your partner could use to begin a shared fantasy.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6234,8 +6106,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a compliment you want to hear before a close moment and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner gets a tailored starting line for playful imagination together." }, { "id": "0bdc9fa0-5712-46d4-840e-2948f870f003", @@ -6243,8 +6115,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Explain a kind of invitation that makes you feel wanted.", + "pack_slug": "fantasy-exchange", + "text": "Describe the one detail that would make an imagined scenario feel believable and exciting to you.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6252,8 +6124,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a kind of invitation that makes you feel wanted and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns the ingredient that turns a vague idea into something engaging." }, { "id": "63ff5ec0-4cd3-4a8a-88e1-0dd91000a8d4", @@ -6261,17 +6133,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Explain the first sign that helps you relax into affection.", + "pack_slug": "fantasy-exchange", + "text": "Share a private fantasy premise you would like to explore only in conversation first.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about the first sign that helps you relax into affection and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns a higher-intensity idea while the first follow-up remains a safe discussion." }, { "id": "5e01ff9b-7eec-4329-8e26-6f617147305f", @@ -6279,17 +6151,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "surprise-novelty", - "text": "Explain a romantic surprise you would enjoy receiving.", + "pack_slug": "roleplay", + "text": "Write the nickname you would enjoy your partner using during a playful private game.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a romantic surprise you would enjoy receiving and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner receives language that helps set a playful tone you welcome." }, { "id": "96dda26d-39e0-4c04-8d60-bfbecaddb75a", @@ -6297,17 +6169,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Explain a detail that makes kissing feel more intentional.", + "pack_slug": "roleplay", + "text": "Describe a simple character trait you would enjoy your partner pretending to have for one evening.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a detail that makes kissing feel more intentional and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner gets a low-stakes roleplay cue that can make an ordinary night feel new." }, { "id": "60c7ec38-1d73-4ed5-8196-9acac43adfbe", @@ -6315,8 +6187,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "anticipation", - "text": "Explain a memory that still makes you blush.", + "pack_slug": "roleplay", + "text": "Tell your partner the kind of made-up first meeting you would enjoy acting out together.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6324,8 +6196,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a memory that still makes you blush and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns a shared scenario that gives both of you a clear starting point." }, { "id": "c42b18ea-70a8-4355-8e9e-b6828edda511", @@ -6333,8 +6205,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Explain the sort of attention that makes you feel pursued.", + "pack_slug": "roleplay", + "text": "Write the setting where you would enjoy pretending you have just met your partner.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6342,8 +6214,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about the sort of attention that makes you feel pursued and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner receives a scene to build around for a playful reset of familiar chemistry." }, { "id": "855ffd52-2dcb-46c5-85ce-05c9e5339e0c", @@ -6351,8 +6223,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Explain a playful message you would save from your partner.", + "pack_slug": "roleplay", + "text": "Describe the one rule that would help roleplay feel comfortable and fun for you.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6360,8 +6232,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a playful message you would save from your partner and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns the agreement that keeps the game connected to your real trust." }, { "id": "abc4bf31-0a89-4f03-855a-44bbcd46f161", @@ -6369,17 +6241,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Explain a date mood that makes you feel especially connected.", + "pack_slug": "roleplay", + "text": "Share a bolder character dynamic you are curious to discuss with your partner before trying it.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a date mood that makes you feel especially connected and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns what dynamic interests you and can talk through comfort, limits, and interest first." }, { "id": "1459e780-fc02-4240-8bb0-39bf51067e32", @@ -6387,17 +6259,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "long-distance-desire", - "text": "Explain a way your partner can make a reunion feel warmer.", + "pack_slug": "settings-atmosphere", + "text": "Describe the room where you would most like to have an uninterrupted evening with your partner.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a way your partner can make a reunion feel warmer and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns which environment helps you feel most present together." }, { "id": "4c7b2063-f545-4761-8438-9bbc681444fe", @@ -6405,17 +6277,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "fantasy-exchange", - "text": "Explain a private fantasy you are ready to name.", + "pack_slug": "settings-atmosphere", + "text": "Write the first thing you would change at home to make a regular night feel more special.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a private fantasy you are ready to name and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner gets a realistic way to shift an ordinary evening into a date." }, { "id": "0ba76abb-8684-4375-8ec1-2d5ed252df2b", @@ -6423,8 +6295,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "anticipation", - "text": "Explain a curiosity you prefer to discuss before trying.", + "pack_slug": "settings-atmosphere", + "text": "Tell your partner what makes a hotel-style evening feel exciting to you.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6432,8 +6304,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a curiosity you prefer to discuss before trying and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns the elements of novelty or escape you would like recreated." }, { "id": "c6a7b5f8-e777-49bb-8af5-7b4b6aad7ee4", @@ -6441,8 +6313,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "roleplay", - "text": "Explain a role you would enjoy taking in a playful scenario.", + "pack_slug": "settings-atmosphere", + "text": "Describe the kind of privacy you need before you can fully switch off together.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6450,8 +6322,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a role you would enjoy taking in a playful scenario and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns the practical conditions needed for you to feel unhurried." }, { "id": "cc9d5fbc-3353-4112-8330-6f4595b8a933", @@ -6459,8 +6331,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "roleplay", - "text": "Explain a role you would enjoy offering your partner.", + "pack_slug": "settings-atmosphere", + "text": "Write about a place from a past date that you would love to recreate the feeling of at home.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6468,8 +6340,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a role you would enjoy offering your partner and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner receives an emotional reference point and ideas for bringing it back." }, { "id": "6d1d7187-817f-44e2-8970-d37ad386c714", @@ -6477,17 +6349,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "following", - "text": "Explain a change of pace that would feel exciting.", + "pack_slug": "settings-atmosphere", + "text": "Share the most adventurous private setting you would enjoy planning together, while staying within your comfort zone.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a change of pace that would feel exciting and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns your appetite for novelty and the limits that make the plan feel right." }, { "id": "034a8892-980a-4696-8001-a0801b97ac8b", @@ -6495,17 +6367,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "settings-atmosphere", - "text": "Explain a setting that would make you feel more open.", + "pack_slug": "surprise-novelty", + "text": "Write one small unexpected gesture that would brighten a normal day with your partner.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a setting that would make you feel more open and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner gets a specific surprise that signals private affection." }, { "id": "81e240ed-34ad-4b06-8745-9ee71da91ded", @@ -6514,16 +6386,16 @@ "required_props": null, "review_status": "draft", "pack_slug": "surprise-novelty", - "text": "Explain a kind of surprise that feels good rather than stressful.", + "text": "Describe the kind of spontaneous invitation you would be happy to receive.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a kind of surprise that feels good rather than stressful and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns how to be impulsive in a way that still feels welcome." }, { "id": "e61695ee-30ef-448b-80e4-0a903024fc65", @@ -6531,8 +6403,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Explain a boundary you want treated as important.", + "pack_slug": "surprise-novelty", + "text": "Tell your partner one familiar routine you would enjoy changing up together.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6540,8 +6412,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a boundary you want treated as important and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns where novelty would improve your shared rhythm." }, { "id": "b89d2081-285a-4034-89e0-1c24ecb55833", @@ -6549,8 +6421,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Explain a check-in phrase that would make you feel safer.", + "pack_slug": "surprise-novelty", + "text": "Write a sealed-note prompt you would enjoy your partner giving you to open later.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6558,8 +6430,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a check-in phrase that would make you feel safer and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner receives a private prompt format that can create suspense across the day." }, { "id": "7da8026d-060c-4653-88e1-f26ea7b36ff7", @@ -6567,8 +6439,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Explain a private idea you would only explore gradually.", + "pack_slug": "surprise-novelty", + "text": "Describe a new rule for one evening that would make it feel different from your usual time together.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6576,8 +6448,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a private idea you would only explore gradually and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner gets a simple novelty experiment that you have already signalled interest in." }, { "id": "313a0c60-2ab6-4140-848f-5922aad8cd15", @@ -6585,17 +6457,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "taking-the-lead", - "text": "Explain the moment you would want a partner to lead.", + "pack_slug": "surprise-novelty", + "text": "Share the bold surprise you would enjoy discovering after your partner has checked the broad limits with you.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about the moment you would want a partner to lead and can use that detail to begin a private conversation." + "intended_outcome": "Your partner learns both the surprise you want and the consent conversation needed before planning it." }, { "id": "7d784ae6-ada4-43cf-8826-5f10e825e43f", @@ -6603,17 +6475,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "taking-the-lead", - "text": "Explain the moment you would rather choose the direction.", + "pack_slug": "long-distance-desire", + "text": "Write the message that would make you feel closest to your partner when you are apart.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about the moment you would rather choose the direction and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns the kind of connection that travels well between visits." }, { "id": "347d52d9-13f4-4002-82e2-22a0db0d9ea4", @@ -6621,17 +6493,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "following", - "text": "Explain a sign that you want more time to warm up.", + "pack_slug": "long-distance-desire", + "text": "Describe a tiny ritual you would like to share on the evenings you cannot be together.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a sign that you want more time to warm up and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner receives a repeatable way to maintain intimacy across distance." }, { "id": "6dcc1ae6-7050-4918-8a54-776ab968f2a2", @@ -6639,8 +6511,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "aftercare-reconnection", - "text": "Explain a way to reconnect after a vulnerable conversation.", + "pack_slug": "long-distance-desire", + "text": "Tell your partner what you would like to plan together before your next time in the same place.", "partner_text": null, "intensity": 3, "question_type": "text_answer", @@ -6648,8 +6520,8 @@ "max_length": 500 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a way to reconnect after a vulnerable conversation and can use that detail to begin a private conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns which shared anticipation would make a reunion more meaningful." }, { "id": "9758244c-fc2f-4757-86d1-5721a49c31ef", @@ -6657,17 +6529,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "shared-control", - "text": "Explain a detail that would make a private plan feel like yours.", + "pack_slug": "long-distance-desire", + "text": "Write the private promise you would like to exchange before a longer period apart.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "text_answer", "config": { "max_length": 500 }, "inverse_of": null, "policy_risk": "edge", - "intended_outcome": "Your partner receives your written answer about a detail that would make a private plan feel like yours and can use that detail to begin a private conversation." + "intended_outcome": "Your partner receives a personal commitment that can sustain desire, reassurance, and connection until you reunite." }, { "id": "f4798e53-139b-4d13-8bf8-4d2a26843776", @@ -6675,17 +6547,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Record the words that make you feel genuinely desired.", + "pack_slug": "flirty-communication", + "text": "In a warm, playful tone, record the compliment from your partner that would make you smile all day.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the words that make you feel genuinely desired and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears the exact kind of praise that lands for you and can use it naturally in a future message." }, { "id": "d206f3e7-3767-4e09-87fc-70f73454e7b1", @@ -6693,8 +6565,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Record a private invitation you would like to hear.", + "pack_slug": "flirty-communication", + "text": "Record a voice note finishing this sentence: “When you look at me like that, I want you to know...”", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -6703,7 +6575,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a private invitation you would like to hear and gains a personal cue for a close conversation." + "intended_outcome": "Your partner receives a personal signal of attraction and can reply with what they notice in that moment too." }, { "id": "f5793098-3309-40b4-81bf-23d065eaef6c", @@ -6711,8 +6583,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Record the kind of build-up that keeps you engaged.", + "pack_slug": "flirty-communication", + "text": "Leave your partner a voice note with one bold thing you would love them to say quietly when you are alone together.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -6721,7 +6593,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the kind of build-up that keeps you engaged and gains a personal cue for a close conversation." + "intended_outcome": "Your partner learns a specific phrase or mood that could make a private moment feel more charged." }, { "id": "d23d838a-d5ae-4bab-86ef-35fa52e6a85e", @@ -6729,17 +6601,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Record a boundary you want a partner to understand.", + "pack_slug": "flirty-communication", + "text": "Record the invitation you would most like to hear when your partner wants to turn an ordinary evening into a close one.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a boundary you want a partner to understand and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner gets a clear, consent-forward way to initiate and can try it on a night that feels right." }, { "id": "93d1d7de-7460-4ca8-8717-a14efd5f9802", @@ -6747,17 +6619,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Record a surprise you would welcome.", + "pack_slug": "flirty-communication", + "text": "In your most confident voice, tell your partner what makes you feel unmistakably wanted by them.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a surprise you would welcome and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner hears the emotional cue behind your desire and can make future affection feel more intentional." }, { "id": "7c697de4-f0cc-4e80-823e-f6120a9f5c12", @@ -6765,17 +6637,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Record the pace that helps you stay present.", + "pack_slug": "anticipation", + "text": "Record a short countdown-style note about one small thing you are looking forward to doing together later.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the pace that helps you stay present and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears a concrete point of anticipation and can build on it with their own plan." }, { "id": "8f8b7ba6-073e-4b2e-8567-1b6a62721255", @@ -6783,8 +6655,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "roleplay", - "text": "Record a private role you would be curious to discuss.", + "pack_slug": "anticipation", + "text": "Record the first message you would want from your partner before a deliberately flirty date night.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -6793,7 +6665,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a private role you would be curious to discuss and gains a personal cue for a close conversation." + "intended_outcome": "Your partner learns how you like anticipation to begin and can send it before your next planned evening." }, { "id": "37eeb5e7-2ce0-4b5b-8562-1e52e0453aa5", @@ -6801,8 +6673,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Record a setting that makes you feel confident.", + "pack_slug": "anticipation", + "text": "Describe, in a low and unhurried voice, the mood you want waiting for you after a busy day apart.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -6811,7 +6683,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a setting that makes you feel confident and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears whether you want calm, playfulness, affection, or intensity and can help create that landing." }, { "id": "474c37df-1313-4047-8029-848c6bdd92cc", @@ -6819,17 +6691,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Record a detail you would like your partner to decide.", + "pack_slug": "anticipation", + "text": "Record a private tease that hints at the kind of attention you would love from your partner later, without explaining every detail.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a detail you would like your partner to decide and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner receives an intriguing cue they can ask about and turn into a jointly chosen plan." }, { "id": "f2519fa2-392d-4c83-83da-ca038959c3e3", @@ -6837,17 +6709,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Record the way you want to be checked in with.", + "pack_slug": "anticipation", + "text": "Leave a voice note naming the one thing your partner could do before you meet that would put you in a more daring mood.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the way you want to be checked in with and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner learns a practical lead-in, such as a message, outfit, setting, or affectionate gesture, that helps you open up." }, { "id": "18ed0734-5e6b-4cba-83b7-9897ba5fb67b", @@ -6855,17 +6727,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Record a memory that shaped what you enjoy.", + "pack_slug": "taking-the-lead", + "text": "Record a cheerful invitation for your partner to let you choose the next date-night detail.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a memory that shaped what you enjoy and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears an easy handover of initiative and can say yes to one contained surprise." }, { "id": "024d56a6-33c0-4fe1-8812-7ae731b57ce3", @@ -6873,8 +6745,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Record the private mood you want more of.", + "pack_slug": "taking-the-lead", + "text": "In a decisive voice, tell your partner one private mood you would like to set for the two of you.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -6883,7 +6755,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the private mood you want more of and gains a personal cue for a close conversation." + "intended_outcome": "Your partner learns the atmosphere you want to lead and can confirm whether it feels good for them too." }, { "id": "37f5e13c-709a-4668-821f-b4a4a563763f", @@ -6891,8 +6763,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Record the kind of reassurance that helps you open up.", + "pack_slug": "taking-the-lead", + "text": "Record how you would ask your partner to trust you with planning a more adventurous evening together.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -6901,7 +6773,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the kind of reassurance that helps you open up and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears a respectful version of your confidence and can agree on a boundary before the plan unfolds." }, { "id": "745bdfed-4b68-4969-83af-5130a2f642db", @@ -6909,17 +6781,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Record a gentle way to ask for something unfamiliar.", + "pack_slug": "taking-the-lead", + "text": "Leave a voice note telling your partner the first instruction you would enjoy giving in a mutually agreed private game.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a gentle way to ask for something unfamiliar and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner hears the style of leadership you enjoy and can opt into the game with clear limits." }, { "id": "1e08e814-4e89-4cd4-8faa-19964b3a5be5", @@ -6927,17 +6799,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Share the words that make you feel genuinely desired.", + "pack_slug": "taking-the-lead", + "text": "Record the reassurance you would give your partner before you take charge of a bolder shared experience.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the words that make you feel genuinely desired and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner hears how you would keep them comfortable and can name what would help them relax into your lead." }, { "id": "164e23bc-058a-4bd0-8f22-c7e4aaa2b1c0", @@ -6945,17 +6817,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Share a private invitation you would like to hear.", + "pack_slug": "following", + "text": "Record one thing your partner could choose for you that would feel like a thoughtful treat.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a private invitation you would like to hear and gains a personal cue for a close conversation." + "intended_outcome": "Your partner learns a safe way to surprise you and can choose it for an upcoming evening." }, { "id": "fbed814a-348b-4f7f-8c24-e8357d514ec6", @@ -6963,8 +6835,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "anticipation", - "text": "Share the kind of build-up that keeps you engaged.", + "pack_slug": "following", + "text": "In a soft voice, explain what helps you enjoy letting your partner set the pace.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -6973,7 +6845,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the kind of build-up that keeps you engaged and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears the conditions that make following feel exciting rather than uncertain." }, { "id": "bb211547-2589-477d-8ce1-2b191f7d4564", @@ -6981,8 +6853,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Share a boundary you want a partner to understand.", + "pack_slug": "following", + "text": "Record the kind of check-in that makes you feel safe saying yes to your partner’s idea.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -6991,7 +6863,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a boundary you want a partner to understand and gains a personal cue for a close conversation." + "intended_outcome": "Your partner learns the exact reassurance that supports your willingness and can use it before suggesting something new." }, { "id": "ff139845-7c0a-4807-8913-0e7fb5f5411d", @@ -6999,17 +6871,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "surprise-novelty", - "text": "Share a surprise you would welcome.", + "pack_slug": "following", + "text": "Leave a voice note describing one daring-but-private decision you would enjoy your partner making after checking in with you first.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a surprise you would welcome and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner gets a consent-based example of initiative they could take and a cue to ask before acting." }, { "id": "8d5a19a3-8ca7-4681-8923-61b2617710c1", @@ -7018,16 +6890,16 @@ "required_props": null, "review_status": "draft", "pack_slug": "following", - "text": "Share the pace that helps you stay present.", + "text": "Record what you would want your partner to say if they wanted you to surrender the planning for one intimate evening.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the pace that helps you stay present and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner hears language that makes a stronger invitation feel welcome, with room for you to decline or adjust." }, { "id": "0e35bca4-7077-4db8-8433-bd0d87cad36e", @@ -7035,17 +6907,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "roleplay", - "text": "Share a private role you would be curious to discuss.", + "pack_slug": "shared-control", + "text": "Record a two-choice question your partner can answer to shape your next cosy evening together.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a private role you would be curious to discuss and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears two real options and can choose the version that feels most appealing." }, { "id": "32c403bc-7434-4250-8d69-01a2db4bf761", @@ -7053,8 +6925,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "settings-atmosphere", - "text": "Share a setting that makes you feel confident.", + "pack_slug": "shared-control", + "text": "Leave a voice note describing a private game where you and your partner would alternate making one decision each.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7063,7 +6935,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a setting that makes you feel confident and gains a personal cue for a close conversation." + "intended_outcome": "Your partner learns a simple shared-control format and can suggest the first decision." }, { "id": "d391bbec-5d05-4022-8ab3-864c1382157f", @@ -7071,8 +6943,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "taking-the-lead", - "text": "Share a detail you would like your partner to decide.", + "pack_slug": "shared-control", + "text": "Record which part of a date night you would like your partner to lead and which part you would like to lead.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7081,7 +6953,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a detail you would like your partner to decide and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears a practical division of initiative and can co-create the evening rather than guess." }, { "id": "fa282960-7afe-4298-836c-1b25c68ba0dd", @@ -7089,17 +6961,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Share the way you want to be checked in with.", + "pack_slug": "shared-control", + "text": "In an excited voice, explain how you would like to build a bolder shared moment one yes at a time.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the way you want to be checked in with and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner hears a stepwise consent rhythm and can add their own yes, no, or alternative at each point." }, { "id": "6e450805-7c97-42b6-885b-e3d64c9c2df4", @@ -7107,17 +6979,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Share a memory that shaped what you enjoy.", + "pack_slug": "shared-control", + "text": "Record a private challenge that only works if both of you keep choosing the next step together.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a memory that shaped what you enjoy and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner receives an invitation to collaborative play and can negotiate the limits before starting." }, { "id": "49bbd612-4482-4dbb-806f-b859f75cc0b5", @@ -7125,17 +6997,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Share the private mood you want more of.", + "pack_slug": "boundaries-check-ins", + "text": "Record a kind sentence your partner can use to ask whether you are still enjoying a close moment.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the private mood you want more of and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears a check-in that feels caring rather than formal and can use it in real time." }, { "id": "4fd37913-5cca-43a2-8d9a-dcf3c781230f", @@ -7144,7 +7016,7 @@ "required_props": null, "review_status": "draft", "pack_slug": "boundaries-check-ins", - "text": "Share the kind of reassurance that helps you open up.", + "text": "In your own voice, explain the difference between a surprise that delights you and one that catches you off guard.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7153,7 +7025,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the kind of reassurance that helps you open up and gains a personal cue for a close conversation." + "intended_outcome": "Your partner learns your personal distinction and can plan novelty that feels welcome." }, { "id": "fdf2619f-7aba-4340-8dd0-5bbd38d24f9a", @@ -7161,8 +7033,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Share a gentle way to ask for something unfamiliar.", + "pack_slug": "boundaries-check-ins", + "text": "Record the easiest phrase for you to use when you want to slow down without ending the mood.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7171,7 +7043,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a gentle way to ask for something unfamiliar and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears your preferred pause signal and knows it protects connection rather than rejects them." }, { "id": "968d443a-9011-4956-8346-7dc77296b095", @@ -7179,17 +7051,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Talk about the words that make you feel genuinely desired.", + "pack_slug": "boundaries-check-ins", + "text": "Leave a voice note telling your partner what they could ask before suggesting something considerably bolder than usual.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the words that make you feel genuinely desired and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner gets a concrete consent opener and can ask it before raising a new idea." }, { "id": "85ea36c4-f5e0-494e-82d4-d8857434fca6", @@ -7197,17 +7069,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Talk about a private invitation you would like to hear.", + "pack_slug": "boundaries-check-ins", + "text": "Record what “I am curious, but not ready yet” sounds like in words that still feel affectionate to you.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a private invitation you would like to hear and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner learns how to receive hesitation warmly and can leave the door open without pressure." }, { "id": "7744165c-6f1b-48b5-856a-0dd93b8ee814", @@ -7215,17 +7087,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Talk about the kind of build-up that keeps you engaged.", + "pack_slug": "aftercare-reconnection", + "text": "Record the small affectionate gesture that helps you feel close after a playful evening together.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the kind of build-up that keeps you engaged and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears a specific reconnection preference they can offer without guessing." }, { "id": "2e7af586-04b9-4dee-8877-3168eb562608", @@ -7233,8 +7105,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Talk about a boundary you want a partner to understand.", + "pack_slug": "aftercare-reconnection", + "text": "In a calm voice, tell your partner what you most like hearing after you have both tried something new together.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7243,7 +7115,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a boundary you want a partner to understand and gains a personal cue for a close conversation." + "intended_outcome": "Your partner learns the reassurance or reflection that helps novelty become a positive shared memory." }, { "id": "93f9f7ee-27e2-49e7-8acf-c1c323203cd2", @@ -7251,8 +7123,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Talk about a surprise you would welcome.", + "pack_slug": "aftercare-reconnection", + "text": "Record how you would like your partner to check in with you the morning after an especially intimate night.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7261,7 +7133,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a surprise you would welcome and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears the tone and timing that feel meaningful and can follow through the next day." }, { "id": "242fb428-622f-4156-8039-6699c59b4449", @@ -7269,17 +7141,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Talk about the pace that helps you stay present.", + "pack_slug": "aftercare-reconnection", + "text": "Leave a voice note about the honest question you would want your partner to ask after a more daring experience.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the pace that helps you stay present and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner learns how to invite useful feedback and can improve the next shared experience with you." }, { "id": "55407967-f4ea-4e7c-81e6-e73356ba7133", @@ -7287,17 +7159,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "roleplay", - "text": "Talk about a private role you would be curious to discuss.", + "pack_slug": "aftercare-reconnection", + "text": "Record the words that would make you feel proud and cared for after you stepped outside your comfort zone together.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a private role you would be curious to discuss and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner hears how to celebrate your trust and can reinforce the kind of openness you want to grow." }, { "id": "c73c76f7-fe8d-417e-8022-5a19fe21c9bc", @@ -7305,17 +7177,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Talk about a setting that makes you feel confident.", + "pack_slug": "giving-receiving-attention", + "text": "Record one affectionate way your partner could make you feel noticed when you are both at home.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a setting that makes you feel confident and gains a personal cue for a close conversation." + "intended_outcome": "Your partner gets a simple attention cue they can use in an ordinary evening." }, { "id": "c6a83aaf-5d7c-4b14-8570-dc848c0eccde", @@ -7323,8 +7195,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Talk about a detail you would like your partner to decide.", + "pack_slug": "giving-receiving-attention", + "text": "Leave a voice note describing how you know the difference between rushed affection and attention that feels fully present.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7333,7 +7205,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a detail you would like your partner to decide and gains a personal cue for a close conversation." + "intended_outcome": "Your partner learns what presence sounds and feels like to you and can adjust their pace." }, { "id": "8aa7bfe7-a065-4e08-85fd-3b5184182567", @@ -7341,8 +7213,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Talk about the way you want to be checked in with.", + "pack_slug": "giving-receiving-attention", + "text": "Record the kind of praise you would most enjoy giving your partner when they make you feel desired.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7351,7 +7223,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the way you want to be checked in with and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears the feedback that encourages them and can understand what is working for you." }, { "id": "3e71f490-f779-488a-8529-92111ad4e7df", @@ -7359,17 +7231,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Talk about a memory that shaped what you enjoy.", + "pack_slug": "giving-receiving-attention", + "text": "In a warm, deliberate voice, tell your partner where you would like their focus to be during a private moment.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a memory that shaped what you enjoy and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner hears the emotional or sensory focus you want and can ask a follow-up before acting on it." }, { "id": "f60b63df-2050-4ad6-863f-8b7c5dd4b652", @@ -7377,17 +7249,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Talk about the private mood you want more of.", + "pack_slug": "giving-receiving-attention", + "text": "Record the one thing your partner could do to make you feel they have set aside the whole evening just for you.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the private mood you want more of and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner learns a concrete sign of devoted attention and can weave it into a future plan." }, { "id": "63c2dce2-4028-48e5-8afd-5f01017a022e", @@ -7395,17 +7267,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Talk about the kind of reassurance that helps you open up.", + "pack_slug": "sensory-cues", + "text": "Record the sound, song, or kind of silence that makes an evening feel more intimate to you.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the kind of reassurance that helps you open up and gains a personal cue for a close conversation." + "intended_outcome": "Your partner learns an audible atmosphere cue and can bring it into your next shared setting." }, { "id": "680819eb-de39-4ddd-8761-e549e672c67c", @@ -7413,8 +7285,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Talk about a gentle way to ask for something unfamiliar.", + "pack_slug": "sensory-cues", + "text": "In a slow voice, describe the lighting that makes you feel most relaxed and attractive.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7423,7 +7295,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a gentle way to ask for something unfamiliar and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears a practical setting preference and can prepare the room with your comfort in mind." }, { "id": "98dc9586-e625-475f-84a0-b8561bfd1cb5", @@ -7431,8 +7303,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Say the words that make you feel genuinely desired.", + "pack_slug": "sensory-cues", + "text": "Record the scent or familiar smell that you associate with feeling especially close to your partner.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7441,7 +7313,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the words that make you feel genuinely desired and gains a personal cue for a close conversation." + "intended_outcome": "Your partner learns a personal sensory association and can use it to create a recognisable shared mood." }, { "id": "83fa57ab-c6bf-4a74-8477-11b1dc755112", @@ -7449,17 +7321,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Say a private invitation you would like to hear.", + "pack_slug": "sensory-cues", + "text": "Leave a voice note about the kind of music that would make you feel more confident trying a bolder private mood together.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe a private invitation you would like to hear and gains a personal cue for a close conversation." + "policy_risk": "edge", + "intended_outcome": "Your partner receives a specific confidence cue and can make a playlist before you explore the mood." }, { "id": "15506545-bbc7-44e0-8eb8-b912237ce563", @@ -7468,7 +7340,25 @@ "required_props": null, "review_status": "draft", "pack_slug": "private-performance", - "text": "Say the kind of build-up that keeps you engaged.", + "text": "Record a playful introduction as though you are welcoming your partner to a date night you designed just for them.", + "partner_text": null, + "intensity": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner hears your enthusiasm and can respond with the detail that would make the invitation even better." + }, + { + "id": "66fadb88-d6b7-4b06-861f-f401e7ebd3a7", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "private-performance", + "text": "In character, record a short mystery message that gives your partner one clue about a private surprise.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7477,25 +7367,7 @@ }, "inverse_of": null, "policy_risk": "low", - "intended_outcome": "Your partner hears your voice describe the kind of build-up that keeps you engaged and gains a personal cue for a close conversation." - }, - { - "id": "66fadb88-d6b7-4b06-861f-f401e7ebd3a7", - "allowed_couple_genders": null, - "target_user_genders": null, - "required_props": null, - "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Say a boundary you want a partner to understand.", - "partner_text": null, - "intensity": 3, - "question_type": "audio", - "config": { - "max_duration_seconds": 60 - }, - "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe a boundary you want a partner to understand and gains a personal cue for a close conversation." + "intended_outcome": "Your partner gets a voice-led tease and can guess, ask for another clue, or agree to be surprised." }, { "id": "9206d99b-6de3-4597-8ec1-bcb40ea3b0d1", @@ -7504,7 +7376,7 @@ "required_props": null, "review_status": "draft", "pack_slug": "private-performance", - "text": "Say a surprise you would welcome.", + "text": "Record a dramatic trailer voice-over for the next adventurous evening you want to create together.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7512,8 +7384,8 @@ "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe a surprise you would welcome and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner hears the mood as performance, making it easier to discuss the plan without pressure." }, { "id": "089b9290-88a8-4922-8fd1-a45a2c66034b", @@ -7522,16 +7394,16 @@ "required_props": null, "review_status": "draft", "pack_slug": "private-performance", - "text": "Say the pace that helps you stay present.", + "text": "Leave a voice note acting out the confident version of yourself you would like to bring into a private date night.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe the pace that helps you stay present and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears a new side of your energy and can encourage that version of you when you are together." }, { "id": "433f364d-36c3-4562-89ca-4488c539565b", @@ -7539,17 +7411,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "roleplay", - "text": "Say a private role you would be curious to discuss.", + "pack_slug": "clothes-confidence", + "text": "Record how you feel when you wear the outfit that makes you walk a little taller.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe a private role you would be curious to discuss and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns the confidence signal behind a favourite look and can compliment it more meaningfully." }, { "id": "8c687c7c-40c3-4f32-8cd9-0ad323b37dbf", @@ -7557,8 +7429,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Say a setting that makes you feel confident.", + "pack_slug": "clothes-confidence", + "text": "Leave a voice note telling your partner what kind of look from them catches your attention first.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7566,8 +7438,8 @@ "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe a setting that makes you feel confident and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner hears a specific style cue and can choose an outfit that makes them feel noticed." }, { "id": "e6ce2b7d-77c7-4884-8810-f42d7a8b316f", @@ -7575,8 +7447,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Say a detail you would like your partner to decide.", + "pack_slug": "clothes-confidence", + "text": "In an encouraging voice, tell your partner how you would like them to make you feel confident before a private evening.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7584,8 +7456,8 @@ "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe a detail you would like your partner to decide and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns whether words, time to get ready, a compliment, or a small gesture helps you feel at ease." }, { "id": "13c891bb-8dd2-469a-88d5-099480e9b9c6", @@ -7593,17 +7465,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Say the way you want to be checked in with.", + "pack_slug": "clothes-confidence", + "text": "Record the outfit-related surprise you would enjoy receiving from your partner after they check it feels right for you.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe the way you want to be checked in with and gains a personal cue for a close conversation." + "intended_outcome": "Your partner gets a consent-aware idea for a bolder visual surprise and can confirm your comfort before planning it." }, { "id": "0733a238-e6f4-4c23-8316-133881d817c6", @@ -7611,17 +7483,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Say a memory that shaped what you enjoy.", + "pack_slug": "fantasy-exchange", + "text": "Record a fictional date-night scene you would enjoy stepping into with your partner, keeping it all about atmosphere.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe a memory that shaped what you enjoy and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner hears a low-pressure shared fantasy and can suggest a small real-world version of its mood." }, { "id": "30966ef4-6668-4e2e-86a4-ef8c9b37029c", @@ -7629,8 +7501,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Say the private mood you want more of.", + "pack_slug": "fantasy-exchange", + "text": "Leave a voice note beginning, “In our imaginary perfect evening, you would surprise me by...”", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7638,8 +7510,8 @@ "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe the private mood you want more of and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner receives a playful desire in fictional form and can ask which part you would actually enjoy trying." }, { "id": "dc97304f-e1f0-4bd1-8317-9ad473e3aaf6", @@ -7647,8 +7519,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Say the kind of reassurance that helps you open up.", + "pack_slug": "fantasy-exchange", + "text": "Record the made-up place where you and your partner would feel free to be more playful and uninhibited together.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7656,8 +7528,8 @@ "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe the kind of reassurance that helps you open up and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner hears the setting behind your fantasy and can recreate its feeling privately and safely." }, { "id": "bd4c9df0-80ac-4ab9-8dff-c8bce27bb1af", @@ -7665,17 +7537,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "private-performance", - "text": "Say a gentle way to ask for something unfamiliar.", + "pack_slug": "fantasy-exchange", + "text": "In a conspiratorial voice, tell your partner the private rule that would make your imaginary evening feel thrilling.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe a gentle way to ask for something unfamiliar and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears one negotiable game rule and can decide with you whether it belongs in real life." }, { "id": "b4d89b23-bfae-435c-8231-00f8e51f3117", @@ -7683,17 +7555,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Describe the words that make you feel genuinely desired.", + "pack_slug": "roleplay", + "text": "Record a playful opening line for a pretend first meeting with your partner.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe the words that make you feel genuinely desired and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner gets an easy roleplay entry point and can answer in character if they want to continue." }, { "id": "36a045f7-f6d2-4903-8fcb-50828097b31e", @@ -7701,8 +7573,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "giving-receiving-attention", - "text": "Describe a private invitation you would like to hear.", + "pack_slug": "roleplay", + "text": "Leave a voice note as a fictional version of yourself inviting your partner on a secret date.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7710,8 +7582,8 @@ "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe a private invitation you would like to hear and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner hears the role and tone that appeals to you and can choose whether to join the scene." }, { "id": "768a795b-71fb-4bc2-87b9-dabf94c871cb", @@ -7719,8 +7591,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "anticipation", - "text": "Describe the kind of build-up that keeps you engaged.", + "pack_slug": "roleplay", + "text": "Record the character trait you would enjoy your partner pretending to have for one private evening.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7728,8 +7600,8 @@ "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe the kind of build-up that keeps you engaged and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns the energy you find exciting, such as confidence, mystery, gentleness, or playfulness." }, { "id": "99daac70-ce70-4019-8986-09a1efb8a570", @@ -7737,17 +7609,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Describe a boundary you want a partner to understand.", + "pack_slug": "roleplay", + "text": "In character, record the agreement you would want before a bolder roleplay scene begins.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe a boundary you want a partner to understand and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears your preferred boundaries, stop signal, and tone before either of you enters the scene." }, { "id": "396709bb-16f9-41ac-878d-c579c90629f2", @@ -7755,17 +7627,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "surprise-novelty", - "text": "Describe a surprise you would welcome.", + "pack_slug": "settings-atmosphere", + "text": "Record a description of the room that makes you instantly want to put your phones away and focus on each other.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe a surprise you would welcome and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns the environmental details that help you reconnect and can help create them." }, { "id": "d2c09616-38ff-464d-89f1-5266d8f22ca4", @@ -7773,8 +7645,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "following", - "text": "Describe the pace that helps you stay present.", + "pack_slug": "settings-atmosphere", + "text": "Leave a voice note about the time of day when you are most open to a deliberately intimate evening.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7782,8 +7654,8 @@ "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe the pace that helps you stay present and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner hears your natural rhythm and can plan closeness for a time when you are more available." }, { "id": "eac0b471-8fd1-4d34-88e2-f73fd83506e8", @@ -7791,8 +7663,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "roleplay", - "text": "Describe a private role you would be curious to discuss.", + "pack_slug": "settings-atmosphere", + "text": "Record the first three details you would set up to make a home evening feel like an occasion.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7800,8 +7672,8 @@ "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe a private role you would be curious to discuss and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner receives an actionable atmosphere recipe and can take ownership of one detail." }, { "id": "4ed5ab78-53d8-4fcd-8128-f3f2be6ed2e0", @@ -7810,16 +7682,16 @@ "required_props": null, "review_status": "draft", "pack_slug": "settings-atmosphere", - "text": "Describe a setting that makes you feel confident.", + "text": "In a hushed voice, describe the kind of private escape you would like to create together without leaving home.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe a setting that makes you feel confident and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears the emotional destination you want and can help transform the space into it." }, { "id": "529d5f42-8293-445f-8108-4729b296b16f", @@ -7827,17 +7699,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "taking-the-lead", - "text": "Describe a detail you would like your partner to decide.", + "pack_slug": "surprise-novelty", + "text": "Record one harmless surprise your partner could prepare that would make you feel pursued.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe a detail you would like your partner to decide and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner learns an approachable surprise idea and can choose a moment to use it." }, { "id": "3b715030-5d70-44b4-8c05-346c3293f7e0", @@ -7845,8 +7717,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Describe the way you want to be checked in with.", + "pack_slug": "surprise-novelty", + "text": "Leave a voice note explaining what makes a surprise feel exciting to you instead of overwhelming.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7854,8 +7726,8 @@ "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe the way you want to be checked in with and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner hears the ingredients of welcome novelty and can avoid the parts that undermine it." }, { "id": "1a8b81f9-8a6a-4a42-8f5e-6e83c09eb379", @@ -7863,8 +7735,8 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Describe a memory that shaped what you enjoy.", + "pack_slug": "surprise-novelty", + "text": "Record a voice-only clue about a new private activity you would be curious to try together.", "partner_text": null, "intensity": 3, "question_type": "audio", @@ -7872,8 +7744,8 @@ "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe a memory that shaped what you enjoy and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner gets an invitation to ask questions and decide whether the activity suits both of you." }, { "id": "91158c5c-2245-4f78-8238-30df59769e4c", @@ -7881,17 +7753,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Describe the private mood you want more of.", + "pack_slug": "surprise-novelty", + "text": "In a playful whisper, tell your partner the one advance question they should ask before planning a bolder surprise.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe the private mood you want more of and gains a personal cue for a close conversation." + "intended_outcome": "Your partner learns the consent question that keeps novelty safe and can use it before making plans." }, { "id": "8321ee0b-e3d7-496e-81ef-871c802aa1d6", @@ -7899,17 +7771,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "boundaries-check-ins", - "text": "Describe the kind of reassurance that helps you open up.", + "pack_slug": "long-distance-desire", + "text": "Record the everyday sound from your life that you wish your partner could hear when you are apart.", "partner_text": null, - "intensity": 3, + "intensity": 2, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, - "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe the kind of reassurance that helps you open up and gains a personal cue for a close conversation." + "policy_risk": "low", + "intended_outcome": "Your partner gets a vivid piece of your day and can send one back to make distance feel smaller." }, { "id": "97920341-bea6-4a0f-8cf6-a16accc9b1d3", @@ -7917,17 +7789,17 @@ "target_user_genders": null, "required_props": null, "review_status": "draft", - "pack_slug": "flirty-communication", - "text": "Describe a gentle way to ask for something unfamiliar.", + "pack_slug": "long-distance-desire", + "text": "Leave a private voice note describing how you would like your reunion to begin when you next have uninterrupted time together.", "partner_text": null, - "intensity": 3, + "intensity": 4, "question_type": "audio", "config": { "max_duration_seconds": 60 }, "inverse_of": null, "policy_risk": "edge", - "intended_outcome": "Your partner hears your voice describe a gentle way to ask for something unfamiliar and gains a personal cue for a close conversation." + "intended_outcome": "Your partner hears a clear reunion hope and can respond with their own version before you meet." }, { "id": "658ec47e-0907-4098-8016-4b47b1ab545c", @@ -9208,6 +9080,134 @@ "inverse_of": null, "policy_risk": "edge", "intended_outcome": "The couple gets a playful comparison about who is more likely to plan the more daring surprise." + }, + { + "id": "9446dd26-cd3f-4357-8ac0-c8551a7b8303", + "pack_slug": "sensory-cues", + "text": "Listen with your eyes closed to a song your partner chose before a date.", + "partner_text": "Choose a song for your partner to hear with their eyes closed before a date.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "81675895-acc1-4130-8416-95a81cde2d02", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner chooses a focused listening cue and the other accepts the invitation to receive it." + }, + { + "id": "59d0c220-6464-485f-8a62-04560dad04e5", + "pack_slug": "sensory-cues", + "text": "Listen to the five-sound playlist your partner created to help you relax.", + "partner_text": "Create a five-sound playlist designed to help your partner relax.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "4616a26b-c703-476b-837c-d0d0289e1eba", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner creates a calming sound cue and the other receives a personal atmosphere plan." + }, + { + "id": "b24f30ff-5d34-4fc7-8734-9ffabd67dfe9", + "pack_slug": "sensory-cues", + "text": "Let your partner lead ten quiet minutes together, then tell them how it felt.", + "partner_text": "Lead ten quiet minutes together, then invite your partner to say how it felt.", + "intensity": 4, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "5ac75495-2d84-42d0-8117-f12219db00d5", + "review_status": "draft", + "policy_risk": "edge", + "intended_outcome": "One partner sets a quiet pace and the other agrees to reflect on the experience afterward." + }, + { + "id": "85d218a4-d8f7-478f-8c2e-fc50159fbe06", + "pack_slug": "private-performance", + "text": "Receive a dramatic, affectionate introduction from your partner.", + "partner_text": "Give your partner a dramatic, affectionate introduction.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "99afc3b9-779a-43d5-87f1-dea81e9a4130", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner offers playful praise while the other receives a confidence-building performance." + }, + { + "id": "a8ec9b86-791c-4e39-88b5-0ac2919a1e57", + "pack_slug": "private-performance", + "text": "Accept your partner’s invitation to dance to the song they chose.", + "partner_text": "Choose a song and invite your partner to dance to it with you.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "ad9432ef-79f8-4bd0-85ba-3fc0a7ecb49d", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner sets a musical invitation and the other agrees to join the private dance." + }, + { + "id": "df517093-e40e-4966-8798-6841e6c347a1", + "pack_slug": "private-performance", + "text": "Hear your partner read a short note about what makes a date feel exciting.", + "partner_text": "Write a short note about what makes a date feel exciting and read it to your partner.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "bd35ebb6-8b78-4b77-8bea-e782dc9dac15", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner shares a personal source of anticipation and the other receives it directly." + }, + { + "id": "18bb8a37-80b2-473b-8b60-44444762f7f2", + "pack_slug": "private-performance", + "text": "Let your partner lead a five-minute close moment while you can pause it.", + "partner_text": "Lead a five-minute close moment while your partner can pause it.", + "intensity": 4, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "ef004056-c670-4ccb-86eb-0504ab20a37b", + "review_status": "draft", + "policy_risk": "edge", + "intended_outcome": "One partner takes a brief lead while the other retains a clear option to pause." + }, + { + "id": "7bdb1217-55fa-4172-84d5-cc6fa5875bac", + "pack_slug": "clothes-confidence", + "text": "Wear the small style detail your partner chose for your next date-night look.", + "partner_text": "Choose one small style detail for your partner’s next date-night look.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "c1f81833-1668-4b34-8a46-1f0e04dce0bf", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner suggests a playful style detail and the other chooses whether to wear it." } ] } diff --git a/docs/product/question-drafts/play-safe-spicy-v1.md b/docs/product/question-drafts/play-safe-spicy-v1.md index 2c13776..21056af 100644 --- a/docs/product/question-drafts/play-safe-spicy-v1.md +++ b/docs/product/question-drafts/play-safe-spicy-v1.md @@ -4,22 +4,22 @@ Status: source-only, unpublished, not approved, imported, or published. This is ## Packs -- Flirty Communication: 63 questions. -- Anticipation: 36 questions. -- Taking the Lead: 33 questions. -- Following: 24 questions. -- Shared Control: 23 questions. -- Sensory Cues: 29 questions. -- Private Performance: 53 questions. -- Clothes and Confidence: 29 questions. -- Fantasy Exchange: 25 questions. -- Roleplay: 32 questions. -- Settings and Atmosphere: 36 questions. -- Boundaries and Check-ins: 41 questions. +- Flirty Communication: 55 questions. +- Anticipation: 38 questions. +- Taking the Lead: 35 questions. +- Following: 26 questions. +- Shared Control: 24 questions. +- Sensory Cues: 41 questions. +- Private Performance: 34 questions. +- Clothes and Confidence: 40 questions. +- Fantasy Exchange: 31 questions. +- Roleplay: 29 questions. +- Settings and Atmosphere: 40 questions. +- Boundaries and Check-ins: 35 questions. - Surprise and Novelty: 33 questions. -- Long-distance Desire: 21 questions. -- Giving and Receiving Attention: 50 questions. -- Aftercare and Reconnection: 22 questions. +- Long-distance Desire: 23 questions. +- Giving and Receiving Attention: 37 questions. +- Aftercare and Reconnection: 29 questions. ## Exact distribution diff --git a/scripts/validate-question-draft.mjs b/scripts/validate-question-draft.mjs index d24771e..9db99d7 100644 --- a/scripts/validate-question-draft.mjs +++ b/scripts/validate-question-draft.mjs @@ -5,9 +5,13 @@ import { readFile } from 'node:fs/promises'; const draftPath = new URL('../docs/product/question-drafts/play-safe-spicy-v1.json', import.meta.url); const snapshotPath = new URL('../apps/supabase/catalog-snapshots/production-2026-08-28.json', import.meta.url); const markdownPath = new URL('../docs/product/question-drafts/play-safe-spicy-v1.md', import.meta.url); +const textSourcePath = new URL('../docs/product/question-drafts/text-answer-concept-source.md', import.meta.url); +const audioSourcePath = new URL('../docs/product/question-drafts/audio-concept-source.md', import.meta.url); const draft = JSON.parse(await readFile(draftPath, 'utf8')); const snapshot = JSON.parse(await readFile(snapshotPath, 'utf8')); const markdown = await readFile(markdownPath, 'utf8'); +const textSource = await readFile(textSourcePath, 'utf8'); +const audioSource = await readFile(audioSourcePath, 'utf8'); const errors = []; const expect = (condition, message) => { if (!condition) errors.push(message); }; const normalize = (value) => value.toLowerCase().replace(/[^a-z0-9]+/g, ' ').trim(); @@ -18,7 +22,9 @@ const gendered = /\b(?:boyfriend|girlfriend|husband|wife|him|her|his|hers)\b/i; const photoUnsafe = /\b(?:body part|lingerie|nude|naked|proof|skin|undress|your body)\b/i; const artificialSuffix = /\b(?:option|response focus|voice focus|visual cue|variant|version)\s*\d+\b/i; const malformedOrFallback = /\b(?:let your partner to|as they for|share this private idea|take the complementary role|response focus|voice focus|bolder mood|confident outfit|unfamiliar private dynamic)\b/i; -const genericOutcome = /\b(?:this match reveals whether|specific written starting point|take the complementary role)\b/i; +const genericOutcome = /\b(?:this match reveals whether|specific written starting point|take the complementary role|gains a personal cue for a close conversation)\b/i; +const incompleteSwipe = /^(?:a |an |the |trying |swapping )/i; +const nonActionableSwipe = /^(?:close|private|shared|more|something|anything|it|that)\b/i; const markdownPackNames = { 'taking-the-lead': 'Taking the Lead', 'clothes-confidence': 'Clothes and Confidence', @@ -29,6 +35,36 @@ const markdownPackNames = { 'giving-receiving-attention': 'Giving and Receiving Attention', 'aftercare-reconnection': 'Aftercare and Reconnection', }; +const sourcePackSlugs = { + 'flirty communication': 'flirty-communication', + anticipation: 'anticipation', + 'taking the lead': 'taking-the-lead', + following: 'following', + 'shared control': 'shared-control', + 'sensory cues': 'sensory-cues', + 'private performance': 'private-performance', + 'clothes and confidence': 'clothes-confidence', + 'fantasy exchange': 'fantasy-exchange', + roleplay: 'roleplay', + 'settings and atmosphere': 'settings-atmosphere', + 'boundaries and check-ins': 'boundaries-check-ins', + 'surprise and novelty': 'surprise-novelty', + 'long-distance desire': 'long-distance-desire', + 'giving and receiving attention': 'giving-receiving-attention', + 'aftercare and reconnection': 'aftercare-reconnection', +}; +const parseSource = (source, pattern, type) => [...source.matchAll(pattern)].map((match) => ({ + pack_slug: sourcePackSlugs[match[1].toLowerCase()], + intensity: Number(match[2]), + text: match[3], + intended_outcome: match[4], + question_type: type, +})); +const textSourceRows = parseSource(textSource, /^\d+\. \*\*Theme:\*\* (.+?) \| \*\*Intensity:\*\* (\d)\s*\r?\n\s*\*\*Prompt:\*\* (.+?)\s*\r?\n\s*\*\*Intended outcome:\*\* (.+?)$/gm, 'text_answer'); +const audioSourceRows = parseSource(audioSource, /^\d+\. Theme: (.+?) \| Intensity: (\d)\s*\r?\n\s*Prompt: (.+?)\s*\r?\n\s*Intended outcome: (.+?)$/gm, 'audio'); +expect(textSourceRows.length === 100, `expected 100 text source rows, got ${textSourceRows.length}`); +expect(audioSourceRows.length === 70, `expected 70 audio source rows, got ${audioSourceRows.length}`); +const sourceKey = (row) => JSON.stringify([row.pack_slug, row.intensity, row.text, row.intended_outcome]); expect(Array.isArray(draft.packs) && Array.isArray(draft.questions), 'draft must contain packs and questions arrays'); const questions = draft.questions ?? []; @@ -42,6 +78,8 @@ const packCounts = new Map(); const draftTexts = new Map(); const openingCounts = new Map(); const ngramRows = new Map(); +const outcomeClusters = new Map(); +const responseLeadingVerbs = new Map(); const requiredFormatOpenings = new Set(['share a photo of', 'who is more likely']); const snapshotTexts = new Set((snapshot.tables?.questions ?? []).map((row) => normalize(row.text))); for (const [index, question] of questions.entries()) { @@ -71,6 +109,25 @@ for (const [index, question] of questions.entries()) { expect(!text.includes('—'), `${label} contains an em dash`); } const normalized = normalize(question.text); + if (question.question_type === 'swipe') { + expect(!incompleteSwipe.test(question.text) && !nonActionableSwipe.test(question.text), `${label} swipe text must be a complete actionable proposal`); + if (question.partner_text !== null) { + expect(question.text !== question.partner_text, `${label} asymmetric swipe must use distinct partner wording`); + expect(!incompleteSwipe.test(question.partner_text) && !nonActionableSwipe.test(question.partner_text), `${label} asymmetric partner_text must be a complete actionable proposal`); + } + } + if (question.question_type === 'text_answer' || question.question_type === 'audio') { + const leadingVerb = normalized.split(' ')[0]; + const key = `${question.question_type}:${leadingVerb}`; + responseLeadingVerbs.set(key, (responseLeadingVerbs.get(key) ?? 0) + 1); + const outcomeCluster = normalize(question.intended_outcome) + .replace(/\b(?:your|partner|the|couple|one|a|an|and|or|can|to|with|for|of|that|this|their|them|you)\b/g, ' ') + .replace(/\s+/g, ' ') + .trim(); + const rows = outcomeClusters.get(outcomeCluster) ?? []; + rows.push(label); + outcomeClusters.set(outcomeCluster, rows); + } const opening = normalized.split(' ').slice(0, 4).join(' '); if (!requiredFormatOpenings.has(opening)) { openingCounts.set(opening, (openingCounts.get(opening) ?? 0) + 1); @@ -104,6 +161,24 @@ for (const [opening, count] of openingCounts) { for (const [ngram, rows] of ngramRows) { expect(rows.length <= 10, `six-word phrase repeats ${rows.length} times across non-inverse rows: ${ngram}`); } +for (const [type, sourceRows] of [['text_answer', textSourceRows], ['audio', audioSourceRows]]) { + const catalogueRows = questions.filter((question) => question.question_type === type); + const sourceKeys = new Set(sourceRows.map(sourceKey)); + expect(sourceKeys.size === sourceRows.length, `${type} source contains duplicate concepts`); + expect(catalogueRows.length === sourceRows.length, `${type} source and catalogue counts differ`); + for (const question of catalogueRows) { + expect(sourceKeys.has(sourceKey(question)), `${type} row ${question.id} differs from the authored source`); + } +} +for (const [key, count] of responseLeadingVerbs) { + const [type, leadingVerb] = key.split(':'); + const total = type === 'text_answer' ? 100 : 70; + expect(count <= Math.ceil(total * 0.6), `${type} leading verb "${leadingVerb}" repeats ${count} times`); +} +for (const [cluster, rows] of outcomeClusters) { + expect(cluster.length >= 16, `${rows.join(', ')} has an overly generic response outcome`); + expect(rows.length === 1, `response outcome cluster repeats across ${rows.join(', ')}`); +} for (const [type, count] of Object.entries({ swipe: 300, text_answer: 100, audio: 70, photo: 40, who_likely: 40 })) expect(typeCounts[type] === count, `expected ${count} ${type}, got ${typeCounts[type]}`); for (const [level, count] of Object.entries({ 1: 0, 2: 120, 3: 300, 4: 130, 5: 0 })) expect(intensityCounts[level] === count, `expected ${count} intensity ${level}, got ${intensityCounts[level]}`); const swipes = questions.filter((question) => question.question_type === 'swipe');