A warm toolkit for healthy relationship building — from pre-dating preparation through intentional partnership.
Ready for Us is a relationship building toolkit that helps individuals and couples navigate intentional check-ins through multiple phases — with ready-to-use AI reflection prompts:
For assessing emotional readiness before starting to date.
| Topic | What It Covers |
|---|---|
| Readiness | Emotional state, healing from past relationships |
| Values | What matters most in a future partner |
| Patterns | Recognizing healthy vs. unhealthy dynamics |
| Goals | What you're looking for in dating |
For couples in the slow-build phase (3+ dates, mutual interest):
| Topic | What It Covers |
|---|---|
| Pacing | What feels too slow? Too fast? When to revisit clarity? |
| Communication | How we stay connected, overwhelm patterns, safety |
| Affection | What feels best, approach consent, overwhelm signs |
| Trust | Group settings, initiative, feeling chosen without pressure |
For couples in a committed/defined relationship (post-DTR) to maintain stability:
| Topic | What It Covers |
|---|---|
| Stability | Translating commitment into day-to-day operations |
| Drift Detection | Spotting small misalignments before they become resentments |
| Repair | Handling stress, rupture, and reconnection |
| Maintenance | Building a repeatable rhythm for relationship health |
- Warm & Intentional — Soft colors, gentle language, no clinical terminology
- Exciting yet Soft — Blush-lavender palette that energizes and calms
- Never Overwhelming — One question at a time, skip freely, smooth transitions
- AI-Ready — Generate reflection prompts for yourself or as a couple
- Accessible — Dyslexia-friendly Lexend font, 18px base, WCAG AA contrast
# Just open in any browser
open index.html# Python
python -m http.server 8000
# Node.js
npx serve . -l 8000
# Then visit http://localhost:8000When deploying a new version, always bump the version number to ensure users get the latest updates (cache busting).
# Update version in all files (sw.js, index.html, loaders)
python scripts/bump_version.py 2.5.0The application opens to a dashboard view — your home base for all questionnaires:
| Feature | Description |
|---|---|
| Phase Cards | See all questionnaire phases with question counts |
| Resume Banner | Quickly continue where you left off |
| Mode Buttons | Start Lite or Full mode directly from dashboard |
| Instructions | Built-in guidance on how the tool works |
Click the theme icon in the nav to cycle through themes with a smooth bloom transition effect.
| Theme | Icon | Vibe | Default |
|---|---|---|---|
| Light | ☀️ | Soft blush-lavender, warm and inviting | ✓ |
| Dark | 🌙 | Midnight rose, cozy nighttime comfort | |
| Warm | 🌅 | Peachy blush, romantic and nurturing | |
| Nature | 🌿 | Soft sage, grounded and peaceful |
📸 Theme Showcase
See all 4 themes in action in the animated demo at the top of this README. The application smoothly transitions between Light, Dark, Warm, and Nature themes with a beautiful bloom effect.
Each theme applies cohesive styling across all views: dashboard, welcome screen, questionnaire, and review mode.
- Phase 0: Pre-Dating Readiness (36 Lite / 82 Full questions)
- Phase 1.5: Intentional Early Dating (18 Lite / 38 Full questions)
- Phase 2.5: Defined Relationship Check-In (Stability & Maintenance)
- Separate progress saved per phase
- Switch phases anytime from the dashboard
- Lite Mode: Core questions (~45 minutes)
- Full Mode: All questions across all sections
- Switch anytime: Dropdown in nav bar to switch Lite ↔ Full (preserves all answers)
- Persistent URLs: Refresh the page without losing your position
- Hash Routing: URLs like
#/phase_1.5/q05track your location - Back/Forward: Browser navigation buttons work as expected
- Skip any question with one click
- Badge shows how many are skipped
- Jump to skipped questions anytime
- Yellow progress bar segments indicate skipped questions
- See all questions at a glance
- Visual indicators: ✓ answered, ⏭ skipped, ○ unanswered
- Click any card to jump back and edit
- Progress saved to localStorage automatically
- Resume where you left off after closing browser
- Persists for weeks until you click "Start Over" or clear browser data
- Works across Chrome, Firefox, Safari, Edge
Two import modes (click 📥 Import in nav or welcome screen):
- Continue Questionnaire: Resume from saved JSON file
- Generate AI Prompt: Create reflection prompts from any saved results
- Upload one file for individual reflection
- Upload two files for couple's joint prompt
- Smart parsing handles both JSON and TXT export formats
- Questions are flagged for review after import
- Text file: Beautifully formatted for reading/sharing
- JSON file: Machine-readable, can be re-imported later
- Clipboard: Quick copy for pasting elsewhere
- View Raw: Mobile-friendly fallback for copy operations
Four specialized prompt types:
| Type | Description |
|---|---|
| Individual Lite | Personal insights from core questions |
| Individual Full | Comprehensive relational blueprint from all questions |
| Couple's Lite | How to show up for each other (both completed Lite) |
| Couple's Full | Complete relationship blueprint with conflict protocols |
Two workflows:
- During Questionnaire: Copy prompts from the Complete view
- From Saved Files: Import any exported results via the Import modal
- Each partner completes the questionnaire separately
- Copy My Results: Each person copies their formatted responses
- Copy Couple's Prompt: Get the AI template that accepts both responses
- Paste both sets of results into the prompt for joint AI reflection
- Shown after completing Lite mode
- Click 📈 Continue to Full Mode to add more questions
- All existing answers are preserved
- Clears ALL answered questions and local cache
- Shows clear warning before permanently deleting responses
Section 1: How We Want This To Feel
- Why I'm dating (right now) — What brings you to dating at this phase?
- What feels comfortable right now — Slow, warm, playful, clear?
- Too slow (for me) — What pace would feel neglected?
- Too fast (for me) — What pace would feel pressured?
- Review point for clarity — When should we revisit expectations?
Section 2: How We Stay Connected
- Check-in cadence — How often and in what format?
- Overwhelm pattern — What do I do when unsure? How to respond?
- What safety means — When do I feel safe with you?
Section 3: How We Care For Each Other
- Support when stressed — What helps me most from you?
- How to share the past — Transparency level for past relationships
Section 4: Affection That Feels Good
- Affection that feels best right now — What's comfortable for my nervous system?
- Approach for a kiss — Best way to initiate, what words land well
- Overwhelm signs and best response — How to know if I'm overwhelmed
Section 5: In Public and In Private
- Group settings preference — How we act around friends
- Initiative and leadership — Who plans/initiates what?
- Chosen without pressure — What helps me feel wanted, not pushed?
Section 6: What We're Building
- A fear I'm willing to name — A dating fear I'm ready to share
- How we treat this connection — One sentence to describe our approach
dating_questionnaire/
├── index.html # Main entry point
├── README.md # This file
│
├── data/
│ ├── config.json # Site-wide configuration
│ ├── SCHEMA.md # Schema documentation
│ ├── phase-registry.json # Registry of active phases
│ ├── phase_0/ # Phase 0: Readiness Audit
│ │ ├── manifest.json
│ │ ├── questions.txt
│ │ └── prompts.json
│ ├── phase_1.5/ # Phase 1.5: Intentional Early Dating
│ │ ├── manifest.json
│ │ ├── questions.txt
│ │ └── prompts.json
│ └── phase_2.5/ # Phase 2.5: Defined Relationship Check-In
│ ├── manifest.json
│ ├── questions.json
│ └── prompts.json
│
├── css/
│ ├── variables.css # Design tokens
│ ├── base.css # Reset, typography, fonts
│ ├── components.css # Buttons, cards, inputs
│ ├── animations.css # Transitions, micro-animations
│ ├── responsive.css # Mobile/tablet/desktop
│ ├── app.css # Application layouts
│ ├── dashboard.css # Dashboard styles
│ ├── toast.css # Toast notifications
│ ├── comparison.css # Comparison view styles
│ └── themes/ # Theme definitions
│ ├── light.css
│ ├── dark.css
│ ├── warm.css
│ └── nature.css
│
├── js/
│ ├── app/ # Application logic modules
│ │ ├── init.js # App initialization
│ │ ├── nav-menu.js # Navigation menu logic
│ │ ├── dashboard.js # Dashboard rendering
│ │ ├── questionnaire.js # Questionnaire logic
│ │ ├── ai-analysis.js # AI prompt generation
│ │ ├── export.js # Export handling
│ │ ├── import-modal.js # Import workflow
│ │ └── theme-manager.js # Theme switching
│ ├── data-loader.js # JSON loading utility
│ ├── html-loader.js # Dynamic HTML loading
│ ├── question-renderer.js # UI rendering for questions
│ ├── questionnaire-engine.js # State machine & navigation
│ ├── storage-manager.js # LocalStorage persistence
│ ├── url-router.js # Hash-based routing
│ ├── debug-overlay.js # Debug toolbar
│ └── sw.js # Service Worker (PWA)
│
├── html/
│ ├── components/ # Reusable UI fragments
│ │ ├── navigation.html
│ │ ├── footer.html
│ │ ├── loader.html
│ │ └── toasts.html
│ ├── modals/ # Dialog contents
│ │ ├── import.html
│ │ └── save.html
│ └── views/ # Main page views
│ ├── dashboard.html
│ ├── welcome.html
│ ├── questionnaire.html
│ ├── review.html
│ ├── complete.html
│ └── comparison.html
│
├── assets/
│ ├── images/ # Static images
│ ├── screenshots/ # App screenshots
│ └── recordings/ # App demo recordings
│
└── Results_Examples/ # Sample completed questionnaires
| Key | Action |
|---|---|
→ or Enter |
Next question |
← |
Previous question |
S |
Skip current question |
R |
Open review mode |
Ctrl+D |
Toggle debug overlay (when ?debug=true) |
For developers and troubleshooting. Append ?debug=true to the URL to enable debug mode.
How to use:
- Navigate to
http://localhost:8000/?debug=true(or add?debug=trueto any URL) - A 🐛 bug button appears in the bottom-right corner of the screen
- Click the button or press
Ctrl+Dto show/hide the debug overlay
Debug overlay features:
| Feature | Description |
|---|---|
| Question Info | Shows current question ID, type, and title |
| Raw Response JSON | Displays the exact data structure being saved |
| Field Status | For compound questions, shows ✓/✗ for each field |
| Import Warnings | Highlight questions that need review after import |
| Copy Button | 📋 Copies response JSON to clipboard |
Keyboard shortcut: Ctrl+D toggles the overlay visibility at any time (when debug mode is enabled).
Edit data/phase_*/questions.json. The system supports 4 question types:
📌 Single Select (Radio Buttons)
{
"id": "q10",
"section_id": "s3",
"order": 10,
"title": "How to share the past",
"prompt": "When we talk about past relationships, I prefer:",
"type": "single_select",
"options": [
{ "value": "full_transparency", "label": "Full transparency" },
{ "value": "high_level", "label": "High-level summaries" },
{ "value": "only_relevant", "label": "Only if relevant to the present" },
{ "value": "slow_over_time", "label": "Slowly over time as trust builds" }
],
"answer_schema": { "selected_value": "", "notes": "" },
"tags": { "included_in_manifests": ["lite", "full"] }
}☑️ Multi Select (Checkboxes)
{
"id": "q01",
"section_id": "s1",
"order": 1,
"title": "Why I'm dating (right now)",
"prompt": "At this phase, I am dating because (choose any):",
"type": "multi_select",
"options": [
{ "value": "exploration", "label": "Exploration" },
{ "value": "discernment", "label": "Discernment" },
{ "value": "emotional_connection", "label": "Emotional connection" },
{ "value": "long_term_potential", "label": "Long-term potential" },
{ "value": "other", "label": "Other (write in)" }
],
"answer_schema": { "selected_values": [], "other_text": "" },
"tags": { "included_in_manifests": ["lite", "full"] }
}📝 Free Text (Open-ended)
{
"id": "q03",
"section_id": "s1",
"order": 3,
"title": "Too slow (for me)",
"prompt": "A pace that would feel too slow for me right now would look like:",
"type": "free_text",
"answer_schema": { "text": "" },
"examples": [
"No intentional plans.",
"Avoiding clarity for weeks.",
"Feeling like an option."
],
"tags": { "included_in_manifests": ["lite", "full"] }
}🔗 Compound (Multi-field Questions)
{
"id": "q06",
"section_id": "s2",
"order": 6,
"title": "Check-in cadence",
"prompt": "Ideal cadence and format for intentional check-ins:",
"type": "compound",
"fields": [
{
"key": "frequency",
"label": "How often?",
"type": "single_select",
"options": [
{ "value": "weekly_10", "label": "Weekly (10 minutes)" },
{ "value": "biweekly_20", "label": "Bi-weekly (15–20 minutes)" },
{ "value": "as_needed", "label": "As needed / organic" }
]
},
{
"key": "format",
"label": "Preferred format",
"type": "single_select",
"options": [
{ "value": "in_person", "label": "In person" },
{ "value": "call", "label": "Phone/voice" },
{ "value": "walk_and_talk", "label": "Walk/drive + talk" }
]
},
{
"key": "notes",
"label": "Notes (optional)",
"type": "free_text"
}
],
"answer_schema": { "frequency": "", "format": "", "notes": "" },
"tags": { "included_in_manifests": ["lite", "full"] }
}- Create a new folder in
data/matching patternphase_X(e.g.,data/phase_3/) - Copy
TEMPLATE_manifest.json,TEMPLATE_questions.json, andTEMPLATE_prompts.jsoninto it - Rename them to
manifest.json,questions.json, andprompts.json - Fill in the
displaysection inmanifest.jsonwith id, title, short_title, description, icon, and order - Ensure the new phase is registered in
data/phase-registry.json
In questions.json, each question has a tags.included_in_manifests array:
["lite", "full"]— Appears in both modes["full"]— Only in Full mode
Also update the manifests.lite.question_ids and manifests.full.question_ids arrays at the bottom of the file.
| Browser | Version |
|---|---|
| Chrome | 80+ ✅ |
| Firefox | 75+ ✅ |
| Safari | 13+ ✅ |
| Edge | 80+ ✅ |
| Mobile Safari | iOS 13+ ✅ |
| Chrome Android | 80+ ✅ |
Created by: Roy Dawson IV
GitHub: github.com/imyourboyroy
PyPi: pypi.org/user/ImYourBoyRoy
This project is for personal use. Feel free to adapt it for your own relationship check-ins!
💜 Take your time. Trust the process. 💜




