docs(seed): align type names with repo schema — single_choice, this_or_that, answer config
This commit is contained in:
parent
d1026c7312
commit
a2b38485b1
|
|
@ -1,35 +1,65 @@
|
|||
# Closer Question Pack Rewrite Plan
|
||||
# Closer Question Rewrite Plan
|
||||
|
||||
## Purpose
|
||||
## Repo Alignment
|
||||
|
||||
This document defines the active rewrite plan: what needs to happen, in what order, and how to validate each pack.
|
||||
This plan reflects the current repository schema.
|
||||
|
||||
For writing philosophy and tone, see `QUESTION_CONTENT_GUIDE.md`.
|
||||
For JSON schema and validation rules, see `QUESTION_SCHEMA.md`.
|
||||
Use these type names exactly:
|
||||
|
||||
---
|
||||
- written
|
||||
- single_choice
|
||||
- multi_choice
|
||||
- scale
|
||||
- this_or_that
|
||||
|
||||
# 1. Product Goal
|
||||
Do not rename them. Do not introduce `choice` or `either_or` unless the application code is updated first.
|
||||
|
||||
Closer is a relationship app, not a survey or therapy worksheet.
|
||||
## Product Goal
|
||||
|
||||
Every question should make couples smile, laugh, learn something new, remember something, plan something together, or have a meaningful conversation.
|
||||
Closer should feel like a couples game, not a survey or therapy worksheet.
|
||||
|
||||
The app should feel like a game you accidentally spend an hour playing.
|
||||
Questions should make couples:
|
||||
|
||||
- smile
|
||||
- laugh
|
||||
- learn something new
|
||||
- remember something
|
||||
- plan something together
|
||||
- have meaningful conversations
|
||||
|
||||
If a question feels like homework, rewrite it.
|
||||
|
||||
---
|
||||
## Question Mix
|
||||
|
||||
# 2. Consumer First Philosophy
|
||||
Every 250 question pack must contain:
|
||||
|
||||
People are opening Closer while sitting on the couch, riding in the car, eating dinner, or lying in bed.
|
||||
| Type | Count |
|
||||
|---|---|
|
||||
| multi_choice | 140 |
|
||||
| single_choice | 50 |
|
||||
| scale | 35 |
|
||||
| this_or_that | 15 |
|
||||
| written | 10 |
|
||||
|
||||
They are not looking to complete an emotional worksheet.
|
||||
This means 190 of 250 questions, or 76%, are choice based.
|
||||
|
||||
Questions should be quick, conversational, and rewarding.
|
||||
## Emotional Mix
|
||||
|
||||
A couple should naturally answer dozens of questions in one session.
|
||||
Aim for:
|
||||
|
||||
- 35% fun and playful
|
||||
- 25% everyday relationship
|
||||
- 20% meaningful conversation
|
||||
- 10% future dreams and planning
|
||||
- 10% deeper vulnerability
|
||||
|
||||
Never group heavy questions together.
|
||||
|
||||
Every category must contain lighter moments.
|
||||
|
||||
## Consumer First Rules
|
||||
|
||||
People should naturally answer dozens of questions in one sitting.
|
||||
|
||||
Every category should create moments like:
|
||||
|
||||
|
|
@ -37,61 +67,62 @@ Every category should create moments like:
|
|||
- "Really?"
|
||||
- "That's adorable."
|
||||
- "We should do that."
|
||||
- laughter
|
||||
- flirting
|
||||
- nostalgia
|
||||
- future plans
|
||||
|
||||
---
|
||||
The product sells shared moments, not data collection.
|
||||
|
||||
# 3. Emotional Mix
|
||||
## Type Definitions
|
||||
|
||||
Every pack should roughly contain:
|
||||
### multi_choice
|
||||
|
||||
- 35% fun and playful
|
||||
- 25% everyday relationship
|
||||
- 20% meaningful conversations
|
||||
- 10% future dreams and planning
|
||||
- 10% deeper vulnerability
|
||||
Select every option that applies.
|
||||
|
||||
Never group heavy questions together.
|
||||
Default to this type whenever possible.
|
||||
|
||||
Every category must contain moments of humor and curiosity.
|
||||
### single_choice
|
||||
|
||||
---
|
||||
Select one best answer.
|
||||
|
||||
# 4. Rewrite Rules
|
||||
### scale
|
||||
|
||||
Rate agreement, comfort, confidence, importance, or frequency.
|
||||
|
||||
### this_or_that
|
||||
|
||||
Very fast playful questions.
|
||||
|
||||
Should take under three seconds.
|
||||
|
||||
### written
|
||||
|
||||
Reserve for questions where typing creates significantly more value.
|
||||
|
||||
Never use written for simple preferences.
|
||||
|
||||
## Rewrite Rules
|
||||
|
||||
For every category:
|
||||
|
||||
- Rewrite every question from scratch.
|
||||
- Follow the content guide.
|
||||
- Keep category ids.
|
||||
- Use conversational language.
|
||||
- Keep conversational wording.
|
||||
- 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.
|
||||
- Add fun throughout every category.
|
||||
|
||||
---
|
||||
## Fun Injection
|
||||
|
||||
# 5. Fun Injection
|
||||
Every category should include at least:
|
||||
|
||||
Every category must include:
|
||||
- 10 playful questions
|
||||
- 5 questions that create laughter
|
||||
- 5 questions that inspire a future date, memory, or shared activity
|
||||
|
||||
- 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 include enjoyable moments.
|
||||
|
||||
Even serious categories should contain lighter moments.
|
||||
|
||||
---
|
||||
|
||||
# 6. Rewrite Order
|
||||
## Rewrite Order
|
||||
|
||||
1. fun
|
||||
2. date_night
|
||||
|
|
@ -115,25 +146,27 @@ Even serious categories should contain lighter moments.
|
|||
20. sex_and_desire
|
||||
21. sexual_preferences
|
||||
|
||||
---
|
||||
|
||||
# 7. Validation
|
||||
## Validation
|
||||
|
||||
Every rewritten pack must pass:
|
||||
|
||||
- Valid JSON
|
||||
- 250 questions
|
||||
- Exactly 250 questions
|
||||
- 75 free
|
||||
- 175 premium
|
||||
- 140 multi_choice
|
||||
- 50 choice
|
||||
- 50 single_choice
|
||||
- 35 scale
|
||||
- 15 either_or
|
||||
- 15 this_or_that
|
||||
- 10 written
|
||||
- Valid depth values only
|
||||
- Valid depth values only: light, medium, deep
|
||||
- No numeric depth values
|
||||
- No malformed keys
|
||||
- No duplicate ids
|
||||
- No duplicate questions
|
||||
- No malformed keys
|
||||
- Every choice question has options
|
||||
- Every scale question has scale configuration
|
||||
- Every written question has answer configuration
|
||||
- No therapy worksheet wording
|
||||
- No placeholder text
|
||||
- No therapy worksheet tone
|
||||
- Every category contains fun, curiosity, and meaningful conversations
|
||||
- Every category feels fun, conversational, and rewarding
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ For the active rewrite checklist and category order, see `QUESTION_REWRITE_PLAN.
|
|||
|
||||
Select every option that applies.
|
||||
|
||||
Primary question type. At least 75% of all questions must be choice-based (multi_choice + choice).
|
||||
Primary question type. At least 75% of all questions must be choice-based (multi_choice + single_choice).
|
||||
|
||||
```json
|
||||
{
|
||||
|
|
@ -38,13 +38,13 @@ Rules:
|
|||
- Options should not shame either partner.
|
||||
- Include practical and emotional options when possible.
|
||||
|
||||
## choice
|
||||
## single_choice
|
||||
|
||||
Pick the single best answer.
|
||||
Select one best answer.
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "choice",
|
||||
"type": "single_choice",
|
||||
"text": "Which kind of date sounds best this week?",
|
||||
"options": [
|
||||
{ "id": "cozy_at_home", "text": "Cozy at home" },
|
||||
|
|
@ -98,13 +98,13 @@ Better:
|
|||
How much would some intentional time together help us right now?
|
||||
```
|
||||
|
||||
## either_or
|
||||
## this_or_that
|
||||
|
||||
Very fast playful questions. Should take under three seconds.
|
||||
|
||||
```json
|
||||
{
|
||||
"type": "either_or",
|
||||
"type": "this_or_that",
|
||||
"text": "Planned date or spontaneous date?"
|
||||
}
|
||||
```
|
||||
|
|
@ -124,10 +124,15 @@ Never use written questions for basic preferences.
|
|||
```json
|
||||
{
|
||||
"type": "written",
|
||||
"text": "What is one small thing I do that makes you feel cared for?"
|
||||
"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`.
|
||||
|
||||
Good written examples:
|
||||
|
||||
```
|
||||
|
|
@ -157,12 +162,12 @@ Every 250-question pack must contain:
|
|||
| Type | Count | Percent |
|
||||
|---|---|---|
|
||||
| multi_choice | 140 | 56% |
|
||||
| choice | 50 | 20% |
|
||||
| single_choice | 50 | 20% |
|
||||
| scale | 35 | 14% |
|
||||
| either_or | 15 | 6% |
|
||||
| this_or_that | 15 | 6% |
|
||||
| written | 10 | 4% |
|
||||
|
||||
At least 75% of all questions must be choice-based (multi_choice + choice).
|
||||
At least 75% of all questions must be choice-based (multi_choice + single_choice).
|
||||
|
||||
Written questions should be rare and only used when typing creates a better conversation.
|
||||
|
||||
|
|
@ -255,12 +260,12 @@ Valid category access values:
|
|||
}
|
||||
```
|
||||
|
||||
## Either/or question object
|
||||
## This-or-that question object
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "dn_089",
|
||||
"type": "either_or",
|
||||
"type": "this_or_that",
|
||||
"text": "Planned date or spontaneous date?",
|
||||
"depth": "light",
|
||||
"access": "free",
|
||||
|
|
@ -277,10 +282,15 @@ Valid category access values:
|
|||
"text": "What is one date we should bring back?",
|
||||
"depth": "medium",
|
||||
"access": "premium",
|
||||
"sex": "neutral"
|
||||
"sex": "neutral",
|
||||
"answer": {
|
||||
"max_length": 500
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Written questions require an `answer` configuration with `max_length`.
|
||||
|
||||
---
|
||||
|
||||
# 4. Validation Rules
|
||||
|
|
@ -288,17 +298,17 @@ Valid category access values:
|
|||
Every rewritten pack must pass:
|
||||
|
||||
- Valid JSON
|
||||
- 250 questions
|
||||
- Exactly 250 questions
|
||||
- 75 free
|
||||
- 175 premium
|
||||
- 140 multi_choice
|
||||
- 50 choice
|
||||
- 50 single_choice
|
||||
- 35 scale
|
||||
- 15 either_or
|
||||
- 15 this_or_that
|
||||
- 10 written
|
||||
- Valid depth values only (light, medium, deep)
|
||||
- Valid depth values only (light, medium, deep) — no numeric depth values
|
||||
- Valid access values only (free, premium)
|
||||
- Valid type values only (multi_choice, choice, scale, either_or, written)
|
||||
- Valid type values only (multi_choice, single_choice, scale, this_or_that, written)
|
||||
- Valid sex values only (neutral, female, male)
|
||||
- No duplicate question IDs
|
||||
- No duplicate question texts
|
||||
|
|
@ -309,6 +319,9 @@ Every rewritten pack must pass:
|
|||
- Options have unique IDs inside each question
|
||||
- Option IDs are neutral and clean
|
||||
- Scale labels are present when needed
|
||||
- Every choice question has options
|
||||
- Every scale question has scale configuration
|
||||
- Every written question has answer configuration
|
||||
- Every category contains fun, curiosity, and meaningful conversations
|
||||
|
||||
## JSON Quality Checklist
|
||||
|
|
@ -323,11 +336,15 @@ Every rewritten pack must pass:
|
|||
- [ ] No near-duplicate blocks.
|
||||
- [ ] Type counts match metadata.
|
||||
- [ ] Free/premium counts match metadata.
|
||||
- [ ] Depth values are valid.
|
||||
- [ ] Depth values are valid (light, medium, deep only).
|
||||
- [ ] No numeric depth values.
|
||||
- [ ] Access values are valid.
|
||||
- [ ] Options have unique IDs inside each question.
|
||||
- [ ] Option IDs are neutral and clean.
|
||||
- [ ] Scale labels are present when needed.
|
||||
- [ ] Every choice question has options.
|
||||
- [ ] Every scale question has scale configuration.
|
||||
- [ ] Every written question has answer configuration.
|
||||
- [ ] No malformed keys like m a x _ l e n g t h.
|
||||
- [ ] No placeholder text.
|
||||
- [ ] No accidental old gendered IDs unless intentionally used.
|
||||
|
|
|
|||
Loading…
Reference in New Issue