diff --git a/seed/questions/DAILY_SINGLE_CHOICE_WEEKDAY_SYSTEM.md b/seed/questions/DAILY_SINGLE_CHOICE_WEEKDAY_SYSTEM.md index caf0af2f..ad37deda 100644 --- a/seed/questions/DAILY_SINGLE_CHOICE_WEEKDAY_SYSTEM.md +++ b/seed/questions/DAILY_SINGLE_CHOICE_WEEKDAY_SYSTEM.md @@ -1,46 +1,47 @@ -# Daily Single Choice Weekday System +# Daily Single Choice Weekday System v5 -This is the weekday question system for Closer daily questions. +This document defines the Closer daily weekday question pack. -It is not a normal mixed question pack. It is a daily single choice pack where each weekday has its own theme. +This is a special pack. It is not a normal mixed category pack. ## Pack Identity -Recommended file id: +Recommended pack id: ```text daily_single_choice_weekly_v1 ``` -Recommended file name: +Recommended future file name: ```text daily_single_choice_weekly_v1.json ``` -Current compatibility option: +Current compatibility file name: ```text daily_fun_multiple_choice_v3.json ``` -Use the old filename only if the app code still expects it. The content should still be single choice. +Use the old file name only while the app code still expects it. The content inside the file must still be single choice. +## Required Counts -## Required Pack Counts +This special daily pack uses: -This special daily pack should use these counts unless the app code is changed and the README explains why: +* 500 total questions +* 75 free questions +* 425 premium questions +* 500 single_choice questions +* 4 options per question preferred +* 4 to 6 options allowed -* total questions: 500 -* free questions: 75 -* premium questions: 425 -* question type: 500 single_choice +Do not apply the standard 250 question category mix to this pack. -These counts are different from standard 250 question category packs. Do not apply the normal 140 multi_choice, 50 single_choice, 35 scale, 15 this_or_that, and 10 written mix to this daily pack. +## Required Type -## Required Question Type - -Every question in this pack must use: +Every question must use: ```json "type": "single_choice" @@ -48,35 +49,107 @@ Every question in this pack must use: Single choice means the user picks one best answer. -Every question must have 4 to 6 short options. Four is preferred for daily questions. - ## Daily Voice Standard -Daily questions should sound like two people deciding what to do, say, eat, watch, laugh about, try, or enjoy together today. +Daily questions should feel like a small couples game moment. -They should be: +They should sound like two people deciding what to do, eat, watch, laugh about, try, flirt with, or enjoy together today. + +Daily questions should be: * quick * warm * concrete * playful -* easy to answer +* fun before merely useful +* easy to answer in under 10 seconds * relationship focused * doable in normal life -They should not sound like: +Daily questions should not sound like: * therapy homework -* a self-help worksheet -* an HR wellness survey -* a communication framework +* self-help worksheets +* HR wellness surveys +* abstract emotional processing * generic AI relationship advice +* household admin +* bedtime logistics +* chore planning If the question sounds like a couples counselor wrote it, rewrite it. +If the question sounds like roommates managing a house, rewrite it. + +## Daily Fun Gate + +A daily question passes only if it creates at least one of these: + +* a smile +* a laugh +* a flirt +* a cute choice +* a tiny date idea +* a playful debate +* a small memory +* a small thing the couple might actually try tonight + +Warm is not enough. Concrete is not enough. Useful is not enough. + +The daily pack should help couples enjoy each other, not manage the house. + +Ask this before approving any daily question: + +```text +Would this feel fun, sweet, or playful inside the app tonight? +``` + +If the honest answer is "useful, but not fun", rewrite it. + +## Prefer These Daily Option Types + +Use options like: + +* snacks +* tiny dates +* silly bets +* inside jokes +* couch games +* music picks +* mini adventures +* playful compliments +* low-pressure flirting +* cozy but fun moments +* small surprises +* dramatic fake awards +* guilty-pleasure shows +* cute photos +* dessert runs +* short walks with a purpose + +## Avoid These Daily Option Types + +Avoid options centered on: + +* bills +* laundry +* dishes +* clean counters +* errands +* appointments +* calendars +* bedtime planning +* household maintenance +* saved blankets +* clinical reassurance phrasing + +These can exist in real relationships. They should not dominate the daily fun pack. + +Do not rebrand chores as romance unless the question clearly makes the moment playful. + ## Banned Daily Tone Words -Avoid these in daily questions unless there is a very specific reason: +Avoid these in daily questions: * reset * process @@ -93,20 +166,7 @@ Avoid these in daily questions unless there is a very specific reason: These words push the pack toward therapy voice. -## Good Daily Question Style - -Good: - -```text -Long day. What would actually help tonight? -``` - -Options: - -* A hug before chores -* Dinner without overthinking it -* Ten quiet minutes together -* One tiny task done +## Good Daily Examples Good: @@ -117,24 +177,50 @@ What tiny date move sounds best tonight? Options: * Dessert on the couch -* A short walk -* A movie we already love -* A silly little errand together +* A two-song kitchen dance +* A short walk with snacks +* A ridiculous movie pick Good: ```text -What would make tonight feel more fun? +Which tiny win should we celebrate like it matters? ``` Options: -* Snacks and a bad movie -* Music while we clean -* A tiny bet over dinner -* One dumb inside joke revived +* Find a new dessert spot +* Try a ridiculous soda combo +* Pick tomorrow's fun song +* Build a tiny snack board -## Bad Daily Question Style +Good: + +```text +Before phones win, what should we do for fun? +``` + +Options: + +* Pick a ridiculous snack +* Watch one guilty-pleasure clip +* Trade dramatic compliments +* Choose tomorrow's tiny date + +Good: + +```text +What small surprise would make you smile tonight? +``` + +Options: + +* A favorite drink +* A flirty text from the next room +* A mystery snack +* A song picked just for us + +## Bad Daily Examples Bad: @@ -146,11 +232,31 @@ Why it fails: * therapy coded * abstract -* not concrete +* not game-like * sounds generated Bad: +```text +Before phones win, what would make the night nicer? +``` + +Bad options: + +* A clean counter +* A quick shoulder rub +* A simple bedtime plan +* The good blanket saved + +Why it fails: + +* too much household admin +* not playful enough +* one option is weirdly phrased +* it does not feel like a couples game + +Bad: + ```text What would help us process the emotional load of the week? ``` @@ -158,42 +264,32 @@ What would help us process the emotional load of the week? Why it fails: * too clinical -* too heavy for a daily prompt +* too heavy for daily * sounds like a worksheet -Bad: - -```text -Which communication dynamic would support our connection tonight? -``` - -Why it fails: - -* no real couple talks like this -* generic -* dead on arrival - ## Weekday Lineup ### Monday: Mood Check Monday Purpose: pick what kind of day the relationship needs. -Vibe: gentle, simple, start of week, low pressure. +Vibe: gentle, sweet, simple, start of week, still fun. Use prompts about: -* tired evenings -* small kindness -* easy dinners -* starting the week well -* tiny help -* feeling cared for +* cozy mini dates +* easy snacks +* low-effort laughs +* tiny playful care +* feeling picked on purpose +* one cute thing after a long day + +Avoid making Monday a housework recovery plan. Example: ```text -What would help us start the week feeling closer? +What tiny thing would make Monday feel more like us? ``` Required tag: @@ -204,22 +300,24 @@ daily_monday_mood_check ### Tuesday: Tiny Win Tuesday -Purpose: pick one small thing to do together. +Purpose: pick one small win to enjoy together. -Vibe: low effort, practical, cute, doable. +Vibe: low effort, practical only if cute, playful, doable. Use prompts about: -* one chore handled -* one tiny plan -* one easy treat -* one small date move -* one useful win +* a new snack +* a tiny date plan +* a silly reward +* choosing something together +* a small fun challenge + +Avoid bills, appointments, laundry, dishes, errands, and calendar cleanup. Example: ```text -Which tiny win should we aim for tonight? +Which tiny win should we celebrate like it matters? ``` Required tag: @@ -232,20 +330,22 @@ daily_tuesday_tiny_win Purpose: pick the most honest answer. -Vibe: present, grounded, lightly meaningful, not heavy. +Vibe: simple, grounded, lightly meaningful, not therapy. Use prompts about: -* honest preferences -* what would help today -* real needs -* simple attention +* real preferences * small truths +* what sounds best tonight +* what would feel nice +* what the couple actually wants + +Options must be complete answers. Do not use sentence fragments like "When I need reassurance". Example: ```text -What would make us feel more present with each other tonight? +What would make tonight feel more like us? ``` Required tag: @@ -258,16 +358,16 @@ daily_wednesday_real_one Purpose: pick something silly or low pressure. -Vibe: weird, funny, tired week energy. +Vibe: weird, funny, tired-week energy. Use prompts about: -* dumb jokes -* snacks -* bad movies -* silly awards -* weird couple habits -* harmless chaos +* fake awards +* dumb games +* weird snacks +* dramatic bits +* couch games +* inside jokes Example: @@ -283,18 +383,20 @@ daily_thursday_laugh ### Friday: Flirty Friday -Purpose: pick something playful, sweet, attractive, or date like. +Purpose: pick something playful, sweet, or date-like. Vibe: compliments, attraction, flirting, fun. Use prompts about: * compliments -* date energy -* kisses -* playful texts -* looking good for each other -* feeling wanted +* tiny date moves +* playful teasing +* low-pressure flirting +* sweet attention +* romantic but not explicit choices + +Keep it consent-based and non-pushy. Example: @@ -316,17 +418,18 @@ Vibe: playful, outside the routine, doable. Use prompts about: -* errands turned into dates -* food trips -* walks +* coffee runs +* dessert trips +* photo walks +* thrift-store bets +* mini missions * trying something new -* small adventures -* leaving the house +* tiny adventures Example: ```text -What kind of mini adventure sounds most like us today? +What kind of mini-adventure sounds most like us today? ``` Required tag: @@ -339,16 +442,18 @@ daily_saturday_side_quest Purpose: pick a warm intimacy or closeness answer. -Vibe: affectionate, cozy, optionally spicy, never pushy. +Vibe: affectionate, cozy, lightly flirty, never pushy. Use prompts about: -* cuddling * closeness -* kisses -* sweet attention -* cozy plans -* affection with consent +* compliments +* slow kisses +* cuddly date ideas +* sweet teasing +* low-pressure affection + +Avoid making Sunday a relationship checkup. Example: @@ -362,58 +467,67 @@ Required tag: daily_sunday_slow_burn ``` -## Option Rules +## Required Tags -For every single choice daily question: +Each question must include exactly one new weekday tag: -* use 4 options when possible -* keep options short -* make every option answer the prompt -* avoid obvious correct answers -* avoid duplicate option sets -* avoid options that overlap too much -* avoid shame -* keep choices realistic +* daily_monday_mood_check +* daily_tuesday_tiny_win +* daily_wednesday_real_one +* daily_thursday_laugh +* daily_friday_flirty +* daily_saturday_side_quest +* daily_sunday_slow_burn -Bad options: +If the app code still uses older mode tags, include the compatibility tag too, but only one new weekday tag. -* Be better -* Communicate more -* Fix the relationship -* Other +## Production Review Loop -Good options: +Do not write or rewrite all 500 questions in one blind pass. -* Make dinner easy -* Take a short walk -* Send a sweet text -* Save me the good blanket +For each weekday: -## Batch Workflow +1. Write or rewrite 20 questions. +2. Read all 20 out loud. +3. Mark weak questions with reasons. +4. Fix only the marked questions. +5. Review the fixed set again. +6. Continue only when at least 18 of 20 pass. +7. Continue only when at least 16 of 20 feel fun, playful, sweet, flirty, silly, or date-like. +8. Expand in batches of 20 to 30. +9. Repeat mark, fix, review after each batch. +10. Move to the next weekday only after the current weekday passes. -Do not write 500 daily questions in one pass. +## Marking Reasons -Use this flow: +Use these reasons when marking weak daily questions: -1. Write 20 to 30 sample questions for one weekday. -2. Review voice before scaling. -3. Remove therapy coded words. -4. Check that every option answers the prompt. -5. Check opening variety. -6. Only then write the next batch. -7. After all weekdays are written, read 30 random questions aloud. -8. Reject the pack if it sounds repetitive, clinical, generic, or AI written. +* therapy_voice +* wellness_voice +* household_admin +* not_fun +* abstract_prompt +* awkward_split_phrase +* repeated_stem +* option_mismatch +* fragment_options +* too_generic +* weird_option +* weak_weekday_fit +* filler_question -## Final Approval +## Final Production Gate -A daily single choice weekday pack is ready only when: +Before shipping: -* every question is single_choice -* every question has exactly one weekday tag -* every question has 4 to 6 options -* no question sounds like therapy homework -* no question sounds like a wellness survey -* no option list is reused exactly -* no question text is duplicated -* weekday identity is obvious -* the pack feels like a couples game +1. Run schema and count validation. +2. Run duplicate question checks. +3. Run duplicate option-list checks. +4. Check repeated openers and repeated option text. +5. Read 10 random questions from each weekday. +6. Mark anything therapy-coded, boring, weird, logistical, or not fun. +7. Fix the marked items. +8. Run a second random sample from each weekday. +9. Ship only when the second sample passes cleanly. + +The final sample must include no weird domestic options like "The good blanket saved" and no chore-heavy answer sets. diff --git a/seed/questions/QUESTION_CONTENT_GUIDE.md b/seed/questions/QUESTION_CONTENT_GUIDE.md index 592b5394..60db2509 100644 --- a/seed/questions/QUESTION_CONTENT_GUIDE.md +++ b/seed/questions/QUESTION_CONTENT_GUIDE.md @@ -1,5 +1,4 @@ -# QUESTION_CONTENT_GUIDE.md -# Closer Question Writing Guide v4 +# Closer Question Writing Guide v7 ## Mission @@ -28,7 +27,9 @@ If a question does none of those things, delete it. Every question must pass this test: +```text Would a real couple willingly answer this on a Friday night? +``` If not, rewrite it. @@ -40,11 +41,11 @@ Write for normal couples. Closer should feel premium. -Every category should feel like it was handwritten by an experienced relationship coach and game designer, not generated by AI. +Every category should feel handwritten by an experienced relationship coach and game designer, not generated by AI. If a user can predict the next question, the category fails. -## Question Mix +## Standard Question Mix Standard 250 question packs should use this mix: @@ -74,18 +75,18 @@ Each standard category should roughly contain: Never stack several heavy questions together. -Alternate emotional intensity naturally. +Daily packs should lean more playful, fun, sweet, and low pressure than standard category packs. ## Conversation Goals Every question should create at least one of these reactions: -* "I didn't know that." -* "That's adorable." +* "I did not know that." +* "That is adorable." * "We should actually do that." -* "I can't believe you picked that." -* "I've never thought about that." -* "That's a really good point." +* "I cannot believe you picked that." +* "I never thought about that." +* "That is a really good point." If none apply, rewrite it. @@ -93,7 +94,9 @@ If none apply, rewrite it. Daily questions are different from normal category packs. -They should feel like two people deciding what to do, say, eat, watch, laugh about, try, or enjoy together today. +They should feel like small couples game moments. + +They should sound like two people deciding what to do, eat, watch, laugh about, try, flirt with, or enjoy together today. Daily questions should be: @@ -101,7 +104,9 @@ Daily questions should be: * warm * concrete * playful -* easy to answer +* fun before merely useful +* game-like +* easy to answer in under 10 seconds * relationship focused * doable in normal life @@ -112,10 +117,75 @@ Daily questions should not sound like: * HR wellness surveys * abstract emotional processing * generic AI relationship advice +* household admin +* bedtime logistics +* chore planning If the question sounds like a couples counselor wrote it, rewrite it. -### Banned Daily Tone Words +If the question sounds like roommates managing a house, rewrite it. + +## Daily Fun Gate + +A daily question passes only if it creates at least one of these: + +* a smile +* a laugh +* a flirt +* a cute choice +* a tiny date idea +* a playful debate +* a small memory +* a small thing the couple might actually try tonight + +Warm is not enough. Concrete is not enough. Useful is not enough. + +Ask this before approving any daily question: + +```text +Would this feel fun, sweet, or playful inside the app tonight? +``` + +If the honest answer is "useful, but not fun", rewrite it. + +## Daily Option Direction + +Prefer daily options like: + +* snacks +* tiny dates +* silly bets +* inside jokes +* couch games +* music picks +* mini adventures +* playful compliments +* low-pressure flirting +* cozy but fun moments +* small surprises +* dramatic fake awards +* guilty-pleasure shows +* cute photos +* dessert runs +* short walks with a purpose + +Avoid daily options centered on: + +* bills +* laundry +* dishes +* clean counters +* errands +* appointments +* calendars +* bedtime planning +* household maintenance +* saved blankets +* clinical reassurance phrasing + +These can exist in real relationships. They should not dominate the daily fun pack. + +## Banned Daily Tone Words Avoid these in daily questions: @@ -134,352 +204,149 @@ Avoid these in daily questions: These are not banned from every serious category forever, but they should almost never appear in daily questions. -### Daily Good vs Bad +## Daily Good vs Bad Good daily question: ```text -Long day. What would actually help tonight? +What tiny date move sounds best tonight? ``` Good options: -* A hug before chores -* Dinner without overthinking it -* Ten quiet minutes together -* One tiny task done +* Dessert on the couch +* A two-song kitchen dance +* A short walk with snacks +* A ridiculous movie pick Bad daily question: ```text -Which reset would help us avoid autopilot? +Before phones win, what would make the night nicer? ``` +Bad options: + +* A clean counter +* A quick shoulder rub +* A simple bedtime plan +* The good blanket saved + Why it fails: -* therapy coded -* abstract -* not concrete -* sounds generated +* too much household admin +* not playful enough +* one option is weirdly phrased +* it does not feel like a couples game ## Daily Single Choice Weekday Lineup -This is a special daily pack, not a standard 250 question category pack. Target counts are 500 total, 75 free, 425 premium, and 500 single_choice. +This is a special daily pack, not a standard 250 question category pack. +Target counts: -### Monday: Mood Check Monday +* 500 total +* 75 free +* 425 premium +* 500 single_choice -Purpose: pick what kind of day the relationship needs. +Weekday themes: -Vibe: gentle, simple, start of week, low pressure. +* Monday: Mood Check Monday +* Tuesday: Tiny Win Tuesday +* Wednesday: Real One Wednesday +* Thursday: Laugh It Off Thursday +* Friday: Flirty Friday +* Saturday: Side Quest Saturday +* Sunday: Slow Burn Sunday -Example: +See `DAILY_SINGLE_CHOICE_WEEKDAY_SYSTEM.md` for full theme rules. + +## Daily Voice Enforcement + +The daily weekday pack must use a review loop, not a one-pass bulk rewrite. + +Daily questions must be written in small batches, reviewed, marked, fixed, and reviewed again before scaling. + +A daily question is not approved until: + +* the prompt sounds natural out loud +* the options cleanly answer the prompt +* the wording is concrete, not abstract +* the question feels like a game moment +* the question feels fun, sweet, playful, flirty, or date-like +* the theme is clear without sounding forced + +If the question passes JSON validation but sounds weird when read out loud, it fails. + +If the question is useful but not fun, it fails. + +## General Tone Rules + +Avoid robotic openings: + +* Describe +* Reflect on +* Discuss +* Evaluate +* In what ways +* How satisfied are you +* Explore your feelings +* Identify the ways + +Use normal human wording. + +Better: ```text -What would help us start the week feeling closer? +What tiny date move sounds best tonight? ``` -Required tag: +Worse: ```text -daily_monday_mood_check +In what ways could we improve our relational connection this evening? ``` -### Tuesday: Tiny Win Tuesday +## Option Rules -Purpose: pick one small thing to do together. +For choice questions: -Vibe: low effort, practical, cute, doable. +* options must answer the exact prompt +* options must be similar in weight +* options must not overlap too much +* options must not shame either partner +* options must sound like real choices +* options should be short -Example: +Reject answer sets where one option is obviously the "correct" healthy answer and the rest are fake. -```text -Which tiny win should we aim for tonight? -``` - -Required tag: - -```text -daily_tuesday_tiny_win -``` - -### Wednesday: Real One Wednesday - -Purpose: pick the most honest answer. - -Vibe: present, grounded, lightly meaningful, not heavy. - -Example: - -```text -What would make us feel more present with each other tonight? -``` - -Required tag: - -```text -daily_wednesday_real_one -``` - -### Thursday: Laugh It Off Thursday - -Purpose: pick something silly or low pressure. - -Vibe: weird, funny, tired week energy. - -Example: - -```text -What ridiculous little thing would improve our night? -``` - -Required tag: - -```text -daily_thursday_laugh -``` - -### Friday: Flirty Friday - -Purpose: pick something playful, sweet, attractive, or date like. - -Vibe: compliments, attraction, flirting, fun. - -Example: - -```text -What kind of flirting from me still works best? -``` - -Required tag: - -```text -daily_friday_flirty -``` - -### Saturday: Side Quest Saturday - -Purpose: pick a tiny adventure or date idea. - -Vibe: playful, outside the routine, doable. - -Example: - -```text -What kind of mini adventure sounds most like us today? -``` - -Required tag: - -```text -daily_saturday_side_quest -``` - -### Sunday: Slow Burn Sunday - -Purpose: pick a warm intimacy or closeness answer. - -Vibe: affectionate, cozy, optionally spicy, never pushy. - -Example: - -```text -What kind of closeness would feel best tonight? -``` - -Required tag: - -```text -daily_sunday_slow_burn -``` - -## Variety - -Never repeat sentence openings. - -Mix structures constantly. - -Examples: - -* Imagine... -* Suppose... -* If we suddenly... -* Pretend... -* Pick every answer... -* Finish this thought... -* What's one thing... -* Which tiny habit... -* If we only had one hour... -* What would make... -* When do you feel... -* Which sounds most like us... - -No opening should dominate a category. - -## No AI Writing - -Reject questions that sound like: - -* Describe... -* Reflect on... -* Discuss... -* Evaluate... -* In what ways... -* How satisfied are you... -* What boundary around... -* Explore your feelings... -* Identify... -* Rate the effectiveness... - -These sound like surveys. - -Not conversations. - -## Multiple Choice - -Should make people pause because several answers feel right. - -Use 4 to 6 options. - -Avoid obvious answers. - -Avoid filler. - -Whenever realistic, allow multiple selections. - -## Single Choice - -There should never be one obvious answer. - -Every option should feel believable. - -Every option must directly answer the prompt. - -Use 4 to 6 options. - -## Scale - -Use scales only when measuring intensity genuinely improves the conversation. - -Never use a scale because it is easier than writing good options. - -## This Or That - -Keep them: - -* fast -* funny -* memorable -* shareable - -Most should take under three seconds. - -## Written Questions +## Written Question Rules Written questions must earn the keyboard. -Only use them when typing creates something choices cannot. +Use written questions only for: -Good written questions create: - -* stories * memories * appreciation * future plans +* short stories +* meaningful personal answers -Never ask users to write essays. +Do not use written questions for basic preferences. -## Fun Rule +## Final Content Test -Every category should include: +Before shipping a pack, read random questions out loud. -* inside jokes -* tiny challenges -* food debates -* traditions -* bucket lists -* silly scenarios -* future adventures -* friendly competitions -* low pressure date ideas -* unexpected situations +Reject anything that sounds like: -Even serious categories need moments to smile. +* AI filler +* therapy homework +* a survey +* a worksheet +* household admin +* a chore list +* an app trying too hard to be deep -## Relationship First - -Anchor every question to: - -* us -* we -* you -* your partner -* our memories -* our future - -Avoid generic questions that could belong in any survey. - -## Duplicate Prevention - -Never repeat: - -* sentence openings -* concepts -* option lists -* conversation goals -* emotional outcome - -If two questions feel similar, delete one. - -## Readability Test - -After completing a category, randomly read 30 questions. - -Reject the category if: - -* the writing feels repetitive -* the openings repeat too often -* the tone feels robotic -* the next question becomes predictable -* multiple questions blend together -* it sounds AI generated -* it sounds clinical -* it sounds like a wellness worksheet - -This test is mandatory. - -## Premium Test - -Before approving every question ask: - -* Would I pay for this? -* Would this start a real conversation? -* Would this create a memory? -* Would I screenshot this? -* Would I send this to my partner? -* Would I smile while answering it? - -If any answer is no, rewrite it. - -## Final Approval - -A category is complete only if: - -* schema validation passes -* duplicate checks pass -* readability test passes -* category identity is obvious -* emotional mix feels balanced -* consumer test passes -* premium test passes -* it does not sound AI generated - -## Final Rule - -Conversation quality always beats quantity. - -One unforgettable question is worth more than twenty average ones. - -Never optimize for finishing faster. - -Optimize for creating conversations couples will remember. +Closer questions should make couples want to keep tapping. diff --git a/seed/questions/QUESTION_QUALITY_CHECKLIST.md b/seed/questions/QUESTION_QUALITY_CHECKLIST.md index 1f341875..77bcc2ea 100644 --- a/seed/questions/QUESTION_QUALITY_CHECKLIST.md +++ b/seed/questions/QUESTION_QUALITY_CHECKLIST.md @@ -1,4 +1,4 @@ -# Closer Question Quality Checklist v3 +# Closer Question Quality Checklist v6 **See also:** [QUESTION_CONTENT_GUIDE.md](QUESTION_CONTENT_GUIDE.md) | [QUESTION_SCHEMA.md](QUESTION_SCHEMA.md) | [QUESTION_REWRITE_PLAN.md](QUESTION_REWRITE_PLAN.md) @@ -8,7 +8,7 @@ This checklist prevents technically valid but boring questions from reaching the Passing JSON validation is not enough. -Every question must also feel human, useful, and worth answering. +Every question must also feel human, useful, fun, and worth answering. ## Automatic Rejects @@ -31,8 +31,6 @@ Reject any question that contains or strongly resembles: These are therapy worksheet patterns. -Burn them politely. - ## Daily Pack Hard Checks For the daily single choice weekday pack, confirm before content review: @@ -41,21 +39,83 @@ For the daily single choice weekday pack, confirm before content review: * 75 free questions * 425 premium questions * every question is single_choice -* every question has exactly one weekday tag +* every question has a weekday tag * every question has 4 to 6 options +* 4 options preferred +* no duplicate IDs +* no duplicate question text +* no duplicate exact option lists + +## Daily Fun Gate + +For daily questions, reject anything that is merely useful but not fun. + +A daily question must feel like one of these: + +* a game moment +* a tiny date choice +* a sweet choice +* a flirt +* a silly prompt +* a playful debate +* a low-pressure couple moment + +Reject daily questions with answer sets built around: + +* clean counters +* dishes +* laundry +* bills +* appointments +* errands +* bedtime planning +* household maintenance +* saved blankets +* clinical reassurance phrasing + +These can exist in the real relationship. They should not dominate the daily fun pack. + +Bad: + +```text +Before phones win, what would make the night nicer? +``` + +Bad options: + +* A clean counter +* A quick shoulder rub +* A simple bedtime plan +* The good blanket saved + +Better: + +```text +Before phones win, what should we do for fun? +``` + +Better options: + +* Pick a ridiculous snack +* Watch one guilty-pleasure clip +* Trade dramatic compliments +* Choose tomorrow's tiny date ## Daily Pack Rejects -For daily single choice weekday questions, reject any prompt that feels like: +Reject daily prompts that feel like: * therapy homework * self-help content -* an HR wellness survey -* a communication worksheet +* HR wellness surveys +* communication worksheets * abstract emotional processing * generic AI relationship advice +* household admin +* bedtime logistics +* chore planning -Reject daily questions using these words or phrases unless there is a strong reason: +Reject daily questions using these words or phrases: * reset * process @@ -70,261 +130,113 @@ Reject daily questions using these words or phrases unless there is a strong rea * communication style * conflict framework -Bad daily question: +## Daily Option Checks + +Every daily option must: + +* answer the exact prompt +* be a complete answer +* sound natural +* be similar in weight to the other options +* be fun, sweet, playful, flirty, silly, date-like, or warmly specific + +Reject options that are: + +* fragments +* too abstract +* weirdly specific +* chore-heavy +* clinical +* not connected to the prompt +* much better or worse than the other options + +Bad fragment: ```text -Which reset would help us avoid autopilot? -``` - -Good daily question: - -```text -Long day. What would actually help tonight? -``` - -Bad daily question: - -```text -What would help us process the emotional load of the week? -``` - -Good daily question: - -```text -What tiny nice thing would make tonight better? -``` - -## Daily Question Voice Test - -A daily question passes only if the answer is yes to all of these: - -* Would a real couple answer this in under 10 seconds? -* Does it sound like something normal people would say? -* Is it about today or normal life? -* Are the options concrete? -* Does every option answer the prompt? -* Is it warm, playful, honest, or useful? - -Reject it if: - -* it sounds clinical -* it sounds like advice -* it sounds like therapy -* it is too abstract -* it uses a wellness app phrase -* it could belong in any generic relationship app - -## Duplicate Pattern Rejects - -Reject the question if it repeats too much of a previous question: - -* same opening phrase -* same option list -* same emotional goal -* same situation -* same answer pattern -* same wording with one noun swapped - -A file can be valid and still feel like a cursed spreadsheet. - -## Opening Variety - -No category should overuse any opening. - -Watch for overuse of: - -* What should we... -* What do you... -* Which... -* How much... -* What makes... - -These are allowed, but not as the backbone of the pack. - -## Consumer Test - -Ask: - -Would a real couple answer this voluntarily on a Friday night? - -Reject if the honest answer is no. - -## Conversation Test - -A question should create at least one of these: - -* a laugh -* a story -* a decision -* a date idea -* a compliment -* a surprise -* a memory -* a useful truth -* a follow up question - -Reject questions that only collect data. - -## Premium Test - -Reject the question if it does not feel worth paying for. - -A premium question should feel: - -* specific -* warm -* memorable -* useful -* fun -* relationship focused - -## Option Quality - -For multi_choice and single_choice: - -* use 4 to 6 options -* avoid obvious correct answers -* avoid overlapping options -* avoid vague options like "other" -* avoid all negative options -* avoid options that shame either partner -* keep options short -* make options feel realistic -* make every option answer the exact prompt - -Bad options: - -* Be better -* Communicate more -* Fix us -* Other - -Good options: - -* Make dinner easy -* Take a short walk -* Send a sweet text -* Save me the good blanket - -## Written Question Gate - -A written question is allowed only when typing creates more value than choices. - -Reject written questions that ask for: - -* basic preference -* yes or no -* generic reflection -* long emotional labor -* forced vulnerability - -Written questions should create stories, memories, or meaningful appreciation. - -## Scale Question Gate - -Use scale only when intensity matters. - -Good scale uses: - -* How close does this feel? -* How comfortable are you? -* How often does this happen? -* How important is this? -* How ready are we? - -Bad scale uses: - -* random preferences -* jokes -* simple choices -* topics better served by options - -## Emotional Safety - -Reject questions that pressure users to: - -* confess -* forgive -* reveal trauma -* admit guilt -* justify boundaries -* defend needs -* disclose sexual details before consent context -* compare partners cruelly - -The app should open doors, not corner people. - -## Fun Requirement - -Every category must include playful moments. - -Even serious categories need: - -* small humor -* soft wording -* hopeful prompts -* low pressure options -* practical repair ideas - -No category should feel like 250 tiny court summons. - -## Category Fit - -Every question must clearly belong to its category. - -Reject questions that could fit anywhere. - -Bad for Gratitude: - -```text -What do you like most about us? +When I need reassurance ``` Better: ```text -What's one small thing I do that deserves more credit? +Tell me one thing you liked about today ``` -## Relationship Anchor +Bad weird option: -Every question should connect to the couple. +```text +The good blanket saved +``` -Prefer: +Better: -* us -* we -* you and me -* our life -* our future -* our memories +```text +Save me the best couch spot +``` -Avoid generic survey voice. +## Repetition Checks -## Final Human Read +Reject or rewrite if: -Before committing a pack, read 30 random questions aloud. +* too many questions start the same way +* the same option text appears too often +* the same situation repeats with different nouns +* the same answer pattern repeats +* the weekday starts to feel like wallpaper -Reject the pack if it sounds: +The pack can pass duplicate checks and still fail repetition review. -* robotic -* repetitive -* clinical -* boring -* too similar -* too heavy -* too generic -* like a wellness worksheet -* like a couples counselor wrote it +## Daily Sample Gate -## Final Approval +Before approving the full daily pack: -A pack is ready only when: +1. Read 10 random questions from each weekday. +2. Mark anything therapy-coded, boring, weird, logistical, or not fun. +3. Fix the marked items. +4. Run a second random sample from each weekday. +5. Ship only when the second sample passes cleanly. -* schema passes -* counts pass -* duplicate checks pass -* tone review passes -* category fit passes -* consumer test passes -* no obvious AI patterns remain +The sample must include no chore-heavy answer sets and no weird domestic options. + +## General Question Checks + +Every question must pass: + +* Would a real couple answer this willingly? +* Is it easy to understand on the first read? +* Does it create a conversation, laugh, flirt, memory, plan, or useful preference? +* Are the answer options balanced? +* Is the wording natural out loud? +* Would this feel premium in the app? + +## Marking Reasons + +Use these reasons when marking weak questions: + +* therapy_voice +* wellness_voice +* household_admin +* not_fun +* abstract_prompt +* awkward_split_phrase +* repeated_stem +* option_mismatch +* fragment_options +* too_generic +* weird_option +* weak_weekday_fit +* filler_question +* duplicate_text +* duplicate_options +* schema_issue + +## Final Verdict Labels + +Use one of these labels when reviewing a pack: + +* production_ready +* staging_only +* needs_rewrite +* reject + +Do not call a pack production ready just because the JSON validates. diff --git a/seed/questions/QUESTION_REWRITE_PLAN.md b/seed/questions/QUESTION_REWRITE_PLAN.md index 9ef884fe..1c042fc6 100644 --- a/seed/questions/QUESTION_REWRITE_PLAN.md +++ b/seed/questions/QUESTION_REWRITE_PLAN.md @@ -1,28 +1,29 @@ -# Closer Question Rewrite Plan v3 +# QUESTION_REWRITE_PLAN.md -**See also:** [QUESTION_CONTENT_GUIDE.md](QUESTION_CONTENT_GUIDE.md) | [QUESTION_SCHEMA.md](QUESTION_SCHEMA.md) | [QUESTION_QUALITY_CHECKLIST.md](QUESTION_QUALITY_CHECKLIST.md) +## Purpose -## Product Goal +This plan defines how to rewrite Closer question packs without producing valid but dead content. -Closer is a relationship app, not a survey. +The goal is not just clean JSON. -The experience should feel like a couples game that naturally creates conversations, laughter, memories, flirting, and meaningful moments. +The goal is questions real couples want to answer. -If a question feels like homework, rewrite it. +## Standard Pack Workflow -## Repo Schema +For normal 250 question category packs: -Use these type names exactly: +1. Define the category purpose. +2. Define the main subtopics. +3. Write in batches of 40 to 50. +4. Review tone and repetition after each batch. +5. Assign types, access, and depth. +6. Validate schema. +7. Check duplicate question text. +8. Check duplicate option lists. +9. Read random questions out loud. +10. Fix weak items before shipping. -* written -* single_choice -* multi_choice -* scale -* this_or_that - -Do not rename them unless the app code is updated first. - -## Standard Question Mix per 250 +## Standard 250 Question Mix | Type | Count | |---|---:| @@ -32,37 +33,11 @@ Do not rename them unless the app code is updated first. | this_or_that | 15 | | written | 10 | -76 percent of questions must be choice based. - -Written questions should stay rare. - -## Free and Premium Split - -Per standard 250 question pack: +Free and premium split: * 75 free * 175 premium -Suggested free split: - -* multi_choice: 42 -* single_choice: 15 -* scale: 11 -* this_or_that: 5 -* written: 2 - -Suggested premium split: - -* multi_choice: 98 -* single_choice: 35 -* scale: 24 -* this_or_that: 10 -* written: 8 - -Free should feel useful, fun, and complete. - -Premium should feel deeper, richer, and more varied. - ## Special Pack Exception Some packs are product-specific and may override the standard 250 question mix. @@ -78,7 +53,7 @@ A special pack must document: * required tags * reason for the exception -Special packs still must pass tone, duplicate, option, and schema review. +Special packs still must pass tone, duplicate, option, schema, and sample review. ## Daily Single Choice Weekday Pack @@ -88,13 +63,13 @@ Pack id: daily_single_choice_weekly_v1 ``` -Current compatibility file, if the app still expects it: +Current compatibility file name: ```text daily_fun_multiple_choice_v3.json ``` -Recommended file name after code cleanup: +Recommended future file name: ```text daily_single_choice_weekly_v1.json @@ -102,22 +77,23 @@ daily_single_choice_weekly_v1.json Expected counts: -* total questions: 500 -* free questions: 75 -* premium questions: 425 -* type count: 500 single_choice - -These counts are a special daily pack exception. Do not use the standard 250 question mix for this file. +* 500 total questions +* 75 free questions +* 425 premium questions +* 500 single_choice questions Rules: * every question must be single_choice * every question must have 4 to 6 options -* every question must have exactly one weekday tag +* 4 options preferred +* every question must have a weekday tag * every option must answer the prompt * no therapy worksheet tone * no wellness survey tone -* no repeated option lists +* no household admin tone +* no chore-heavy answer sets +* no repeated exact option lists Weekday tags: @@ -129,149 +105,120 @@ Weekday tags: * daily_saturday_side_quest * daily_sunday_slow_burn -Weekday lineup: +## Daily Fun-First Rule -| Day | Theme | Purpose | -|---|---|---| -| Monday | Mood Check Monday | Pick what kind of day the relationship needs | -| Tuesday | Tiny Win Tuesday | Pick one small thing to do together | -| Wednesday | Real One Wednesday | Pick the most honest answer | -| Thursday | Laugh It Off Thursday | Pick something silly or low pressure | -| Friday | Flirty Friday | Pick something playful, sweet, or date like | -| Saturday | Side Quest Saturday | Pick a tiny adventure or date idea | -| Sunday | Slow Burn Sunday | Pick a warm intimacy or closeness answer | +Daily questions must be fun before they are useful. -## Daily Pack Writing Workflow +If a daily prompt mostly helps the couple manage chores, bedtime, errands, dishes, bills, or logistics, rewrite it toward one of these: -Do not write 500 daily questions in one pass. +* a tiny date +* a joke +* a snack +* a flirt +* a mini adventure +* a sweet surprise +* a playful choice +* a cute debate +* a small shared moment -Use this process: +Do not approve a daily batch just because it is concrete. -1. Write 20 to 30 sample questions for one weekday. -2. Review tone before scaling. -3. Remove therapy coded words. -4. Confirm every option answers the prompt. -5. Check opening variety. -6. Check exact option list reuse. -7. Only then write the next batch. -8. After all weekdays are drafted, read 30 random questions aloud. -9. Reject the pack if it sounds repetitive, clinical, generic, or AI written. +Concrete can still be boring. -## Emotional Mix +A daily batch should feel like something users would want to tap tonight. -Every standard category should roughly include: +## Daily Production Loop -* 35 percent playful -* 25 percent everyday relationship -* 20 percent meaningful conversation -* 10 percent future dreams and planning -* 10 percent deeper vulnerability +Do not write or rewrite 500 daily questions in one pass. -Never group heavy questions together. +Use a bounded loop. The goal is quality control, not infinite polishing until everyone forgets why the app exists. -Every category must include lighter moments. +### Per Weekday Loop -Daily packs should lean more playful, practical, and low pressure than standard category packs. +For each weekday theme: + +1. Write or rewrite 20 questions. +2. Review the 20 questions out loud. +3. Mark every weak question with a reason. +4. Fix only the marked questions. +5. Review the fixed questions again. +6. Continue only when at least 18 of 20 pass. +7. Continue only when at least 16 of 20 feel fun, playful, sweet, flirty, silly, or date-like. +8. Expand that weekday theme in batches of 20 to 30. +9. Repeat mark, fix, review after each batch. +10. Move to the next weekday only after the current weekday passes. + +### Pass Standard + +A daily question passes only if: + +* it sounds like something normal people would say +* it can be answered in under 10 seconds +* it feels like a couples game +* it is fun before merely useful +* it is concrete and tied to real life +* every option answers the exact prompt +* every option is a complete answer +* the weekday theme is clear +* the wording does not feel generated +* the answer set is not household admin + +### Required Marking Reasons + +When marking a daily question, use one or more of these reasons: + +* therapy_voice +* wellness_voice +* household_admin +* not_fun +* abstract_prompt +* awkward_split_phrase +* repeated_stem +* option_mismatch +* fragment_options +* too_generic +* weird_option +* weak_weekday_fit +* filler_question + +### Final Pack Gate + +After all weekdays are drafted: + +1. Run schema and count validation. +2. Run duplicate question and duplicate option-list checks. +3. Check repeated openers. +4. Check repeated option text. +5. Read 10 random questions from each weekday. +6. Mark anything weak. +7. Fix marked questions. +8. Run a second random sample from each weekday. +9. Ship only if the second sample passes cleanly. + +Do not skip the final sample gate. + +A pack can be technically valid and still sound like a relationship app generated by a toaster with abandonment issues. ## Rewrite Rules -For every category: +When rewriting weak questions: -* rewrite every question from scratch -* keep category ids unless renaming is planned with app code -* use conversational language -* avoid therapy wording -* avoid survey wording -* avoid repetitive templates -* use 4 to 6 options for choice questions -* keep written questions rare -* add fun to every category -* make every category feel different -* reject questions that feel generated +* keep the original category purpose +* remove therapy wording +* remove abstract phrasing +* use simpler language +* make the prompt answerable +* make options balanced +* avoid fake healthy answers +* avoid repeated stems +* keep the emotional intensity appropriate -## Rewrite Order +## Final Deliverables -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 -22. daily_single_choice_weekly_v1 +Each rewrite should provide: -## Serious Category Rule - -Serious categories still need warmth, humor, and relief. - -Do not make conflict, trust, boundaries, or intimacy feel like couples counseling homework. - -Use soft, safe, specific wording. - -## Validation Rules for Standard Packs - -Every standard rewritten pack must pass: - -* valid JSON -* exactly 250 questions -* exactly 75 free -* exactly 175 premium -* exactly 140 multi_choice -* exactly 50 single_choice -* exactly 35 scale -* exactly 15 this_or_that -* exactly 10 written -* at least 76 percent choice based -* valid depth values only: light, medium, deep -* no numeric depth values -* no malformed keys -* no duplicate ids -* no duplicate question text -* every choice question has options -* every scale question has scale configuration -* every written question has answer configuration -* no placeholder text -* no therapy worksheet tone -* no obvious AI repetition - -## Validation Rules for Special Daily Packs - -Every daily single choice weekday pack must pass: - -* valid JSON -* metadata counts match actual counts -* exactly 500 questions unless a new documented app decision changes the count -* exactly 75 free questions -* exactly 425 premium questions -* every question is single_choice -* every choice question has 4 to 6 options -* every question has exactly one weekday tag -* no duplicate ids -* no duplicate question text -* no exact repeated option lists -* no placeholder text -* no therapy worksheet tone -* no wellness survey tone -* no obvious AI repetition - -## Final Rule - -The schema only proves the file can load. - -It does not prove the questions are good. - -Quality review is mandatory before commit. +* updated JSON +* validation report +* marked fixes CSV or JSON +* short review findings +* apply instructions diff --git a/seed/questions/QUESTION_SCHEMA.md b/seed/questions/QUESTION_SCHEMA.md index e6ec3ca3..9bd1ba46 100644 --- a/seed/questions/QUESTION_SCHEMA.md +++ b/seed/questions/QUESTION_SCHEMA.md @@ -1,4 +1,4 @@ -# Closer Question Schema +# Closer Question Schema v5 **See also:** [QUESTION_CONTENT_GUIDE.md](QUESTION_CONTENT_GUIDE.md) | [QUESTION_REWRITE_PLAN.md](QUESTION_REWRITE_PLAN.md) | [QUESTION_QUALITY_CHECKLIST.md](QUESTION_QUALITY_CHECKLIST.md) @@ -10,13 +10,25 @@ For writing philosophy and tone, see `QUESTION_CONTENT_GUIDE.md`. For rewrite workflow and special pack exceptions, see `QUESTION_REWRITE_PLAN.md`. -# 1. Question Types +## Question Types + +Use these type names exactly: + +* written +* single_choice +* multi_choice +* scale +* this_or_that + +Do not rename them unless the app code is updated first. ## multi_choice Select every option that applies. -Primary question type. At least 75 percent of standard pack questions must be choice based when combined with `single_choice`. +Use 4 to 6 options. + +Example: ```json { @@ -26,9 +38,7 @@ Primary question type. At least 75 percent of standard pack questions must be ch { "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" } + { "id": "easy_conversation", "text": "Easy conversation" } ] } ``` @@ -37,13 +47,17 @@ Rules: * Prompt should clearly allow multiple answers. * Options should not shame either partner. -* Include practical and emotional options when possible. -* Use 4 to 6 options. +* Options should be practical, emotional, or playful when possible. +* Options must not overlap too much. ## single_choice Select one best answer. +Use 4 to 6 options. + +Example: + ```json { "type": "single_choice", @@ -52,8 +66,7 @@ Select one best answer. { "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" } + { "id": "something_outside", "text": "Something outside" } ] } ``` @@ -64,12 +77,14 @@ Rules: * Options should not overlap too much. * Options should sound like real choices. * Every option must directly answer the prompt. -* Use 4 to 6 options. +* Every option should be similar in weight. ## scale Rate agreement, comfort, importance, confidence, or frequency. +Example: + ```json { "type": "scale", @@ -89,23 +104,11 @@ Rules: * Do not make the low end sound bad or shameful. * Scale questions should measure one thing only. -Bad: - -```text -How badly are we failing at making time for each other? -``` - -Better: - -```text -How much would some intentional time together help us right now? -``` - ## this_or_that Very fast playful questions. -Should take under three seconds. +Example: ```json { @@ -124,7 +127,7 @@ Rules: Reserved for questions where a short written response adds meaningful value. -Never use written questions for basic preferences. +Example: ```json { @@ -138,43 +141,24 @@ Never use written questions for basic preferences. Written questions require an `answer` configuration with `max_length`. -Good written examples: - -```text -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: - -```text -How can we deepen our connection? -``` - -Better: - -```text -What is one thing we could do this week that would make us feel more like a team? -``` - -# 2. Required Counts +Do not use written questions for basic preferences. ## Standard 250 Question Packs Every standard 250 question pack must contain: -| Type | Count | Percent | -|---|---:|---:| -| multi_choice | 140 | 56% | -| single_choice | 50 | 20% | -| scale | 35 | 14% | -| this_or_that | 15 | 6% | -| written | 10 | 4% | +| Type | Count | +|---|---:| +| multi_choice | 140 | +| single_choice | 50 | +| scale | 35 | +| this_or_that | 15 | +| written | 10 | -At least 75 percent of all standard pack questions must be choice based. +Free and premium split: -Written questions should be rare and only used when typing creates a better conversation. +* 75 free +* 175 premium ## Special Packs @@ -182,9 +166,21 @@ Special product packs may override standard counts only when documented. The daily single choice weekday pack is a special pack. -It may use all `single_choice` questions when the pack metadata and rewrite plan say so. +## Daily Single Choice Weekday Pack -Current daily pack target counts: +Pack id: + +```text +daily_single_choice_weekly_v1 +``` + +Compatibility file name: + +```text +daily_fun_multiple_choice_v3.json +``` + +Target counts: | Field | Count | |---|---:| @@ -193,83 +189,9 @@ Current daily pack target counts: | premium | 425 | | single_choice | 500 | -These counts do not apply to standard category packs. Standard packs still use the normal 250 question mix. +These counts do not apply to standard category packs. -## Free vs Premium - -Standard 250 question packs: - -| Access | Count | -|---|---:| -| free | 75 | -| premium | 175 | - -Special packs must define their own free and premium counts in metadata. - -## Depth - -Valid depth values in the documented schema: - -* light -* medium -* deep - -Do not use numeric depth values unless the active app import code still requires numeric depth for compatibility. If compatibility requires numeric depth, document the exception in the pack README and fix the import code later. - -## 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" } - ] -} -``` - -## Daily single choice category metadata +## Daily Pack Metadata Example ```json { @@ -280,41 +202,55 @@ Valid category access values: "count": 500, "free_count": 75, "premium_count": 425, + "question_type_policy": "single_choice_only", + "review_policy": "weekday_batch_loop_required", "questions": [] } ``` -Use `daily_fun_multiple_choice_v3.json` only as a temporary compatibility filename if the app still expects it. The content inside the file must still be single_choice. +If the compatibility filename `daily_fun_multiple_choice_v3.json` is used, the metadata should still make clear that the content is `single_choice` only. -## Daily single choice question object +## Daily Question Object Example ```json { "id": "daily_monday_001", "type": "single_choice", - "text": "Long day. What would actually help tonight?", + "text": "What tiny date move sounds best tonight?", "depth": "light", "access": "free", "sex": "neutral", "tags": ["daily_monday_mood_check"], "options": [ - { "id": "hug_before_chores", "text": "A hug before chores" }, - { "id": "easy_dinner", "text": "Dinner without overthinking it" }, - { "id": "quiet_minutes", "text": "Ten quiet minutes together" }, - { "id": "tiny_task", "text": "One tiny task done" } + { "id": "dessert_couch", "text": "Dessert on the couch" }, + { "id": "kitchen_dance", "text": "A two-song kitchen dance" }, + { "id": "snack_walk", "text": "A short walk with snacks" }, + { "id": "movie_pick", "text": "A ridiculous movie pick" } ] } ``` -Daily question rules: +## Daily Single Choice Content Rules -* Use `single_choice` only. -* Use 4 to 6 options. -* Use exactly one weekday tag. -* Every option must answer the prompt. -* Avoid therapy coded wording. +Daily options must be: -Weekday tags: +* complete answers to the prompt +* short and natural +* similar in weight +* fun, sweet, flirty, silly, or date-like when possible +* easy to pick in under 10 seconds + +Daily options must not be mostly chores, household admin, or therapy phrasing. + +Reject options centered on clean counters, bills, laundry, dishes, appointment scheduling, bedtime planning, saved blankets, or oddly specific domestic logistics unless the question clearly frames the option as playful and worth choosing. + +Schema validation only proves the file can be parsed. It does not prove the content is good. + +Daily packs must also pass the fun gate in `QUESTION_QUALITY_CHECKLIST.md` and the loop in `QUESTION_REWRITE_PLAN.md`. + +## Weekday Tags + +Daily questions must include the correct weekday tag: * daily_monday_mood_check * daily_tuesday_tiny_win @@ -324,184 +260,46 @@ Weekday tags: * daily_saturday_side_quest * daily_sunday_slow_burn -# 4. Validation Rules +If app code still uses older mode tags, include compatibility tags as needed without removing the new weekday tag. -## Standard Packs +## Depth -Every standard rewritten pack must pass: +Documented depth values: -* valid JSON -* exactly 250 questions -* 75 free -* 175 premium -* 140 multi_choice -* 50 single_choice -* 35 scale -* 15 this_or_that -* 10 written -* valid depth values only: light, medium, deep -* valid access values only: free, premium -* 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 -* 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 choice question has options -* every scale question has scale configuration -* every written question has answer configuration -* every category contains fun, curiosity, and meaningful conversations +* light +* medium +* deep -## Daily Single Choice Weekday Packs +Do not use numeric depth values unless the active app import code still requires numeric depth for compatibility. -Every daily single choice weekday pack must pass: +If compatibility requires numeric depth, document the exception in the pack README and fix the import code later. -* valid JSON -* metadata counts match actual counts -* exactly 500 questions unless a new documented app decision changes the count -* exactly 75 free questions -* exactly 425 premium questions -* every question is single_choice -* every question has 4 to 6 options -* every question has exactly one weekday tag -* every option directly answers the prompt -* no duplicate question IDs -* no duplicate question texts -* no exact repeated option lists -* no malformed keys -* no placeholder text -* no therapy worksheet tone -* no wellness survey tone -* no obvious AI repetition +## Access -## JSON Quality Checklist +Valid access values: -* [ ] 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 or documented special pack rules. -* [ ] Free/premium counts match metadata. -* [ ] Depth values are valid or documented for compatibility. -* [ ] 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. -* [ ] No placeholder text. -* [ ] No accidental old gendered IDs unless intentionally used. +* free +* premium -# 5. Subtopic Planning +## Validation Requirements -Each pack should have subtopics to prevent repetition. +Before shipping any pack: -Example for Date Night: +* JSON must parse +* all IDs must be unique +* all question text must be unique +* every type must be valid +* every required field must exist +* option IDs must be unique within a question +* options must directly answer the prompt +* access values must be valid +* depth values must match current app compatibility rules +* special packs must match their documented counts -* 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 or busy life -* date night stress -* memories -* future date dreams +## Content Validation Reminder -Example for Daily Single Choice Weekday: +Do not confuse schema validity with quality. -* easy dinner -* couch time -* small help -* hugs -* chores -* snacks -* little dates -* inside jokes -* errands together -* walks -* texts -* compliments -* kisses -* bedtime -* weekend plans -* tiny surprises +A file can be valid JSON and still be bad content. -# 6. Repetition Check - -A pack fails if it has blocks like this: - -```text -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: - -```text -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? -``` - -Daily packs also fail if they have blocks like this: - -```text -Which reset would help tonight? -Which reset would help Monday? -Which reset would help us feel closer? -Which reset would help before bed? -``` - -Better: - -```text -Long day. What would actually help tonight? -What tiny nice thing would make Monday less annoying? -What would make the couch feel like a date tonight? -Before bed, what would feel sweetest? -``` - -# 7. Content Batching Process - -Do not write all 250 questions in one creative pass. - -Do not write all 500 daily questions in one creative pass. - -Use this process: - -1. Define pack purpose. -2. Define subtopics. -3. Write 20 to 30 sample questions for the target voice. -4. Review tone and repetition. -5. Fix the sample before scaling. -6. Write the next batch. -7. Add choice, scale, and this or that questions when used. -8. Assign free/premium. -9. Assign depth. -10. Validate JSON. -11. Read the full file like a user. +Daily packs require schema validation plus human content review.