7.5 KiB
Closer Question Schema v5
See also: QUESTION_CONTENT_GUIDE.md | QUESTION_REWRITE_PLAN.md | QUESTION_QUALITY_CHECKLIST.md
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 rewrite workflow and special pack exceptions, see QUESTION_REWRITE_PLAN.md.
Question Types
Use these type names exactly:
- written
- single_choice
- multi_choice
- scale
- this_or_that
Do not rename them unless the app code is updated first.
multi_choice
Select every option that applies.
Use 4 to 6 options.
Example:
{
"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" }
]
}
Rules:
- Prompt should clearly allow multiple answers.
- Options should not shame either partner.
- Options should be practical, emotional, or playful when possible.
- Options must not overlap too much.
single_choice
Select one best answer.
Use 4 to 6 options.
Example:
{
"type": "single_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" }
]
}
Rules:
- Options should be short.
- Options should not overlap too much.
- Options should sound like real choices.
- Every option must directly answer the prompt.
- Every option should be similar in weight.
scale
Rate agreement, comfort, importance, confidence, or frequency.
Example:
{
"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.
this_or_that
Very fast playful questions.
Example:
{
"type": "this_or_that",
"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.
Example:
{
"type": "written",
"text": "What is one small thing I do that makes you feel cared for?",
"answer": {
"max_length": 500
}
}
Written questions require an answer configuration with max_length.
Do not use written questions for basic preferences.
Standard 250 Question Packs
Every standard 250 question pack must contain:
| Type | Count |
|---|---|
| multi_choice | 140 |
| single_choice | 50 |
| scale | 35 |
| this_or_that | 15 |
| written | 10 |
Free and premium split:
- 75 free
- 175 premium
Special Packs
Special product packs may override standard counts only when documented.
The daily single choice weekday pack is a special pack.
Daily Single Choice Weekday Pack
Pack id:
daily_single_choice_weekly_v1
Compatibility file name:
daily_fun_multiple_choice_v3.json
Target counts:
| Field | Count |
|---|---|
| total | 500 |
| free | 75 |
| premium | 425 |
| single_choice | 500 |
These counts do not apply to standard category packs.
Daily Pack Metadata Example
{
"id": "daily_single_choice_weekly_v1",
"title": "Daily Single Choice",
"access": "mixed",
"description": "One weekday themed single choice question per day.",
"count": 500,
"free_count": 75,
"premium_count": 425,
"question_type_policy": "single_choice_only",
"review_policy": "weekday_batch_loop_required",
"content_policy": "fun_first_daily_game_questions",
"research_note": "Use relationship question research patterns, not copied prompts.",
"questions": []
}
If the compatibility filename daily_fun_multiple_choice_v3.json is used, the metadata should still make clear that the content is single_choice only.
Daily Content Metadata
Daily packs should include metadata that makes the content standard impossible to miss.
Recommended fields:
{
"question_type_policy": "single_choice_only",
"review_policy": "weekday_batch_loop_required",
"content_policy": "fun_first_daily_game_questions",
"research_note": "Use relationship question research patterns, not copied prompts."
}
These fields are not a replacement for validation. They document the intended behavior so future rewrites do not quietly turn the pack into chores, therapy, or generic wellness sludge.
Daily Question Object Example
{
"id": "daily_monday_001",
"type": "single_choice",
"text": "What tiny date move sounds best tonight?",
"depth": "light",
"access": "free",
"sex": "neutral",
"tags": ["daily_monday_mood_check"],
"options": [
{ "id": "dessert_couch", "text": "Dessert on the couch" },
{ "id": "kitchen_dance", "text": "A two-song kitchen dance" },
{ "id": "snack_walk", "text": "A short walk with snacks" },
{ "id": "movie_pick", "text": "A ridiculous movie pick" }
]
}
Daily Single Choice Content Rules
Daily options must be:
- complete answers to the prompt
- short and natural
- similar in weight
- fun, sweet, flirty, silly, or date-like when possible
- easy to pick in under 10 seconds
Daily options must not be mostly chores, household admin, or therapy phrasing.
Reject options centered on clean counters, bills, laundry, dishes, appointment scheduling, bedtime planning, saved blankets, or oddly specific domestic logistics unless the question clearly frames the option as playful and worth choosing.
Schema validation only proves the file can be parsed. It does not prove the content is good.
Daily packs must also pass the fun gate in QUESTION_QUALITY_CHECKLIST.md and the loop in QUESTION_REWRITE_PLAN.md.
Weekday Tags
Daily questions must include the correct weekday tag:
- daily_monday_mood_check
- daily_tuesday_tiny_win
- daily_wednesday_real_one
- daily_thursday_laugh
- daily_friday_flirty
- daily_saturday_side_quest
- daily_sunday_slow_burn
If app code still uses older mode tags, include compatibility tags as needed without removing the new weekday tag.
Depth
Documented depth values:
- light
- medium
- deep
Do not use numeric depth values unless the active app import code still requires numeric depth for compatibility.
If compatibility requires numeric depth, document the exception in the pack README and fix the import code later.
Access
Valid access values:
- free
- premium
Validation Requirements
Before shipping any pack:
- JSON must parse
- all IDs must be unique
- all question text must be unique
- every type must be valid
- every required field must exist
- option IDs must be unique within a question
- options must directly answer the prompt
- access values must be valid
- depth values must match current app compatibility rules
- special packs must match their documented counts
Content Validation Reminder
Do not confuse schema validity with quality.
A file can be valid JSON and still be bad content.
Daily packs require schema validation plus human content review.