docs(seed): split question guide into three documents — content guide, schema, rewrite plan
This commit is contained in:
parent
0c8586fa9e
commit
d1026c7312
File diff suppressed because it is too large
Load Diff
|
|
@ -0,0 +1,139 @@
|
|||
# Closer Question Pack Rewrite Plan
|
||||
|
||||
## Purpose
|
||||
|
||||
This document defines the active rewrite plan: what needs to happen, in what order, and how to validate each pack.
|
||||
|
||||
For writing philosophy and tone, see `QUESTION_CONTENT_GUIDE.md`.
|
||||
For JSON schema and validation rules, see `QUESTION_SCHEMA.md`.
|
||||
|
||||
---
|
||||
|
||||
# 1. Product Goal
|
||||
|
||||
Closer is a relationship app, not a survey or therapy worksheet.
|
||||
|
||||
Every question should make couples smile, laugh, learn something new, remember something, plan something together, or have a meaningful conversation.
|
||||
|
||||
The app should feel like a game you accidentally spend an hour playing.
|
||||
|
||||
If a question feels like homework, rewrite it.
|
||||
|
||||
---
|
||||
|
||||
# 2. Consumer First Philosophy
|
||||
|
||||
People are opening Closer while sitting on the couch, riding in the car, eating dinner, or lying in bed.
|
||||
|
||||
They are not looking to complete an emotional worksheet.
|
||||
|
||||
Questions should be quick, conversational, and rewarding.
|
||||
|
||||
A couple should naturally answer dozens of questions in one session.
|
||||
|
||||
Every category should create moments like:
|
||||
|
||||
- "I didn't know that."
|
||||
- "Really?"
|
||||
- "That's adorable."
|
||||
- "We should do that."
|
||||
- laughter
|
||||
- flirting
|
||||
- nostalgia
|
||||
- future plans
|
||||
|
||||
---
|
||||
|
||||
# 3. Emotional Mix
|
||||
|
||||
Every pack should roughly contain:
|
||||
|
||||
- 35% fun and playful
|
||||
- 25% everyday relationship
|
||||
- 20% meaningful conversations
|
||||
- 10% future dreams and planning
|
||||
- 10% deeper vulnerability
|
||||
|
||||
Never group heavy questions together.
|
||||
|
||||
Every category must contain moments of humor and curiosity.
|
||||
|
||||
---
|
||||
|
||||
# 4. Rewrite Rules
|
||||
|
||||
For every category:
|
||||
|
||||
- Rewrite every question from scratch.
|
||||
- Follow the content guide.
|
||||
- Keep category ids.
|
||||
- Use conversational language.
|
||||
- Avoid therapy language.
|
||||
- Avoid corporate wording.
|
||||
- Avoid repetitive templates.
|
||||
- Keep answers short.
|
||||
- Use 4 to 6 options for choice questions.
|
||||
- Make multi_choice clearly allow multiple answers.
|
||||
- Make scale neutral.
|
||||
- Keep written questions rare.
|
||||
|
||||
---
|
||||
|
||||
# 5. Fun Injection
|
||||
|
||||
Every category must include:
|
||||
|
||||
- at least 10 playful questions
|
||||
- at least 5 questions that create laughter
|
||||
- at least 5 questions that inspire a future date, memory, or shared activity
|
||||
|
||||
Even serious categories should contain lighter moments.
|
||||
|
||||
---
|
||||
|
||||
# 6. Rewrite Order
|
||||
|
||||
1. fun
|
||||
2. date_night
|
||||
3. quality_time
|
||||
4. communication
|
||||
5. gratitude
|
||||
6. future
|
||||
7. home_life
|
||||
8. values
|
||||
9. stress
|
||||
10. money
|
||||
11. boundaries
|
||||
12. conflict
|
||||
13. conflict_repair
|
||||
14. trust
|
||||
15. rebuilding_trust
|
||||
16. difficult_conversations
|
||||
17. emotional_intimacy
|
||||
18. physical_intimacy
|
||||
19. couple_intimacy
|
||||
20. sex_and_desire
|
||||
21. sexual_preferences
|
||||
|
||||
---
|
||||
|
||||
# 7. Validation
|
||||
|
||||
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
|
||||
- No duplicate ids
|
||||
- No duplicate questions
|
||||
- No malformed keys
|
||||
- No placeholder text
|
||||
- No therapy worksheet tone
|
||||
- Every category contains fun, curiosity, and meaningful conversations
|
||||
|
|
@ -0,0 +1,425 @@
|
|||
# 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).
|
||||
|
||||
```json
|
||||
{
|
||||
"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.
|
||||
|
||||
```json
|
||||
{
|
||||
"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.
|
||||
|
||||
```json
|
||||
{
|
||||
"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.
|
||||
|
||||
```json
|
||||
{
|
||||
"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.
|
||||
|
||||
```json
|
||||
{
|
||||
"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
|
||||
|
||||
```json
|
||||
{
|
||||
"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
|
||||
|
||||
```json
|
||||
{
|
||||
"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
|
||||
|
||||
```json
|
||||
{
|
||||
"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
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "dn_089",
|
||||
"type": "either_or",
|
||||
"text": "Planned date or spontaneous date?",
|
||||
"depth": "light",
|
||||
"access": "free",
|
||||
"sex": "neutral"
|
||||
}
|
||||
```
|
||||
|
||||
## Written question object
|
||||
|
||||
```json
|
||||
{
|
||||
"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:
|
||||
|
||||
1. Define pack purpose.
|
||||
2. Define subtopics.
|
||||
3. Write 40-50 high-quality questions.
|
||||
4. Review tone and repetition.
|
||||
5. Write the next batch.
|
||||
6. Add choice, scale, and this-or-that questions.
|
||||
7. Assign free/premium.
|
||||
8. Assign depth.
|
||||
9. Validate JSON.
|
||||
10. Read the full file like a user.
|
||||
Loading…
Reference in New Issue