8.6 KiB
Closer Question Schema
Purpose
This document defines the JSON schema, question types, validation rules, and required counts for Closer question packs.
For writing philosophy and tone, see QUESTION_CONTENT_GUIDE.md.
For the active rewrite checklist and category order, see QUESTION_REWRITE_PLAN.md.
1. Question Types
multi_choice
Select every option that applies.
Primary question type. At least 75% of all questions must be choice-based (multi_choice + choice).
{
"type": "multi_choice",
"text": "What helps you feel relaxed on a date with me?",
"options": [
{ "id": "no_rushing", "text": "Not feeling rushed" },
{ "id": "phones_away", "text": "Putting phones away" },
{ "id": "good_food", "text": "Good food" },
{ "id": "easy_conversation", "text": "Easy conversation" },
{ "id": "physical_affection", "text": "Physical affection" },
{ "id": "clear_plan", "text": "Having a plan" }
]
}
Rules:
- Prompt should clearly allow multiple answers.
- Options should not shame either partner.
- Include practical and emotional options when possible.
choice
Pick the single best answer.
{
"type": "choice",
"text": "Which kind of date sounds best this week?",
"options": [
{ "id": "cozy_at_home", "text": "Cozy at home" },
{ "id": "dinner_out", "text": "Dinner out" },
{ "id": "something_playful", "text": "Something playful" },
{ "id": "something_outside", "text": "Something outside" },
{ "id": "surprise_me", "text": "Surprise me" }
]
}
Rules:
- Options should be short.
- Options should not overlap too much.
- Options should sound like real choices.
- Use 4 to 6 options.
scale
Rate agreement, comfort, importance, confidence, or frequency.
{
"type": "scale",
"text": "How much do you feel like we need a real date soon?",
"scale": {
"min": 1,
"max": 5,
"min_label": "Not much",
"max_label": "Very much"
}
}
Rules:
- Scale labels should be gentle and neutral.
- Do not make the low end sound bad or shameful.
- Scale questions should measure one thing only.
Bad:
How badly are we failing at making time for each other?
Better:
How much would some intentional time together help us right now?
either_or
Very fast playful questions. Should take under three seconds.
{
"type": "either_or",
"text": "Planned date or spontaneous date?"
}
Rules:
- Prompts should be quick.
- Avoid choices that imply one partner is wrong.
- Best used in fun, date, intimacy, home, and lifestyle packs.
written
Reserved for questions where a short written response adds meaningful value.
Never use written questions for basic preferences.
{
"type": "written",
"text": "What is one small thing I do that makes you feel cared for?"
}
Good written examples:
What is one small thing I do that makes you feel cared for?
What is a memory of us that still makes you smile?
What is something you wish we made more time for?
Avoid written questions that are too vague:
How can we deepen our connection?
Better:
What is one thing we could do this week that would make us feel more like a team?
2. Required Counts
Every 250-question pack must contain:
| Type | Count | Percent |
|---|---|---|
| multi_choice | 140 | 56% |
| choice | 50 | 20% |
| scale | 35 | 14% |
| either_or | 15 | 6% |
| written | 10 | 4% |
At least 75% of all questions must be choice-based (multi_choice + choice).
Written questions should be rare and only used when typing creates a better conversation.
Free vs Premium
| Access | Count |
|---|---|
| free | 75 |
| premium | 175 |
Depth
Valid depth values:
- light
- medium
- deep
Access
Valid access values:
- free
- premium
Category Access
Valid category access values:
- free
- premium
- mixed
3. JSON Structure
Category metadata
{
"id": "date_night",
"title": "Date Night",
"access": "mixed",
"description": "Plan, enjoy, and remember time together.",
"count": 250,
"free_count": 75,
"premium_count": 175,
"questions": []
}
Question object
{
"id": "dn_001",
"type": "multi_choice",
"text": "What helps you feel relaxed on a date with me?",
"depth": "medium",
"access": "free",
"sex": "neutral",
"options": [
{ "id": "no_rushing", "text": "Not feeling rushed" },
{ "id": "phones_away", "text": "Putting phones away" },
{ "id": "good_food", "text": "Good food" },
{ "id": "easy_conversation", "text": "Easy conversation" },
{ "id": "physical_affection", "text": "Physical affection" },
{ "id": "clear_plan", "text": "Having a plan" }
]
}
Scale question object
{
"id": "dn_042",
"type": "scale",
"text": "How much do you feel like we need a real date soon?",
"depth": "medium",
"access": "free",
"sex": "neutral",
"scale": {
"min": 1,
"max": 5,
"min_label": "Not much",
"max_label": "Very much"
}
}
Either/or question object
{
"id": "dn_089",
"type": "either_or",
"text": "Planned date or spontaneous date?",
"depth": "light",
"access": "free",
"sex": "neutral"
}
Written question object
{
"id": "dn_113",
"type": "written",
"text": "What is one date we should bring back?",
"depth": "medium",
"access": "premium",
"sex": "neutral"
}
4. Validation Rules
Every rewritten pack must pass:
- Valid JSON
- 250 questions
- 75 free
- 175 premium
- 140 multi_choice
- 50 choice
- 35 scale
- 15 either_or
- 10 written
- Valid depth values only (light, medium, deep)
- Valid access values only (free, premium)
- Valid type values only (multi_choice, choice, scale, either_or, written)
- Valid sex values only (neutral, female, male)
- No duplicate question IDs
- No duplicate question texts
- No near-duplicate blocks
- No malformed keys
- No placeholder text
- No therapy worksheet tone
- Options have unique IDs inside each question
- Option IDs are neutral and clean
- Scale labels are present when needed
- Every category contains fun, curiosity, and meaningful conversations
JSON Quality Checklist
- Valid JSON.
- Category id matches file purpose.
- Category title sounds user-facing.
- Category access matches actual free/premium strategy.
- Metadata counts match actual question counts.
- All question IDs are unique.
- All question texts are unique.
- No near-duplicate blocks.
- Type counts match metadata.
- Free/premium counts match metadata.
- Depth values are valid.
- Access values are valid.
- Options have unique IDs inside each question.
- Option IDs are neutral and clean.
- Scale labels are present when needed.
- No malformed keys like m a x _ l e n g t h.
- No placeholder text.
- No accidental old gendered IDs unless intentionally used.
5. Subtopic Planning
Each pack should have subtopics to prevent repetition.
Example for Date Night:
- easy dates
- low-cost dates
- at-home dates
- going out
- planning preferences
- romance style
- fun and play
- food and drinks
- music and movies
- seasonal dates
- surprises
- feeling wanted
- getting out of a rut
- after-kids / busy life
- date-night stress
- memories
- future date dreams
Example for Boundaries:
- alone time
- phone privacy
- social media
- family involvement
- friendships
- money
- work time
- rest
- chores
- home space
- conflict
- tone of voice
- physical affection
- private conversations
- parenting/family roles
- emotional bandwidth
- plans and scheduling
- personal belongings
- sleep
- stress
6. Repetition Check
A pack fails if it has blocks like this:
What boundary around alone time would help you feel respected?
What boundary around phone privacy would help you feel respected?
What boundary around family involvement would help you feel respected?
What boundary around friendships would help you feel respected?
Instead, each question should have its own angle.
Better:
When you need alone time, how should I respond so it does not feel personal?
What phone privacy boundary would help us feel trusted instead of watched?
How involved should family be in decisions that affect just the two of us?
What helps friendships feel healthy without making our relationship feel pushed aside?
7. Content Batching Process
Do not write all 250 questions in one creative pass.
Use this process:
- Define pack purpose.
- Define subtopics.
- Write 40-50 high-quality questions.
- Review tone and repetition.
- Write the next batch.
- Add choice, scale, and this-or-that questions.
- Assign free/premium.
- Assign depth.
- Validate JSON.
- Read the full file like a user.