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