diff --git a/.agents/learnings/promoted/2026-09-05-question-type-contract-drift.md b/.agents/learnings/promoted/2026-09-05-question-type-contract-drift.md new file mode 100644 index 0000000..3e06701 --- /dev/null +++ b/.agents/learnings/promoted/2026-09-05-question-type-contract-drift.md @@ -0,0 +1,40 @@ +--- +id: 2026-09-05-question-type-contract-drift +date: 2026-09-05 +status: promoted +scope: question interaction contract documentation +evidence: npm run lint:harness and npm run learn:check +destination: docs/question-types.md, scripts/lint-harness.mjs, AGENTS.md, and .codex/skills/question-pack/SKILL.md +review_after: 2026-12-05 +--- + +## Symptom + +Maintained documentation did not identify the implemented question interaction +types, their response payloads, or their matching semantics. The only detailed +reference was a historical implementation plan, so content and product work +could not rely on maintained documentation. + +## Reproduction + +Compare `QuestionType` in `packages/shared/src/types/index.ts` and the question +renderer and answer matching code with `docs/index.md`, `docs/schema.md`, and +`docs/question-selection.md`. + +## Cause + +The interaction contract was added to code without a maintained documentation +owner or a verification check linking the document to the canonical union. + +## Remediation + +Create `docs/question-types.md` as the maintained interaction contract. Require +agents and the question-pack workflow to update it with type or semantic +changes. Add a harness invariant that compares its type marker to the shared +`QuestionType` union. + +## Evidence + +`npm run lint:harness` reads the shared union and the documentation marker and +fails when their ordered type lists differ. `npm run learn:check` validates this +promoted learning record and its destination metadata. diff --git a/.codex/skills/question-pack/SKILL.md b/.codex/skills/question-pack/SKILL.md index 59eaf1c..1769214 100644 --- a/.codex/skills/question-pack/SKILL.md +++ b/.codex/skills/question-pack/SKILL.md @@ -7,6 +7,11 @@ description: Create or review Sauci question-pack content and its local migratio Inspect existing packs before generating to avoid duplication. +Before creating or editing content that uses a question interaction type, read +`docs/question-types.md`. If the type, response payload, configuration, or +matching semantics change, update that maintained contract and run +`npm run lint:harness` in the same task. + - Write proposals, not interview questions; use gender-neutral “your partner”. - Avoid time-bound words such as tonight, now, or today. - Symmetric activities have no partner text. diff --git a/AGENTS.md b/AGENTS.md index dc14b5c..40e4466 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -87,6 +87,9 @@ environment limitation; do not call it a passing product check. ## Documentation discipline Update the maintained doc when a contract, command, port, or invariant changes. +When question interaction types, response payloads, configuration, or match +semantics change, update `docs/question-types.md` in the same change and run +`npm run lint:harness` to prove its type list matches the shared contract. Plans and historical notes are evidence, not current architecture. A repeated lesson becomes permanent only after it is reproduced and promoted into a doc, skill, fixture, or executable check. diff --git a/docs/index.md b/docs/index.md index 26df3e9..8937dd9 100644 --- a/docs/index.md +++ b/docs/index.md @@ -20,6 +20,7 @@ historical notes. Agents should load only the section relevant to their task. - [Couple pairing](couple-pairing.md) - [Couple streaks](couple-streaks.md) - [Question selection](question-selection.md) +- [Question interaction types](question-types.md) - [Match notifications](match-notifications.md) - [Subscriptions](subscription-system.md) - [Redemption codes](product/redemption.md) diff --git a/docs/product/question-drafts/audio-concept-source.md b/docs/product/question-drafts/audio-concept-source.md new file mode 100644 index 0000000..194489b --- /dev/null +++ b/docs/product/question-drafts/audio-concept-source.md @@ -0,0 +1,283 @@ +# Play-safe spicy audio concept source + +Draft source for private, up-to-60-second audio responses. This is editorial input only and is not a live catalogue import. + +1. Theme: Flirty communication | Intensity: 2 + Prompt: In a warm, playful tone, record the compliment from your partner that would make you smile all day. + Intended outcome: Your partner hears the exact kind of praise that lands for you and can use it naturally in a future message. + +2. Theme: Flirty communication | Intensity: 3 + Prompt: Record a voice note finishing this sentence: “When you look at me like that, I want you to know...” + Intended outcome: Your partner receives a personal signal of attraction and can reply with what they notice in that moment too. + +3. Theme: Flirty communication | Intensity: 3 + Prompt: Leave your partner a voice note with one bold thing you would love them to say quietly when you are alone together. + Intended outcome: Your partner learns a specific phrase or mood that could make a private moment feel more charged. + +4. Theme: Flirty communication | Intensity: 4 + Prompt: Record the invitation you would most like to hear when your partner wants to turn an ordinary evening into a close one. + Intended outcome: Your partner gets a clear, consent-forward way to initiate and can try it on a night that feels right. + +5. Theme: Flirty communication | Intensity: 4 + Prompt: In your most confident voice, tell your partner what makes you feel unmistakably wanted by them. + Intended outcome: Your partner hears the emotional cue behind your desire and can make future affection feel more intentional. + +6. Theme: Anticipation | Intensity: 2 + Prompt: Record a short countdown-style note about one small thing you are looking forward to doing together later. + Intended outcome: Your partner hears a concrete point of anticipation and can build on it with their own plan. + +7. Theme: Anticipation | Intensity: 3 + Prompt: Record the first message you would want from your partner before a deliberately flirty date night. + Intended outcome: Your partner learns how you like anticipation to begin and can send it before your next planned evening. + +8. Theme: Anticipation | Intensity: 3 + Prompt: Describe, in a low and unhurried voice, the mood you want waiting for you after a busy day apart. + Intended outcome: Your partner hears whether you want calm, playfulness, affection, or intensity and can help create that landing. + +9. Theme: Anticipation | Intensity: 4 + Prompt: Record a private tease that hints at the kind of attention you would love from your partner later, without explaining every detail. + Intended outcome: Your partner receives an intriguing cue they can ask about and turn into a jointly chosen plan. + +10. Theme: Anticipation | Intensity: 4 + Prompt: Leave a voice note naming the one thing your partner could do before you meet that would put you in a more daring mood. + Intended outcome: Your partner learns a practical lead-in, such as a message, outfit, setting, or affectionate gesture, that helps you open up. + +11. Theme: Taking the lead | Intensity: 2 + Prompt: Record a cheerful invitation for your partner to let you choose the next date-night detail. + Intended outcome: Your partner hears an easy handover of initiative and can say yes to one contained surprise. + +12. Theme: Taking the lead | Intensity: 3 + Prompt: In a decisive voice, tell your partner one private mood you would like to set for the two of you. + Intended outcome: Your partner learns the atmosphere you want to lead and can confirm whether it feels good for them too. + +13. Theme: Taking the lead | Intensity: 3 + Prompt: Record how you would ask your partner to trust you with planning a more adventurous evening together. + Intended outcome: Your partner hears a respectful version of your confidence and can agree on a boundary before the plan unfolds. + +14. Theme: Taking the lead | Intensity: 4 + Prompt: Leave a voice note telling your partner the first instruction you would enjoy giving in a mutually agreed private game. + Intended outcome: Your partner hears the style of leadership you enjoy and can opt into the game with clear limits. + +15. Theme: Taking the lead | Intensity: 4 + Prompt: Record the reassurance you would give your partner before you take charge of a bolder shared experience. + Intended outcome: Your partner hears how you would keep them comfortable and can name what would help them relax into your lead. + +16. Theme: Following | Intensity: 2 + Prompt: Record one thing your partner could choose for you that would feel like a thoughtful treat. + Intended outcome: Your partner learns a safe way to surprise you and can choose it for an upcoming evening. + +17. Theme: Following | Intensity: 3 + Prompt: In a soft voice, explain what helps you enjoy letting your partner set the pace. + Intended outcome: Your partner hears the conditions that make following feel exciting rather than uncertain. + +18. Theme: Following | Intensity: 3 + Prompt: Record the kind of check-in that makes you feel safe saying yes to your partner’s idea. + Intended outcome: Your partner learns the exact reassurance that supports your willingness and can use it before suggesting something new. + +19. Theme: Following | Intensity: 4 + Prompt: Leave a voice note describing one daring-but-private decision you would enjoy your partner making after checking in with you first. + Intended outcome: Your partner gets a consent-based example of initiative they could take and a cue to ask before acting. + +20. Theme: Following | Intensity: 4 + Prompt: Record what you would want your partner to say if they wanted you to surrender the planning for one intimate evening. + Intended outcome: Your partner hears language that makes a stronger invitation feel welcome, with room for you to decline or adjust. + +21. Theme: Shared control | Intensity: 2 + Prompt: Record a two-choice question your partner can answer to shape your next cosy evening together. + Intended outcome: Your partner hears two real options and can choose the version that feels most appealing. + +22. Theme: Shared control | Intensity: 3 + Prompt: Leave a voice note describing a private game where you and your partner would alternate making one decision each. + Intended outcome: Your partner learns a simple shared-control format and can suggest the first decision. + +23. Theme: Shared control | Intensity: 3 + Prompt: Record which part of a date night you would like your partner to lead and which part you would like to lead. + Intended outcome: Your partner hears a practical division of initiative and can co-create the evening rather than guess. + +24. Theme: Shared control | Intensity: 4 + Prompt: In an excited voice, explain how you would like to build a bolder shared moment one yes at a time. + Intended outcome: Your partner hears a stepwise consent rhythm and can add their own yes, no, or alternative at each point. + +25. Theme: Shared control | Intensity: 4 + Prompt: Record a private challenge that only works if both of you keep choosing the next step together. + Intended outcome: Your partner receives an invitation to collaborative play and can negotiate the limits before starting. + +26. Theme: Boundaries and check-ins | Intensity: 2 + Prompt: Record a kind sentence your partner can use to ask whether you are still enjoying a close moment. + Intended outcome: Your partner hears a check-in that feels caring rather than formal and can use it in real time. + +27. Theme: Boundaries and check-ins | Intensity: 3 + Prompt: In your own voice, explain the difference between a surprise that delights you and one that catches you off guard. + Intended outcome: Your partner learns your personal distinction and can plan novelty that feels welcome. + +28. Theme: Boundaries and check-ins | Intensity: 3 + Prompt: Record the easiest phrase for you to use when you want to slow down without ending the mood. + Intended outcome: Your partner hears your preferred pause signal and knows it protects connection rather than rejects them. + +29. Theme: Boundaries and check-ins | Intensity: 4 + Prompt: Leave a voice note telling your partner what they could ask before suggesting something considerably bolder than usual. + Intended outcome: Your partner gets a concrete consent opener and can ask it before raising a new idea. + +30. Theme: Boundaries and check-ins | Intensity: 4 + Prompt: Record what “I am curious, but not ready yet” sounds like in words that still feel affectionate to you. + Intended outcome: Your partner learns how to receive hesitation warmly and can leave the door open without pressure. + +31. Theme: Aftercare and reconnection | Intensity: 2 + Prompt: Record the small affectionate gesture that helps you feel close after a playful evening together. + Intended outcome: Your partner hears a specific reconnection preference they can offer without guessing. + +32. Theme: Aftercare and reconnection | Intensity: 3 + Prompt: In a calm voice, tell your partner what you most like hearing after you have both tried something new together. + Intended outcome: Your partner learns the reassurance or reflection that helps novelty become a positive shared memory. + +33. Theme: Aftercare and reconnection | Intensity: 3 + Prompt: Record how you would like your partner to check in with you the morning after an especially intimate night. + Intended outcome: Your partner hears the tone and timing that feel meaningful and can follow through the next day. + +34. Theme: Aftercare and reconnection | Intensity: 4 + Prompt: Leave a voice note about the honest question you would want your partner to ask after a more daring experience. + Intended outcome: Your partner learns how to invite useful feedback and can improve the next shared experience with you. + +35. Theme: Aftercare and reconnection | Intensity: 4 + Prompt: Record the words that would make you feel proud and cared for after you stepped outside your comfort zone together. + Intended outcome: Your partner hears how to celebrate your trust and can reinforce the kind of openness you want to grow. + +36. Theme: Giving and receiving attention | Intensity: 2 + Prompt: Record one affectionate way your partner could make you feel noticed when you are both at home. + Intended outcome: Your partner gets a simple attention cue they can use in an ordinary evening. + +37. Theme: Giving and receiving attention | Intensity: 3 + Prompt: Leave a voice note describing how you know the difference between rushed affection and attention that feels fully present. + Intended outcome: Your partner learns what presence sounds and feels like to you and can adjust their pace. + +38. Theme: Giving and receiving attention | Intensity: 3 + Prompt: Record the kind of praise you would most enjoy giving your partner when they make you feel desired. + Intended outcome: Your partner hears the feedback that encourages them and can understand what is working for you. + +39. Theme: Giving and receiving attention | Intensity: 4 + Prompt: In a warm, deliberate voice, tell your partner where you would like their focus to be during a private moment. + Intended outcome: Your partner hears the emotional or sensory focus you want and can ask a follow-up before acting on it. + +40. Theme: Giving and receiving attention | Intensity: 4 + Prompt: Record the one thing your partner could do to make you feel they have set aside the whole evening just for you. + Intended outcome: Your partner learns a concrete sign of devoted attention and can weave it into a future plan. + +41. Theme: Sensory cues | Intensity: 2 + Prompt: Record the sound, song, or kind of silence that makes an evening feel more intimate to you. + Intended outcome: Your partner learns an audible atmosphere cue and can bring it into your next shared setting. + +42. Theme: Sensory cues | Intensity: 3 + Prompt: In a slow voice, describe the lighting that makes you feel most relaxed and attractive. + Intended outcome: Your partner hears a practical setting preference and can prepare the room with your comfort in mind. + +43. Theme: Sensory cues | Intensity: 3 + Prompt: Record the scent or familiar smell that you associate with feeling especially close to your partner. + Intended outcome: Your partner learns a personal sensory association and can use it to create a recognisable shared mood. + +44. Theme: Sensory cues | Intensity: 4 + Prompt: Leave a voice note about the kind of music that would make you feel more confident trying a bolder private mood together. + Intended outcome: Your partner receives a specific confidence cue and can make a playlist before you explore the mood. + +45. Theme: Private performance | Intensity: 2 + Prompt: Record a playful introduction as though you are welcoming your partner to a date night you designed just for them. + Intended outcome: Your partner hears your enthusiasm and can respond with the detail that would make the invitation even better. + +46. Theme: Private performance | Intensity: 3 + Prompt: In character, record a short mystery message that gives your partner one clue about a private surprise. + Intended outcome: Your partner gets a voice-led tease and can guess, ask for another clue, or agree to be surprised. + +47. Theme: Private performance | Intensity: 3 + Prompt: Record a dramatic trailer voice-over for the next adventurous evening you want to create together. + Intended outcome: Your partner hears the mood as performance, making it easier to discuss the plan without pressure. + +48. Theme: Private performance | Intensity: 4 + Prompt: Leave a voice note acting out the confident version of yourself you would like to bring into a private date night. + Intended outcome: Your partner hears a new side of your energy and can encourage that version of you when you are together. + +49. Theme: Clothes and confidence | Intensity: 2 + Prompt: Record how you feel when you wear the outfit that makes you walk a little taller. + Intended outcome: Your partner learns the confidence signal behind a favourite look and can compliment it more meaningfully. + +50. Theme: Clothes and confidence | Intensity: 3 + Prompt: Leave a voice note telling your partner what kind of look from them catches your attention first. + Intended outcome: Your partner hears a specific style cue and can choose an outfit that makes them feel noticed. + +51. Theme: Clothes and confidence | Intensity: 3 + Prompt: In an encouraging voice, tell your partner how you would like them to make you feel confident before a private evening. + Intended outcome: Your partner learns whether words, time to get ready, a compliment, or a small gesture helps you feel at ease. + +52. Theme: Clothes and confidence | Intensity: 4 + Prompt: Record the outfit-related surprise you would enjoy receiving from your partner after they check it feels right for you. + Intended outcome: Your partner gets a consent-aware idea for a bolder visual surprise and can confirm your comfort before planning it. + +53. Theme: Fantasy exchange | Intensity: 2 + Prompt: Record a fictional date-night scene you would enjoy stepping into with your partner, keeping it all about atmosphere. + Intended outcome: Your partner hears a low-pressure shared fantasy and can suggest a small real-world version of its mood. + +54. Theme: Fantasy exchange | Intensity: 3 + Prompt: Leave a voice note beginning, “In our imaginary perfect evening, you would surprise me by...” + Intended outcome: Your partner receives a playful desire in fictional form and can ask which part you would actually enjoy trying. + +55. Theme: Fantasy exchange | Intensity: 3 + Prompt: Record the made-up place where you and your partner would feel free to be more playful and uninhibited together. + Intended outcome: Your partner hears the setting behind your fantasy and can recreate its feeling privately and safely. + +56. Theme: Fantasy exchange | Intensity: 4 + Prompt: In a conspiratorial voice, tell your partner the private rule that would make your imaginary evening feel thrilling. + Intended outcome: Your partner hears one negotiable game rule and can decide with you whether it belongs in real life. + +57. Theme: Roleplay | Intensity: 2 + Prompt: Record a playful opening line for a pretend first meeting with your partner. + Intended outcome: Your partner gets an easy roleplay entry point and can answer in character if they want to continue. + +58. Theme: Roleplay | Intensity: 3 + Prompt: Leave a voice note as a fictional version of yourself inviting your partner on a secret date. + Intended outcome: Your partner hears the role and tone that appeals to you and can choose whether to join the scene. + +59. Theme: Roleplay | Intensity: 3 + Prompt: Record the character trait you would enjoy your partner pretending to have for one private evening. + Intended outcome: Your partner learns the energy you find exciting, such as confidence, mystery, gentleness, or playfulness. + +60. Theme: Roleplay | Intensity: 4 + Prompt: In character, record the agreement you would want before a bolder roleplay scene begins. + Intended outcome: Your partner hears your preferred boundaries, stop signal, and tone before either of you enters the scene. + +61. Theme: Settings and atmosphere | Intensity: 2 + Prompt: Record a description of the room that makes you instantly want to put your phones away and focus on each other. + Intended outcome: Your partner learns the environmental details that help you reconnect and can help create them. + +62. Theme: Settings and atmosphere | Intensity: 3 + Prompt: Leave a voice note about the time of day when you are most open to a deliberately intimate evening. + Intended outcome: Your partner hears your natural rhythm and can plan closeness for a time when you are more available. + +63. Theme: Settings and atmosphere | Intensity: 3 + Prompt: Record the first three details you would set up to make a home evening feel like an occasion. + Intended outcome: Your partner receives an actionable atmosphere recipe and can take ownership of one detail. + +64. Theme: Settings and atmosphere | Intensity: 4 + Prompt: In a hushed voice, describe the kind of private escape you would like to create together without leaving home. + Intended outcome: Your partner hears the emotional destination you want and can help transform the space into it. + +65. Theme: Surprise and novelty | Intensity: 2 + Prompt: Record one harmless surprise your partner could prepare that would make you feel pursued. + Intended outcome: Your partner learns an approachable surprise idea and can choose a moment to use it. + +66. Theme: Surprise and novelty | Intensity: 3 + Prompt: Leave a voice note explaining what makes a surprise feel exciting to you instead of overwhelming. + Intended outcome: Your partner hears the ingredients of welcome novelty and can avoid the parts that undermine it. + +67. Theme: Surprise and novelty | Intensity: 3 + Prompt: Record a voice-only clue about a new private activity you would be curious to try together. + Intended outcome: Your partner gets an invitation to ask questions and decide whether the activity suits both of you. + +68. Theme: Surprise and novelty | Intensity: 4 + Prompt: In a playful whisper, tell your partner the one advance question they should ask before planning a bolder surprise. + Intended outcome: Your partner learns the consent question that keeps novelty safe and can use it before making plans. + +69. Theme: Long-distance desire | Intensity: 2 + Prompt: Record the everyday sound from your life that you wish your partner could hear when you are apart. + Intended outcome: Your partner gets a vivid piece of your day and can send one back to make distance feel smaller. + +70. Theme: Long-distance desire | Intensity: 4 + Prompt: Leave a private voice note describing how you would like your reunion to begin when you next have uninterrupted time together. + Intended outcome: Your partner hears a clear reunion hope and can respond with their own version before you meet. diff --git a/docs/product/question-drafts/concept-set-a.md b/docs/product/question-drafts/concept-set-a.md new file mode 100644 index 0000000..27e88a8 --- /dev/null +++ b/docs/product/question-drafts/concept-set-a.md @@ -0,0 +1,103 @@ +# Concept Set A: Swipe proposals + +Draft catalogue for the existing swipe interaction. A match represents both partners opting into the stated outcome. `partner_text` is the wording delivered to the other partner; `null` denotes a symmetric proposition. + +## Asymmetric swipe concepts + +| # | Intensity | Text | Partner text | Matched outcome | +|---:|---:|---|---|---| +| 1 | 2 | Send your partner a message describing the kind of attention you would love later. | Receive a message from your partner describing the kind of attention they would love later. | One partner has invited the other to create a specific kind of private attention. | +| 2 | 2 | Ask your partner to choose one compliment you should hear in a more intimate setting. | Choose one compliment your partner should hear in a more intimate setting. | One partner wants to give a targeted confidence-building compliment and the other wants to receive it. | +| 3 | 2 | Tell your partner one private thought that makes you feel closer to them. | Hear one private thought from your partner that makes them feel closer to you. | One partner is ready to share a personal desire for connection and the other is open to receiving it. | +| 4 | 2 | Ask your partner to give you a private instruction in a message. | Give your partner a private instruction in a message. | One partner wants to follow a playful instruction and the other wants to set it. | +| 5 | 3 | Describe a private scenario you would like your partner to set up for you. | Set up a private scenario your partner describes wanting. | One partner wants to describe a desired experience and the other wants to bring it to life. | +| 6 | 3 | Ask your partner to tell you what they find hardest to resist about you. | Tell your partner what you find hardest to resist about them. | One partner wants a direct expression of desire and the other wants to give it. | +| 7 | 3 | Invite your partner to send you a voice note that builds anticipation. | Send your partner a voice note that builds anticipation. | One partner wants to be teased by voice and the other wants to create that anticipation. | +| 8 | 4 | Ask your partner to tell you one private wish they want you to consider. | Tell your partner one private wish you want them to consider. | One partner is open to receiving a direct private wish and the other is ready to name one. | +| 9 | 2 | Let your partner choose a small signal that means they want your attention. | Choose a small signal that tells your partner you want their attention. | One partner wants to recognise a private invitation and the other wants to create one. | +| 10 | 2 | Ask your partner to plan the first few minutes of a private date. | Plan the first few minutes of a private date for your partner. | One partner wants to arrive without knowing the opening and the other wants to create it. | +| 11 | 3 | Let your partner decide when you are allowed to open a private surprise. | Decide when your partner is allowed to open a private surprise. | One partner wants delayed anticipation and the other wants to control the reveal. | +| 12 | 3 | Wait for your partner to give you the cue to begin a private plan. | Give your partner the cue to begin a private plan. | One partner wants to wait for permission and the other wants to choose the moment. | +| 13 | 3 | Ask your partner to create a private clue trail leading to what they want. | Create a private clue trail leading to what you want from your partner. | One partner wants to follow an intimate trail of hints and the other wants to design it. | +| 14 | 3 | Let your partner choose one thing to postpone to make the build-up longer. | Choose one thing to postpone to make the build-up longer for your partner. | One partner wants a slower build-up and the other wants to decide what is held back. | +| 15 | 4 | Ask your partner to plan a private surprise within limits you agree first. | Plan a private surprise for your partner within limits you agree first. | One partner wants a contained surprise and the other wants to lead it safely. | +| 16 | 4 | Let your partner choose the order of a private experience without telling you. | Choose the order of a private experience without telling your partner. | One partner wants uncertainty within an agreed experience and the other wants to choreograph it. | +| 17 | 2 | Choose what your partner wears for a private date. | Let your partner choose what you wear for a private date. | One partner wants to style the moment and the other wants to be chosen for. | +| 18 | 2 | Choose the music that sets the mood for your private time together. | Let your partner choose the music that sets the mood for your private time together. | One partner wants to set the atmosphere and the other wants to enter it. | +| 19 | 3 | Give your partner three private options and choose which one they follow. | Let your partner give you three private options and choose which one you follow. | One partner wants to offer controlled choices and the other wants to accept a selected direction. | +| 20 | 3 | Plan a private experience where your partner follows your pace. | Follow your partner’s pace during a private experience they plan. | One partner wants to guide the rhythm and the other wants to be guided. | +| 21 | 3 | Choose the first form of affection you give your partner in private. | Let your partner choose the first form of affection they give you in private. | One partner wants to initiate deliberately and the other wants to receive an intentional opening. | +| 22 | 4 | Decide the private role you want your partner to play for you. | Play the private role your partner chooses for you. | One partner wants to direct a role-based encounter and the other wants to inhabit the chosen role. | +| 23 | 4 | Set the rules for a private game your partner agrees to play. | Play a private game using rules your partner sets. | One partner wants to set a consensual frame and the other wants to play within it. | +| 24 | 4 | Choose when your partner may take the next step in a private encounter. | Let your partner choose when you may take the next step in a private encounter. | One partner wants to control pacing and the other wants to receive a clear cue. | +| 25 | 2 | Let your partner choose the private setting where you spend time together. | Choose the private setting where you spend time with your partner. | One partner wants to be led into a setting and the other wants to choose it. | +| 26 | 2 | Follow a private date plan your partner creates without seeing it first. | Create a private date plan for your partner without showing it first. | One partner wants a planned surprise and the other wants to arrange it. | +| 27 | 3 | Let your partner decide how slowly you take a private moment together. | Decide how slowly you take a private moment together with your partner. | One partner wants to surrender the pace and the other wants to set it. | +| 28 | 3 | Follow one private instruction from your partner without negotiating the details first. | Give your partner one private instruction without negotiating the details first. | One partner wants to follow a simple direction and the other wants to give one. | +| 29 | 3 | Let your partner choose the kind of attention you receive first. | Choose the kind of attention your partner receives first. | One partner wants to receive a chosen form of attention and the other wants to give it. | +| 30 | 4 | Let your partner decide the sequence of an agreed private experience. | Decide the sequence of an agreed private experience for your partner. | One partner wants to follow an agreed sequence and the other wants to lead it. | +| 31 | 4 | Follow a private role your partner sets after discussing your limits. | Set a private role for your partner after discussing their limits. | One partner wants to follow a defined role and the other wants to set it within agreed limits. | +| 32 | 2 | Choose one element of a private date while your partner chooses the other. | Choose one element of a private date while your partner chooses the other. | Both partners want to co-create a private date with equal input. | +| 33 | 2 | Take turns choosing how you show affection during a private evening. | Take turns choosing how you show affection during a private evening. | Both partners want alternating opportunities to initiate affection. | +| 34 | 3 | Create a private list of three ideas and let your partner pick one for you. | Create a private list of three ideas and let your partner pick one for you. | Both partners want to offer choices and select an experience for each other. | +| 35 | 3 | Agree that each of you gets one turn to direct part of a private experience. | Agree that each of you gets one turn to direct part of a private experience. | Both partners want shared leadership with clear turns. | +| 36 | 3 | Choose a private challenge for your partner and accept one from them. | Choose a private challenge for your partner and accept one from them. | Both partners want to exchange playful, consensual challenges. | +| 37 | 4 | Take turns naming one thing you want and one thing you are willing to give. | Take turns naming one thing you want and one thing you are willing to give. | Both partners want to negotiate desire through reciprocal offers. | +| 38 | 4 | Agree that either partner can change the direction of a private experience once. | Agree that either partner can change the direction of a private experience once. | Both partners want shared control and permission to redirect the experience. | +| 39 | 2 | Ask your partner to name the kind of reassurance they want before trying something new. | Tell your partner the kind of reassurance you want before trying something new. | One partner wants to offer reassurance and the other wants to name what helps. | +| 40 | 2 | Choose a private check-in phrase your partner can use with you. | Use a private check-in phrase your partner chooses for you. | One partner wants to establish a check-in and the other wants to use it. | +| 41 | 3 | Tell your partner one boundary that helps you relax during private exploration. | Hear one boundary from your partner that helps them relax during private exploration. | One partner wants to state a boundary and the other is open to receiving it. | +| 42 | 3 | Ask your partner to choose a simple signal for slowing down. | Choose a simple signal for slowing down with your partner. | One partner wants a clear slowing-down signal and the other wants to define it. | +| 43 | 3 | Invite your partner to tell you what would make a new idea feel safer. | Tell your partner what would make a new idea feel safer for you. | One partner wants to adapt to the other’s needs and the other wants to express them. | +| 44 | 4 | Ask your partner to set one firm limit before you lead a private experience. | Set one firm limit before your partner leads a private experience. | One partner wants to lead only with a clear limit and the other wants to set it. | +| 45 | 4 | Ask your partner to tell you what would make them stop a private experience. | Tell your partner what would make you stop a private experience. | One partner wants clarity about stopping conditions and the other wants to define them. | +| 46 | 2 | Ask your partner to choose how they would like to reconnect after private time. | Choose how you would like to reconnect with your partner after private time. | One partner wants to provide the preferred form of reconnection and the other wants to choose it. | +| 47 | 2 | Tell your partner one thing they could say that would make you feel especially appreciated afterwards. | Hear one thing you could say that would make your partner feel especially appreciated afterwards. | One partner wants to name an affirming phrase and the other wants to offer it. | +| 48 | 3 | Let your partner choose whether you stay close, talk, or have quiet space after an intimate moment. | Choose whether you stay close, talk, or have quiet space after an intimate moment with your partner. | One partner wants the other to decide the reconnection style and the other wants to choose it. | +| 49 | 3 | Ask your partner to tell you what kind of comfort helps them feel grounded afterwards. | Tell your partner what kind of comfort helps you feel grounded afterwards. | One partner wants to provide grounding comfort and the other wants to describe it. | +| 50 | 3 | Give your partner a chance to tell you what they liked most after private exploration. | Tell your partner what you liked most after private exploration. | One partner wants feedback and the other wants to share positive detail. | +| 51 | 4 | Ask your partner to choose one way you can make them feel cared for after an intense private experience. | Choose one way your partner can make you feel cared for after an intense private experience. | One partner wants to provide deliberate care and the other wants to specify it. | +| 52 | 4 | Tell your partner what you need from them if a private experience leaves you feeling exposed. | Hear what your partner needs if a private experience leaves them feeling exposed. | One partner wants to name a vulnerability need and the other wants to meet it. | +| 53 | 2 | Let your partner choose one part of you to compliment slowly and sincerely. | Choose one part of your partner to compliment slowly and sincerely. | One partner wants to receive focused admiration and the other wants to give it. | +| 54 | 2 | Ask your partner to give you their full attention while you share what feels romantic to you. | Give your partner your full attention while they share what feels romantic to them. | One partner wants to be heard about romance and the other wants to listen attentively. | +| 55 | 3 | Receive a slow, uninterrupted moment of affection chosen by your partner. | Give your partner a slow, uninterrupted moment of affection you choose. | One partner wants to receive focused affection and the other wants to choose how to give it. | +| 56 | 3 | Give your partner the kind of private attention they ask for without asking for anything back first. | Receive the kind of private attention you ask for without giving anything back first. | One partner wants to give without immediate reciprocity and the other wants to receive freely. | +| 57 | 3 | Let your partner choose how they want you to focus on them during private time. | Choose how you want your partner to focus on you during private time. | One partner wants to direct the attention they receive and the other wants to follow that direction. | +| 58 | 4 | Ask your partner to give you their full focus while you set the pace. | Give your partner your full focus while they set the pace. | One partner wants to lead the pace while receiving undivided attention from the other. | +| 59 | 4 | Let your partner ask for one kind of private attention you will focus on giving. | Ask your partner for one kind of private attention they will focus on giving. | One partner wants to fulfil a focused request and the other wants to make one. | +| 60 | 4 | Choose how you want your partner to make you feel desired in private. | Make your partner feel desired in private in the way they choose. | One partner wants to name a desired experience and the other wants to deliver it. | + +## Symmetric swipe proposals + +| # | Intensity | Text | Partner text | Matched outcome | +|---:|---:|---|---|---| +| 1 | 2 | Exchange a private message naming one thing you find irresistible about each other. | null | Both partners agree to trade direct expressions of attraction. | +| 2 | 2 | Give each other one compliment that feels more personal than usual. | null | Both partners want a more intimate exchange of appreciation. | +| 3 | 3 | Send each other a voice note that sets a private mood. | null | Both partners agree to create anticipation through voice. | +| 4 | 4 | Share one private wish each and discuss what would make it feel exciting and safe. | null | Both partners agree to reveal a private wish and discuss its boundaries. | +| 5 | 2 | Plan a private surprise for each other using only a few clues. | null | Both partners agree to build anticipation through limited information. | +| 6 | 3 | Agree on a private signal that starts an anticipated experience. | null | Both partners want a mutual cue that begins their planned moment. | +| 7 | 3 | Leave each other one private hint about something you want to try together. | null | Both partners agree to exchange hints before discussing an idea. | +| 8 | 4 | Plan a private experience where neither of you knows the full sequence beforehand. | null | Both partners want surprise while retaining an agreed framework. | +| 9 | 2 | Take turns planning a private date where the other person only knows the starting point. | null | Both partners agree to alternate between leading and being surprised. | +| 10 | 3 | Take turns giving one private instruction and following one. | null | Both partners want to alternate consensual direction and follow-through. | +| 11 | 3 | Choose a private role for each other and agree whether to swap halfway through. | null | Both partners want a role-based experience with an optional switch. | +| 12 | 4 | Take turns setting the pace during an agreed private experience. | null | Both partners agree to hand leadership back and forth. | +| 13 | 2 | Each choose one part of a private date and combine the plans. | null | Both partners want to build a shared private date. | +| 14 | 3 | Make a private list of three ideas each and choose one from the other person’s list. | null | Both partners agree to select a mutually desired new idea. | +| 15 | 3 | Use a coin toss to decide who leads the first part of your private time together. | null | Both partners want a playful, equal way to assign the opening lead. | +| 16 | 4 | Agree that either person can pause, redirect, or end a private experience without explanation. | null | Both partners establish equal control over continuation and change. | +| 17 | 2 | Choose a simple phrase that means you want more reassurance. | null | Both partners agree on a shared reassurance signal. | +| 18 | 3 | Name one thing that helps you feel secure when trying something unfamiliar. | null | Both partners agree to share and honour their comfort needs. | +| 19 | 3 | Agree on a signal that means slow down and a signal that means stop. | null | Both partners establish clear ways to adjust or end an experience. | +| 20 | 4 | Discuss one private boundary you want honoured before exploring a more intense idea. | null | Both partners agree to state a firm limit before escalating. | +| 21 | 2 | Tell each other how you most like to reconnect after a private date. | null | Both partners agree to share their preferred reconnection style. | +| 22 | 3 | Set aside time to tell each other what felt especially good about a private experience. | null | Both partners agree to exchange affirming feedback. | +| 23 | 3 | Choose a shared ritual that helps you feel close after intimate time. | null | Both partners want a repeatable ritual of reconnection. | +| 24 | 4 | Agree to check in with each other after trying something that feels emotionally intense. | null | Both partners commit to care and reflection after deeper exploration. | +| 25 | 2 | Take turns receiving five uninterrupted minutes of affectionate attention. | null | Both partners agree to give and receive undivided affection. | +| 26 | 3 | Take turns asking for the kind of private attention you most want. | null | Both partners agree to voice a specific desire and respond to it. | +| 27 | 3 | Give each other a turn where one person only receives and the other only gives attention. | null | Both partners want reciprocal focused giving and receiving. | +| 28 | 4 | Tell each other one way you want to feel desired, then make space for both requests. | null | Both partners agree to make each other feel desired in individually meaningful ways. | +| 29 | 4 | Take turns creating a private experience centred entirely on the other person’s enjoyment. | null | Both partners want to alternate between giving undivided attention and receiving it. | +| 30 | 4 | Agree to ask directly for what you want and answer honestly about what you can give. | null | Both partners agree to a direct, consent-led exchange of desire. | diff --git a/docs/product/question-drafts/concept-set-b.md b/docs/product/question-drafts/concept-set-b.md new file mode 100644 index 0000000..e518a28 --- /dev/null +++ b/docs/product/question-drafts/concept-set-b.md @@ -0,0 +1,484 @@ +# Concept Set B + +Status: authored source fixture. Source-only and unpublished. + +This document contains 60 asymmetric concepts and 30 symmetric concepts for the +play-safe spicy catalogue repair. Each entry has a theme, intensity, primary +copy, exact partner copy, and an intended outcome. + +## Asymmetric concepts + +### Sensory cues + +#### A01 +Theme: Sensory cues +Intensity: 2 +Primary text: Would you be up for choosing a scent that you want your partner to wear for a close evening? +Partner text: Would you be up for choosing a scent that you want your partner to wear for a close evening? +Intended outcome: One partner selects a scent cue for the other to use on their next intentional date night. + +#### A02 +Theme: Sensory cues +Intensity: 3 +Primary text: Would you like your partner to prepare a playlist that sets the mood for a more intimate evening with you? +Partner text: Would you like to prepare a playlist that sets the mood for a more intimate evening with your partner? +Intended outcome: The receiving partner gets a personally chosen mood playlist. + +#### A03 +Theme: Sensory cues +Intensity: 3 +Primary text: Would you enjoy your partner guiding you through a slow eyes-closed guessing game with safe household textures? +Partner text: Would you enjoy guiding your partner through a slow eyes-closed guessing game with safe household textures? +Intended outcome: The proposer leads a private sensory game and the receiver agrees to participate. + +#### A04 +Theme: Sensory cues +Intensity: 3 +Primary text: Would you like your partner to choose the lighting for a close evening together? +Partner text: Would you like to choose the lighting for a close evening together with your partner? +Intended outcome: One partner creates the visual atmosphere while the other agrees to experience it. + +#### A05 +Theme: Sensory cues +Intensity: 4 +Primary text: Would you be open to your partner asking you to focus only on their voice for a few uninterrupted minutes? +Partner text: Would you be open to asking your partner to focus only on your voice for a few uninterrupted minutes? +Intended outcome: The proposer receives undivided, voice-led attention in private. + +#### A06 +Theme: Sensory cues +Intensity: 3 +Primary text: Would you like your partner to pick a dessert or drink for you to share slowly after your date? +Partner text: Would you like to pick a dessert or drink for your partner to share slowly after your date? +Intended outcome: The proposer chooses a shared treat that extends a date into a close moment. + +#### A07 +Theme: Sensory cues +Intensity: 4 +Primary text: Would you enjoy your partner choosing one song and asking you to stay close with them until it ends? +Partner text: Would you enjoy choosing one song and asking your partner to stay close with you until it ends? +Intended outcome: The couple agrees to a deliberate, uninterrupted closeness ritual around one song. + +#### A08 +Theme: Sensory cues +Intensity: 2 +Primary text: Would you like your partner to leave a note telling you one small detail they find especially attractive about you? +Partner text: Would you like to leave your partner a note telling them one small detail you find especially attractive about them? +Intended outcome: The proposer gives the receiver a specific, private compliment in writing. + +### Private performance + +#### A09 +Theme: Private performance +Intensity: 2 +Primary text: Would you like your partner to choose a song and perform a playful lip-sync just for you? +Partner text: Would you like to choose a song and perform a playful lip-sync just for your partner? +Intended outcome: One partner gives the other a private, playful performance. + +#### A10 +Theme: Private performance +Intensity: 3 +Primary text: Would you enjoy your partner giving you a short, confident compliment speech before your next date night? +Partner text: Would you enjoy giving your partner a short, confident compliment speech before your next date night? +Intended outcome: The receiver gets a deliberate verbal build-up before the date. + +#### A11 +Theme: Private performance +Intensity: 3 +Primary text: Would you be up for your partner choosing a song for you to slow-dance to together at home? +Partner text: Would you be up for choosing a song for you and your partner to slow-dance to together at home? +Intended outcome: The proposer picks the soundtrack for a private slow dance. + +#### A12 +Theme: Private performance +Intensity: 4 +Primary text: Would you like your partner to tell you, face to face, the version of you they find hardest to resist? +Partner text: Would you like to tell your partner, face to face, the version of them you find hardest to resist? +Intended outcome: The couple shares a direct, personal desire statement. + +#### A13 +Theme: Private performance +Intensity: 2 +Primary text: Would you enjoy your partner making you laugh with a deliberately over-the-top romantic introduction? +Partner text: Would you enjoy making your partner laugh with a deliberately over-the-top romantic introduction? +Intended outcome: One partner performs a comic, affectionate introduction for the other. + +#### A14 +Theme: Private performance +Intensity: 3 +Primary text: Would you like your partner to write and read you a short invitation for a private evening together? +Partner text: Would you like to write and read your partner a short invitation for a private evening together? +Intended outcome: The proposer creates a spoken invitation that frames the evening. + +#### A15 +Theme: Private performance +Intensity: 4 +Primary text: Would you be open to your partner asking you to sit back while they set the pace for the first part of your evening? +Partner text: Would you be open to asking your partner to sit back while you set the pace for the first part of your evening? +Intended outcome: The proposer leads the opening part of a mutually agreed private evening. + +#### A16 +Theme: Private performance +Intensity: 3 +Primary text: Would you like your partner to reveal one new side of their confidence through a private dance for you? +Partner text: Would you like to reveal one new side of your confidence through a private dance for your partner? +Intended outcome: One partner shares a confidence-focused private dance. + +### Clothes and confidence + +#### A17 +Theme: Clothes and confidence +Intensity: 2 +Primary text: Would you like your partner to choose one outfit detail for your next date that makes them smile? +Partner text: Would you like to choose one outfit detail for your partner's next date that makes you smile? +Intended outcome: The proposer chooses a small style detail for the receiver to wear. + +#### A18 +Theme: Clothes and confidence +Intensity: 3 +Primary text: Would you enjoy your partner putting together a look for you that feels more daring than your usual style? +Partner text: Would you enjoy putting together a look for your partner that feels more daring than their usual style? +Intended outcome: One partner styles the other for a bolder but comfortable date-night look. + +#### A19 +Theme: Clothes and confidence +Intensity: 3 +Primary text: Would you like your partner to ask you to wear the colour they most associate with you feeling confident? +Partner text: Would you like to ask your partner to wear the colour you most associate with them feeling confident? +Intended outcome: The receiver wears a colour chosen for its confidence association. + +#### A20 +Theme: Clothes and confidence +Intensity: 4 +Primary text: Would you be open to your partner choosing the dress code for a private evening, within limits you both agree first? +Partner text: Would you be open to choosing the dress code for a private evening, within limits you both agree first? +Intended outcome: One partner leads the evening's agreed presentation and atmosphere. + +#### A21 +Theme: Clothes and confidence +Intensity: 2 +Primary text: Would you like your partner to send you a message before your date saying exactly what they hope you will wear? +Partner text: Would you like to send your partner a message before your date saying exactly what you hope they will wear? +Intended outcome: The receiver gets a style preference message before a date. + +#### A22 +Theme: Clothes and confidence +Intensity: 3 +Primary text: Would you enjoy your partner choosing an accessory for you to wear as a private signal between you? +Partner text: Would you enjoy choosing an accessory for your partner to wear as a private signal between you? +Intended outcome: The couple establishes a subtle shared signal using an accessory. + +#### A23 +Theme: Clothes and confidence +Intensity: 4 +Primary text: Would you be up for your partner asking you to get ready slowly while they give you one sincere compliment at each step? +Partner text: Would you be up for asking your partner to get ready slowly while you give them one sincere compliment at each step? +Intended outcome: The proposer gives the receiver a paced confidence ritual before a night together. + +#### A24 +Theme: Clothes and confidence +Intensity: 3 +Primary text: Would you like your partner to choose a 'stay in' outfit for you that feels intentionally different from everyday clothes? +Partner text: Would you like to choose a 'stay in' outfit for your partner that feels intentionally different from everyday clothes? +Intended outcome: The proposer selects a special at-home look for the receiver. + +### Remaining authored asymmetric entries + +The following numbered entries retain the authored Concept Set B material for +fantasy exchange, roleplay, settings and atmosphere, surprise and novelty, and +long-distance desire. Their primary text, partner text, and intended outcome +are deliberately retained verbatim in the task transcript for integration. + +#### A25 +Theme: Fantasy exchange +Intensity: 2 +Primary text: Would you like your partner to tell you about a fictional date they would plan for the two of you with no practical limits? +Partner text: Would you like to tell your partner about a fictional date you would plan for the two of you with no practical limits? +Intended outcome: The proposer shares an imaginative, romance-forward date scenario. + +#### A26 +Theme: Fantasy exchange +Intensity: 3 +Primary text: Would you enjoy your partner writing a three-line scene about the two of you meeting as strangers in a glamorous place? +Partner text: Would you enjoy writing a three-line scene about you and your partner meeting as strangers in a glamorous place? +Intended outcome: The couple gets a short shared fantasy prompt to discuss or play with. + +#### A27 +Theme: Fantasy exchange +Intensity: 3 +Primary text: Would you be open to your partner asking what kind of attention makes you feel most wanted in an imagined scenario? +Partner text: Would you be open to asking your partner what kind of attention makes them feel most wanted in an imagined scenario? +Intended outcome: The receiver names a preferred kind of romantic attention without needing to commit to it. + +#### A28 +Theme: Fantasy exchange +Intensity: 4 +Primary text: Would you like your partner to propose a fictional version of tonight where they get to surprise you, and you choose the boundaries first? +Partner text: Would you like to propose a fictional version of tonight where you get to surprise your partner, and they choose the boundaries first? +Intended outcome: One partner proposes an agreed fantasy frame, with the receiver setting limits. + +#### A29 +Theme: Fantasy exchange +Intensity: 2 +Primary text: Would you like your partner to invent a nickname for the more confident version of you? +Partner text: Would you like to invent a nickname for the more confident version of your partner? +Intended outcome: The couple creates a playful private identity cue. + +#### A30 +Theme: Fantasy exchange +Intensity: 3 +Primary text: Would you enjoy your partner describing the setting of their ideal slow-burn evening with you? +Partner text: Would you enjoy describing the setting of your ideal slow-burn evening with your partner? +Intended outcome: The proposer shares a detailed atmosphere preference that can inform a future plan. + +#### A31 +Theme: Fantasy exchange +Intensity: 4 +Primary text: Would you be open to your partner asking you what you would want them to take charge of in an imaginary evening? +Partner text: Would you be open to asking your partner what they would want you to take charge of in an imaginary evening? +Intended outcome: The receiver identifies one area of leadership they would welcome in fantasy. + +#### A32 +Theme: Fantasy exchange +Intensity: 3 +Primary text: Would you like your partner to send you a private message that starts, 'If we had the whole evening to ourselves...' ? +Partner text: Would you like to send your partner a private message that starts, 'If we had the whole evening to ourselves...' ? +Intended outcome: The proposer sends an open-ended desire prompt for a private exchange. + +#### A33 +Theme: Roleplay +Intensity: 2 +Primary text: Would you like your partner to pretend they are meeting you for the first time and ask you out again? +Partner text: Would you like to pretend you are meeting your partner for the first time and ask them out again? +Intended outcome: The proposer recreates a first-meeting invitation in character. + +#### A34 +Theme: Roleplay +Intensity: 3 +Primary text: Would you enjoy your partner taking the role of your personal host for an evening at home? +Partner text: Would you enjoy taking the role of your partner's personal host for an evening at home? +Intended outcome: One partner plans and hosts a dedicated private evening. + +#### A35 +Theme: Roleplay +Intensity: 3 +Primary text: Would you be up for your partner acting as a confident stranger who has one hour to win you over? +Partner text: Would you be up for acting as a confident stranger who has one hour to win your partner over? +Intended outcome: The proposer takes on a flirtatious stranger character during an agreed private scenario. + +#### A36 +Theme: Roleplay +Intensity: 4 +Primary text: Would you like your partner to choose a role where they lead the conversation and you decide when to step out of character? +Partner text: Would you like to choose a role where you lead the conversation and your partner decides when to step out of character? +Intended outcome: The proposer leads a consensual roleplay conversation with a clear exit controlled by the receiver. + +#### A37 +Theme: Roleplay +Intensity: 2 +Primary text: Would you enjoy your partner writing you a pretend invitation to an exclusive event for two? +Partner text: Would you enjoy writing your partner a pretend invitation to an exclusive event for two? +Intended outcome: The proposer creates a playful invitation that introduces a private date concept. + +#### A38 +Theme: Roleplay +Intensity: 3 +Primary text: Would you like your partner to play the part of a stylist who gives you one confidence challenge for the evening? +Partner text: Would you like to play the part of a stylist who gives your partner one confidence challenge for the evening? +Intended outcome: One partner sets a light, agreed confidence challenge in character. + +#### A39 +Theme: Roleplay +Intensity: 4 +Primary text: Would you be open to your partner choosing a character who is bolder than they usually are, while you set the limits of the scene? +Partner text: Would you be open to choosing a character who is bolder than you usually are, while your partner sets the limits of the scene? +Intended outcome: The proposer explores a bolder role while the receiver sets the scene's boundaries. + +#### A40 +Theme: Settings and atmosphere +Intensity: 2 +Primary text: Would you like your partner to turn one room into a date-night space before you arrive? +Partner text: Would you like to turn one room into a date-night space before your partner arrives? +Intended outcome: The proposer prepares a distinct at-home setting for the receiver. + +#### A41 +Theme: Settings and atmosphere +Intensity: 3 +Primary text: Would you enjoy your partner choosing a place in your home where you are not usually romantic and making it feel special? +Partner text: Would you enjoy choosing a place in your home where you and your partner are not usually romantic and making it feel special? +Intended outcome: One partner transforms an ordinary indoor space into a deliberate romantic setting. + +#### A42 +Theme: Settings and atmosphere +Intensity: 3 +Primary text: Would you like your partner to plan a candlelit late-night snack for the two of you after everything else is quiet? +Partner text: Would you like to plan a candlelit late-night snack for you and your partner after everything else is quiet? +Intended outcome: The proposer creates a calm, intimate-feeling post-evening ritual. + +#### A43 +Theme: Settings and atmosphere +Intensity: 4 +Primary text: Would you be open to your partner arranging a private evening where your phones stay out of reach until you both agree to check them? +Partner text: Would you be open to arranging a private evening where your phones stay out of reach until you both agree to check them? +Intended outcome: The couple agrees to protected, distraction-free private time. + +#### A44 +Theme: Settings and atmosphere +Intensity: 2 +Primary text: Would you like your partner to choose the route for a slow evening walk that ends somewhere cosy? +Partner text: Would you like to choose the route for a slow evening walk that ends somewhere cosy with your partner? +Intended outcome: The proposer directs a low-pressure shared walk toward a close setting. + +#### A45 +Theme: Settings and atmosphere +Intensity: 3 +Primary text: Would you enjoy your partner planning a 'no agenda' hour where they only focus on making you feel looked after? +Partner text: Would you enjoy planning a 'no agenda' hour where you only focus on making your partner feel looked after? +Intended outcome: One partner takes responsibility for a gentle, attentiveness-focused hour. + +#### A46 +Theme: Settings and atmosphere +Intensity: 4 +Primary text: Would you like your partner to choose a private setting for a conversation about what would make tonight feel exciting to you? +Partner text: Would you like to choose a private setting for a conversation about what would make tonight feel exciting to your partner? +Intended outcome: The proposer creates the conditions for a direct desire and boundaries conversation. + +#### A47 +Theme: Surprise and novelty +Intensity: 2 +Primary text: Would you like your partner to leave you a sealed note with one romantic surprise inside? +Partner text: Would you like to leave your partner a sealed note with one romantic surprise inside? +Intended outcome: The proposer creates a small, consent-safe romantic surprise for the receiver. + +#### A48 +Theme: Surprise and novelty +Intensity: 3 +Primary text: Would you enjoy your partner planning one part of your evening that they do not reveal until you have both agreed to begin? +Partner text: Would you enjoy planning one part of your evening that you do not reveal until you and your partner have both agreed to begin? +Intended outcome: One partner prepares a mutually agreed surprise element. + +#### A49 +Theme: Surprise and novelty +Intensity: 3 +Primary text: Would you like your partner to give you a choice between two different kinds of close evening, without telling you which they hope you pick? +Partner text: Would you like to give your partner a choice between two different kinds of close evening, without telling them which you hope they pick? +Intended outcome: The couple uses a playful choice to reveal preferences and select a plan. + +#### A50 +Theme: Surprise and novelty +Intensity: 4 +Primary text: Would you be open to your partner asking you to say yes to one surprise date-night detail, after they tell you the category but not the detail? +Partner text: Would you be open to asking your partner to say yes to one surprise date-night detail, after you tell them the category but not the detail? +Intended outcome: The receiver consents to a bounded surprise with enough information to choose safely. + +#### A51 +Theme: Surprise and novelty +Intensity: 2 +Primary text: Would you like your partner to hide a clue somewhere at home that leads to a compliment from them? +Partner text: Would you like to hide a clue somewhere at home that leads your partner to a compliment from you? +Intended outcome: The proposer creates a mini treasure hunt ending in affirmation. + +#### A52 +Theme: Surprise and novelty +Intensity: 3 +Primary text: Would you enjoy your partner choosing a new shared ritual for the first ten minutes of date night? +Partner text: Would you enjoy choosing a new shared ritual for the first ten minutes of date night with your partner? +Intended outcome: The proposer introduces a repeatable opening ritual for intentional time together. + +#### A53 +Theme: Surprise and novelty +Intensity: 4 +Primary text: Would you like your partner to surprise you with a confidence challenge that you can change or stop at any point? +Partner text: Would you like to surprise your partner with a confidence challenge that they can change or stop at any point? +Intended outcome: The proposer offers a novel confidence prompt with explicit receiver control. + +#### A54 +Theme: Long-distance desire +Intensity: 2 +Primary text: Would you like your partner to send you a voice note describing the first thing they want to do when you next have time alone together? +Partner text: Would you like to send your partner a voice note describing the first thing you want to do when you next have time alone together? +Intended outcome: The proposer shares an anticipation-building voice message for the next reunion. + +#### A55 +Theme: Long-distance desire +Intensity: 3 +Primary text: Would you enjoy your partner planning a video-date mood for you to join from wherever you are? +Partner text: Would you enjoy planning a video-date mood for your partner to join from wherever they are? +Intended outcome: One partner sets a shared remote date atmosphere. + +#### A56 +Theme: Long-distance desire +Intensity: 3 +Primary text: Would you like your partner to send you a message telling you what they miss most about being close to you? +Partner text: Would you like to send your partner a message telling them what you miss most about being close to them? +Intended outcome: The receiver gets a specific intimacy-adjacent expression of longing. + +#### A57 +Theme: Long-distance desire +Intensity: 4 +Primary text: Would you be open to your partner arranging a private call where you both say one thing you hope to explore together when you reunite? +Partner text: Would you be open to arranging a private call where you both say one thing you hope to explore together when you reunite? +Intended outcome: The couple holds a mutual, forward-looking conversation about agreed future intimacy. + +#### A58 +Theme: Long-distance desire +Intensity: 2 +Primary text: Would you like your partner to send you a photo of something that reminds them of your chemistry? +Partner text: Would you like to send your partner a photo of something that reminds you of your chemistry? +Intended outcome: The proposer shares a safe visual cue connected to their relationship. + +#### A59 +Theme: Long-distance desire +Intensity: 3 +Primary text: Would you enjoy your partner choosing a song for you to listen to at the same time from different places? +Partner text: Would you enjoy choosing a song for you and your partner to listen to at the same time from different places? +Intended outcome: The pair creates a synchronized remote closeness ritual. + +#### A60 +Theme: Long-distance desire +Intensity: 4 +Primary text: Would you like your partner to ask you for one honest promise about how you will make time for each other when distance ends? +Partner text: Would you like to ask your partner for one honest promise about how you will make time for each other when distance ends? +Intended outcome: The couple makes a concrete reunion-intent commitment. + +## Symmetric concepts + +Each symmetric entry uses the same text as its partner text. + +| ID | Theme | Intensity | Primary text | Partner text | Intended outcome | +| --- | --- | ---: | --- | --- | --- | +| S01 | Sensory cues | 2 | Would you both be up for choosing a shared scent for your next intentional evening? | Same as primary text. | The couple selects one scent cue for an upcoming date night. | +| S02 | Sensory cues | 3 | Would you both enjoy a quiet, eyes-closed music moment together before your next date? | Same as primary text. | The pair agrees to begin a date with focused shared listening. | +| S03 | Sensory cues | 3 | Would you both like to make a list of five sounds that help you feel relaxed and close? | Same as primary text. | The couple creates a personal sound-based mood guide. | +| S04 | Sensory cues | 4 | Would you both be open to spending ten minutes in silence, staying close and checking in afterward about how it felt? | Same as primary text. | The couple tries a deliberate quiet closeness exercise followed by a check-in. | +| S05 | Private performance | 2 | Would you both be up for taking turns giving each other a dramatic, affectionate introduction? | Same as primary text. | Each partner performs a playful confidence-building introduction. | +| S06 | Private performance | 3 | Would you both enjoy choosing one song each for a private dance together? | Same as primary text. | The pair shares two intentionally selected dances. | +| S07 | Private performance | 3 | Would you both like to read each other a short note about what makes a date feel exciting? | Same as primary text. | Each partner names what builds anticipation for them. | +| S08 | Private performance | 4 | Would you both be open to taking turns leading a five-minute close moment, with either person able to pause it? | Same as primary text. | The partners alternate leadership with clear stop control. | +| S09 | Clothes and confidence | 2 | Would you both enjoy choosing one small style detail for each other's next date-night look? | Same as primary text. | Each partner receives a playful style suggestion. | +| S10 | Clothes and confidence | 3 | Would you both like to wear something that makes you feel more confident than usual for an evening at home? | Same as primary text. | Both partners intentionally dress for confidence at home. | +| S11 | Clothes and confidence | 3 | Would you both be up for sharing one compliment about how the other partner looks when they feel most like themselves? | Same as primary text. | Each partner receives an appearance-based affirmation. | +| S12 | Clothes and confidence | 4 | Would you both be open to agreeing a private dress code for a date night that feels new to you? | Same as primary text. | The couple jointly chooses a novel, mutually comfortable date-night presentation. | +| S13 | Fantasy exchange | 2 | Would you both enjoy inventing an imaginary getaway designed entirely around feeling close? | Same as primary text. | The couple co-creates a romantic fantasy setting. | +| S14 | Fantasy exchange | 3 | Would you both like to finish the sentence, 'A version of us with no interruptions would...' ? | Same as primary text. | Each partner shares an open-ended private-time wish. | +| S15 | Fantasy exchange | 3 | Would you both be up for naming one fictional setting that makes romance feel more exciting to you? | Same as primary text. | The pair discovers compatible atmosphere preferences. | +| S16 | Fantasy exchange | 4 | Would you both be open to making a shared 'maybe someday' list of private experiences you could discuss before trying? | Same as primary text. | The couple creates a consent-first discussion list without committing to any item. | +| S17 | Roleplay | 2 | Would you both enjoy pretending you are on a first date and asking each other three new questions? | Same as primary text. | The couple refreshes their connection through a first-date scenario. | +| S18 | Roleplay | 3 | Would you both like to choose characters for a one-hour at-home date with a clear time to step out of character? | Same as primary text. | The pair co-designs a bounded, playful roleplay date. | +| S19 | Roleplay | 3 | Would you both be up for writing each other an invitation from a fictional admirer? | Same as primary text. | Each partner receives a flirtatious, invented invitation. | +| S20 | Roleplay | 4 | Would you both be open to trying a roleplay where one person leads the scene and you switch roles halfway through? | Same as primary text. | Both partners experience leading and following within an agreed fictional scene. | +| S21 | Settings and atmosphere | 2 | Would you both enjoy turning off the usual lights and creating a new at-home date setting together? | Same as primary text. | The pair jointly changes the mood of a familiar room. | +| S22 | Settings and atmosphere | 3 | Would you both like to plan an evening with one room, one playlist, and no other plans? | Same as primary text. | The couple reserves an intentionally simple, focused evening. | +| S23 | Settings and atmosphere | 3 | Would you both be up for creating a shared 'do not disturb' signal for private time at home? | Same as primary text. | The couple agrees on a respectful cue that protects their uninterrupted time. | +| S24 | Settings and atmosphere | 4 | Would you both be open to a private evening where you begin by agreeing what would make each of you feel cared for? | Same as primary text. | The couple starts a close evening with mutual needs and limits stated aloud. | +| S25 | Surprise and novelty | 2 | Would you both enjoy swapping one sealed note with a date-night idea inside? | Same as primary text. | Each partner contributes one surprise idea for future time together. | +| S26 | Surprise and novelty | 3 | Would you both like to choose a new ritual for saying goodbye at the end of a date? | Same as primary text. | The pair establishes a novel end-of-date connection ritual. | +| S27 | Surprise and novelty | 4 | Would you both be open to choosing one surprise element for a future evening, with a clear option to change your mind? | Same as primary text. | The couple chooses a bounded surprise while preserving ongoing consent. | +| S28 | Long-distance desire | 2 | Would you both enjoy sending each other one voice note that makes the next reunion feel closer? | Same as primary text. | Both partners exchange anticipation-building audio messages. | +| S29 | Long-distance desire | 3 | Would you both like to plan the first hour of your next reunion from different places? | Same as primary text. | The couple co-plans a specific reconnecting ritual for their reunion. | +| S30 | Long-distance desire | 4 | Would you both be open to a private call where you share one hope and one boundary for your next time alone together? | Same as primary text. | The couple aligns on future closeness through reciprocal desire and boundary sharing. | + +## Count check + +- Asymmetric entries: A01 through A60, 60 total. +- Symmetric entries: S01 through S30, 30 total. diff --git a/docs/product/question-drafts/play-safe-spicy-v1.json b/docs/product/question-drafts/play-safe-spicy-v1.json new file mode 100644 index 0000000..db00a13 --- /dev/null +++ b/docs/product/question-drafts/play-safe-spicy-v1.json @@ -0,0 +1,9213 @@ +{ + "version": 1, + "title": "Play-safe spicy question draft v1", + "status": "source-only, unpublished, not approved", + "packs": [ + { + "slug": "flirty-communication", + "name": "Flirty Communication" + }, + { + "slug": "anticipation", + "name": "Anticipation" + }, + { + "slug": "taking-the-lead", + "name": "Taking The Lead" + }, + { + "slug": "following", + "name": "Following" + }, + { + "slug": "shared-control", + "name": "Shared Control" + }, + { + "slug": "sensory-cues", + "name": "Sensory Cues" + }, + { + "slug": "private-performance", + "name": "Private Performance" + }, + { + "slug": "clothes-confidence", + "name": "Clothes Confidence" + }, + { + "slug": "fantasy-exchange", + "name": "Fantasy Exchange" + }, + { + "slug": "roleplay", + "name": "Roleplay" + }, + { + "slug": "settings-atmosphere", + "name": "Settings Atmosphere" + }, + { + "slug": "boundaries-check-ins", + "name": "Boundaries Check Ins" + }, + { + "slug": "surprise-novelty", + "name": "Surprise Novelty" + }, + { + "slug": "long-distance-desire", + "name": "Long Distance Desire" + }, + { + "slug": "giving-receiving-attention", + "name": "Giving Receiving Attention" + }, + { + "slug": "aftercare-reconnection", + "name": "Aftercare Reconnection" + } + ], + "questions": [ + { + "id": "e0f6a733-b9f1-468e-8a23-db55a2107df5", + "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": 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 has invited the other to create a specific kind of private attention." + }, + { + "id": "d7c5debf-cf56-4480-86c2-0f1a06f82e68", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "e0f6a733-b9f1-468e-8a23-db55a2107df5", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner has invited the other to create a specific kind of private attention." + }, + { + "id": "04f33ea3-212f-4aa1-82ea-1e35dc3e1b3b", + "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": 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 give a targeted confidence-building compliment and the other wants to receive it." + }, + { + "id": "3a445ab7-5f9c-492b-854e-4bb331c677d5", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "04f33ea3-212f-4aa1-82ea-1e35dc3e1b3b", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to give a targeted confidence-building compliment and the other wants to receive it." + }, + { + "id": "2b9db682-26d6-4a01-8d73-b59a39615130", + "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": 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 is ready to share a personal desire for connection and the other is open to receiving it." + }, + { + "id": "01f45796-0cf3-46b1-85e2-fd057103be2e", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "2b9db682-26d6-4a01-8d73-b59a39615130", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner is ready to share a personal desire for connection and the other is open to receiving it." + }, + { + "id": "02f09589-95f7-4a36-856d-78f89bfcfdd7", + "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": 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 playful instruction and the other wants to set it." + }, + { + "id": "12f60857-7d09-4e52-84cc-10642e79720b", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "02f09589-95f7-4a36-856d-78f89bfcfdd7", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to follow a playful instruction and the other wants to set it." + }, + { + "id": "6644149f-008d-4864-8799-1939043cd43b", + "pack_slug": "flirty-communication", + "text": "Describe a private scenario you would like your partner to set up for you.", + "partner_text": "Set up a private scenario your partner describes wanting.", + "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 describe a desired experience and the other wants to bring it to life." + }, + { + "id": "938a9836-554c-46e0-8703-6649c9563273", + "pack_slug": "flirty-communication", + "text": "Set up a private scenario your partner describes wanting.", + "partner_text": "Describe a private scenario you would like your partner to set up for you.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "6644149f-008d-4864-8799-1939043cd43b", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to describe a desired experience and the other wants to bring it to life." + }, + { + "id": "109edd9f-0e3f-4cc6-89b2-7b2b0dccc4f1", + "pack_slug": "flirty-communication", + "text": "Ask your partner to tell you what they find hardest to resist about you.", + "partner_text": "Tell your partner what you find hardest to resist about them.", + "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 a direct expression of desire and the other wants to give it." + }, + { + "id": "2ee0b818-5b40-4a9b-8f2d-73cf799b040e", + "pack_slug": "flirty-communication", + "text": "Tell your partner what you find hardest to resist about them.", + "partner_text": "Ask your partner to tell you what they find hardest to resist about you.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "109edd9f-0e3f-4cc6-89b2-7b2b0dccc4f1", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants a direct expression of desire and the other wants to give it." + }, + { + "id": "c0b329d3-1707-4549-8e8b-8741341a15dc", + "pack_slug": "flirty-communication", + "text": "Invite your partner to send you a voice note that builds anticipation.", + "partner_text": "Send your partner a voice note that builds anticipation.", + "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 be teased by voice and the other wants to create that anticipation." + }, + { + "id": "c34b8219-16d5-4741-8d43-36faa1dafe17", + "pack_slug": "flirty-communication", + "text": "Send your partner a voice note that builds anticipation.", + "partner_text": "Invite your partner to send you a voice note that builds anticipation.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "c0b329d3-1707-4549-8e8b-8741341a15dc", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to be teased by voice and the other wants to create that anticipation." + }, + { + "id": "191de6c6-c82c-4bea-8491-8039a9711796", + "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": 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 is open to receiving a direct private wish and the other is ready to name one." + }, + { + "id": "f857814a-d5cf-4300-825d-bec3dffec0c2", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "191de6c6-c82c-4bea-8491-8039a9711796", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner is open to receiving a direct private wish and the other is ready to name one." + }, + { + "id": "bafc484e-001b-4ebf-85f7-a666f43bf02c", + "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": 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 recognise a private invitation and the other wants to create one." + }, + { + "id": "7f338bac-dc52-4fdc-8ea9-8b2f87849b3b", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "bafc484e-001b-4ebf-85f7-a666f43bf02c", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to recognise a private invitation and the other wants to create one." + }, + { + "id": "d9ade91e-9991-4327-8b15-5cb5be05784b", + "pack_slug": "anticipation", + "text": "Ask your partner to plan the first few minutes of a private date.", + "partner_text": "Plan the first few minutes of a private date for your partner.", + "intensity": 2, + "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 arrive without knowing the opening and the other wants to create it." + }, + { + "id": "da47fbde-7d4d-4a8c-8c69-2976c40a7e01", + "pack_slug": "anticipation", + "text": "Plan the first few minutes of a private date for your partner.", + "partner_text": "Ask your partner to plan the first few minutes of a private date.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "d9ade91e-9991-4327-8b15-5cb5be05784b", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to arrive without knowing the opening and the other wants to create it." + }, + { + "id": "225a2271-9c69-4e2e-8597-54d0cb67fd9b", + "pack_slug": "anticipation", + "text": "Let your partner decide when you are allowed to open a private surprise.", + "partner_text": "Decide when your partner is allowed to open a private surprise.", + "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 delayed anticipation and the other wants to control the reveal." + }, + { + "id": "ca9b07b9-64ce-4e7c-8730-68057686f296", + "pack_slug": "anticipation", + "text": "Decide when your partner is allowed to open a private surprise.", + "partner_text": "Let your partner decide when you are allowed to open a private surprise.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "225a2271-9c69-4e2e-8597-54d0cb67fd9b", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants delayed anticipation and the other wants to control the reveal." + }, + { + "id": "03ed6043-3ea5-4f7d-81fa-bc5cdcb0d000", + "pack_slug": "anticipation", + "text": "Wait for your partner to give you the cue to begin a private plan.", + "partner_text": "Give your partner the cue to begin a private plan.", + "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 wait for permission and the other wants to choose the moment." + }, + { + "id": "a13011ea-04ca-4195-8b9f-981c75435e28", + "pack_slug": "anticipation", + "text": "Give your partner the cue to begin a private plan.", + "partner_text": "Wait for your partner to give you the cue to begin a private plan.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "03ed6043-3ea5-4f7d-81fa-bc5cdcb0d000", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to wait for permission and the other wants to choose the moment." + }, + { + "id": "2a9f5553-9015-4079-8cc1-0aed85d83c3f", + "pack_slug": "anticipation", + "text": "Ask your partner to create a private clue trail leading to what they want.", + "partner_text": "Create a private clue trail leading to what you want from your partner.", + "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 an intimate trail of hints and the other wants to design it." + }, + { + "id": "92f072f7-23d6-4049-8f99-bdc658b0ba03", + "pack_slug": "anticipation", + "text": "Create a private clue trail leading to what you want from your partner.", + "partner_text": "Ask your partner to create a private clue trail leading to what they want.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "2a9f5553-9015-4079-8cc1-0aed85d83c3f", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to follow an intimate trail of hints and the other wants to design it." + }, + { + "id": "c3b42c25-57aa-4e63-8cc7-6dad4c920689", + "pack_slug": "anticipation", + "text": "Let your partner choose one thing to postpone to make the build-up longer.", + "partner_text": "Choose one thing to postpone to make the build-up longer for your partner.", + "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 a slower build-up and the other wants to decide what is held back." + }, + { + "id": "fa49deac-1931-4e37-8a4b-7105497bbf4b", + "pack_slug": "anticipation", + "text": "Choose one thing to postpone to make the build-up longer for your partner.", + "partner_text": "Let your partner choose one thing to postpone to make the build-up longer.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "c3b42c25-57aa-4e63-8cc7-6dad4c920689", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants a slower build-up and the other wants to decide what is held back." + }, + { + "id": "e8588b1e-f3c5-4ac6-8b21-0d8da3c023c2", + "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": 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 a contained surprise and the other wants to lead it safely." + }, + { + "id": "19072a26-f4bc-4ee7-8d93-320647023777", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "e8588b1e-f3c5-4ac6-8b21-0d8da3c023c2", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants a contained surprise and the other wants to lead it safely." + }, + { + "id": "895af0c1-4cbb-40a2-878a-052fb1dceab4", + "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": 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 uncertainty within an agreed experience and the other wants to choreograph it." + }, + { + "id": "af31da62-8690-4182-8f82-683b083b097a", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "895af0c1-4cbb-40a2-878a-052fb1dceab4", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants uncertainty within an agreed experience and the other wants to choreograph it." + }, + { + "id": "4f5f81b7-2e91-44ca-83f8-c88cb1ca1d18", + "pack_slug": "taking-the-lead", + "text": "Choose what your partner wears for a private date.", + "partner_text": "Let your partner choose what you wear for a private date.", + "intensity": 2, + "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 style the moment and the other wants to be chosen for." + }, + { + "id": "97e68eda-7c65-44bc-8038-ae443d039117", + "pack_slug": "taking-the-lead", + "text": "Let your partner choose what you wear for a private date.", + "partner_text": "Choose what your partner wears for a private date.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "4f5f81b7-2e91-44ca-83f8-c88cb1ca1d18", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to style the moment and the other wants to be chosen for." + }, + { + "id": "69ee9e79-8831-424e-8031-4083bd365b42", + "pack_slug": "taking-the-lead", + "text": "Choose the music that sets the mood for your private time together.", + "partner_text": "Let your partner choose the music that sets the mood for your private time together.", + "intensity": 2, + "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 set the atmosphere and the other wants to enter it." + }, + { + "id": "612d79e9-968c-4a2f-8a33-e95fafbceb52", + "pack_slug": "taking-the-lead", + "text": "Let your partner choose the music that sets the mood for your private time together.", + "partner_text": "Choose the music that sets the mood for your private time together.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "69ee9e79-8831-424e-8031-4083bd365b42", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to set the atmosphere and the other wants to enter it." + }, + { + "id": "03f75155-ae23-48ae-89e0-6ea310c9815d", + "pack_slug": "taking-the-lead", + "text": "Give your partner three private options and choose which one they follow.", + "partner_text": "Let your partner give you three private options and choose which one you follow.", + "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 offer controlled choices and the other wants to accept a selected direction." + }, + { + "id": "1e8ee233-dc62-4577-8cfd-c09e05679956", + "pack_slug": "taking-the-lead", + "text": "Let your partner give you three private options and choose which one you follow.", + "partner_text": "Give your partner three private options and choose which one they follow.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "03f75155-ae23-48ae-89e0-6ea310c9815d", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to offer controlled choices and the other wants to accept a selected direction." + }, + { + "id": "925740bb-d9ac-4ef7-8bc8-7e672d5ad027", + "pack_slug": "taking-the-lead", + "text": "Plan a private experience where your partner follows your pace.", + "partner_text": "Follow your partner’s pace during a private experience they plan.", + "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 guide the rhythm and the other wants to be guided." + }, + { + "id": "792486d2-f455-4438-8501-0d039fc59bd0", + "pack_slug": "taking-the-lead", + "text": "Follow your partner’s pace during a private experience they plan.", + "partner_text": "Plan a private experience where your partner follows your pace.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "925740bb-d9ac-4ef7-8bc8-7e672d5ad027", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to guide the rhythm and the other wants to be guided." + }, + { + "id": "666e1b92-f288-419c-82b7-6cd85fd8c330", + "pack_slug": "taking-the-lead", + "text": "Choose the first form of affection you give your partner in private.", + "partner_text": "Let your partner choose the first form of affection they give you in private.", + "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 initiate deliberately and the other wants to receive an intentional opening." + }, + { + "id": "e4f7c07d-fab7-40ed-8ab5-86a66853e141", + "pack_slug": "taking-the-lead", + "text": "Let your partner choose the first form of affection they give you in private.", + "partner_text": "Choose the first form of affection you give your partner in private.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "666e1b92-f288-419c-82b7-6cd85fd8c330", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to initiate deliberately and the other wants to receive an intentional opening." + }, + { + "id": "4036d1e6-3135-4d6c-8130-04289df1ddc9", + "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": 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 direct a role-based encounter and the other wants to inhabit the chosen role." + }, + { + "id": "908c653d-bff8-4bf0-86ff-fb44dd6ee20c", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "4036d1e6-3135-4d6c-8130-04289df1ddc9", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to direct a role-based encounter and the other wants to inhabit the chosen role." + }, + { + "id": "de9a2323-f421-4fce-8859-7bb4ab428a4c", + "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": 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 set a consensual frame and the other wants to play within it." + }, + { + "id": "fda91b13-af5d-46c6-896c-25ffef947ff0", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "de9a2323-f421-4fce-8859-7bb4ab428a4c", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to set a consensual frame and the other wants to play within it." + }, + { + "id": "9eda7c6c-53bc-4481-8b13-48f8e487d040", + "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": 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 control pacing and the other wants to receive a clear cue." + }, + { + "id": "6cf05ac7-eda8-471a-87c4-b1edb956d1b5", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "9eda7c6c-53bc-4481-8b13-48f8e487d040", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to control pacing and the other wants to receive a clear cue." + }, + { + "id": "9dd0c438-f0c3-4b25-88a2-74433d72b6ca", + "pack_slug": "following", + "text": "Let your partner choose the private setting where you spend time together.", + "partner_text": "Choose the private setting where you spend time with your partner.", + "intensity": 2, + "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 be led into a setting and the other wants to choose it." + }, + { + "id": "d5f360a1-1012-44e4-89e2-a5fdaef80019", + "pack_slug": "following", + "text": "Choose the private setting where you spend time with your partner.", + "partner_text": "Let your partner choose the private setting where you spend time together.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "9dd0c438-f0c3-4b25-88a2-74433d72b6ca", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to be led into a setting and the other wants to choose it." + }, + { + "id": "36022040-74bd-4249-82a7-cbcf0fb6a3e4", + "pack_slug": "following", + "text": "Follow a private date plan your partner creates without seeing it first.", + "partner_text": "Create a private date plan for your partner without showing it first.", + "intensity": 2, + "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 a planned surprise and the other wants to arrange it." + }, + { + "id": "69100a0f-10ff-410b-8425-7c0ab313ab3c", + "pack_slug": "following", + "text": "Create a private date plan for your partner without showing it first.", + "partner_text": "Follow a private date plan your partner creates without seeing it first.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "36022040-74bd-4249-82a7-cbcf0fb6a3e4", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants a planned surprise and the other wants to arrange it." + }, + { + "id": "d83b9cbc-7819-4bbb-8005-15be9c1af3d2", + "pack_slug": "following", + "text": "Let your partner decide how slowly you take a private moment together.", + "partner_text": "Decide how slowly you take a private moment together with your partner.", + "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 surrender the pace and the other wants to set it." + }, + { + "id": "d8c77738-28c9-4b21-82ba-9d630b9cb69a", + "pack_slug": "following", + "text": "Decide how slowly you take a private moment together with your partner.", + "partner_text": "Let your partner decide how slowly you take a private moment together.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "d83b9cbc-7819-4bbb-8005-15be9c1af3d2", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to surrender the pace and the other wants to set it." + }, + { + "id": "9c3869dd-692e-41a6-83ba-55f3b7b0f944", + "pack_slug": "following", + "text": "Follow one private instruction from your partner without negotiating the details first.", + "partner_text": "Give your partner one private instruction without negotiating the details first.", + "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 simple direction and the other wants to give one." + }, + { + "id": "25d87c85-45a5-4979-84b6-325bc635ef12", + "pack_slug": "following", + "text": "Give your partner one private instruction without negotiating the details first.", + "partner_text": "Follow one private instruction from your partner without negotiating the details first.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "9c3869dd-692e-41a6-83ba-55f3b7b0f944", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to follow a simple direction and the other wants to give one." + }, + { + "id": "3900c5a0-d506-4826-8fd4-482ab0225215", + "pack_slug": "following", + "text": "Let your partner choose the kind of attention you receive first.", + "partner_text": "Choose the kind of attention your partner receives first.", + "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 receive a chosen form of attention and the other wants to give it." + }, + { + "id": "8a0f101d-439d-4507-89ab-320dd6c61951", + "pack_slug": "following", + "text": "Choose the kind of attention your partner receives first.", + "partner_text": "Let your partner choose the kind of attention you receive first.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "3900c5a0-d506-4826-8fd4-482ab0225215", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to receive a chosen form of attention and the other wants to give it." + }, + { + "id": "1ca6b528-885b-4a10-8070-0975e37ef685", + "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": 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 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": 3, + "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": "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." + }, + { + "id": "9e9dac4e-a718-4573-8ab2-cca7a1c5a4ea", + "pack_slug": "shared-control", + "text": "Take turns choosing how you show affection during a private evening.", + "partner_text": null, + "intensity": 2, + "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 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": 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 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": 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 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": 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 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": null, + "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": "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": null, + "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": "Both partners want shared control and permission to redirect the experience." + }, + { + "id": "ee1b0ff7-97d3-4162-837d-b26199fee564", + "pack_slug": "boundaries-check-ins", + "text": "Ask your partner to name the kind of reassurance they want before trying something new.", + "partner_text": "Tell your partner the kind of reassurance you want before trying something new.", + "intensity": 2, + "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 offer reassurance and the other wants to name what helps." + }, + { + "id": "a88241d4-3dd0-4e5e-827c-722211067100", + "pack_slug": "boundaries-check-ins", + "text": "Tell your partner the kind of reassurance you want before trying something new.", + "partner_text": "Ask your partner to name the kind of reassurance they want before trying something new.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "ee1b0ff7-97d3-4162-837d-b26199fee564", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to offer reassurance and the other wants to name what helps." + }, + { + "id": "307e35e0-1308-4333-8fcf-ba0f75d3c3bf", + "pack_slug": "boundaries-check-ins", + "text": "Choose a private check-in phrase your partner can use with you.", + "partner_text": "Use a private check-in phrase your partner chooses for you.", + "intensity": 2, + "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 establish a check-in and the other wants to use it." + }, + { + "id": "7a8d78f4-6062-4065-8c99-f49dc2995da5", + "pack_slug": "boundaries-check-ins", + "text": "Use a private check-in phrase your partner chooses for you.", + "partner_text": "Choose a private check-in phrase your partner can use with you.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "307e35e0-1308-4333-8fcf-ba0f75d3c3bf", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to establish a check-in and the other wants to use it." + }, + { + "id": "ccbb0743-35cb-4bf6-8e40-a77826af6f47", + "pack_slug": "boundaries-check-ins", + "text": "Tell your partner one boundary that helps you relax during private exploration.", + "partner_text": "Hear one boundary from your partner that helps them relax during private exploration.", + "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 state a boundary and the other is open to receiving it." + }, + { + "id": "d51dce04-b947-49fd-8017-0990684b4c8b", + "pack_slug": "boundaries-check-ins", + "text": "Hear one boundary from your partner that helps them relax during private exploration.", + "partner_text": "Tell your partner one boundary that helps you relax during private exploration.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "ccbb0743-35cb-4bf6-8e40-a77826af6f47", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to state a boundary and the other is open to receiving it." + }, + { + "id": "ae0055c8-cffd-42eb-8d45-40df79522391", + "pack_slug": "boundaries-check-ins", + "text": "Ask your partner to choose a simple signal for slowing down.", + "partner_text": "Choose a simple signal for slowing down with your partner.", + "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 a clear slowing-down signal and the other wants to define it." + }, + { + "id": "556780cb-f349-45ce-8da2-b6dd44321742", + "pack_slug": "boundaries-check-ins", + "text": "Choose a simple signal for slowing down with your partner.", + "partner_text": "Ask your partner to choose a simple signal for slowing down.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "ae0055c8-cffd-42eb-8d45-40df79522391", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants a clear slowing-down signal and the other wants to define it." + }, + { + "id": "3cb68026-477a-41e0-8891-22b659f39bb4", + "pack_slug": "boundaries-check-ins", + "text": "Invite your partner to tell you what would make a new idea feel safer.", + "partner_text": "Tell your partner what would make a new idea feel safer for you.", + "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 adapt to the other’s needs and the other wants to express them." + }, + { + "id": "21250a7e-a4d4-493f-8815-23a8f2b727c5", + "pack_slug": "boundaries-check-ins", + "text": "Tell your partner what would make a new idea feel safer for you.", + "partner_text": "Invite your partner to tell you what would make a new idea feel safer.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "3cb68026-477a-41e0-8891-22b659f39bb4", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to adapt to the other’s needs and the other wants to express them." + }, + { + "id": "8ddbd259-49dc-45db-8704-a38b294c8eb6", + "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": 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 lead only with a clear limit and the other wants to set it." + }, + { + "id": "6607acd3-a487-4e52-809f-a1eb25154e44", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "8ddbd259-49dc-45db-8704-a38b294c8eb6", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to lead only with a clear limit and the other wants to set it." + }, + { + "id": "f7bc5aed-067a-482d-8f6c-fba95dcc35ff", + "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": 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 clarity about stopping conditions and the other wants to define them." + }, + { + "id": "358f7c66-5bb0-4b15-8079-325ceb8a8d14", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "f7bc5aed-067a-482d-8f6c-fba95dcc35ff", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants clarity about stopping conditions and the other wants to define them." + }, + { + "id": "255d48d0-0e45-47f2-8203-2248b06677f9", + "pack_slug": "aftercare-reconnection", + "text": "Ask your partner to choose how they would like to reconnect after private time.", + "partner_text": "Choose how you would like to reconnect with your partner after private time.", + "intensity": 2, + "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 provide the preferred form of reconnection and the other wants to choose it." + }, + { + "id": "88c304ca-fb6f-4176-868f-1d31050570d3", + "pack_slug": "aftercare-reconnection", + "text": "Choose how you would like to reconnect with your partner after private time.", + "partner_text": "Ask your partner to choose how they would like to reconnect after private time.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "255d48d0-0e45-47f2-8203-2248b06677f9", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to provide the preferred form of reconnection and the other wants to choose it." + }, + { + "id": "02e4f8ef-b65b-4df5-8420-e0b4fa34501e", + "pack_slug": "aftercare-reconnection", + "text": "Tell your partner one thing they could say that would make you feel especially appreciated afterwards.", + "partner_text": "Hear one thing you could say that would make your partner feel especially appreciated afterwards.", + "intensity": 2, + "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 an affirming phrase and the other wants to offer it." + }, + { + "id": "fa28f7ec-1571-4255-82c8-f201b00cf08e", + "pack_slug": "aftercare-reconnection", + "text": "Hear one thing you could say that would make your partner feel especially appreciated afterwards.", + "partner_text": "Tell your partner one thing they could say that would make you feel especially appreciated afterwards.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "02e4f8ef-b65b-4df5-8420-e0b4fa34501e", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to name an affirming phrase and the other wants to offer it." + }, + { + "id": "0efcb697-1fab-4b80-840e-8dd2db473bf8", + "pack_slug": "aftercare-reconnection", + "text": "Let your partner choose whether you stay close, talk, or have quiet space after an intimate moment.", + "partner_text": "Choose whether you stay close, talk, or have quiet space after an intimate moment with your partner.", + "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 the other to decide the reconnection style and the other wants to choose it." + }, + { + "id": "19b38281-3788-452b-821c-efba03847e69", + "pack_slug": "aftercare-reconnection", + "text": "Choose whether you stay close, talk, or have quiet space after an intimate moment with your partner.", + "partner_text": "Let your partner choose whether you stay close, talk, or have quiet space after an intimate moment.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "0efcb697-1fab-4b80-840e-8dd2db473bf8", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants the other to decide the reconnection style and the other wants to choose it." + }, + { + "id": "204df340-8469-45ae-81bf-06776fcf9d00", + "pack_slug": "aftercare-reconnection", + "text": "Ask your partner to tell you what kind of comfort helps them feel grounded afterwards.", + "partner_text": "Tell your partner what kind of comfort helps you feel grounded afterwards.", + "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 provide grounding comfort and the other wants to describe it." + }, + { + "id": "1e64b71f-b2a0-4940-8e8e-5ad13b5eb150", + "pack_slug": "aftercare-reconnection", + "text": "Tell your partner what kind of comfort helps you feel grounded afterwards.", + "partner_text": "Ask your partner to tell you what kind of comfort helps them feel grounded afterwards.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "204df340-8469-45ae-81bf-06776fcf9d00", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to provide grounding comfort and the other wants to describe it." + }, + { + "id": "4cfed6ec-4f1c-498d-8db4-500a6a1e56ac", + "pack_slug": "aftercare-reconnection", + "text": "Give your partner a chance to tell you what they liked most after private exploration.", + "partner_text": "Tell your partner what you liked most after private exploration.", + "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 feedback and the other wants to share positive detail." + }, + { + "id": "7c1ecd05-ed05-4be1-8a6c-880cab1bfcdb", + "pack_slug": "aftercare-reconnection", + "text": "Tell your partner what you liked most after private exploration.", + "partner_text": "Give your partner a chance to tell you what they liked most after private exploration.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "4cfed6ec-4f1c-498d-8db4-500a6a1e56ac", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants feedback and the other wants to share positive detail." + }, + { + "id": "4aa7a02a-6e44-4d9a-81b2-442dd83edce7", + "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": 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 provide deliberate care and the other wants to specify it." + }, + { + "id": "10818ef6-8a06-4685-8067-024f5bb74195", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "4aa7a02a-6e44-4d9a-81b2-442dd83edce7", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to provide deliberate care and the other wants to specify it." + }, + { + "id": "1fea6d51-a3a8-464a-8d0e-35753249bb8e", + "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": 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 vulnerability need and the other wants to meet it." + }, + { + "id": "0e4a062e-d9b4-4932-8439-83e25c7aa260", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "1fea6d51-a3a8-464a-8d0e-35753249bb8e", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to name a vulnerability need and the other wants to meet it." + }, + { + "id": "3b766d9c-8648-4a34-8e7b-65f0285d1f9e", + "pack_slug": "giving-receiving-attention", + "text": "Let your partner choose one part of you to compliment slowly and sincerely.", + "partner_text": "Choose one part of your partner to compliment slowly and sincerely.", + "intensity": 2, + "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 receive focused admiration and the other wants to give it." + }, + { + "id": "62cfcbf0-95fa-4a2f-8b73-9c5545f6b3a3", + "pack_slug": "giving-receiving-attention", + "text": "Choose one part of your partner to compliment slowly and sincerely.", + "partner_text": "Let your partner choose one part of you to compliment slowly and sincerely.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "3b766d9c-8648-4a34-8e7b-65f0285d1f9e", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to receive focused admiration and the other wants to give it." + }, + { + "id": "baaacee5-7e96-4db7-8e68-d90ce4d2bc8f", + "pack_slug": "giving-receiving-attention", + "text": "Ask your partner to give you their full attention while you share what feels romantic to you.", + "partner_text": "Give your partner your full attention while they share what feels romantic to them.", + "intensity": 2, + "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 be heard about romance and the other wants to listen attentively." + }, + { + "id": "bad11e75-6aeb-404b-8732-a7b874221e79", + "pack_slug": "giving-receiving-attention", + "text": "Give your partner your full attention while they share what feels romantic to them.", + "partner_text": "Ask your partner to give you their full attention while you share what feels romantic to you.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "baaacee5-7e96-4db7-8e68-d90ce4d2bc8f", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to be heard about romance and the other wants to listen attentively." + }, + { + "id": "75b12cc5-d751-4703-83a4-c819587c546c", + "pack_slug": "giving-receiving-attention", + "text": "Receive a slow, uninterrupted moment of affection chosen by your partner.", + "partner_text": "Give your partner a slow, uninterrupted moment of affection you 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 receive focused affection and the other wants to choose how to give it." + }, + { + "id": "d135520a-4212-4da9-814e-aff1432c5203", + "pack_slug": "giving-receiving-attention", + "text": "Give your partner a slow, uninterrupted moment of affection you choose.", + "partner_text": "Receive a slow, uninterrupted moment of affection chosen by your partner.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "75b12cc5-d751-4703-83a4-c819587c546c", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to receive focused affection and the other wants to choose how to give it." + }, + { + "id": "a2b30ce4-c564-4c06-831f-e8cd52fe09af", + "pack_slug": "giving-receiving-attention", + "text": "Give your partner the kind of private attention they ask for without asking for anything back first.", + "partner_text": "Receive the kind of private attention you ask for without giving anything back first.", + "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 give without immediate reciprocity and the other wants to receive freely." + }, + { + "id": "b0948aa0-8d0c-4dbe-852f-811d6011a35a", + "pack_slug": "giving-receiving-attention", + "text": "Receive the kind of private attention you ask for without giving anything back first.", + "partner_text": "Give your partner the kind of private attention they ask for without asking for anything back first.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "a2b30ce4-c564-4c06-831f-e8cd52fe09af", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to give without immediate reciprocity and the other wants to receive freely." + }, + { + "id": "471bd751-002b-4836-88f8-82e1eed8baac", + "pack_slug": "giving-receiving-attention", + "text": "Let your partner choose how they want you to focus on them during private time.", + "partner_text": "Choose how you want your partner to focus on you during private time.", + "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 direct the attention they receive and the other wants to follow that direction." + }, + { + "id": "d2257297-c3f3-43d6-8de3-0b003dd52733", + "pack_slug": "giving-receiving-attention", + "text": "Choose how you want your partner to focus on you during private time.", + "partner_text": "Let your partner choose how they want you to focus on them during private time.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "471bd751-002b-4836-88f8-82e1eed8baac", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner wants to direct the attention they receive and the other wants to follow that direction." + }, + { + "id": "e7703b5b-e617-48de-8879-7e512ec232e2", + "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": 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 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": 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": null, + "intensity": 2, + "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 selects a scent cue for the other to use on their next intentional date night." + }, + { + "id": "f665cc11-9b8e-4aaa-8f00-2b515536be92", + "pack_slug": "sensory-cues", + "text": "Let your partner prepare a playlist that sets the mood for a more intimate evening with you.", + "partner_text": "Prepare a playlist that sets the mood for a more intimate evening with your partner.", + "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": "The receiving partner gets a personally chosen mood playlist." + }, + { + "id": "2e5c4a39-9cb7-42f0-8e5d-5744ebb2bf4f", + "pack_slug": "sensory-cues", + "text": "Prepare a playlist that sets the mood for a more intimate evening with your partner.", + "partner_text": "Let your partner prepare a playlist that sets the mood for a more intimate evening with you.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "f665cc11-9b8e-4aaa-8f00-2b515536be92", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The receiving partner gets a personally chosen mood playlist." + }, + { + "id": "995f2684-8c5f-4655-883b-442ac04d1739", + "pack_slug": "sensory-cues", + "text": "Let your partner guide you through a slow eyes-closed guessing game with safe household textures.", + "partner_text": "Guide your partner through a slow eyes-closed guessing game with safe household textures.", + "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": "The proposer leads a private sensory game and the receiver agrees to participate." + }, + { + "id": "11278a6a-a82a-427f-8562-e5300d27716e", + "pack_slug": "sensory-cues", + "text": "Guide your partner through a slow eyes-closed guessing game with safe household textures.", + "partner_text": "Let your partner guide you through a slow eyes-closed guessing game with safe household textures.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "995f2684-8c5f-4655-883b-442ac04d1739", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer leads a private sensory game and the receiver agrees to participate." + }, + { + "id": "23f090ec-ad76-4cf2-8622-e23ca8dddb20", + "pack_slug": "sensory-cues", + "text": "Let your partner choose the lighting for a close evening together.", + "partner_text": "Choose the lighting for a close evening together with your partner.", + "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 creates the visual atmosphere while the other agrees to experience it." + }, + { + "id": "3f120718-9dbe-4856-8186-bb103f3f04c6", + "pack_slug": "sensory-cues", + "text": "Choose the lighting for a close evening together with your partner.", + "partner_text": "Let your partner choose the lighting for a close evening together.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "23f090ec-ad76-4cf2-8622-e23ca8dddb20", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner creates the visual atmosphere while the other agrees to experience it." + }, + { + "id": "2fc33011-085d-475e-84e0-0a6a25eebcd5", + "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": 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": "The proposer receives undivided, voice-led attention in private." + }, + { + "id": "1585dcbb-e1a1-4acc-841a-3639cb93654e", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "2fc33011-085d-475e-84e0-0a6a25eebcd5", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer receives undivided, voice-led attention in private." + }, + { + "id": "75cf4a2e-4b54-466d-89bf-98220b9cc642", + "pack_slug": "sensory-cues", + "text": "Let your partner pick a dessert or drink for you to share slowly after your date.", + "partner_text": "Pick a dessert or drink for your partner to share slowly after your date.", + "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": "The proposer chooses a shared treat that extends a date into a close moment." + }, + { + "id": "e2a61796-2208-4795-8542-0bc4da60441b", + "pack_slug": "sensory-cues", + "text": "Pick a dessert or drink for your partner to share slowly after your date.", + "partner_text": "Let your partner pick a dessert or drink for you to share slowly after your date.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "75cf4a2e-4b54-466d-89bf-98220b9cc642", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer chooses a shared treat that extends a date into a close moment." + }, + { + "id": "1b150b40-a1b2-4615-8d18-9e778ba692e6", + "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": 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": "The couple agrees to a deliberate, uninterrupted closeness ritual around one song." + }, + { + "id": "f0124342-e72a-4a82-8899-5f24c79611eb", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "1b150b40-a1b2-4615-8d18-9e778ba692e6", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The couple agrees to a deliberate, uninterrupted closeness ritual around one song." + }, + { + "id": "0b69f32e-427b-4d5e-8497-18d7b990b135", + "pack_slug": "sensory-cues", + "text": "Let your partner leave a note telling you one small detail they find especially attractive about you.", + "partner_text": "Leave your partner a note telling them one small detail you find especially attractive about them.", + "intensity": 2, + "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": "The proposer gives the receiver a specific, private compliment in writing." + }, + { + "id": "b81c2665-8e74-446e-8efb-2134d841fcaf", + "pack_slug": "sensory-cues", + "text": "Leave your partner a note telling them one small detail you find especially attractive about them.", + "partner_text": "Let your partner leave a note telling you one small detail they find especially attractive about you.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "0b69f32e-427b-4d5e-8497-18d7b990b135", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer gives the receiver a specific, private compliment in writing." + }, + { + "id": "8bd34397-f1dc-49df-8fd5-833d9146b1bc", + "pack_slug": "private-performance", + "text": "Let your partner choose a song and perform a playful lip-sync just for you.", + "partner_text": "Choose a song and perform a playful lip-sync just for your partner.", + "intensity": 2, + "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 gives the other a private, playful performance." + }, + { + "id": "b5954b10-606d-4fa3-85fa-eaf3385bc53c", + "pack_slug": "private-performance", + "text": "Choose a song and perform a playful lip-sync just for your partner.", + "partner_text": "Let your partner choose a song and perform a playful lip-sync just for you.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "8bd34397-f1dc-49df-8fd5-833d9146b1bc", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner gives the other a private, playful performance." + }, + { + "id": "f493ec1b-b903-426a-8b18-8476f918bc3a", + "pack_slug": "private-performance", + "text": "Let your partner give you a short, confident compliment speech before your next date night.", + "partner_text": "Give your partner a short, confident compliment speech before your next date night.", + "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": "The receiver gets a deliberate verbal build-up before the date." + }, + { + "id": "325b0b77-212e-43e8-864c-e8ec65fd9a9e", + "pack_slug": "private-performance", + "text": "Give your partner a short, confident compliment speech before your next date night.", + "partner_text": "Let your partner give you a short, confident compliment speech before your next date night.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "f493ec1b-b903-426a-8b18-8476f918bc3a", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The receiver gets a deliberate verbal build-up before the date." + }, + { + "id": "342dca46-ff17-4302-8023-96bb2cf65136", + "pack_slug": "private-performance", + "text": "Let your partner choose a song for you to slow-dance to together at home.", + "partner_text": "Choose a song for you and your partner to slow-dance to together at home.", + "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": "The proposer picks the soundtrack for a private slow dance." + }, + { + "id": "8a3e2b6d-535d-4eeb-859b-e353d56daef2", + "pack_slug": "private-performance", + "text": "Choose a song for you and your partner to slow-dance to together at home.", + "partner_text": "Let your partner choose a song for you to slow-dance to together at home.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "342dca46-ff17-4302-8023-96bb2cf65136", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer picks the soundtrack for a private slow dance." + }, + { + "id": "232f7716-1cf7-49d5-8e0b-dacc900eaf43", + "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": 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": "The couple shares a direct, personal desire statement." + }, + { + "id": "9736f5d1-bbe7-406a-8818-1f0704ef9f68", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "232f7716-1cf7-49d5-8e0b-dacc900eaf43", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The couple shares a direct, personal desire statement." + }, + { + "id": "943b36bc-0266-40c2-80ca-eac25c6ded88", + "pack_slug": "private-performance", + "text": "Let your partner make you laugh with a deliberately over-the-top romantic introduction.", + "partner_text": "Make your partner laugh with a deliberately over-the-top romantic introduction.", + "intensity": 2, + "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 performs a comic, affectionate introduction for the other." + }, + { + "id": "9661cb4b-0884-4db8-87a3-85f0c6013c9e", + "pack_slug": "private-performance", + "text": "Make your partner laugh with a deliberately over-the-top romantic introduction.", + "partner_text": "Let your partner make you laugh with a deliberately over-the-top romantic introduction.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "943b36bc-0266-40c2-80ca-eac25c6ded88", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner performs a comic, affectionate introduction for the other." + }, + { + "id": "30c5f3c1-36a0-4750-86af-3431a57eab36", + "pack_slug": "private-performance", + "text": "Let your partner write and read you a short invitation for a private evening together.", + "partner_text": "Write and read your partner a short invitation for a private evening together.", + "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": "The proposer creates a spoken invitation that frames the evening." + }, + { + "id": "66f726db-2b23-4136-8c8a-87e092d71075", + "pack_slug": "private-performance", + "text": "Write and read your partner a short invitation for a private evening together.", + "partner_text": "Let your partner write and read you a short invitation for a private evening together.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "30c5f3c1-36a0-4750-86af-3431a57eab36", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer creates a spoken invitation that frames the evening." + }, + { + "id": "e30de43d-62ee-41db-8059-2b75eb50e375", + "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": 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": "The proposer leads the opening part of a mutually agreed private evening." + }, + { + "id": "4963b3f0-b5ba-4e04-8d50-a4a6d944bd92", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "e30de43d-62ee-41db-8059-2b75eb50e375", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer leads the opening part of a mutually agreed private evening." + }, + { + "id": "b6f5b9cf-100a-4a26-844d-c2b88f397829", + "pack_slug": "private-performance", + "text": "Let your partner reveal one new side of their confidence through a private dance for you.", + "partner_text": "Reveal one new side of your confidence through a private dance for your partner.", + "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 shares a confidence-focused private dance." + }, + { + "id": "dd43b49d-e054-4ead-81ff-c6c6bf2f87fa", + "pack_slug": "private-performance", + "text": "Reveal one new side of your confidence through a private dance for your partner.", + "partner_text": "Let your partner reveal one new side of their confidence through a private dance for you.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "b6f5b9cf-100a-4a26-844d-c2b88f397829", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner shares a confidence-focused private dance." + }, + { + "id": "33b6340f-0b87-4a31-84bd-a0a72765c0c7", + "pack_slug": "clothes-confidence", + "text": "Let your partner choose one outfit detail for your next date that makes them smile.", + "partner_text": "Choose one outfit detail for your partner's next date that makes you smile.", + "intensity": 2, + "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": "The proposer chooses a small style detail for the receiver to wear." + }, + { + "id": "f6273a9b-090d-4260-8a41-d1ba40d2c272", + "pack_slug": "clothes-confidence", + "text": "Choose one outfit detail for your partner's next date that makes you smile.", + "partner_text": "Let your partner choose one outfit detail for your next date that makes them smile.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "33b6340f-0b87-4a31-84bd-a0a72765c0c7", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer chooses a small style detail for the receiver to wear." + }, + { + "id": "81cfe9e6-12f9-478f-884b-607426a22ed2", + "pack_slug": "clothes-confidence", + "text": "Let your partner put together a look for you that feels more daring than your usual style.", + "partner_text": "Put together a look for your partner that feels more daring than their usual style.", + "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 styles the other for a bolder but comfortable date-night look." + }, + { + "id": "4eb80f7a-874b-4aa5-8848-2d2b7ef219c2", + "pack_slug": "clothes-confidence", + "text": "Put together a look for your partner that feels more daring than their usual style.", + "partner_text": "Let your partner put together a look for you that feels more daring than your usual style.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "81cfe9e6-12f9-478f-884b-607426a22ed2", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner styles the other for a bolder but comfortable date-night look." + }, + { + "id": "fffe7ca2-625c-458c-835c-cb82b3ae545f", + "pack_slug": "clothes-confidence", + "text": "Let your partner ask you to wear the colour they most associate with you feeling confident.", + "partner_text": "Ask your partner to wear the colour you most associate with them feeling confident.", + "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": "The receiver wears a colour chosen for its confidence association." + }, + { + "id": "7baab3f0-c4c8-4d64-896c-e04cb00b00b9", + "pack_slug": "clothes-confidence", + "text": "Ask your partner to wear the colour you most associate with them feeling confident.", + "partner_text": "Let your partner ask you to wear the colour they most associate with you feeling confident.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "fffe7ca2-625c-458c-835c-cb82b3ae545f", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The receiver wears a colour chosen for its confidence association." + }, + { + "id": "cb2f95fc-3154-4a7f-8217-2076eeff99b2", + "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": 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 leads the evening's agreed presentation and atmosphere." + }, + { + "id": "fd67af27-b0fe-4600-8a6c-f0ab88a816b5", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "cb2f95fc-3154-4a7f-8217-2076eeff99b2", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner leads the evening's agreed presentation and atmosphere." + }, + { + "id": "48c2f293-2d14-4138-84b4-f32f1977468d", + "pack_slug": "clothes-confidence", + "text": "Let your partner send you a message before your date saying exactly what they hope you will wear.", + "partner_text": "Send your partner a message before your date saying exactly what you hope they will wear.", + "intensity": 2, + "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": "The receiver gets a style preference message before a date." + }, + { + "id": "df064fa7-68ca-45c3-88c8-b507dbe1e89a", + "pack_slug": "clothes-confidence", + "text": "Send your partner a message before your date saying exactly what you hope they will wear.", + "partner_text": "Let your partner send you a message before your date saying exactly what they hope you will wear.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "48c2f293-2d14-4138-84b4-f32f1977468d", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The receiver gets a style preference message before a date." + }, + { + "id": "a1b216b2-6ddb-4c43-800b-242680270bcd", + "pack_slug": "clothes-confidence", + "text": "Let your partner choose an accessory for you to wear as a private signal between you.", + "partner_text": "Choose an accessory for your partner to wear as a private signal between you.", + "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": "The couple establishes a subtle shared signal using an accessory." + }, + { + "id": "4f8e295f-272a-488d-88cf-336400211bd8", + "pack_slug": "clothes-confidence", + "text": "Choose an accessory for your partner to wear as a private signal between you.", + "partner_text": "Let your partner choose an accessory for you to wear as a private signal between you.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "a1b216b2-6ddb-4c43-800b-242680270bcd", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The couple establishes a subtle shared signal using an accessory." + }, + { + "id": "bce468e8-e16b-4248-88c1-0f8bc0be6241", + "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": 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": "The proposer gives the receiver a paced confidence ritual before a night together." + }, + { + "id": "9656003b-2134-4980-8eec-7d0212ced819", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "bce468e8-e16b-4248-88c1-0f8bc0be6241", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer gives the receiver a paced confidence ritual before a night together." + }, + { + "id": "92085256-ce8f-4d8c-8e7e-61e234f2096b", + "pack_slug": "clothes-confidence", + "text": "Let your partner choose a 'stay in' outfit for you that feels intentionally different from everyday clothes.", + "partner_text": "Choose a 'stay in' outfit for your partner that feels intentionally different from everyday clothes.", + "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": "The proposer selects a special at-home look for the receiver." + }, + { + "id": "1e1b4602-8dcb-43d0-85e5-a21a52dc9da8", + "pack_slug": "clothes-confidence", + "text": "Choose a 'stay in' outfit for your partner that feels intentionally different from everyday clothes.", + "partner_text": "Let your partner choose a 'stay in' outfit for you that feels intentionally different from everyday clothes.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "92085256-ce8f-4d8c-8e7e-61e234f2096b", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer selects a special at-home look for the receiver." + }, + { + "id": "026abea8-51ac-43c1-8ef4-59f4b6bc03f2", + "pack_slug": "fantasy-exchange", + "text": "Let your partner tell you about a fictional date they would plan for the two of you with no practical limits.", + "partner_text": "Tell your partner about a fictional date you would plan for the two of you with no practical limits.", + "intensity": 2, + "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": "The proposer shares an imaginative, romance-forward date scenario." + }, + { + "id": "7fb5a3e0-7647-4e92-83f7-b5081f050e80", + "pack_slug": "fantasy-exchange", + "text": "Tell your partner about a fictional date you would plan for the two of you with no practical limits.", + "partner_text": "Let your partner tell you about a fictional date they would plan for the two of you with no practical limits.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "026abea8-51ac-43c1-8ef4-59f4b6bc03f2", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer shares an imaginative, romance-forward date scenario." + }, + { + "id": "5e858d42-c5c8-4020-80c8-8f50de22f454", + "pack_slug": "fantasy-exchange", + "text": "Let your partner write a three-line scene about the two of you meeting as strangers in a glamorous place.", + "partner_text": "Write a three-line scene about you and your partner meeting as strangers in a glamorous place.", + "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": "The couple gets a short shared fantasy prompt to discuss or play with." + }, + { + "id": "0e7fe37c-0155-4321-87f1-e7ab41f743d3", + "pack_slug": "fantasy-exchange", + "text": "Write a three-line scene about you and your partner meeting as strangers in a glamorous place.", + "partner_text": "Let your partner write a three-line scene about the two of you meeting as strangers in a glamorous place.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "5e858d42-c5c8-4020-80c8-8f50de22f454", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The couple gets a short shared fantasy prompt to discuss or play with." + }, + { + "id": "5cd2257c-506f-4f5b-8ea9-1a81062d8716", + "pack_slug": "fantasy-exchange", + "text": "Let your partner ask what kind of attention makes you feel most wanted in an imagined scenario.", + "partner_text": "Ask your partner what kind of attention makes them feel most wanted in an imagined scenario.", + "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": "The receiver names a preferred kind of romantic attention without needing to commit to it." + }, + { + "id": "c1dc63d9-5de3-480a-810a-f0d6c170e5ac", + "pack_slug": "fantasy-exchange", + "text": "Ask your partner what kind of attention makes them feel most wanted in an imagined scenario.", + "partner_text": "Let your partner ask what kind of attention makes you feel most wanted in an imagined scenario.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "5cd2257c-506f-4f5b-8ea9-1a81062d8716", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The receiver names a preferred kind of romantic attention without needing to commit to it." + }, + { + "id": "fa8250f6-5941-4c8f-8b59-523841184235", + "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": 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 proposes an agreed fantasy frame, with the receiver setting limits." + }, + { + "id": "3eebaed7-2c36-41e0-8206-940ff723758a", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "fa8250f6-5941-4c8f-8b59-523841184235", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner proposes an agreed fantasy frame, with the receiver setting limits." + }, + { + "id": "8b7afe08-5ed6-44b3-8452-53889794d327", + "pack_slug": "fantasy-exchange", + "text": "Let your partner invent a nickname for the more confident version of you.", + "partner_text": "Invent a nickname for the more confident version of your partner.", + "intensity": 2, + "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": "The couple creates a playful private identity cue." + }, + { + "id": "e55f9c48-997c-4c22-8647-06b1b2cf39ff", + "pack_slug": "fantasy-exchange", + "text": "Invent a nickname for the more confident version of your partner.", + "partner_text": "Let your partner invent a nickname for the more confident version of you.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "8b7afe08-5ed6-44b3-8452-53889794d327", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The couple creates a playful private identity cue." + }, + { + "id": "28d5df40-d8fd-4878-89fa-a60262512e1f", + "pack_slug": "fantasy-exchange", + "text": "Let your partner describe the setting of their ideal slow-burn evening with you.", + "partner_text": "Describe the setting of your ideal slow-burn evening with your partner.", + "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": "The proposer shares a detailed atmosphere preference that can inform a future plan." + }, + { + "id": "0c811c43-5002-478a-8402-14c92795c1b6", + "pack_slug": "fantasy-exchange", + "text": "Describe the setting of your ideal slow-burn evening with your partner.", + "partner_text": "Let your partner describe the setting of their ideal slow-burn evening with you.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "28d5df40-d8fd-4878-89fa-a60262512e1f", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer shares a detailed atmosphere preference that can inform a future plan." + }, + { + "id": "70ca9ee4-45cb-484c-8a64-517d8253f6c7", + "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": 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": "The receiver identifies one area of leadership they would welcome in fantasy." + }, + { + "id": "845afe32-234c-4653-844f-a3b34a58502e", + "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": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "70ca9ee4-45cb-484c-8a64-517d8253f6c7", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The receiver identifies one area of leadership they would welcome in fantasy." + }, + { + "id": "acdfa262-df2f-4de1-8430-456d0f6d9b77", + "pack_slug": "fantasy-exchange", + "text": "Let your partner send you a private message that starts, 'If we had the whole evening to ourselves...' .", + "partner_text": "Send your partner a private message that starts, 'If we had the whole evening to ourselves...' .", + "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": "The proposer sends an open-ended desire prompt for a private exchange." + }, + { + "id": "4e5fbddd-d75d-412a-806d-9a9b9ba6d5d2", + "pack_slug": "fantasy-exchange", + "text": "Send your partner a private message that starts, 'If we had the whole evening to ourselves...' .", + "partner_text": "Let your partner send you a private message that starts, 'If we had the whole evening to ourselves...' .", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "acdfa262-df2f-4de1-8430-456d0f6d9b77", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer sends an open-ended desire prompt for a private exchange." + }, + { + "id": "8c30fb8b-f87e-4809-8c7b-c4a45362fbdb", + "pack_slug": "roleplay", + "text": "Let your partner pretend they are meeting you for the first time and ask you out again.", + "partner_text": "Pretend you are meeting your partner for the first time and ask them out again.", + "intensity": 2, + "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": "The proposer recreates a first-meeting invitation in character." + }, + { + "id": "2305c703-6f29-4b4c-88cd-8e75562a7056", + "pack_slug": "roleplay", + "text": "Pretend you are meeting your partner for the first time and ask them out again.", + "partner_text": "Let your partner pretend they are meeting you for the first time and ask you out again.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "8c30fb8b-f87e-4809-8c7b-c4a45362fbdb", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer recreates a first-meeting invitation in character." + }, + { + "id": "42d43d70-f53d-4161-84f5-5ca3be5d0ead", + "pack_slug": "roleplay", + "text": "Let your partner take the role of your personal host for an evening at home.", + "partner_text": "Take the role of your partner's personal host for an evening at home.", + "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 plans and hosts a dedicated private evening." + }, + { + "id": "eb990164-6326-4d5f-8b0d-7dc809620618", + "pack_slug": "roleplay", + "text": "Take the role of your partner's personal host for an evening at home.", + "partner_text": "Let your partner take the role of your personal host for an evening at home.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "42d43d70-f53d-4161-84f5-5ca3be5d0ead", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner plans and hosts a dedicated private evening." + }, + { + "id": "ed6c8e8c-1071-46f2-863d-6b480c047e64", + "pack_slug": "roleplay", + "text": "Let your partner act as a confident stranger who has one hour to win you over.", + "partner_text": "Act as a confident stranger who has one hour to win your partner over.", + "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": "The proposer takes on a flirtatious stranger character during an agreed private scenario." + }, + { + "id": "a1da6834-d764-4d64-8ee0-13c63e0e498d", + "pack_slug": "roleplay", + "text": "Act as a confident stranger who has one hour to win your partner over.", + "partner_text": "Let your partner act as a confident stranger who has one hour to win you over.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "ed6c8e8c-1071-46f2-863d-6b480c047e64", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer takes on a flirtatious stranger character during an agreed private scenario." + }, + { + "id": "d551985e-d719-4eb7-89cc-6c4659249728", + "pack_slug": "roleplay", + "text": "Let your partner choose a role where they lead the conversation and you decide when to step out of character.", + "partner_text": "Choose a role where you lead the conversation and your partner decides when to step out of character.", + "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": "The proposer leads a consensual roleplay conversation with a clear exit controlled by the receiver." + }, + { + "id": "0245d98b-a32d-4549-8a55-fd8c87103ac5", + "pack_slug": "roleplay", + "text": "Choose a role where you lead the conversation and your partner decides when to step out of character.", + "partner_text": "Let your partner choose a role where they lead the conversation and you decide when to step out of character.", + "intensity": 4, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "d551985e-d719-4eb7-89cc-6c4659249728", + "review_status": "draft", + "policy_risk": "edge", + "intended_outcome": "The proposer leads a consensual roleplay conversation with a clear exit controlled by the receiver." + }, + { + "id": "b3f0556f-806c-4114-85b8-1ea04033b6f3", + "pack_slug": "roleplay", + "text": "Let your partner write you a pretend invitation to an exclusive event for two.", + "partner_text": "Write your partner a pretend invitation to an exclusive event for two.", + "intensity": 2, + "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": "The proposer creates a playful invitation that introduces a private date concept." + }, + { + "id": "b9d02754-6806-44ba-8f7b-3609d79fa053", + "pack_slug": "roleplay", + "text": "Write your partner a pretend invitation to an exclusive event for two.", + "partner_text": "Let your partner write you a pretend invitation to an exclusive event for two.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "b3f0556f-806c-4114-85b8-1ea04033b6f3", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer creates a playful invitation that introduces a private date concept." + }, + { + "id": "ac75a853-f73c-4db4-8a95-eaa71331897a", + "pack_slug": "roleplay", + "text": "Let your partner play the part of a stylist who gives you one confidence challenge for the evening.", + "partner_text": "Play the part of a stylist who gives your partner one confidence challenge for the evening.", + "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 sets a light, agreed confidence challenge in character." + }, + { + "id": "5384d7cf-43d4-4221-8611-cc392ec9d184", + "pack_slug": "roleplay", + "text": "Play the part of a stylist who gives your partner one confidence challenge for the evening.", + "partner_text": "Let your partner play the part of a stylist who gives you one confidence challenge for the evening.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "ac75a853-f73c-4db4-8a95-eaa71331897a", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner sets a light, agreed confidence challenge in character." + }, + { + "id": "431b5c92-192e-4774-8b92-dab504be41af", + "pack_slug": "roleplay", + "text": "Let your partner choose a character who is bolder than they usually are, while you set the limits of the scene.", + "partner_text": "Choose a character who is bolder than you usually are, while your partner sets the limits of the scene.", + "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": "The proposer explores a bolder role while the receiver sets the scene's boundaries." + }, + { + "id": "3af580f6-fdfc-4c17-8f52-f08d20ba3099", + "pack_slug": "roleplay", + "text": "Choose a character who is bolder than you usually are, while your partner sets the limits of the scene.", + "partner_text": "Let your partner choose a character who is bolder than they usually are, while you set the limits of the scene.", + "intensity": 4, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "431b5c92-192e-4774-8b92-dab504be41af", + "review_status": "draft", + "policy_risk": "edge", + "intended_outcome": "The proposer explores a bolder role while the receiver sets the scene's boundaries." + }, + { + "id": "24514587-f67d-4188-83e8-9fd26ff9ddc3", + "pack_slug": "settings-atmosphere", + "text": "Let your partner turn one room into a date-night space before you arrive.", + "partner_text": "Turn one room into a date-night space before your partner arrives.", + "intensity": 2, + "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": "The proposer prepares a distinct at-home setting for the receiver." + }, + { + "id": "da51c45d-7419-4ccd-8c46-06d83e135c14", + "pack_slug": "settings-atmosphere", + "text": "Turn one room into a date-night space before your partner arrives.", + "partner_text": "Let your partner turn one room into a date-night space before you arrive.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "24514587-f67d-4188-83e8-9fd26ff9ddc3", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer prepares a distinct at-home setting for the receiver." + }, + { + "id": "28fbf20b-b0a0-4003-8a21-ebe58ad55d3b", + "pack_slug": "settings-atmosphere", + "text": "Let your partner choose a place in your home where you are not usually romantic and make it feel special.", + "partner_text": "Choose a place in your home where you and your partner are not usually romantic and make it feel special.", + "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 transforms an ordinary indoor space into a deliberate romantic setting." + }, + { + "id": "990a0232-d192-480a-85e9-9a54b3cb102d", + "pack_slug": "settings-atmosphere", + "text": "Choose a place in your home where you and your partner are not usually romantic and make it feel special.", + "partner_text": "Let your partner choose a place in your home where you are not usually romantic and make it feel special.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "28fbf20b-b0a0-4003-8a21-ebe58ad55d3b", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner transforms an ordinary indoor space into a deliberate romantic setting." + }, + { + "id": "c345d9f0-83e9-45cd-8ef4-4d57b2f45f6e", + "pack_slug": "settings-atmosphere", + "text": "Let your partner plan a candlelit late-night snack for the two of you after everything else is quiet.", + "partner_text": "Plan a candlelit late-night snack for you and your partner after everything else is quiet.", + "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": "The proposer creates a calm, intimate-feeling post-evening ritual." + }, + { + "id": "e460f726-87a6-4069-81f6-b6332f54baf3", + "pack_slug": "settings-atmosphere", + "text": "Plan a candlelit late-night snack for you and your partner after everything else is quiet.", + "partner_text": "Let your partner plan a candlelit late-night snack for the two of you after everything else is quiet.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "c345d9f0-83e9-45cd-8ef4-4d57b2f45f6e", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer creates a calm, intimate-feeling post-evening ritual." + }, + { + "id": "e5906dbf-1e2a-42a4-825e-824b8d7ae097", + "pack_slug": "settings-atmosphere", + "text": "Let your partner arrange a private evening where your phones stay out of reach until you both agree to check them.", + "partner_text": "Arrange a private evening where your phones stay out of reach until you both agree to check them.", + "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": "The couple agrees to protected, distraction-free private time." + }, + { + "id": "37562093-4ec8-4bd4-8daf-84b23d8ab3a2", + "pack_slug": "settings-atmosphere", + "text": "Arrange a private evening where your phones stay out of reach until you both agree to check them.", + "partner_text": "Let your partner arrange a private evening where your phones stay out of reach until you both agree to check them.", + "intensity": 4, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "e5906dbf-1e2a-42a4-825e-824b8d7ae097", + "review_status": "draft", + "policy_risk": "edge", + "intended_outcome": "The couple agrees to protected, distraction-free private time." + }, + { + "id": "01dcc4d9-492a-4f06-8ea6-70a3c689bf3f", + "pack_slug": "settings-atmosphere", + "text": "Let your partner choose the route for a slow evening walk that ends somewhere cosy.", + "partner_text": "Choose the route for a slow evening walk that ends somewhere cosy with your partner.", + "intensity": 2, + "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": "The proposer directs a low-pressure shared walk toward a close setting." + }, + { + "id": "d6dba4ff-b6b1-47b5-8cd3-a6ec71088c96", + "pack_slug": "settings-atmosphere", + "text": "Choose the route for a slow evening walk that ends somewhere cosy with your partner.", + "partner_text": "Let your partner choose the route for a slow evening walk that ends somewhere cosy.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "01dcc4d9-492a-4f06-8ea6-70a3c689bf3f", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer directs a low-pressure shared walk toward a close setting." + }, + { + "id": "3501223b-e84a-4ef0-8a01-216dc04f88d3", + "pack_slug": "settings-atmosphere", + "text": "Let your partner plan a 'no agenda' hour where they only focus on making you feel looked after.", + "partner_text": "Plan a 'no agenda' hour where you only focus on making your partner feel looked after.", + "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 takes responsibility for a gentle, attentiveness-focused hour." + }, + { + "id": "3d72f0df-106e-4d27-8e48-24fb147a5d09", + "pack_slug": "settings-atmosphere", + "text": "Plan a 'no agenda' hour where you only focus on making your partner feel looked after.", + "partner_text": "Let your partner plan a 'no agenda' hour where they only focus on making you feel looked after.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "3501223b-e84a-4ef0-8a01-216dc04f88d3", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner takes responsibility for a gentle, attentiveness-focused hour." + }, + { + "id": "d74618a6-7c35-4239-839b-db893236ace0", + "pack_slug": "settings-atmosphere", + "text": "Let your partner choose a private setting for a conversation about what would make that evening feel exciting to you.", + "partner_text": "Choose a private setting for a conversation about what would make that evening feel exciting to 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": "The proposer creates the conditions for a direct desire and boundaries conversation." + }, + { + "id": "6d20d750-5dad-4113-847f-b0f18ecc087c", + "pack_slug": "settings-atmosphere", + "text": "Choose a private setting for a conversation about what would make that evening feel exciting to your partner.", + "partner_text": "Let your partner choose a private setting for a conversation about what would make that evening feel exciting to you.", + "intensity": 4, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "d74618a6-7c35-4239-839b-db893236ace0", + "review_status": "draft", + "policy_risk": "edge", + "intended_outcome": "The proposer creates the conditions for a direct desire and boundaries conversation." + }, + { + "id": "82f6af1b-7dbd-4823-8bd5-727080287118", + "pack_slug": "surprise-novelty", + "text": "Let your partner leave you a sealed note with one romantic surprise inside.", + "partner_text": "Leave your partner a sealed note with one romantic surprise inside.", + "intensity": 2, + "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": "The proposer creates a small, consent-safe romantic surprise for the receiver." + }, + { + "id": "20113f08-3391-46f1-8ef0-7984248a8879", + "pack_slug": "surprise-novelty", + "text": "Leave your partner a sealed note with one romantic surprise inside.", + "partner_text": "Let your partner leave you a sealed note with one romantic surprise inside.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "82f6af1b-7dbd-4823-8bd5-727080287118", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer creates a small, consent-safe romantic surprise for the receiver." + }, + { + "id": "711717d0-ed03-4601-8a3d-9f1d9943e3b4", + "pack_slug": "surprise-novelty", + "text": "Let your partner plan one part of your evening that they do not reveal until you have both agreed to begin.", + "partner_text": "Plan one part of your evening that you do not reveal until you and your partner have both agreed to begin.", + "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 prepares a mutually agreed surprise element." + }, + { + "id": "b59c1821-27b1-4430-8ad9-d5668e17dcef", + "pack_slug": "surprise-novelty", + "text": "Plan one part of your evening that you do not reveal until you and your partner have both agreed to begin.", + "partner_text": "Let your partner plan one part of your evening that they do not reveal until you have both agreed to begin.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "711717d0-ed03-4601-8a3d-9f1d9943e3b4", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner prepares a mutually agreed surprise element." + }, + { + "id": "1f7499bf-6879-476f-8a1d-800e0d499c32", + "pack_slug": "surprise-novelty", + "text": "Let your partner give you a choice between two different kinds of close evening, without telling you which they hope you pick.", + "partner_text": "Give your partner a choice between two different kinds of close evening, without telling them which you hope they pick.", + "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": "The couple uses a playful choice to reveal preferences and select a plan." + }, + { + "id": "5addc1d8-cf00-4d24-8630-383f7c068946", + "pack_slug": "surprise-novelty", + "text": "Give your partner a choice between two different kinds of close evening, without telling them which you hope they pick.", + "partner_text": "Let your partner give you a choice between two different kinds of close evening, without telling you which they hope you pick.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "1f7499bf-6879-476f-8a1d-800e0d499c32", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The couple uses a playful choice to reveal preferences and select a plan." + }, + { + "id": "39013ab2-8f24-4829-85dc-a3090960331a", + "pack_slug": "surprise-novelty", + "text": "Let your partner ask you to say yes to one surprise date-night detail, after they tell you the category but not the detail.", + "partner_text": "Ask your partner to say yes to one surprise date-night detail, after you tell them the category but not the detail.", + "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": "The receiver consents to a bounded surprise with enough information to choose safely." + }, + { + "id": "03c0b530-3cce-4d0f-86cf-3dd952c67971", + "pack_slug": "surprise-novelty", + "text": "Ask your partner to say yes to one surprise date-night detail, after you tell them the category but not the detail.", + "partner_text": "Let your partner ask you to say yes to one surprise date-night detail, after they tell you the category but not the detail.", + "intensity": 4, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "39013ab2-8f24-4829-85dc-a3090960331a", + "review_status": "draft", + "policy_risk": "edge", + "intended_outcome": "The receiver consents to a bounded surprise with enough information to choose safely." + }, + { + "id": "c43a3542-dd55-4635-8dbd-6086d2f8094e", + "pack_slug": "surprise-novelty", + "text": "Let your partner hide a clue somewhere at home that leads to a compliment from them.", + "partner_text": "Hide a clue somewhere at home that leads your partner to a compliment from you.", + "intensity": 2, + "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": "The proposer creates a mini treasure hunt ending in affirmation." + }, + { + "id": "0d3c708b-6af4-4780-8c20-978922491c38", + "pack_slug": "surprise-novelty", + "text": "Hide a clue somewhere at home that leads your partner to a compliment from you.", + "partner_text": "Let your partner hide a clue somewhere at home that leads to a compliment from them.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "c43a3542-dd55-4635-8dbd-6086d2f8094e", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer creates a mini treasure hunt ending in affirmation." + }, + { + "id": "a00d4e27-fabd-4fe5-8a8d-22f3b1396db6", + "pack_slug": "surprise-novelty", + "text": "Let your partner choose a new shared ritual for the first ten minutes of date night.", + "partner_text": "Choose a new shared ritual for the first ten minutes of date night with your partner.", + "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": "The proposer introduces a repeatable opening ritual for intentional time together." + }, + { + "id": "1343ab20-194f-4949-81da-6e87c175c2a1", + "pack_slug": "surprise-novelty", + "text": "Choose a new shared ritual for the first ten minutes of date night with your partner.", + "partner_text": "Let your partner choose a new shared ritual for the first ten minutes of date night.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "a00d4e27-fabd-4fe5-8a8d-22f3b1396db6", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer introduces a repeatable opening ritual for intentional time together." + }, + { + "id": "882ccb65-f6f7-47c7-8670-0d8a3036e5ea", + "pack_slug": "surprise-novelty", + "text": "Let your partner surprise you with a confidence challenge that you can change or stop at any point.", + "partner_text": "Surprise your partner with a confidence challenge that they can change or stop at any point.", + "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": "The proposer offers a novel confidence prompt with explicit receiver control." + }, + { + "id": "e1ad7b12-e49a-4b57-8d8c-ce4452e342cb", + "pack_slug": "surprise-novelty", + "text": "Surprise your partner with a confidence challenge that they can change or stop at any point.", + "partner_text": "Let your partner surprise you with a confidence challenge that you can change or stop at any point.", + "intensity": 4, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "882ccb65-f6f7-47c7-8670-0d8a3036e5ea", + "review_status": "draft", + "policy_risk": "edge", + "intended_outcome": "The proposer offers a novel confidence prompt with explicit receiver control." + }, + { + "id": "1209065c-92ee-4013-8439-43a94526cb91", + "pack_slug": "long-distance-desire", + "text": "Let your partner send you a voice note describing the first thing they want to do when you next have time alone together.", + "partner_text": "Send your partner a voice note describing the first thing you want to do when you next have time alone together.", + "intensity": 2, + "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": "The proposer shares an anticipation-building voice message for the next reunion." + }, + { + "id": "d56474c8-b62e-46b9-8705-6e2a8e2b580b", + "pack_slug": "long-distance-desire", + "text": "Send your partner a voice note describing the first thing you want to do when you next have time alone together.", + "partner_text": "Let your partner send you a voice note describing the first thing they want to do when you next have time alone together.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "1209065c-92ee-4013-8439-43a94526cb91", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer shares an anticipation-building voice message for the next reunion." + }, + { + "id": "eed56452-0afc-4666-8d11-03dae31e0fc6", + "pack_slug": "long-distance-desire", + "text": "Let your partner plan a video-date mood for you to join from wherever you are.", + "partner_text": "Plan a video-date mood for your partner to join from wherever they are.", + "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 sets a shared remote date atmosphere." + }, + { + "id": "e88a361b-708a-4ffc-8ddb-d365c2a6faf7", + "pack_slug": "long-distance-desire", + "text": "Plan a video-date mood for your partner to join from wherever they are.", + "partner_text": "Let your partner plan a video-date mood for you to join from wherever you are.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "eed56452-0afc-4666-8d11-03dae31e0fc6", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner sets a shared remote date atmosphere." + }, + { + "id": "18876d4d-74c2-4338-873c-4bf60ea84364", + "pack_slug": "long-distance-desire", + "text": "Let your partner send you a message telling you what they miss most about being close to you.", + "partner_text": "Send your partner a message telling them what you miss most about being close to them.", + "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": "The receiver gets a specific intimacy-adjacent expression of longing." + }, + { + "id": "ac72c24a-6c5f-4fa1-82f0-5d8dccb60868", + "pack_slug": "long-distance-desire", + "text": "Send your partner a message telling them what you miss most about being close to them.", + "partner_text": "Let your partner send you a message telling you what they miss most about being close to you.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "18876d4d-74c2-4338-873c-4bf60ea84364", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The receiver gets a specific intimacy-adjacent expression of longing." + }, + { + "id": "bbe5baa4-9f2d-4da9-87b8-880241e9b63d", + "pack_slug": "long-distance-desire", + "text": "Let your partner arrange a private call where you both say one thing you hope to explore together when you reunite.", + "partner_text": "Arrange a private call where you both say one thing you hope to explore together when you reunite.", + "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": "The couple holds a mutual, forward-looking conversation about agreed future intimacy." + }, + { + "id": "4705e835-ad91-49bc-87d5-f545fa96dc94", + "pack_slug": "long-distance-desire", + "text": "Arrange a private call where you both say one thing you hope to explore together when you reunite.", + "partner_text": "Let your partner arrange a private call where you both say one thing you hope to explore together when you reunite.", + "intensity": 4, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "bbe5baa4-9f2d-4da9-87b8-880241e9b63d", + "review_status": "draft", + "policy_risk": "edge", + "intended_outcome": "The couple holds a mutual, forward-looking conversation about agreed future intimacy." + }, + { + "id": "2fd55c00-74d9-449c-8e97-20803acda350", + "pack_slug": "long-distance-desire", + "text": "Let your partner send you a photo of something that reminds them of your chemistry.", + "partner_text": "Send your partner a photo of something that reminds you of your chemistry.", + "intensity": 2, + "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": "The proposer shares a safe visual cue connected to their relationship." + }, + { + "id": "4451af6e-6054-45c4-8e6d-8bf8814268ba", + "pack_slug": "long-distance-desire", + "text": "Send your partner a photo of something that reminds you of your chemistry.", + "partner_text": "Let your partner send you a photo of something that reminds them of your chemistry.", + "intensity": 2, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "2fd55c00-74d9-449c-8e97-20803acda350", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The proposer shares a safe visual cue connected to their relationship." + }, + { + "id": "e77547fc-b5fd-46b8-8532-a65978134de5", + "pack_slug": "long-distance-desire", + "text": "Let your partner choose a song for you to listen to at the same time from different places.", + "partner_text": "Choose a song for you and your partner to listen to at the same time from different places.", + "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": "The pair creates a synchronized remote closeness ritual." + }, + { + "id": "e716ce0d-8bcc-4d2e-818a-d9327084727f", + "pack_slug": "long-distance-desire", + "text": "Choose a song for you and your partner to listen to at the same time from different places.", + "partner_text": "Let your partner choose a song for you to listen to at the same time from different places.", + "intensity": 3, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "e77547fc-b5fd-46b8-8532-a65978134de5", + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "The pair creates a synchronized remote closeness ritual." + }, + { + "id": "84da4eb8-bc9d-4e77-82ca-13827e987de9", + "pack_slug": "long-distance-desire", + "text": "Let your partner ask you for one honest promise about how you will make time for each other when distance ends.", + "partner_text": "Ask your partner for one honest promise about how you will make time for each other when distance ends.", + "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": "The couple makes a concrete reunion-intent commitment." + }, + { + "id": "d0e3a26f-26b6-423d-8bbd-c6858b4d49a6", + "pack_slug": "long-distance-desire", + "text": "Ask your partner for one honest promise about how you will make time for each other when distance ends.", + "partner_text": "Let your partner ask you for one honest promise about how you will make time for each other when distance ends.", + "intensity": 4, + "question_type": "swipe", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": "84da4eb8-bc9d-4e77-82ca-13827e987de9", + "review_status": "draft", + "policy_risk": "edge", + "intended_outcome": "The couple makes a concrete reunion-intent commitment." + }, + { + "id": "7f756505-88f2-498e-88c2-40466ae3cfa3", + "pack_slug": "flirty-communication", + "text": "Exchange a private message naming one thing you find irresistible about each other.", + "partner_text": null, + "intensity": 2, + "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 agree to trade direct expressions of attraction." + }, + { + "id": "9ccf1434-638b-4350-8ff4-fc8ebcfdf763", + "pack_slug": "flirty-communication", + "text": "Give each other one compliment that feels more personal than usual.", + "partner_text": null, + "intensity": 2, + "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 a more intimate exchange of appreciation." + }, + { + "id": "e8de5c9a-4a87-4bb5-8765-ec08d09e25c0", + "pack_slug": "flirty-communication", + "text": "Send each other a voice note that sets a private mood.", + "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 agree to create anticipation through voice." + }, + { + "id": "7e0531ff-5f5d-49cc-870b-35e0be5cf97a", + "pack_slug": "flirty-communication", + "text": "Share one private wish each and discuss what would make it feel exciting and safe.", + "partner_text": null, + "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": "Both partners agree to reveal a private wish and discuss its boundaries." + }, + { + "id": "404fb4b4-6fbd-42a6-8045-abf4497a5f5d", + "pack_slug": "anticipation", + "text": "Plan a private surprise for each other using only a few clues.", + "partner_text": null, + "intensity": 2, + "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 agree to build anticipation through limited information." + }, + { + "id": "64e6c7b0-eaf1-49f1-8d5c-0b2a7aaf7370", + "pack_slug": "anticipation", + "text": "Agree on a private signal that starts an anticipated experience.", + "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 a mutual cue that begins their planned moment." + }, + { + "id": "7c735072-a264-4bc8-8316-6d7e26ab2fa9", + "pack_slug": "anticipation", + "text": "Leave each other one private hint about something you want to try together.", + "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 agree to exchange hints before discussing an idea." + }, + { + "id": "2763a722-c300-4b5c-8ce3-19b2418555ea", + "pack_slug": "anticipation", + "text": "Plan a private experience where neither of you knows the full sequence beforehand.", + "partner_text": null, + "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": "Both partners want surprise while retaining an agreed framework." + }, + { + "id": "35e1e582-f652-4913-8282-02b3b2d2ced7", + "pack_slug": "shared-control", + "text": "Take turns planning a private date where the other person only knows the starting point.", + "partner_text": null, + "intensity": 2, + "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 agree to alternate between leading and being surprised." + }, + { + "id": "98796017-9e54-4081-81b8-fbcd45137e3f", + "pack_slug": "shared-control", + "text": "Take turns giving one private instruction and following one.", + "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 alternate consensual direction and follow-through." + }, + { + "id": "aea74f87-1d6d-4538-80cd-7dc0872e149f", + "pack_slug": "shared-control", + "text": "Choose a private role for each other and agree whether to swap halfway through.", + "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 a role-based experience with an optional switch." + }, + { + "id": "15f6ad24-1acd-4831-82bb-0d7ab179fda2", + "pack_slug": "shared-control", + "text": "Take turns setting the pace during an agreed private experience.", + "partner_text": null, + "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": "Both partners agree to hand leadership back and forth." + }, + { + "id": "2c898902-8822-422a-8f7b-e29c889fd685", + "pack_slug": "taking-the-lead", + "text": "Each choose one part of a private date and combine the plans.", + "partner_text": null, + "intensity": 2, + "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 build a shared private date." + }, + { + "id": "e47b09a2-0c00-498b-8581-f26aacc4bca9", + "pack_slug": "taking-the-lead", + "text": "Make a private list of three ideas each and choose one from the other person’s list.", + "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 agree to select a mutually desired new idea." + }, + { + "id": "bd298966-9b42-49c7-820d-92384de9c4af", + "pack_slug": "taking-the-lead", + "text": "Use a coin toss to decide who leads the first part of your private time together.", + "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 a playful, equal way to assign the opening lead." + }, + { + "id": "ecea7310-5c13-445d-8d81-276172f2ad6e", + "pack_slug": "taking-the-lead", + "text": "Agree that either person can pause, redirect, or end a private experience without explanation.", + "partner_text": null, + "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": "Both partners establish equal control over continuation and change." + }, + { + "id": "198e181b-5143-4c52-8957-3ae239d3b5cb", + "pack_slug": "boundaries-check-ins", + "text": "Choose a simple phrase that means you want more reassurance.", + "partner_text": null, + "intensity": 2, + "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 agree on a shared reassurance signal." + }, + { + "id": "2a16acc9-8311-4b9f-8d7a-3dbaeaa6190e", + "pack_slug": "boundaries-check-ins", + "text": "Name one thing that helps you feel secure when trying something unfamiliar.", + "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 agree to share and honour their comfort needs." + }, + { + "id": "1f47cd34-87c8-46df-8d01-1f3ae47c580e", + "pack_slug": "boundaries-check-ins", + "text": "Agree on a signal that means slow down and a signal that means stop.", + "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 establish clear ways to adjust or end an experience." + }, + { + "id": "90c482ff-1ddc-4ad0-83de-9f7cc12988d0", + "pack_slug": "boundaries-check-ins", + "text": "Discuss one private boundary you want honoured before exploring a more intense idea.", + "partner_text": null, + "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": "Both partners agree to state a firm limit before escalating." + }, + { + "id": "84108a1f-c1c4-4ff1-8bf1-8703b3d61753", + "pack_slug": "aftercare-reconnection", + "text": "Tell each other how you most like to reconnect after a private date.", + "partner_text": null, + "intensity": 2, + "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 agree to share their preferred reconnection style." + }, + { + "id": "e8b7c522-caa5-4550-80df-763031b360fa", + "pack_slug": "aftercare-reconnection", + "text": "Set aside time to tell each other what felt especially good about a private experience.", + "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 agree to exchange affirming feedback." + }, + { + "id": "24db1e70-a45e-4726-8b32-e2eb905b2588", + "pack_slug": "aftercare-reconnection", + "text": "Choose a shared ritual that helps you feel close after intimate time.", + "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 a repeatable ritual of reconnection." + }, + { + "id": "15c53a3f-d4ea-4d83-8183-a02acc0d4bc0", + "pack_slug": "aftercare-reconnection", + "text": "Agree to check in with each other after trying something that feels emotionally intense.", + "partner_text": null, + "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": "Both partners commit to care and reflection after deeper exploration." + }, + { + "id": "1a9a5de1-9553-4ee3-8aa0-a9322f2a2922", + "pack_slug": "giving-receiving-attention", + "text": "Take turns receiving five uninterrupted minutes of affectionate attention.", + "partner_text": null, + "intensity": 2, + "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 agree to give and receive undivided affection." + }, + { + "id": "93113077-4b91-4dcb-8043-3f5ce016423d", + "pack_slug": "giving-receiving-attention", + "text": "Take turns asking for the kind of private attention you most want.", + "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 agree to voice a specific desire and respond to it." + }, + { + "id": "60885dd2-c40c-4aa3-8b47-c145340f34e8", + "pack_slug": "giving-receiving-attention", + "text": "Give each other a turn where one person only receives and the other only gives attention.", + "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 reciprocal focused giving and receiving." + }, + { + "id": "d7cadbc0-7364-4460-8d34-f58c899f6d0f", + "pack_slug": "giving-receiving-attention", + "text": "Tell each other one way you want to feel desired, then make space for both requests.", + "partner_text": null, + "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": "Both partners agree to make each other feel desired in individually meaningful ways." + }, + { + "id": "32ee31a5-1f30-4642-818f-23147085806a", + "pack_slug": "giving-receiving-attention", + "text": "Take turns creating a private experience centred entirely on the other person’s enjoyment.", + "partner_text": null, + "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": "Both partners want to alternate between giving undivided attention and receiving it." + }, + { + "id": "413b13df-59ed-457b-8ec6-0cef7eedd9e0", + "pack_slug": "giving-receiving-attention", + "text": "Agree to ask directly for what you want and answer honestly about what you can give.", + "partner_text": null, + "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": "Both partners agree to a direct, consent-led exchange of desire." + }, + { + "id": "e07e3411-7991-4f2c-8212-ea36b4c132c8", + "pack_slug": "sensory-cues", + "text": "Choose a shared scent for your next intentional evening.", + "partner_text": null, + "intensity": 2, + "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": "The couple selects one scent cue for an upcoming date night." + }, + { + "id": "81675895-acc1-4130-8416-95a81cde2d02", + "pack_slug": "sensory-cues", + "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": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": null, + "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": "4616a26b-c703-476b-837c-d0d0289e1eba", + "pack_slug": "sensory-cues", + "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": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": null, + "review_status": "draft", + "policy_risk": "low", + "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": "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": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": null, + "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": "99afc3b9-779a-43d5-87f1-dea81e9a4130", + "pack_slug": "private-performance", + "text": "Give your partner a dramatic, affectionate introduction.", + "partner_text": "Receive a dramatic, affectionate introduction from your partner.", + "intensity": 2, + "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 offers playful praise while the other receives a confidence-building performance." + }, + { + "id": "ad9432ef-79f8-4bd0-85ba-3fc0a7ecb49d", + "pack_slug": "private-performance", + "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": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": null, + "review_status": "draft", + "policy_risk": "low", + "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": "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": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": null, + "review_status": "draft", + "policy_risk": "low", + "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": "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": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": null, + "review_status": "draft", + "policy_risk": "edge", + "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 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": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": null, + "review_status": "draft", + "policy_risk": "low", + "intended_outcome": "One partner suggests a playful style detail and the other chooses whether to wear it." + }, + { + "id": "b2fff3a0-5e31-481b-8d10-dc09d1acabf3", + "pack_slug": "clothes-confidence", + "text": "Wear something that makes you feel more confident than usual for an evening at home.", + "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 intentionally dress for confidence at home." + }, + { + "id": "76e11907-dc88-44ba-8cbe-56befca23bec", + "pack_slug": "clothes-confidence", + "text": "Share one compliment about how the other partner looks when they feel most like themselves.", + "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": "Each partner receives an appearance-based affirmation." + }, + { + "id": "a3f412f4-756c-485e-8717-c0a5ce6da468", + "pack_slug": "clothes-confidence", + "text": "Agree a private dress code for a date night that feels new to you.", + "partner_text": null, + "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": "The couple jointly chooses a novel, mutually comfortable date-night presentation." + }, + { + "id": "2ea1bc1e-6bca-448f-8e88-5f449608d093", + "pack_slug": "fantasy-exchange", + "text": "Invent an imaginary getaway designed entirely around feeling close.", + "partner_text": null, + "intensity": 2, + "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": "The couple co-creates a romantic fantasy setting." + }, + { + "id": "2be7a23c-d7b8-4d66-80c5-208a43b98cfe", + "pack_slug": "fantasy-exchange", + "text": "Finish the sentence, 'A version of us with no interruptions would...' .", + "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": "Each partner shares an open-ended private-time wish." + }, + { + "id": "16f26dd3-1e51-4a41-8a23-f7811d72bed3", + "pack_slug": "fantasy-exchange", + "text": "Name one fictional setting that makes romance feel more exciting to you.", + "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": "The pair discovers compatible atmosphere preferences." + }, + { + "id": "7be3b657-b01e-4c1c-8d61-5914c9f3cd22", + "pack_slug": "fantasy-exchange", + "text": "Make a shared 'maybe someday' list of private experiences you could discuss before trying.", + "partner_text": null, + "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": "The couple creates a consent-first discussion list without committing to any item." + }, + { + "id": "2ea3d0fc-ad9e-4abf-85ee-6d4ed5235b98", + "pack_slug": "roleplay", + "text": "Pretend you are on a first date and ask each other three new questions.", + "partner_text": null, + "intensity": 2, + "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": "The couple refreshes their connection through a first-date scenario." + }, + { + "id": "48d2b298-fb69-492d-84e0-81365e9973b7", + "pack_slug": "roleplay", + "text": "Choose characters for a one-hour at-home date with a clear time to step out of character.", + "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": "The pair co-designs a bounded, playful roleplay date." + }, + { + "id": "fb1ddb30-b6d9-408b-8f7f-a4469a631b5b", + "pack_slug": "roleplay", + "text": "Write each other an invitation from a fictional admirer.", + "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": "Each partner receives a flirtatious, invented invitation." + }, + { + "id": "781484ce-77e4-44a3-8e20-bc42caa66f62", + "pack_slug": "roleplay", + "text": "Try a roleplay where one person leads the scene and you switch roles halfway through.", + "partner_text": null, + "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": "Both partners experience leading and following within an agreed fictional scene." + }, + { + "id": "c3735637-a37e-4634-83f4-0f3f833881e0", + "pack_slug": "settings-atmosphere", + "text": "Turn off the usual lights and create a new at-home date setting together.", + "partner_text": null, + "intensity": 2, + "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": "The pair jointly changes the mood of a familiar room." + }, + { + "id": "8a55c55a-9df3-4c37-844d-40ce54eb2e1d", + "pack_slug": "settings-atmosphere", + "text": "Plan an evening with one room, one playlist, and no other plans.", + "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": "The couple reserves an intentionally simple, focused evening." + }, + { + "id": "25b110f6-4696-4dda-8f0e-8d4f60775973", + "pack_slug": "settings-atmosphere", + "text": "Create a shared 'do not disturb' signal for private time at home.", + "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": "The couple agrees on a respectful cue that protects their uninterrupted time." + }, + { + "id": "f986c8c4-a6b0-4a91-8188-45e6d7db6ea4", + "pack_slug": "settings-atmosphere", + "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", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": null, + "review_status": "draft", + "policy_risk": "edge", + "intended_outcome": "The couple starts a close evening with mutual needs and limits stated aloud." + }, + { + "id": "9e304cde-e9ee-4028-877d-b74a067fe1d3", + "pack_slug": "surprise-novelty", + "text": "Swap one sealed note with a date-night idea inside.", + "partner_text": null, + "intensity": 2, + "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": "Each partner contributes one surprise idea for future time together." + }, + { + "id": "67f5b295-74db-4b64-8a44-93a4e28225d3", + "pack_slug": "surprise-novelty", + "text": "Choose a new ritual for saying goodbye at the end of a date.", + "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": "The pair establishes a novel end-of-date connection ritual." + }, + { + "id": "66175f9f-4b34-495c-8c17-8f03aaf71f9c", + "pack_slug": "surprise-novelty", + "text": "Choose one surprise element for a future evening, with a clear option to change your mind.", + "partner_text": null, + "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": "The couple chooses a bounded surprise while preserving ongoing consent." + }, + { + "id": "8bf57355-4f2c-4b14-84de-e22716165154", + "pack_slug": "long-distance-desire", + "text": "Send each other one voice note that makes the next reunion feel closer.", + "partner_text": null, + "intensity": 2, + "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 exchange anticipation-building audio messages." + }, + { + "id": "aebc08e3-6439-4957-8137-b7919055b325", + "pack_slug": "long-distance-desire", + "text": "Plan the first hour of your next reunion from different places.", + "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": "The couple co-plans a specific reconnecting ritual for their reunion." + }, + { + "id": "ec387dc2-2fab-443e-8ca7-5682314c8312", + "pack_slug": "long-distance-desire", + "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", + "config": {}, + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "inverse_of": null, + "review_status": "draft", + "policy_risk": "edge", + "intended_outcome": "The couple aligns on future closeness through reciprocal desire and boundary sharing." + }, + { + "id": "2e2ac779-1580-43b2-8a0d-02fdad597c08", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a personal signal about the effect their attention has on you." + }, + { + "id": "d066d491-9bd1-4ca4-8deb-395242249dd3", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Describe the kind of teasing remark that feels playful to you rather than awkward.", + "partner_text": null, + "intensity": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns your preferred style of flirtation and a boundary around what keeps it fun." + }, + { + "id": "7e3997e3-af44-44f9-8e28-a6031813e7a0", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Tell your partner one thing they do that immediately changes the mood between you.", + "partner_text": null, + "intensity": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner discovers a specific behaviour worth repeating when you both want more closeness." + }, + { + "id": "ffec43f7-cddd-4d00-8dc8-53431e7861a7", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner receives direct permission to use language that feels exciting to you." + }, + { + "id": "aaee2618-2b3b-433d-88f4-345fddba6438", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Describe a private conversation you would love to have when you both feel especially open.", + "partner_text": null, + "intensity": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns how to build anticipation in a way that feels welcome rather than vague." + }, + { + "id": "b837b28c-089e-4cb0-864b-da0ce14588ab", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner gets a concrete cue they can send before you reconnect." + }, + { + "id": "76a6e182-0d21-4c54-876a-b7f642990c67", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns a practical condition that helps you arrive present and receptive." + }, + { + "id": "16291ff0-0572-479b-83cd-b772af4cc382", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "anticipation", + "text": "Describe a small change to your usual evening routine that would make it feel more intentional.", + "partner_text": null, + "intensity": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives one realistic ritual to create a sense of occasion together." + }, + { + "id": "15daa6a1-1000-49fc-8380-8f82d084ab3c", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "anticipation", + "text": "Write what you would enjoy being asked to choose before your next intimate evening.", + "partner_text": null, + "intensity": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns where offering you a choice creates more excitement." + }, + { + "id": "56892de1-96d8-4eed-854b-328423730f19", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "anticipation", + "text": "Share one private surprise you would genuinely enjoy your partner planning for you.", + "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 clear idea for an unexpected gesture, including the kind of surprise you welcome." + }, + { + "id": "bc549b37-393f-42e2-8651-c71eb1eb3268", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner gets language that builds suspense without guessing what would land well." + }, + { + "id": "f04e87ab-3ad8-4c68-8b21-3469f80332bc", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns a low-pressure moment where your initiative would feel attractive." + }, + { + "id": "b3191b9d-f8a5-41a7-81e7-c5f408f80a50", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a phrase that makes your interest unmistakable and easy to answer." + }, + { + "id": "f58169f1-55b4-42b6-8529-eab6ac3a4601", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner gets a practical guide for encouraging your confidence in the moment." + }, + { + "id": "75a70ca3-c892-4876-8c75-528401d3a203", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "taking-the-lead", + "text": "Write the private challenge you would like to set for your partner, including what would make it exciting.", + "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 consensual challenge with the reason it appeals to you." + }, + { + "id": "5fef9957-1b0c-4ee3-872b-61d6a397101a", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns a simple place where taking initiative would feel caring." + }, + { + "id": "a854373f-8c19-4d76-847a-e92da9c249f6", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "following", + "text": "Describe the kind of invitation that makes it easy for you to say yes.", + "partner_text": null, + "intensity": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns the wording and atmosphere that lower pressure for you." + }, + { + "id": "4532252e-e722-4055-82b2-62a2614c74aa", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "following", + "text": "Write what helps you trust your partner’s lead during a more intimate moment.", + "partner_text": null, + "intensity": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns the specific reassurance or check-in that helps you relax into their plan." + }, + { + "id": "05b69bff-18d6-4b59-881f-36af5bcc052f", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "following", + "text": "Share one surprise choice you would enjoy your partner making for you.", + "partner_text": null, + "intensity": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner gets a defined area where surprise feels exciting and safe." + }, + { + "id": "da103b20-737d-4fb1-845e-c2881d0803bc", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "following", + "text": "Describe how you want your partner to check that you are still enjoying their lead.", + "partner_text": null, + "intensity": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a clear check-in preference they can use without breaking the mood." + }, + { + "id": "e36bb2ed-4fea-4b6c-8018-35b77a0d1565", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner learns the conditions that make you comfortable giving them more influence." + }, + { + "id": "0370cf39-1b50-465d-869f-7ba830fc581e", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns where collaboration matters most to you and can plan it jointly." + }, + { + "id": "6f953e60-bb58-4552-8c60-525c9a39b798", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a simple shared cue that makes mutual enthusiasm easier to read." + }, + { + "id": "a737ad68-0c53-4116-8ff9-cab4056c3ad1", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns a mutual agreement that makes exploration feel safer." + }, + { + "id": "6348b9b3-2ef9-4d27-8068-4d276a0b42bf", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner gets a workable rhythm for sharing initiative rather than defaulting to one person." + }, + { + "id": "868481ed-9eff-4c36-8ce1-a60ce329b66a", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "shared-control", + "text": "Describe one moment where you would enjoy pausing together to decide what you both want.", + "partner_text": null, + "intensity": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns when a joint decision would add connection instead of interrupting it." + }, + { + "id": "73d6a615-8ed9-4c28-8c98-02fa64a24e89", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "shared-control", + "text": "Write the private agreement that would make you feel brave enough to explore more together.", + "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 concrete mutual promise that supports bolder, consent-led choices." + }, + { + "id": "80ec452b-d3b0-4a46-8c24-d51d4b55e529", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a clear signal for adjusting pace without uncertainty." + }, + { + "id": "97b2e7a3-0c35-4abe-89c6-eab6d9466265", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "boundaries-check-ins", + "text": "Describe the best way for your partner to ask whether you are comfortable.", + "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 check-in style that feels caring rather than clinical." + }, + { + "id": "a1741217-5dd7-4dd5-8c99-70002140c3da", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns a condition that turns curiosity into a safer shared possibility." + }, + { + "id": "8479262c-ae4d-4e6c-84e2-e835be1de445", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner gets direct guidance for making a change of plan feel respected and easy." + }, + { + "id": "1361a95f-b6b1-42ee-884c-9497040337ed", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns what deserves a calm conversation in advance." + }, + { + "id": "e8fc819b-ab8a-4b22-872a-042f9b04f925", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "boundaries-check-ins", + "text": "Share a boundary that makes you feel more able to be adventurous within it.", + "partner_text": null, + "intensity": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner learns the limit that creates freedom rather than reducing the mood." + }, + { + "id": "5eaef369-8ae5-42a3-8ac3-deafc1c930b1", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "aftercare-reconnection", + "text": "Describe how you like to reconnect after an especially close moment.", + "partner_text": null, + "intensity": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns the small act that helps you feel settled and connected afterward." + }, + { + "id": "65179ffc-ca2b-4b90-8bf1-605d44ecb405", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a ready-made invitation for a thoughtful debrief." + }, + { + "id": "d43342d9-a4d9-4dfc-84db-57260e32a2c0", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns how to recognise your vulnerability in a way that lands." + }, + { + "id": "5c561bb5-57f1-439f-824a-c3fa2abfbb6e", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner gets a concrete picture of the calm connection you want afterward." + }, + { + "id": "60369326-6435-42eb-8427-a17dd8cfa479", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns the affirmation that helps you feel proud rather than self-conscious." + }, + { + "id": "3930b46f-7095-4b6d-8109-518bbc815f45", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "aftercare-reconnection", + "text": "Share the part of a close experience you would most want to talk through afterward.", + "partner_text": null, + "intensity": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner discovers a specific act of focus that makes you feel prioritised." + }, + { + "id": "dc83f9c3-ed6d-4e07-8ab8-6de7e5c8d450", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "giving-receiving-attention", + "text": "Write about a moment when you feel most noticed by your partner.", + "partner_text": null, + "intensity": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns the context in which their attention has the greatest effect." + }, + { + "id": "ef2f7126-c9ea-47e9-8b57-ba931971f268", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "giving-receiving-attention", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns how you naturally show interest and can recognise the signal." + }, + { + "id": "39a979e7-9119-4c25-831c-6437e9f5af09", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "giving-receiving-attention", + "text": "Describe the kind of praise you most enjoy receiving privately.", + "partner_text": null, + "intensity": 3, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner gets a personal guide to language that makes you feel seen." + }, + { + "id": "1ec2a8f4-13c8-4193-8a4b-7a255db0115c", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "giving-receiving-attention", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a low-pressure way to ask directly for more of you." + }, + { + "id": "fe7ebf6a-2499-46ad-85d6-0e54309f3a06", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "giving-receiving-attention", + "text": "Share the private gesture that would make you feel unmistakably chosen by your partner.", + "partner_text": null, + "intensity": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner learns a specific, high-impact way to make you feel desired." + }, + { + "id": "14aab6fe-4884-450f-845a-eb6efa731907", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "sensory-cues", + "text": "Describe a scent that instantly makes an evening feel more intimate to you.", + "partner_text": null, + "intensity": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns an atmosphere cue they can use when planning a close night in." + }, + { + "id": "128bf979-eba4-42d8-83ec-e033e4a47038", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "sensory-cues", + "text": "Write about the music that would help you leave everyday stress behind together.", + "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 mood-setting choice that supports a more connected evening." + }, + { + "id": "f320050b-82cd-49ad-8f13-a59022500e5a", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns a practical way to shape the room around your comfort." + }, + { + "id": "6976eed4-12ea-44da-8d17-8006778d9458", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives an actionable detail for creating a setting that appeals to you." + }, + { + "id": "85ca0762-b683-4f53-8af3-6c4801a5ced1", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns a vocal quality that makes you feel drawn closer." + }, + { + "id": "3bacb807-ec73-4252-887f-a0a34b180db0", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns how to make their attention feel encouraging rather than exposing." + }, + { + "id": "3c1e0dc2-f533-4994-8d41-0ec9bc3113c6", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns the feedback that builds your confidence in the moment." + }, + { + "id": "d51404b4-7c24-47e5-8271-3b22984b08c8", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "edge", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "clothes-confidence", + "text": "Write the colour you would love your partner to notice you wearing.", + "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 small visual detail to notice and celebrate." + }, + { + "id": "3c07cd62-925a-4c2a-80f7-3427d389a25c", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives guidance for praise that strengthens your confidence." + }, + { + "id": "e17b0aa4-207e-40b7-843c-3e504e8a2bb8", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "edge", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "fantasy-exchange", + "text": "Describe the kind of imagined setting that makes you feel more adventurous with your partner.", + "partner_text": null, + "intensity": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a setting idea that can inspire a themed evening." + }, + { + "id": "6599136d-4dd0-4afa-8b41-1bbab55d3ce5", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns the character energy you are curious to try." + }, + { + "id": "e58e67e6-bb89-427c-8556-3877458e0a4d", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner gets a tailored starting line for playful imagination together." + }, + { + "id": "0bdc9fa0-5712-46d4-840e-2948f870f003", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns the ingredient that turns a vague idea into something engaging." + }, + { + "id": "63ff5ec0-4cd3-4a8a-88e1-0dd91000a8d4", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "fantasy-exchange", + "text": "Share a private fantasy premise you would like to explore only in conversation first.", + "partner_text": null, + "intensity": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner learns a higher-intensity idea while the first follow-up remains a safe discussion." + }, + { + "id": "5e01ff9b-7eec-4329-8e26-6f617147305f", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "roleplay", + "text": "Write the nickname you would enjoy your partner using during a playful private game.", + "partner_text": null, + "intensity": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives language that helps set a playful tone you welcome." + }, + { + "id": "96dda26d-39e0-4c04-8d60-bfbecaddb75a", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "roleplay", + "text": "Describe a simple character trait you would enjoy your partner pretending to have for one evening.", + "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 low-stakes roleplay cue that can make an ordinary night feel new." + }, + { + "id": "60c7ec38-1d73-4ed5-8196-9acac43adfbe", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "roleplay", + "text": "Share a bolder character dynamic you are curious to discuss with your partner before trying it.", + "partner_text": null, + "intensity": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner learns what dynamic interests you and can talk through comfort, limits, and interest first." + }, + { + "id": "1459e780-fc02-4240-8bb0-39bf51067e32", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns which environment helps you feel most present together." + }, + { + "id": "4c7b2063-f545-4761-8438-9bbc681444fe", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns the elements of novelty or escape you would like recreated." + }, + { + "id": "c6a7b5f8-e777-49bb-8af5-7b4b6aad7ee4", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns the practical conditions needed for you to feel unhurried." + }, + { + "id": "cc9d5fbc-3353-4112-8330-6f4595b8a933", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives an emotional reference point and ideas for bringing it back." + }, + { + "id": "6d1d7187-817f-44e2-8970-d37ad386c714", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner learns your appetite for novelty and the limits that make the plan feel right." + }, + { + "id": "034a8892-980a-4696-8001-a0801b97ac8b", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "surprise-novelty", + "text": "Write one small unexpected gesture that would brighten a normal day with your partner.", + "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 specific surprise that signals private affection." + }, + { + "id": "81e240ed-34ad-4b06-8745-9ee71da91ded", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "surprise-novelty", + "text": "Describe the kind of spontaneous invitation you would be happy to receive.", + "partner_text": null, + "intensity": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns where novelty would improve your shared rhythm." + }, + { + "id": "b89d2081-285a-4034-89e0-1c24ecb55833", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner learns both the surprise you want and the consent conversation needed before planning it." + }, + { + "id": "7d784ae6-ada4-43cf-8826-5f10e825e43f", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns the kind of connection that travels well between visits." + }, + { + "id": "347d52d9-13f4-4002-82e2-22a0db0d9ea4", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "text_answer", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a repeatable way to maintain intimacy across distance." + }, + { + "id": "6dcc1ae6-7050-4918-8a54-776ab968f2a2", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_length": 500 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns which shared anticipation would make a reunion more meaningful." + }, + { + "id": "9758244c-fc2f-4757-86d1-5721a49c31ef", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "long-distance-desire", + "text": "Write the private promise you would like to exchange before a longer period apart.", + "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 commitment that can sustain desire, reassurance, and connection until you reunite." + }, + { + "id": "f4798e53-139b-4d13-8bf8-4d2a26843776", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner hears an easy handover of initiative and can say yes to one contained surprise." + }, + { + "id": "024d56a6-33c0-4fe1-8812-7ae731b57ce3", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "following", + "text": "Record one thing your partner could choose for you that would feel like a thoughtful treat.", + "partner_text": null, + "intensity": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner hears the conditions that make following feel exciting rather than uncertain." + }, + { + "id": "bb211547-2589-477d-8ce1-2b191f7d4564", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "following", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner hears two real options and can choose the version that feels most appealing." + }, + { + "id": "32c403bc-7434-4250-8d69-01a2db4bf761", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns a simple shared-control format and can suggest the first decision." + }, + { + "id": "d391bbec-5d05-4022-8ab3-864c1382157f", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "boundaries-check-ins", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns your personal distinction and can plan novelty that feels welcome." + }, + { + "id": "fdf2619f-7aba-4340-8dd0-5bbd38d24f9a", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner hears your preferred pause signal and knows it protects connection rather than rejects them." + }, + { + "id": "968d443a-9011-4956-8346-7dc77296b095", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "aftercare-reconnection", + "text": "Record the small affectionate gesture that helps you feel close after a playful evening together.", + "partner_text": null, + "intensity": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner hears a specific reconnection preference they can offer without guessing." + }, + { + "id": "2e7af586-04b9-4dee-8877-3168eb562608", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns the reassurance or reflection that helps novelty become a positive shared memory." + }, + { + "id": "93f9f7ee-27e2-49e7-8acf-c1c323203cd2", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner gets a simple attention cue they can use in an ordinary evening." + }, + { + "id": "c6a83aaf-5d7c-4b14-8570-dc848c0eccde", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns what presence sounds and feels like to you and can adjust their pace." + }, + { + "id": "8aa7bfe7-a065-4e08-85fd-3b5184182567", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner hears the feedback that encourages them and can understand what is working for you." + }, + { + "id": "3e71f490-f779-488a-8529-92111ad4e7df", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner learns an audible atmosphere cue and can bring it into your next shared setting." + }, + { + "id": "680819eb-de39-4ddd-8761-e549e672c67c", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "private-performance", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "low", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "private-performance", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "private-performance", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "edge", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "edge", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "edge", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "roleplay", + "text": "Record a playful opening line for a pretend first meeting with your partner.", + "partner_text": null, + "intensity": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "roleplay", + "text": "In character, record the agreement you would want before a bolder roleplay scene begins.", + "partner_text": null, + "intensity": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "edge", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "settings-atmosphere", + "text": "In a hushed voice, describe the kind of private escape you would like to create together without leaving home.", + "partner_text": null, + "intensity": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner hears the emotional destination you want and can help transform the space into it." + }, + { + "id": "529d5f42-8293-445f-8108-4729b296b16f", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "surprise-novelty", + "text": "Record one harmless surprise your partner could prepare that would make you feel pursued.", + "partner_text": null, + "intensity": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "edge", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 2, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "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": 4, + "question_type": "audio", + "config": { + "max_duration_seconds": 60 + }, + "inverse_of": null, + "policy_risk": "edge", + "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", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "clothes-confidence", + "text": "Share a photo of an outfit that makes you feel confident.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on an outfit that makes you feel confident." + }, + { + "id": "d72dbc15-24af-4889-8f08-062de6e3062b", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "clothes-confidence", + "text": "Share a photo of a private-date outfit you would like your partner to notice.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a private-date outfit you would like your partner to notice." + }, + { + "id": "924b8e03-9d3b-4cd4-897d-0522f97b0cd8", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "settings-atmosphere", + "text": "Share a photo of a room detail that creates a close mood.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a room detail that creates a close mood." + }, + { + "id": "8c6b296b-a91b-4097-80fb-df3bd256a283", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "sensory-cues", + "text": "Share a photo of lighting that feels warm and inviting.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on lighting that feels warm and inviting." + }, + { + "id": "de35f166-dbbd-4b10-8c23-1f265cfeefd2", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Share a photo of an object that could set a playful private mood.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on an object that could set a playful private mood." + }, + { + "id": "b0e0e94b-995f-4d4b-84dc-4e47ec7b0878", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Share a photo of a handwritten note for your partner.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a handwritten note for your partner." + }, + { + "id": "b4c06c1f-918b-4987-8d62-cf41b295117d", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "sensory-cues", + "text": "Share a photo of a playlist screen that fits a private date mood.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a playlist screen that fits a private date mood." + }, + { + "id": "b74e504c-ac27-42b5-86aa-0a0b2364ac3e", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "clothes-confidence", + "text": "Share a photo of a colour that makes you feel bold.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a colour that makes you feel bold." + }, + { + "id": "e48f8ca3-1d08-478b-8671-339b12370019", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "sensory-cues", + "text": "Share a photo of a scent or candle that sets a close atmosphere.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a scent or candle that sets a close atmosphere." + }, + { + "id": "248e6499-4234-4b2d-8712-56975dd00bbb", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "settings-atmosphere", + "text": "Share a photo of a cosy corner you would use for a private date.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a cosy corner you would use for a private date." + }, + { + "id": "5633f359-3c19-483e-8c69-bf7da974d996", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "settings-atmosphere", + "text": "Share a photo of a mood board for a more adventurous date.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a mood board for a more adventurous date." + }, + { + "id": "e42105b7-470c-4d8c-8e6d-e808d6b7a9a6", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "clothes-confidence", + "text": "Share a photo of an accessory that helps you feel confident.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on an accessory that helps you feel confident." + }, + { + "id": "68f39eed-18ff-4e07-8cf9-44592bd1bc70", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "sensory-cues", + "text": "Share a photo of a fabric or texture that feels luxurious.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a fabric or texture that feels luxurious." + }, + { + "id": "bfcd0ebf-ccbe-4894-88c9-83387e386951", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "settings-atmosphere", + "text": "Share a photo of a drink setup for a slow private conversation.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a drink setup for a slow private conversation." + }, + { + "id": "725168e6-9462-45f4-8f02-239248a10d88", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "sensory-cues", + "text": "Share a photo of a song lyric that captures your private mood.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a song lyric that captures your private mood." + }, + { + "id": "19de98a6-bcb0-4640-81e8-db4cacad6adf", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "giving-receiving-attention", + "text": "Share a photo of a private invitation you have written.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a private invitation you have written." + }, + { + "id": "edba6f87-9ae2-4eb0-8175-fab30303baa9", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "settings-atmosphere", + "text": "Share a photo of a setting detail that makes you want to linger.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a setting detail that makes you want to linger." + }, + { + "id": "779466c3-b10e-4811-8e8d-4a3d84063522", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "clothes-confidence", + "text": "Share a photo of a colour pairing for a playful date.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a colour pairing for a playful date." + }, + { + "id": "9f525ab7-c37c-4174-8f05-3d4a4a395ee6", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "anticipation", + "text": "Share a photo of an object that represents anticipation to you.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on an object that represents anticipation to you." + }, + { + "id": "74db05f9-8577-4c2e-8520-eb21ff7daf46", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "clothes-confidence", + "text": "Share a photo of a favourite outfit detail.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a favourite outfit detail." + }, + { + "id": "e19a929d-4b56-4ead-815f-610f8285407c", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "boundaries-check-ins", + "text": "Share a photo of a handwritten boundary or private agreement.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a handwritten boundary or private agreement." + }, + { + "id": "175978b9-1f62-4cd3-85b6-aa7c0e0b06d5", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "settings-atmosphere", + "text": "Share a photo of a space you would make more inviting.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a space you would make more inviting." + }, + { + "id": "298f2bdd-4c9e-4e2c-8879-f5f54ebee488", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Share a photo of a book cover or film poster that inspires a date mood.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a book cover or film poster that inspires a date mood." + }, + { + "id": "48442f1e-de0d-45c4-8673-a30d4b4343b2", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "settings-atmosphere", + "text": "Share a photo of a table detail for a more intentional date.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a table detail for a more intentional date." + }, + { + "id": "3f7dded0-467a-47bf-800b-7b857f572b11", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "surprise-novelty", + "text": "Share a photo of a small surprise you would prepare for your partner.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a small surprise you would prepare for your partner." + }, + { + "id": "435e8c9c-cba1-45ab-89c8-efbd8176f8c5", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "sensory-cues", + "text": "Share a photo of a private-date playlist title you created.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a private-date playlist title you created." + }, + { + "id": "68afc4c9-f53f-474a-8970-e4aa4e59c50c", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "clothes-confidence", + "text": "Share a photo of an accessory your partner might choose for you.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on an accessory your partner might choose for you." + }, + { + "id": "1488972c-50b6-48f2-88bb-5f3b04501f46", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "sensory-cues", + "text": "Share a photo of a lighting choice that makes you feel relaxed.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a lighting choice that makes you feel relaxed." + }, + { + "id": "82d012fb-875a-40ec-83c3-20331d2e05c4", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Share a photo of a card or note that feels flirty.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a card or note that feels flirty." + }, + { + "id": "abb1b11c-28e2-47bd-8307-80be0ce78ece", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "settings-atmosphere", + "text": "Share a photo of a detail that makes a shared space feel special.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "Your partner receives a safe visual cue based on a detail that makes a shared space feel special." + }, + { + "id": "37a56e01-8ddf-41d5-8616-8dc95bcda995", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "sensory-cues", + "text": "Share a photo of a texture you would include in a private setting.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner receives a safe visual cue based on a texture you would include in a private setting." + }, + { + "id": "3ab903eb-272b-496f-8980-d167016ec485", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Share a photo of an object that makes you feel more confident.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner receives a safe visual cue based on an object that makes you feel more confident." + }, + { + "id": "9445787f-8df1-4c22-86ad-9786584dadd4", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Share a photo of a private-date idea written on paper.", + "partner_text": null, + "intensity": 3, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner receives a safe visual cue based on a private-date idea written on paper." + }, + { + "id": "de261d46-6afa-47af-869b-c6dac988f864", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "settings-atmosphere", + "text": "Share a photo of a setting that feels calm and focused.", + "partner_text": null, + "intensity": 4, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner receives a safe visual cue based on a setting that feels calm and focused." + }, + { + "id": "e82509f4-0462-4e0b-8783-b7079e2a23d1", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "clothes-confidence", + "text": "Share a photo of a colour that feels more daring than usual.", + "partner_text": null, + "intensity": 4, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner receives a safe visual cue based on a colour that feels more daring than usual." + }, + { + "id": "1bbc2021-2e32-43f7-88dc-e6fbe5b11ad1", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "giving-receiving-attention", + "text": "Share a photo of a small detail that makes you feel desired.", + "partner_text": null, + "intensity": 4, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner receives a safe visual cue based on a small detail that makes you feel desired." + }, + { + "id": "55baec14-01cc-42c2-8200-8fe8cfa5e015", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "settings-atmosphere", + "text": "Share a photo of a private mood board made from everyday objects.", + "partner_text": null, + "intensity": 4, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner receives a safe visual cue based on a private mood board made from everyday objects." + }, + { + "id": "af54d565-4fa7-41da-8dac-5913b16e3cc0", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Share a photo of a note that describes a private mood.", + "partner_text": null, + "intensity": 4, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner receives a safe visual cue based on a note that describes a private mood." + }, + { + "id": "bd6fd867-1d0f-4c9d-8c86-a68e01d8e8b2", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "settings-atmosphere", + "text": "Share a photo of a room corner you would transform for a date.", + "partner_text": null, + "intensity": 4, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner receives a safe visual cue based on a room corner you would transform for a date." + }, + { + "id": "5011ab29-d99c-4e5b-8c14-757b1de88b5d", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "anticipation", + "text": "Share a photo of a song queue that builds anticipation.", + "partner_text": null, + "intensity": 4, + "question_type": "photo", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "Your partner receives a safe visual cue based on a song queue that builds anticipation." + }, + { + "id": "d8d5d88c-1f59-4606-88b8-824b53c00a0b", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "surprise-novelty", + "text": "Who is more likely to plan a private surprise?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to plan a private surprise." + }, + { + "id": "8cc1f702-1bcf-43a7-869f-8d12af895487", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "giving-receiving-attention", + "text": "Who is more likely to make the first move?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to make the first move." + }, + { + "id": "525b6ef9-4c9c-48dc-807c-3c0239ec67a0", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to choose the boldest date mood?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to choose the boldest date mood." + }, + { + "id": "d11240fc-c996-424f-81d0-45f2583f8c11", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "anticipation", + "text": "Who is more likely to ask for more anticipation?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to ask for more anticipation." + }, + { + "id": "5f5f6e6a-a65c-408f-8762-27f4717848e0", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to turn a small detail into a private ritual?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to turn a small detail into a private ritual." + }, + { + "id": "4465742e-9353-4726-88a5-7a4d9c8860fa", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to suggest a new private dynamic?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to suggest a new private dynamic." + }, + { + "id": "e29075e0-b402-485c-8400-3602502521d4", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "sensory-cues", + "text": "Who is more likely to set the mood with music?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to set the mood with music." + }, + { + "id": "d0733d23-0b55-401b-8703-439dd9cb89c4", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to leave a flirty note?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to leave a flirty note." + }, + { + "id": "681123f4-33a3-444b-868a-7500277d8df8", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "clothes-confidence", + "text": "Who is more likely to choose the private date outfit?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to choose the private date outfit." + }, + { + "id": "c07b956b-fbf4-4c41-8f1e-64c0cf7ef96a", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to turn confidence into a plan?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to turn confidence into a plan." + }, + { + "id": "5409ec30-acbc-4f4e-8f5b-ab67aad4aba2", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "anticipation", + "text": "Who is more likely to suggest a slower build-up?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to suggest a slower build-up." + }, + { + "id": "4227c38b-e313-4601-8822-7885b00acca0", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "surprise-novelty", + "text": "Who is more likely to choose the surprise element?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to choose the surprise element." + }, + { + "id": "38fe100d-f731-400b-8a8a-675542b10541", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "boundaries-check-ins", + "text": "Who is more likely to name a boundary first?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to name a boundary first." + }, + { + "id": "6715cebb-17b4-4be1-838f-0393db3c67aa", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to plan a more adventurous private date?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to plan a more adventurous private date." + }, + { + "id": "c3b03f20-bf18-42b6-8103-d2c50a7388ad", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "taking-the-lead", + "text": "Who is more likely to take the lead after checking in?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to take the lead after checking in." + }, + { + "id": "7bbd77ec-38a5-423e-81f4-37011fa3c303", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to suggest a private challenge?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to suggest a private challenge." + }, + { + "id": "2d187b55-4a56-40bd-81d7-5ec80d63e5f2", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "surprise-novelty", + "text": "Who is more likely to keep the best private secret?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to keep the best private secret." + }, + { + "id": "93dd40b6-4ca7-409e-8215-68395c77c4c1", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to choose a bolder private mood?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to choose a bolder private mood." + }, + { + "id": "306e9471-8aba-4318-8e1c-088f2fc21228", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "giving-receiving-attention", + "text": "Who is more likely to make a private invitation feel special?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to make a private invitation feel special." + }, + { + "id": "35074f97-aeb4-457d-8fca-632dc9c2615c", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "shared-control", + "text": "Who is more likely to turn curiosity into a shared plan?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to turn curiosity into a shared plan." + }, + { + "id": "a00d9945-57e6-4974-8b33-56a020db8bf7", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "taking-the-lead", + "text": "Who is more likely to choose the final private detail?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to choose the final private detail." + }, + { + "id": "55e7916d-5fba-487b-8c96-e314c58965af", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "roleplay", + "text": "Who is more likely to suggest a role change?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to suggest a role change." + }, + { + "id": "98eabb56-6a1c-49f7-87d1-f0c299b0858d", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "anticipation", + "text": "Who is more likely to make anticipation last longer?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to make anticipation last longer." + }, + { + "id": "7bb60622-c0ab-4bbe-83bf-2751b9d2d27d", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "settings-atmosphere", + "text": "Who is more likely to choose a new private setting?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to choose a new private setting." + }, + { + "id": "8596edef-cc09-4e1b-81b4-9c420087179c", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to ask for a more daring version?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "low", + "intended_outcome": "The couple gets a playful comparison about who is more likely to ask for a more daring version." + }, + { + "id": "9b5a89f7-929d-484e-818b-b3531b6e1da6", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "taking-the-lead", + "text": "Who is more likely to guide a private experience?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "The couple gets a playful comparison about who is more likely to guide a private experience." + }, + { + "id": "796ea7de-c18e-490c-8f18-39cfcceb2433", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to suggest something outside the usual routine?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "The couple gets a playful comparison about who is more likely to suggest something outside the usual routine." + }, + { + "id": "6ddb35ab-3c41-47d2-810f-b549334bcab4", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to make a private date feel more charged?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "The couple gets a playful comparison about who is more likely to make a private date feel more charged." + }, + { + "id": "41784c21-ddec-400b-89e2-76d133f1118e", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "boundaries-check-ins", + "text": "Who is more likely to suggest a clear pause signal?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "The couple gets a playful comparison about who is more likely to suggest a clear pause signal." + }, + { + "id": "209ff8f4-c8c5-46ce-831b-7cf2cebbaa6a", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "fantasy-exchange", + "text": "Who is more likely to turn a fantasy into a conversation?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "The couple gets a playful comparison about who is more likely to turn a fantasy into a conversation." + }, + { + "id": "01097e93-2afb-4953-8c40-33e04978e121", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to choose the private challenge level?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "The couple gets a playful comparison about who is more likely to choose the private challenge level." + }, + { + "id": "b69350c5-9119-4d7b-8001-9b37466d1631", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "surprise-novelty", + "text": "Who is more likely to add mystery to a private date?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "The couple gets a playful comparison about who is more likely to add mystery to a private date." + }, + { + "id": "3ef9571b-c85c-4b7c-864f-96eac8b21203", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "boundaries-check-ins", + "text": "Who is more likely to suggest a bolder private agreement?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "The couple gets a playful comparison about who is more likely to suggest a bolder private agreement." + }, + { + "id": "e1df8bc5-3378-47fb-8ff8-809f9b59e2f4", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to make a private moment feel intense?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "The couple gets a playful comparison about who is more likely to make a private moment feel intense." + }, + { + "id": "70021c4c-0a58-405e-8a64-a8b1158231c3", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to choose the most adventurous detail?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "The couple gets a playful comparison about who is more likely to choose the most adventurous detail." + }, + { + "id": "e2d9c463-d3a1-4a6a-8df5-ec45fe5e9f9b", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "anticipation", + "text": "Who is more likely to start a private conversation about curiosity?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "The couple gets a playful comparison about who is more likely to start a private conversation about curiosity." + }, + { + "id": "69e2a9a1-8f1f-4cbb-8249-04c2a3204dc6", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to suggest a private experiment?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "The couple gets a playful comparison about who is more likely to suggest a private experiment." + }, + { + "id": "f9c97901-9b1d-4946-8166-949c6cfc7787", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "boundaries-check-ins", + "text": "Who is more likely to turn a boundary into a better plan?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "The couple gets a playful comparison about who is more likely to turn a boundary into a better plan." + }, + { + "id": "a4d443de-bf1d-41e3-85a3-dac3da03c6ab", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "flirty-communication", + "text": "Who is more likely to suggest a private confidence boost?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "inverse_of": null, + "policy_risk": "edge", + "intended_outcome": "The couple gets a playful comparison about who is more likely to suggest a private confidence boost." + }, + { + "id": "14d38383-fb56-4e52-80b4-7ffafdeed00a", + "allowed_couple_genders": null, + "target_user_genders": null, + "required_props": null, + "review_status": "draft", + "pack_slug": "surprise-novelty", + "text": "Who is more likely to plan the more daring surprise?", + "partner_text": null, + "intensity": 4, + "question_type": "who_likely", + "config": {}, + "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 new file mode 100644 index 0000000..21056af --- /dev/null +++ b/docs/product/question-drafts/play-safe-spicy-v1.md @@ -0,0 +1,45 @@ +# Play-safe spicy question draft v1 + +Status: source-only, unpublished, not approved, imported, or published. This is an editorial draft for human policy review. + +## Packs + +- 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: 23 questions. +- Giving and Receiving Attention: 37 questions. +- Aftercare and Reconnection: 29 questions. + +## Exact distribution + +- 550 total: 300 swipe, 100 text_answer, 70 audio, 40 photo, 40 who_likely. +- Intensities: 120 at level 2, 300 at level 3, 130 at level 4. +- Swipe: 120 asymmetric concepts as 120 primaries plus 120 inverse rows, and 60 symmetric rows. + +## Current in-app outcomes + +- Swipe proposals create a mutual yes or maybe result. Asymmetric rows use reversed partner wording and inverse links. +- Text answers let each partner provide the final private detail in their own words. +- Audio prompts create a private 60-second spoken result. +- Photo prompts request only safe clothed outfits, objects, notes, lighting, and settings. +- Who-is-more-likely prompts create a light comparison and a natural private follow-up. + +## Policy boundaries + +Developer-authored wording avoids named sexual acts, anatomy, sex toys, fetish labels, nudity, public sexual activity, coercion, and instructional wording. Intensity 4 uses edge-reviewed language about adult private dynamics, boundaries, roles, surprise, and user-led detail. This is not a claim of Google approval. + +Known limitation: the current API accepts response_data loosely. This source draft assumes no structured compatibility builder or safe user-generated-content moderation envelope, and uses only existing supported question types. + +Run node scripts/validate-question-draft.mjs to verify this source-only contract, +including artificial discriminator and repeated-opening checks. diff --git a/docs/product/question-drafts/text-answer-concept-source.md b/docs/product/question-drafts/text-answer-concept-source.md new file mode 100644 index 0000000..77255d4 --- /dev/null +++ b/docs/product/question-drafts/text-answer-concept-source.md @@ -0,0 +1,405 @@ +# Play-safe spicy text-answer concept source + +This source preserves 100 authored `text_answer` concepts for review. It is a draft content source only and is not a database seed or deployment input. + +## Entries + +1. **Theme:** Flirty communication | **Intensity:** 2 + **Prompt:** Write the compliment you most want your partner to give you before a close moment. + **Intended outcome:** Your partner learns the exact reassurance that makes you feel wanted and can use it as a sincere opening. + +2. **Theme:** Flirty communication | **Intensity:** 2 + **Prompt:** Finish this sentence for your partner: “When you look at me like that, I want you to know...” + **Intended outcome:** Your partner receives a personal signal about the effect their attention has on you. + +3. **Theme:** Flirty communication | **Intensity:** 3 + **Prompt:** Write a one-line invitation that would make you smile if your partner sent it unexpectedly. + **Intended outcome:** Your partner gets a ready-to-use private message and learns the tone that draws you in. + +4. **Theme:** Flirty communication | **Intensity:** 3 + **Prompt:** Describe the kind of teasing remark that feels playful to you rather than awkward. + **Intended outcome:** Your partner learns your preferred style of flirtation and a boundary around what keeps it fun. + +5. **Theme:** Flirty communication | **Intensity:** 3 + **Prompt:** Tell your partner one thing they do that immediately changes the mood between you. + **Intended outcome:** Your partner discovers a specific behaviour worth repeating when you both want more closeness. + +6. **Theme:** Flirty communication | **Intensity:** 4 + **Prompt:** Write the boldest thing you would like your partner to say to you privately, in your own words. + **Intended outcome:** Your partner receives direct permission to use language that feels exciting to you. + +7. **Theme:** Flirty communication | **Intensity:** 4 + **Prompt:** Describe a private conversation you would love to have when you both feel especially open. + **Intended outcome:** Your partner learns the subject you are curious to explore and can choose a comfortable time to start it. + +8. **Theme:** Anticipation | **Intensity:** 2 + **Prompt:** Describe the ideal first hint that a special evening together is coming. + **Intended outcome:** Your partner learns how to build anticipation in a way that feels welcome rather than vague. + +9. **Theme:** Anticipation | **Intensity:** 2 + **Prompt:** Write the kind of message that would make you look forward to seeing your partner later. + **Intended outcome:** Your partner gets a concrete cue they can send before you reconnect. + +10. **Theme:** Anticipation | **Intensity:** 3 + **Prompt:** Tell your partner what preparation would make you feel more relaxed before a private date at home. + **Intended outcome:** Your partner learns a practical condition that helps you arrive present and receptive. + +11. **Theme:** Anticipation | **Intensity:** 3 + **Prompt:** Describe a small change to your usual evening routine that would make it feel more intentional. + **Intended outcome:** Your partner receives one realistic ritual to create a sense of occasion together. + +12. **Theme:** Anticipation | **Intensity:** 3 + **Prompt:** Write what you would enjoy being asked to choose before your next intimate evening. + **Intended outcome:** Your partner learns where offering you a choice creates more excitement. + +13. **Theme:** Anticipation | **Intensity:** 4 + **Prompt:** Share one private surprise you would genuinely enjoy your partner planning for you. + **Intended outcome:** Your partner receives a clear idea for an unexpected gesture, including the kind of surprise you welcome. + +14. **Theme:** Anticipation | **Intensity:** 4 + **Prompt:** Write a short countdown message you would like to receive before a night focused on the two of you. + **Intended outcome:** Your partner gets language that builds suspense without guessing what would land well. + +15. **Theme:** Taking the lead | **Intensity:** 2 + **Prompt:** Describe one part of a date where you would enjoy deciding what happens next. + **Intended outcome:** Your partner learns a low-pressure moment where your initiative would feel attractive. + +16. **Theme:** Taking the lead | **Intensity:** 2 + **Prompt:** Write an invitation you would feel confident making when you want more one-to-one time. + **Intended outcome:** Your partner receives a phrase that makes your interest unmistakable and easy to answer. + +17. **Theme:** Taking the lead | **Intensity:** 3 + **Prompt:** Tell your partner what kind of plan you would enjoy taking charge of from start to finish. + **Intended outcome:** Your partner learns which shared experience you want to own and can leave space for you to lead it. + +18. **Theme:** Taking the lead | **Intensity:** 3 + **Prompt:** Describe how you would like your partner to respond when you make a bold suggestion. + **Intended outcome:** Your partner gets a practical guide for encouraging your confidence in the moment. + +19. **Theme:** Taking the lead | **Intensity:** 3 + **Prompt:** Write one decision you would like to make for both of you during a private evening. + **Intended outcome:** Your partner learns the kind of authority you want to try, with a concrete decision to hand over. + +20. **Theme:** Taking the lead | **Intensity:** 4 + **Prompt:** Describe a confident version of yourself you would like your partner to see more often. + **Intended outcome:** Your partner learns what confidence looks like for you and how they can invite it out. + +21. **Theme:** Taking the lead | **Intensity:** 4 + **Prompt:** Write the private challenge you would like to set for your partner, including what would make it exciting. + **Intended outcome:** Your partner receives a consensual challenge with the reason it appeals to you. + +22. **Theme:** Following | **Intensity:** 2 + **Prompt:** Tell your partner one decision you would enjoy not having to make on a date. + **Intended outcome:** Your partner learns a simple place where taking initiative would feel caring. + +23. **Theme:** Following | **Intensity:** 2 + **Prompt:** Describe the kind of invitation that makes it easy for you to say yes. + **Intended outcome:** Your partner learns the wording and atmosphere that lower pressure for you. + +24. **Theme:** Following | **Intensity:** 3 + **Prompt:** Write what helps you trust your partner’s lead during a more intimate moment. + **Intended outcome:** Your partner learns the specific reassurance or check-in that helps you relax into their plan. + +25. **Theme:** Following | **Intensity:** 3 + **Prompt:** Share one surprise choice you would enjoy your partner making for you. + **Intended outcome:** Your partner gets a defined area where surprise feels exciting and safe. + +26. **Theme:** Following | **Intensity:** 3 + **Prompt:** Describe how you want your partner to check that you are still enjoying their lead. + **Intended outcome:** Your partner receives a clear check-in preference they can use without breaking the mood. + +27. **Theme:** Following | **Intensity:** 4 + **Prompt:** Write about a private situation where you would like to be guided step by step, in your own terms. + **Intended outcome:** Your partner learns the type of guidance you are curious about and the limits you want respected. + +28. **Theme:** Following | **Intensity:** 4 + **Prompt:** Tell your partner what would make it feel exciting to let them choose the pace for a while. + **Intended outcome:** Your partner learns the conditions that make you comfortable giving them more influence. + +29. **Theme:** Shared control | **Intensity:** 2 + **Prompt:** Name one decision you want to make together before your next close evening. + **Intended outcome:** Your partner learns where collaboration matters most to you and can plan it jointly. + +30. **Theme:** Shared control | **Intensity:** 2 + **Prompt:** Describe your ideal signal for “let’s keep going” during a private moment. + **Intended outcome:** Your partner receives a simple shared cue that makes mutual enthusiasm easier to read. + +31. **Theme:** Shared control | **Intensity:** 3 + **Prompt:** Write the rule you would like both of you to follow when trying something unfamiliar together. + **Intended outcome:** Your partner learns a mutual agreement that makes exploration feel safer. + +32. **Theme:** Shared control | **Intensity:** 3 + **Prompt:** Tell your partner how you would like to alternate who chooses the next part of a date. + **Intended outcome:** Your partner gets a workable rhythm for sharing initiative rather than defaulting to one person. + +33. **Theme:** Shared control | **Intensity:** 3 + **Prompt:** Describe one moment where you would enjoy pausing together to decide what you both want. + **Intended outcome:** Your partner learns when a joint decision would add connection instead of interrupting it. + +34. **Theme:** Shared control | **Intensity:** 4 + **Prompt:** Write the private agreement that would make you feel brave enough to explore more together. + **Intended outcome:** Your partner receives a concrete mutual promise that supports bolder, consent-led choices. + +35. **Theme:** Shared control | **Intensity:** 4 + **Prompt:** Share the question you want your partner to ask before either of you raises the intensity. + **Intended outcome:** Your partner learns the exact invitation to use before moving into more charged territory. + +36. **Theme:** Boundaries and check-ins | **Intensity:** 2 + **Prompt:** Write one phrase that means “I like this, but slower” for you. + **Intended outcome:** Your partner receives a clear signal for adjusting pace without uncertainty. + +37. **Theme:** Boundaries and check-ins | **Intensity:** 2 + **Prompt:** Describe the best way for your partner to ask whether you are comfortable. + **Intended outcome:** Your partner learns a check-in style that feels caring rather than clinical. + +38. **Theme:** Boundaries and check-ins | **Intensity:** 3 + **Prompt:** Tell your partner one thing you need before you can enjoy a more adventurous private plan. + **Intended outcome:** Your partner learns a condition that turns curiosity into a safer shared possibility. + +39. **Theme:** Boundaries and check-ins | **Intensity:** 3 + **Prompt:** Write a kind way you would want your partner to respond if you change your mind. + **Intended outcome:** Your partner gets direct guidance for making a change of plan feel respected and easy. + +40. **Theme:** Boundaries and check-ins | **Intensity:** 3 + **Prompt:** Describe one topic you would prefer to discuss before, rather than during, a close moment. + **Intended outcome:** Your partner learns what deserves a calm conversation in advance. + +41. **Theme:** Boundaries and check-ins | **Intensity:** 4 + **Prompt:** Share a boundary that makes you feel more able to be adventurous within it. + **Intended outcome:** Your partner learns the limit that creates freedom rather than reducing the mood. + +42. **Theme:** Boundaries and check-ins | **Intensity:** 4 + **Prompt:** Write the reassurance you need when you suggest something that feels vulnerable to say aloud. + **Intended outcome:** Your partner receives a practical response that helps you bring up bolder ideas honestly. + +43. **Theme:** Aftercare and reconnection | **Intensity:** 2 + **Prompt:** Describe how you like to reconnect after an especially close moment. + **Intended outcome:** Your partner learns the small act that helps you feel settled and connected afterward. + +44. **Theme:** Aftercare and reconnection | **Intensity:** 2 + **Prompt:** Write the first question you would like your partner to ask after trying something new together. + **Intended outcome:** Your partner receives a ready-made invitation for a thoughtful debrief. + +45. **Theme:** Aftercare and reconnection | **Intensity:** 3 + **Prompt:** Tell your partner what makes you feel appreciated after you have been emotionally open. + **Intended outcome:** Your partner learns how to recognise your vulnerability in a way that lands. + +46. **Theme:** Aftercare and reconnection | **Intensity:** 3 + **Prompt:** Describe the kind of quiet time you would enjoy sharing once the excitement has passed. + **Intended outcome:** Your partner gets a concrete picture of the calm connection you want afterward. + +47. **Theme:** Aftercare and reconnection | **Intensity:** 3 + **Prompt:** Write one thing you would like to hear after you take a private risk together. + **Intended outcome:** Your partner learns the affirmation that helps you feel proud rather than self-conscious. + +48. **Theme:** Aftercare and reconnection | **Intensity:** 4 + **Prompt:** Share the part of a close experience you would most want to talk through afterward. + **Intended outcome:** Your partner learns what reflection would deepen trust and make a future experience better. + +49. **Theme:** Giving and receiving attention | **Intensity:** 2 + **Prompt:** Describe one way your partner can give you their full attention that you rarely ask for. + **Intended outcome:** Your partner discovers a specific act of focus that makes you feel prioritised. + +50. **Theme:** Giving and receiving attention | **Intensity:** 2 + **Prompt:** Write about a moment when you feel most noticed by your partner. + **Intended outcome:** Your partner learns the context in which their attention has the greatest effect. + +51. **Theme:** Giving and receiving attention | **Intensity:** 3 + **Prompt:** Tell your partner what you enjoy doing when you want to make them feel desired. + **Intended outcome:** Your partner learns how you naturally show interest and can recognise the signal. + +52. **Theme:** Giving and receiving attention | **Intensity:** 3 + **Prompt:** Describe the kind of praise you most enjoy receiving privately. + **Intended outcome:** Your partner gets a personal guide to language that makes you feel seen. + +53. **Theme:** Giving and receiving attention | **Intensity:** 3 + **Prompt:** Write one request you would enjoy hearing from your partner when they want your attention. + **Intended outcome:** Your partner receives a low-pressure way to ask directly for more of you. + +54. **Theme:** Giving and receiving attention | **Intensity:** 4 + **Prompt:** Share the private gesture that would make you feel unmistakably chosen by your partner. + **Intended outcome:** Your partner learns a specific, high-impact way to make you feel desired. + +55. **Theme:** Sensory cues | **Intensity:** 2 + **Prompt:** Describe a scent that instantly makes an evening feel more intimate to you. + **Intended outcome:** Your partner learns an atmosphere cue they can use when planning a close night in. + +56. **Theme:** Sensory cues | **Intensity:** 2 + **Prompt:** Write about the music that would help you leave everyday stress behind together. + **Intended outcome:** Your partner gets a mood-setting choice that supports a more connected evening. + +57. **Theme:** Sensory cues | **Intensity:** 3 + **Prompt:** Tell your partner which kind of lighting makes you feel most confident and relaxed. + **Intended outcome:** Your partner learns a practical way to shape the room around your comfort. + +58. **Theme:** Sensory cues | **Intensity:** 3 + **Prompt:** Describe a texture, fabric, or cosy detail that makes a private setting feel special. + **Intended outcome:** Your partner receives an actionable detail for creating a setting that appeals to you. + +59. **Theme:** Sensory cues | **Intensity:** 3 + **Prompt:** Write about the sound of your partner’s voice that you find most captivating. + **Intended outcome:** Your partner learns a vocal quality that makes you feel drawn closer. + +60. **Theme:** Sensory cues | **Intensity:** 4 + **Prompt:** Share the full sensory mood you would like your partner to create for an intimate evening. + **Intended outcome:** Your partner receives a personal brief for a more immersive, intentional atmosphere. + +61. **Theme:** Private performance | **Intensity:** 2 + **Prompt:** Write about a playful thing you would enjoy doing just to make your partner smile in private. + **Intended outcome:** Your partner learns a personal expression of your confidence they can encourage. + +62. **Theme:** Private performance | **Intensity:** 2 + **Prompt:** Describe a song that would make you feel expressive if you had the room to yourselves. + **Intended outcome:** Your partner gets a soundtrack that invites a more playful side of you out. + +63. **Theme:** Private performance | **Intensity:** 3 + **Prompt:** Tell your partner what kind of attention helps you feel confident being watched by them. + **Intended outcome:** Your partner learns how to make their attention feel encouraging rather than exposing. + +64. **Theme:** Private performance | **Intensity:** 3 + **Prompt:** Write a private dare you would enjoy accepting from your partner. + **Intended outcome:** Your partner receives a consent-led challenge that fits your idea of playful boldness. + +65. **Theme:** Private performance | **Intensity:** 3 + **Prompt:** Describe the reaction from your partner that would make you want to be more expressive. + **Intended outcome:** Your partner learns the feedback that builds your confidence in the moment. + +66. **Theme:** Private performance | **Intensity:** 4 + **Prompt:** Share a private moment where you would enjoy being the centre of your partner’s attention. + **Intended outcome:** Your partner learns the kind of focused attention you are curious to receive and can plan it with you. + +67. **Theme:** Clothes and confidence | **Intensity:** 2 + **Prompt:** Describe an outfit that makes you feel more like yourself on a date with your partner. + **Intended outcome:** Your partner learns the look that supports your confidence and can compliment it specifically. + +68. **Theme:** Clothes and confidence | **Intensity:** 2 + **Prompt:** Write the colour you would love your partner to notice you wearing. + **Intended outcome:** Your partner gets a small visual detail to notice and celebrate. + +69. **Theme:** Clothes and confidence | **Intensity:** 3 + **Prompt:** Tell your partner what you would enjoy choosing for them to wear on a private date night. + **Intended outcome:** Your partner learns your taste and has a clear invitation to let you style part of the evening. + +70. **Theme:** Clothes and confidence | **Intensity:** 3 + **Prompt:** Describe the compliment about your appearance that would feel most meaningful from your partner. + **Intended outcome:** Your partner receives guidance for praise that strengthens your confidence. + +71. **Theme:** Clothes and confidence | **Intensity:** 3 + **Prompt:** Write about one detail of getting ready that makes you feel more alluring. + **Intended outcome:** Your partner learns the ritual that helps you shift into a more confident mood. + +72. **Theme:** Clothes and confidence | **Intensity:** 4 + **Prompt:** Share the private look you would be excited to reveal to your partner, in your own words. + **Intended outcome:** Your partner learns what kind of reveal feels exciting to you and can respond with the right attention. + +73. **Theme:** Fantasy exchange | **Intensity:** 2 + **Prompt:** Write about a fictional romance scene whose mood you would love to borrow for a date. + **Intended outcome:** Your partner learns the emotional tone you are drawn to without needing to guess the reference. + +74. **Theme:** Fantasy exchange | **Intensity:** 2 + **Prompt:** Describe the kind of imagined setting that makes you feel more adventurous with your partner. + **Intended outcome:** Your partner receives a setting idea that can inspire a themed evening. + +75. **Theme:** Fantasy exchange | **Intensity:** 3 + **Prompt:** Tell your partner what role you would enjoy imagining for yourself during a playful private scenario. + **Intended outcome:** Your partner learns the character energy you are curious to try. + +76. **Theme:** Fantasy exchange | **Intensity:** 3 + **Prompt:** Write a fictional opening line your partner could use to begin a shared fantasy. + **Intended outcome:** Your partner gets a tailored starting line for playful imagination together. + +77. **Theme:** Fantasy exchange | **Intensity:** 3 + **Prompt:** Describe the one detail that would make an imagined scenario feel believable and exciting to you. + **Intended outcome:** Your partner learns the ingredient that turns a vague idea into something engaging. + +78. **Theme:** Fantasy exchange | **Intensity:** 4 + **Prompt:** Share a private fantasy premise you would like to explore only in conversation first. + **Intended outcome:** Your partner learns a higher-intensity idea while the first follow-up remains a safe discussion. + +79. **Theme:** Roleplay | **Intensity:** 2 + **Prompt:** Write the nickname you would enjoy your partner using during a playful private game. + **Intended outcome:** Your partner receives language that helps set a playful tone you welcome. + +80. **Theme:** Roleplay | **Intensity:** 2 + **Prompt:** Describe a simple character trait you would enjoy your partner pretending to have for one evening. + **Intended outcome:** Your partner gets a low-stakes roleplay cue that can make an ordinary night feel new. + +81. **Theme:** Roleplay | **Intensity:** 3 + **Prompt:** Tell your partner the kind of made-up first meeting you would enjoy acting out together. + **Intended outcome:** Your partner learns a shared scenario that gives both of you a clear starting point. + +82. **Theme:** Roleplay | **Intensity:** 3 + **Prompt:** Write the setting where you would enjoy pretending you have just met your partner. + **Intended outcome:** Your partner receives a scene to build around for a playful reset of familiar chemistry. + +83. **Theme:** Roleplay | **Intensity:** 3 + **Prompt:** Describe the one rule that would help roleplay feel comfortable and fun for you. + **Intended outcome:** Your partner learns the agreement that keeps the game connected to your real trust. + +84. **Theme:** Roleplay | **Intensity:** 4 + **Prompt:** Share a bolder character dynamic you are curious to discuss with your partner before trying it. + **Intended outcome:** Your partner learns what dynamic interests you and can talk through comfort, limits, and interest first. + +85. **Theme:** Settings and atmosphere | **Intensity:** 2 + **Prompt:** Describe the room where you would most like to have an uninterrupted evening with your partner. + **Intended outcome:** Your partner learns which environment helps you feel most present together. + +86. **Theme:** Settings and atmosphere | **Intensity:** 2 + **Prompt:** Write the first thing you would change at home to make a regular night feel more special. + **Intended outcome:** Your partner gets a realistic way to shift an ordinary evening into a date. + +87. **Theme:** Settings and atmosphere | **Intensity:** 3 + **Prompt:** Tell your partner what makes a hotel-style evening feel exciting to you. + **Intended outcome:** Your partner learns the elements of novelty or escape you would like recreated. + +88. **Theme:** Settings and atmosphere | **Intensity:** 3 + **Prompt:** Describe the kind of privacy you need before you can fully switch off together. + **Intended outcome:** Your partner learns the practical conditions needed for you to feel unhurried. + +89. **Theme:** Settings and atmosphere | **Intensity:** 3 + **Prompt:** Write about a place from a past date that you would love to recreate the feeling of at home. + **Intended outcome:** Your partner receives an emotional reference point and ideas for bringing it back. + +90. **Theme:** Settings and atmosphere | **Intensity:** 4 + **Prompt:** Share the most adventurous private setting you would enjoy planning together, while staying within your comfort zone. + **Intended outcome:** Your partner learns your appetite for novelty and the limits that make the plan feel right. + +91. **Theme:** Surprise and novelty | **Intensity:** 2 + **Prompt:** Write one small unexpected gesture that would brighten a normal day with your partner. + **Intended outcome:** Your partner gets a specific surprise that signals private affection. + +92. **Theme:** Surprise and novelty | **Intensity:** 2 + **Prompt:** Describe the kind of spontaneous invitation you would be happy to receive. + **Intended outcome:** Your partner learns how to be impulsive in a way that still feels welcome. + +93. **Theme:** Surprise and novelty | **Intensity:** 3 + **Prompt:** Tell your partner one familiar routine you would enjoy changing up together. + **Intended outcome:** Your partner learns where novelty would improve your shared rhythm. + +94. **Theme:** Surprise and novelty | **Intensity:** 3 + **Prompt:** Write a sealed-note prompt you would enjoy your partner giving you to open later. + **Intended outcome:** Your partner receives a private prompt format that can create suspense across the day. + +95. **Theme:** Surprise and novelty | **Intensity:** 3 + **Prompt:** Describe a new rule for one evening that would make it feel different from your usual time together. + **Intended outcome:** Your partner gets a simple novelty experiment that you have already signalled interest in. + +96. **Theme:** Surprise and novelty | **Intensity:** 4 + **Prompt:** Share the bold surprise you would enjoy discovering after your partner has checked the broad limits with you. + **Intended outcome:** Your partner learns both the surprise you want and the consent conversation needed before planning it. + +97. **Theme:** Long-distance desire | **Intensity:** 2 + **Prompt:** Write the message that would make you feel closest to your partner when you are apart. + **Intended outcome:** Your partner learns the kind of connection that travels well between visits. + +98. **Theme:** Long-distance desire | **Intensity:** 2 + **Prompt:** Describe a tiny ritual you would like to share on the evenings you cannot be together. + **Intended outcome:** Your partner receives a repeatable way to maintain intimacy across distance. + +99. **Theme:** Long-distance desire | **Intensity:** 3 + **Prompt:** Tell your partner what you would like to plan together before your next time in the same place. + **Intended outcome:** Your partner learns which shared anticipation would make a reunion more meaningful. + +100. **Theme:** Long-distance desire | **Intensity:** 4 + **Prompt:** Write the private promise you would like to exchange before a longer period apart. + **Intended outcome:** Your partner receives a personal commitment that can sustain desire, reassurance, and connection until you reunite. diff --git a/docs/question-types.md b/docs/question-types.md new file mode 100644 index 0000000..e12067a --- /dev/null +++ b/docs/question-types.md @@ -0,0 +1,45 @@ +# Question interaction types + +This is the maintained contract for the question interactions delivered through +the daily question flow. It is separate from the [couples quiz](quiz.md) and +[dares loop](dares-loop.md), which have their own content and completion +models. + + + +## Supported types + +| Type | User interaction | `response_data` and `config` | Match semantics | +| --- | --- | --- | --- | +| `swipe` | Choose yes or no, or skip. | No `response_data`; `config` is unused. | A no creates no match. The API also retains `maybe` matching for stored or replayed answers, producing `yes_maybe` or `maybe_maybe`; the current mobile card does not offer maybe. | +| `text_answer` | Write an answer and send it, decline with no, or skip. | `response_data`: `{ type: 'text_answer', text }`; `config` is unused. | Both partners must answer without a no. The match type is `both_answered`, with both payloads in `response_summary`. | +| `audio` | Record and send an audio answer, or skip. | `response_data`: `{ type: 'audio', media_path, duration_seconds }`; optional `config.max_duration_seconds` limits recording and defaults to 60 seconds in the admin UI. | Both partners must answer without a no. The match type is `both_answered`, with both payloads in `response_summary`. | +| `photo` | Take or select and send a photo answer, or skip. | `response_data`: `{ type: 'photo', media_path }`; `config` is unused. | Both partners must answer without a no. The match type is `both_answered`, with both payloads in `response_summary`. | +| `who_likely` | Choose which partner is more likely. The current mobile flow submits this as yes. | `response_data`: `{ type: 'who_likely', chosen_user_id }`; `config` is unused. | Once both partners respond, the match type is `both_answered`; the stored answer value does not gate that type's match calculation. Both choices are in `response_summary`. | + +## Persistence and implementation ownership + +`questions.question_type` defaults to `swipe`; the database check constraint and +the canonical shared `QuestionType` union must contain the same values. +`questions.config` is JSON configuration for a type. `responses.response_data` +stores an individual non-swipe payload. `matches.response_summary` is a JSON +object keyed by responder user ID and is populated for `both_answered` matches. + +The canonical list is `QuestionType` in +[`packages/shared/src/types/index.ts`](../packages/shared/src/types/index.ts). +The database constraint is in +[`apps/api/drizzle/0003_answers_matches.sql`](../apps/api/drizzle/0003_answers_matches.sql). +Match calculation is in +[`apps/api/src/domains/answers/types.ts`](../apps/api/src/domains/answers/types.ts), +the mobile renderer is +[`apps/mobile/src/features/swipe/components/SwipeQuestionCard.tsx`](../apps/mobile/src/features/swipe/components/SwipeQuestionCard.tsx), +and admin authoring options are in +[`apps/admin/src/pages/content/QuestionsPage.tsx`](../apps/admin/src/pages/content/QuestionsPage.tsx). + +## Change rule + +When adding, removing, or changing a question type, its payload, configuration, +or matching semantics, update this document in the same change. Update the +shared type, database constraint, API, mobile, and admin consumers as required. +`npm run lint:harness` checks the documented type list against the canonical +shared union so an unreviewed list change fails routine verification. diff --git a/docs/schema.md b/docs/schema.md index f24c559..16806fd 100644 --- a/docs/schema.md +++ b/docs/schema.md @@ -47,6 +47,8 @@ erDiagram uuid pack_id FK text text text partner_text "for two-part questions" + text question_type "swipe/text_answer/audio/photo/who_likely" + jsonb config "type-specific configuration" int intensity "1-5" text[] allowed_couple_genders "couple composition filter" text[] target_user_genders "individual user filter" @@ -70,6 +72,7 @@ erDiagram uuid question_id FK uuid couple_id FK "nullable: null is a sealed solo answer, claimed at pairing" answer_type answer "yes/no/maybe" + jsonb response_data "non-swipe answer payload" timestamptz created_at } @@ -77,7 +80,8 @@ erDiagram uuid id PK uuid couple_id FK uuid question_id FK - match_type match_type "yes_yes/yes_maybe/maybe_maybe" + match_type match_type "yes_yes/yes_maybe/maybe_maybe/both_answered" + jsonb response_summary "both non-swipe payloads by user" boolean is_new timestamptz created_at } @@ -161,7 +165,8 @@ erDiagram | Enum | Values | |------|--------| | `answer_type` | `yes`, `no`, `maybe` | -| `match_type` | `yes_yes`, `yes_maybe`, `maybe_maybe` | +| `question_type` | `swipe`, `text_answer`, `audio`, `photo`, `who_likely` | +| `match_type` | `yes_yes`, `yes_maybe`, `maybe_maybe`, `both_answered` | | `feedback_type` | `bug`, `feature_request`, `general` | | `feedback_status` | `new`, `reviewed`, `in_progress`, `resolved`, `closed` | | `subscription_status` | `active`, `cancelled`, `expired`, `billing_issue`, `paused` | @@ -188,11 +193,21 @@ allowed. ## Key Flows +### Question interactions + +`questions.question_type` defaults to `swipe`; `questions.config` holds +type-specific settings. A non-swipe response keeps its payload in +`responses.response_data`. When a non-swipe interaction resolves as +`both_answered`, `matches.response_summary` holds both payloads keyed by user +ID. The complete interaction and match contract is maintained in +[Question interaction types](question-types.md). + ### Response & Match Flow -1. User submits response via `submit-response` edge function +1. User submits a response to the standalone API at `POST /v1/responses` 2. Response saved to `responses` table (UPSERT on `user_id, question_id`) -3. Function checks for partner's response on same question -4. If both answered positively (not "no"), a `match` is created +3. API checks for the partner's response on the same question +4. API applies the [question interaction contract](question-types.md) to create, + update, or remove a `match` 5. Match triggers push notification to both partners 6. Match unlocks chat thread in `messages` table diff --git a/scripts/lint-harness.mjs b/scripts/lint-harness.mjs index ed8a046..e60840a 100644 --- a/scripts/lint-harness.mjs +++ b/scripts/lint-harness.mjs @@ -1,7 +1,8 @@ import { access, readFile, readdir } from 'node:fs/promises'; import path from 'node:path'; +import { fileURLToPath } from 'node:url'; -const root = path.resolve(new URL('..', import.meta.url).pathname); +const root = path.resolve(fileURLToPath(new URL('..', import.meta.url))); const errors = []; const scoped = process.argv.includes('--scope'); @@ -156,6 +157,22 @@ if (!scoped) { if (!(await exists(target))) fail(path.join(root, 'docs', 'index.md'), `broken documentation link ${match[1]}`, 'correct the link or restore the maintained document'); } + const sharedTypesFile = path.join(root, 'packages', 'shared', 'src', 'types', 'index.ts'); + const sharedTypes = await readFile(sharedTypesFile, 'utf8'); + const union = sharedTypes.match(/export type QuestionType\s*=\s*([^;]+);/); + const canonicalQuestionTypes = union?.[1].match(/'([^']+)'/g)?.map((value) => value.slice(1, -1)); + const questionTypesDoc = path.join(root, 'docs', 'question-types.md'); + const questionTypesSource = await readFile(questionTypesDoc, 'utf8'); + const documentedQuestionTypes = questionTypesSource.match(//)?.[1] + .split(',').map((value) => value.trim()).filter(Boolean); + if (!canonicalQuestionTypes?.length) { + fail(sharedTypesFile, 'QuestionType union could not be read', 'keep QuestionType as a quoted string union'); + } else if (!documentedQuestionTypes?.length) { + fail(questionTypesDoc, 'question type contract marker is missing', 'add with every supported type'); + } else if (canonicalQuestionTypes.join(',') !== documentedQuestionTypes.join(',')) { + fail(questionTypesDoc, 'documented question types differ from the shared QuestionType union', `set the contract marker to ${canonicalQuestionTypes.join(',')}`); + } + const mcpAuth = await readFile(path.join(root, 'apps', 'mcp', 'src', 'lib', 'auth.ts'), 'utf8'); if (/allowing all requests|query\(['"]apiKey/i.test(mcpAuth)) { fail(path.join(root, 'apps', 'mcp', 'src', 'lib', 'auth.ts'), 'MCP authentication can leak or fail open', 'require a configured Bearer token and fail closed'); diff --git a/scripts/validate-learnings.mjs b/scripts/validate-learnings.mjs index c0fdcc1..74432b4 100644 --- a/scripts/validate-learnings.mjs +++ b/scripts/validate-learnings.mjs @@ -1,7 +1,8 @@ import { readFile, readdir } from 'node:fs/promises'; import path from 'node:path'; +import { fileURLToPath } from 'node:url'; -const root = path.resolve(new URL('..', import.meta.url).pathname); +const root = path.resolve(fileURLToPath(new URL('..', import.meta.url))); const base = path.join(root, '.agents', 'learnings'); const requiredSections = ['## Symptom', '## Reproduction', '## Cause', '## Remediation', '## Evidence']; const failures = []; @@ -11,7 +12,7 @@ for (const state of ['inbox', 'promoted']) { for (const name of await readdir(directory)) { if (!name.endsWith('.md')) continue; const file = path.join(directory, name); - const source = await readFile(file, 'utf8'); + const source = (await readFile(file, 'utf8')).replace(/\r\n/g, '\n'); const frontmatter = source.match(/^---\n([\s\S]*?)\n---/); if (!frontmatter) { failures.push(`${file}: missing YAML frontmatter`); continue; } const fields = Object.fromEntries(frontmatter[1].split('\n').map((line) => { diff --git a/scripts/validate-question-draft.mjs b/scripts/validate-question-draft.mjs new file mode 100644 index 0000000..2e14e2d --- /dev/null +++ b/scripts/validate-question-draft.mjs @@ -0,0 +1,210 @@ +#!/usr/bin/env node + +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(); +const questionTypes = new Set(['swipe', 'text_answer', 'audio', 'photo', 'who_likely']); +const banned = /\b(?:anal|anus|asshole|bdsm|bestiality|blowjob|breath play|chok(?:e|ing)|cock|cum|dick|dildo|domination|fetish|fingering|handjob|incest|masturbat|naked|nud(?:e|ity)|oral sex|orgasm|penis|porn|public sex|sex toy|spank(?:ing)?|threesome|vagina|vibrator)\b/i; +const timeBound = /\b(?:today|tonight|right now|\bnow\b)\b/i; +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|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', + 'settings-atmosphere': 'Settings and Atmosphere', + 'boundaries-check-ins': 'Boundaries and Check-ins', + 'surprise-novelty': 'Surprise and Novelty', + 'long-distance-desire': 'Long-distance Desire', + '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 ?? []; +expect(questions.length === 550, `expected 550 questions, got ${questions.length}`); +expect((draft.packs ?? []).length > 0, 'draft must contain at least one pack'); +const ids = new Set(); +const byId = new Map(); +const typeCounts = Object.fromEntries([...questionTypes].map((type) => [type, 0])); +const intensityCounts = Object.fromEntries([1, 2, 3, 4, 5].map((level) => [level, 0])); +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()) { + const label = `question ${index + 1}`; + expect(typeof question.id === 'string' && /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(question.id), `${label} has invalid UUID`); + expect(!ids.has(question.id), `${label} duplicates UUID ${question.id}`); + ids.add(question.id); byId.set(question.id, question); + expect(typeof question.pack_slug === 'string' && question.pack_slug.length > 0, `${label} has no pack_slug`); + packCounts.set(question.pack_slug, (packCounts.get(question.pack_slug) ?? 0) + 1); + expect(typeof question.text === 'string' && question.text.length > 0, `${label} has no text`); + expect(!artificialSuffix.test(question.text), `${label} contains an artificial template discriminator`); + expect(!malformedOrFallback.test(question.text), `${label} contains malformed or generic fallback copy`); + expect(questionTypes.has(question.question_type), `${label} has unsupported type ${question.question_type}`); + if (questionTypes.has(question.question_type)) typeCounts[question.question_type] += 1; + expect([2, 3, 4].includes(question.intensity), `${label} has invalid intensity ${question.intensity}`); + if (Object.hasOwn(intensityCounts, question.intensity)) intensityCounts[question.intensity] += 1; + expect(question.review_status === 'draft', `${label} must be draft`); + expect(['low', 'edge'].includes(question.policy_risk), `${label} has invalid policy_risk`); + expect(typeof question.intended_outcome === 'string' && question.intended_outcome.length > 0, `${label} has no intended_outcome`); + expect(!genericOutcome.test(question.intended_outcome), `${label} has a generic fallback outcome`); + expect(question.allowed_couple_genders === null && question.target_user_genders === null && question.required_props === null, `${label} must use null targeting and props`); + const textFields = [question.text, question.partner_text, question.intended_outcome].filter(Boolean); + for (const text of textFields) { + expect(!banned.test(text), `${label} contains banned developer-authored term`); + expect(!timeBound.test(text), `${label} contains time-bound language`); + expect(!gendered.test(text), `${label} contains gendered partner language`); + expect(!text.includes('\u2014'), `${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); + } + // An inverse row intentionally repeats its primary row's partner wording. + // Check only primary and symmetric text here; inverse swap integrity is + // checked below. + if (question.inverse_of === null) { + expect(!draftTexts.has(normalized), `${label} duplicates draft text from ${draftTexts.get(normalized)}`); + draftTexts.set(normalized, label); + const words = normalized.split(' ').filter(Boolean); + for (let start = 0; start <= words.length - 6; start += 1) { + const ngram = words.slice(start, start + 6).join(' '); + const rows = ngramRows.get(ngram) ?? []; + rows.push(label); + ngramRows.set(ngram, rows); + } + } + expect(!snapshotTexts.has(normalized), `${label} duplicates production snapshot text`); + if (question.question_type === 'audio') expect(JSON.stringify(question.config) === JSON.stringify({ max_duration_seconds: 60 }), `${label} audio config must be max_duration_seconds 60`); + if (question.question_type === 'text_answer') expect(JSON.stringify(question.config) === JSON.stringify({ max_length: 500 }), `${label} text_answer config must be max_length 500`); + if (['swipe', 'photo', 'who_likely'].includes(question.question_type)) expect(JSON.stringify(question.config) === '{}', `${label} ${question.question_type} config must be empty`); + if (question.question_type !== 'swipe') { + expect(question.partner_text === null && question.inverse_of === null, `${label} non-swipe must have null partner_text and inverse_of`); + } + if (question.question_type === 'photo') expect(!photoUnsafe.test(question.text), `${label} photo prompt is not safely clothed/object/setting based`); +} +for (const [opening, count] of openingCounts) { + expect(count <= 30, `opening template repeats ${count} times: ${opening}`); +} +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'); +const asymmetric = swipes.filter((question) => question.partner_text !== null); +const symmetric = swipes.filter((question) => question.partner_text === null); +expect(asymmetric.length === 240, `expected 240 asymmetric swipe rows, got ${asymmetric.length}`); +expect(symmetric.length === 60, `expected 60 symmetric swipe rows, got ${symmetric.length}`); +const primaries = asymmetric.filter((question) => question.inverse_of === null); +const inverses = asymmetric.filter((question) => question.inverse_of !== null); +expect(primaries.length === 120 && inverses.length === 120, `expected 120 primary and 120 inverse swipe rows, got ${primaries.length} and ${inverses.length}`); +for (const question of inverses) { + const primary = byId.get(question.inverse_of); + expect(primary?.question_type === 'swipe' && primary.inverse_of === null, `inverse ${question.id} must reference a primary swipe`); + if (primary) { + expect(question.text === primary.partner_text && question.partner_text === primary.text, `inverse ${question.id} must exactly swap text and partner_text`); + expect(question.intensity === primary.intensity && question.pack_slug === primary.pack_slug, `inverse ${question.id} must keep intensity and pack`); + } +} +for (const question of symmetric) expect(question.inverse_of === null, `symmetric swipe ${question.id} must have null inverse_of`); +expect([...packCounts.values()].every((count) => count > 0), 'every declared pack must contain questions'); +for (const pack of draft.packs ?? []) { + const expectedLine = `- ${markdownPackNames[pack.slug] ?? pack.name}: ${packCounts.get(pack.slug) ?? 0} questions.`; + expect(markdown.includes(expectedLine), `markdown pack count is missing or stale: ${expectedLine}`); +} +if (errors.length) { + process.stderr.write(`Question draft validation failed (${errors.length}):\n${errors.map((error) => `- ${error}`).join('\n')}\n`); + process.exit(1); +} +process.stdout.write(`Question draft valid: ${questions.length} total; types ${JSON.stringify(typeCounts)}; intensities ${JSON.stringify(intensityCounts)}; packs ${JSON.stringify(Object.fromEntries(packCounts))}\n`);