docs(seed): align type names with repo schema — single_choice, this_or_that, answer config

This commit is contained in:
null 2026-06-25 11:40:56 -05:00
parent ee88a94750
commit a642e7e267
2 changed files with 127 additions and 77 deletions

View File

@ -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`. Use these type names exactly:
For JSON schema and validation rules, see `QUESTION_SCHEMA.md`.
--- - 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. 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: Every category should create moments like:
@ -37,61 +67,62 @@ Every category should create moments like:
- "Really?" - "Really?"
- "That's adorable." - "That's adorable."
- "We should do that." - "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 Select every option that applies.
- 25% everyday relationship
- 20% meaningful conversations
- 10% future dreams and planning
- 10% deeper vulnerability
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: For every category:
- Rewrite every question from scratch. - Rewrite every question from scratch.
- Follow the content guide. - Follow the content guide.
- Keep category ids. - Keep category ids.
- Use conversational language. - Keep conversational wording.
- Avoid therapy language. - Avoid therapy language.
- Avoid corporate wording.
- Avoid repetitive templates. - Avoid repetitive templates.
- Keep answers short.
- Use 4 to 6 options for choice questions. - Use 4 to 6 options for choice questions.
- Make multi_choice clearly allow multiple answers.
- Make scale neutral.
- Keep written questions rare. - 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 Even serious categories should include enjoyable moments.
- 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. ## Rewrite Order
---
# 6. Rewrite Order
1. fun 1. fun
2. date_night 2. date_night
@ -115,25 +146,27 @@ Even serious categories should contain lighter moments.
20. sex_and_desire 20. sex_and_desire
21. sexual_preferences 21. sexual_preferences
--- ## Validation
# 7. Validation
Every rewritten pack must pass: Every rewritten pack must pass:
- Valid JSON - Valid JSON
- 250 questions - Exactly 250 questions
- 75 free - 75 free
- 175 premium - 175 premium
- 140 multi_choice - 140 multi_choice
- 50 choice - 50 single_choice
- 35 scale - 35 scale
- 15 either_or - 15 this_or_that
- 10 written - 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 ids
- No duplicate questions - 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 placeholder text
- No therapy worksheet tone - Every category feels fun, conversational, and rewarding
- Every category contains fun, curiosity, and meaningful conversations

View File

@ -15,7 +15,7 @@ For the active rewrite checklist and category order, see `QUESTION_REWRITE_PLAN.
Select every option that applies. 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 ```json
{ {
@ -38,13 +38,13 @@ Rules:
- Options should not shame either partner. - Options should not shame either partner.
- Include practical and emotional options when possible. - Include practical and emotional options when possible.
## choice ## single_choice
Pick the single best answer. Select one best answer.
```json ```json
{ {
"type": "choice", "type": "single_choice",
"text": "Which kind of date sounds best this week?", "text": "Which kind of date sounds best this week?",
"options": [ "options": [
{ "id": "cozy_at_home", "text": "Cozy at home" }, { "id": "cozy_at_home", "text": "Cozy at home" },
@ -98,13 +98,13 @@ Better:
How much would some intentional time together help us right now? 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. Very fast playful questions. Should take under three seconds.
```json ```json
{ {
"type": "either_or", "type": "this_or_that",
"text": "Planned date or spontaneous date?" "text": "Planned date or spontaneous date?"
} }
``` ```
@ -124,10 +124,15 @@ Never use written questions for basic preferences.
```json ```json
{ {
"type": "written", "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: Good written examples:
``` ```
@ -157,12 +162,12 @@ Every 250-question pack must contain:
| Type | Count | Percent | | Type | Count | Percent |
|---|---|---| |---|---|---|
| multi_choice | 140 | 56% | | multi_choice | 140 | 56% |
| choice | 50 | 20% | | single_choice | 50 | 20% |
| scale | 35 | 14% | | scale | 35 | 14% |
| either_or | 15 | 6% | | this_or_that | 15 | 6% |
| written | 10 | 4% | | 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. 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 ```json
{ {
"id": "dn_089", "id": "dn_089",
"type": "either_or", "type": "this_or_that",
"text": "Planned date or spontaneous date?", "text": "Planned date or spontaneous date?",
"depth": "light", "depth": "light",
"access": "free", "access": "free",
@ -277,10 +282,15 @@ Valid category access values:
"text": "What is one date we should bring back?", "text": "What is one date we should bring back?",
"depth": "medium", "depth": "medium",
"access": "premium", "access": "premium",
"sex": "neutral" "sex": "neutral",
"answer": {
"max_length": 500
}
} }
``` ```
Written questions require an `answer` configuration with `max_length`.
--- ---
# 4. Validation Rules # 4. Validation Rules
@ -288,17 +298,17 @@ Valid category access values:
Every rewritten pack must pass: Every rewritten pack must pass:
- Valid JSON - Valid JSON
- 250 questions - Exactly 250 questions
- 75 free - 75 free
- 175 premium - 175 premium
- 140 multi_choice - 140 multi_choice
- 50 choice - 50 single_choice
- 35 scale - 35 scale
- 15 either_or - 15 this_or_that
- 10 written - 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 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) - Valid sex values only (neutral, female, male)
- No duplicate question IDs - No duplicate question IDs
- No duplicate question texts - No duplicate question texts
@ -309,6 +319,9 @@ Every rewritten pack must pass:
- Options have unique IDs inside each question - Options have unique IDs inside each question
- Option IDs are neutral and clean - Option IDs are neutral and clean
- Scale labels are present when needed - 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 - Every category contains fun, curiosity, and meaningful conversations
## JSON Quality Checklist ## JSON Quality Checklist
@ -323,11 +336,15 @@ Every rewritten pack must pass:
- [ ] No near-duplicate blocks. - [ ] No near-duplicate blocks.
- [ ] Type counts match metadata. - [ ] Type counts match metadata.
- [ ] Free/premium 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. - [ ] Access values are valid.
- [ ] Options have unique IDs inside each question. - [ ] Options have unique IDs inside each question.
- [ ] Option IDs are neutral and clean. - [ ] Option IDs are neutral and clean.
- [ ] Scale labels are present when needed. - [ ] 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 malformed keys like m a x _ l e n g t h.
- [ ] No placeholder text. - [ ] No placeholder text.
- [ ] No accidental old gendered IDs unless intentionally used. - [ ] No accidental old gendered IDs unless intentionally used.