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 d1026c7312
commit a2b38485b1
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`.
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

View File

@ -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.