MyStoryFlow UX & Architecture Roadmap v1.1
Document Version: 1.1 Last Updated: 2025-01-29 Status: Active
Document Purpose
This document serves as the single source of truth for MyStoryFlowβs user experience and architecture evolution. It combines findings from:
- Comprehensive codebase architecture analysis
- Database schema review
- UX/UI navigation and flow assessment
- Industry competitor research (StoryWorth, Reedsy, Blurb, Mixbook, LifeTales)
- Collaborative decision-making sessions
IMPORTANT: Before making any changes to the application, consult this document to ensure alignment with the established roadmap.
Executive Summary
The Core Problem
MyStoryFlow has accumulated organizational debt from multiple rounds of feature additions:
- 7 navigation sections with 20+ items (overwhelming for seniors)
- 4 different content creation paths (confusing entry points)
- 3 overlapping book-related pages (Book Projects vs Books vs Book Designer)
- Story β Chapter β Book complexity (one layer too many)
The Solution: Story = Chapter
After extensive analysis and competitor research, weβve determined that the industry standard is Story = Chapter:
BEFORE: Voice β Conversation β Story β Chapter β Book (5 layers)
AFTER: Voice/Conversation β Story β Book (3 layers)Key Principle: A story IS a chapter. When you add a story to a book, it becomes a chapter. Books are simply ordered collections of stories.
Our Competitive Advantage
Unlike competitors, MyStoryFlow offers:
- Voice-First Creation - Talk naturally, we transcribe and enhance
- AI Conversation Partner (Elena) - Guided story extraction through dialogue
- Original Voice Preservation - Digital book includes audio artifacts
- Family Collaboration - Multiple family members can contribute and edit
- Rich TipTap Editor - Professional editing with progressive disclosure
Core Simplification: Story = Chapter
The Decision
Problem: The current architecture has Stories, which become Chapters, which go into Books. This creates:
- User confusion (βIs my story a chapter?β)
- Duplicate content (story content copied to chapter content)
- Complex linking (book_chapters can reference story_id, conversation_id, OR recording_id)
Solution: Eliminate the Chapter layer entirely.
OLD MODEL:
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β Stories ββββββΆβ Chapters ββββββΆβ Books β
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β β
β content duplicated here
βΌ βΌ
editing editing
required required
NEW MODEL:
ββββββββββββββββ ββββββββββββββββ
β Stories βββββββββββββββββββββββββββΆβ Books β
ββββββββββββββββ ββββββββββββββββ
β β
βΌ βΌ
single source story_ids[] array
of truth (ordered list)Implementation Details
- Stories are the unit of content - All editing happens on stories
- Books reference stories by ID -
story_ids UUID[]array maintains order - Section breaks are metadata -
section_breaks JSONBstores where to add βPart 1β, βPart 2β etc. - Story belongs to ONE book - If needed in multiple books, duplicate the story
Current State Assessment
Navigation Structure Issues
| Section | Current Items | Problem |
|---|---|---|
| Create & Capture | New Story, AI Conversation, Voice Recording, Import | 4 ways to do same thing |
| My Content | Book Projects, Stories, Books, Media Gallery | βBook Projectsβ vs βBooksβ confusion |
| Publishing | Book Designer, KDP Manager, Export Center | Book Designer duplicates /books/new |
Database Architecture (Validated 2025-01-29)
| Feature | Current State | Notes |
|---|---|---|
books.story_ids UUID[] | EXISTS | Already implemented |
stories.source_conversation_ids UUID[] | EXISTS | Already implemented |
stories.source_recording_ids UUID[] | MISSING | Migration needed |
books.section_breaks JSONB | MISSING | Migration needed |
book_chapters table | Active | To be deprecated |
conversations table | 0 rows | Legacy, not used |
Target State Vision
Simplified Navigation (Target)
MAIN
βββ Dashboard [Home - personalized, focused]
CREATE (Primary actions)
βββ Create Story [Modal: Write, Voice, AI, Import]
βββ Story Projects [Preserves storyteller_name, relationship]
LIBRARY
βββ Stories [With "Add to Book" CTA]
βββ Books [Ordered story collections]
βββ Media [Gallery]
FAMILY
βββ Family [Members & sharing]
ACCOUNT (Footer)
βββ Settings [Consolidated]
βββ HelpIMPORTANT: We use βStory Projectsβ not βCollectionsβ to preserve the semantics of storyteller_name and relationship fields in the campaigns table.
Simplified User Journey (Target)
βββββββββββββββββββββββββββββββββββββββββββ
β "Create Story" Button β
β (One entry point, always visible) β
ββββββββββββββββββββββ¬βββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β Choose Your Method β
β βββββββ βββββββ βββββββ ββββββββ β
β βWriteβ βVoiceβ β AI β βImportβ β
β βββββββ βββββββ βββββββ ββββββββ β
β β² β
β β Recommended (primary CTA) β
ββββββββββββββββββββββ¬βββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β Story Created/Enhanced β
β Voice/Conversation attached as β
β artifacts (source_recording_ids[], β
β source_conversation_ids[]) β
ββββββββββββββββββββββ¬βββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββ
β "Add to Book?" (Always asked) β
β [Add to Current Book] [Save for Later]β
βββββββββββββββββββββββββββββββββββββββββββImplementation Phases
Overview
| Phase | Focus | Priority | Risk Level |
|---|---|---|---|
| 1 | Foundation & Navigation | High | Low |
| 2 | Unified Content Creation | High | Medium |
| 3 | Story-Centric Data Model | Critical | Medium |
| 4 | Editor Progressive Disclosure | Medium | Low |
Dependencies
Phase 1 βββββββΊ Phase 2 βββββββΊ Phase 3 βββββββΊ Phase 4
(No deps) (Needs P1) (Needs P2) (Needs P3)Phase 1: Foundation & Navigation
Goal: Quick wins that improve UX without changing data model.
1.1 Replace Browser Dialogs with Radix Modals
Use existing Radix-based dialog pattern from @/components/ui/dialog:
import {
Dialog,
DialogContent,
DialogHeader,
DialogTitle,
DialogDescription,
DialogFooter,
} from '@/components/ui/dialog'IMPORTANT: Use @/components/ui/dialog (Radix-based), NOT @headlessui/react.
1.2 Enable Breadcrumbs
Render the existing Breadcrumbs component (already implemented at components/navigation/Breadcrumbs.tsx).
1.3 Update Navigation Labels
- Keep βStory Projectsβ (NOT βCollectionsβ)
- Remove βBook Designerβ from main nav
- Remove βKDP Managerβ and βExport Centerβ from main nav
Phase 1 Testing Checkpoint
- All save/delete confirmations use Radix Dialog
- Breadcrumbs appear on nested pages
- All pages have title + description
- βStory Projectsβ label appears in nav
- No JavaScript console errors
Phase 2: Unified Content Creation
Goal: Consolidate 4 content creation paths into 1 unified experience.
2.1 Create Story Creation Modal
Single entry point with 4 options:
- Voice (Recommended for seniors)
- AI Conversation (Elena)
- Write
- Import
2.2 Add Global βCreate Storyβ Button
Always visible at top of sidebar.
2.3 Simplify Sidebar Navigation
Reduce to ~7 items maximum.
Phase 3: Story-Centric Data Model
Goal: Implement Story = Chapter model, eliminate book_chapters complexity.
3.1 Add source_recording_ids to Stories
ALTER TABLE stories ADD COLUMN IF NOT EXISTS source_recording_ids UUID[];
CREATE INDEX IF NOT EXISTS idx_stories_source_recording_ids
ON stories USING GIN(source_recording_ids);3.2 Add section_breaks to Books
ALTER TABLE books ADD COLUMN IF NOT EXISTS section_breaks JSONB DEFAULT '{}';3.3 Update Query Patterns
After:
const { data: book } = await supabase
.from('books')
.select('*')
.eq('id', bookId)
.single()
if (book?.story_ids?.length) {
const { data: stories } = await supabase
.from('stories')
.select('*')
.in('id', book.story_ids)
// Reorder to match story_ids order
const orderedStories = book.story_ids
.map(id => stories?.find(s => s.id === id))
.filter(Boolean)
}3.4 Deprecate book_chapters Table
ALTER TABLE IF EXISTS book_chapters RENAME TO _deprecated_book_chapters;Phase 4: Editor Progressive Disclosure
Goal: Simplify TipTap editor for seniors while preserving power.
Progressive Disclosure Strategy
Level 1 (Default): Bold, Italic, Underline, Headings, Lists, Images, Undo/Redo
Level 2 (Show More): Blockquotes, Links, Text alignment, Colors
Level 3 (Advanced): Tables, Columns, Callouts, Templates, AI assistance
Family Collaboration Model
Access Levels
| Level | Can View | Can Comment | Can Add Content | Can Edit Stories |
|---|---|---|---|---|
| Viewer | Yes | No | No | No |
| Commenter | Yes | Yes | No | No |
| Contributor | Yes | Yes | Yes (own only) | Own only |
| Editor | Yes | Yes | Yes | All family stories |
| Admin | Yes | Yes | Yes | All + manage members |
Amendment Log
| Date | Version | Amendment | Reason |
|---|---|---|---|
| 2025-01-29 | 1.0 | Initial document | Combined architecture + UX review |
| 2025-01-29 | 1.1 | Major revision: Story = Chapter model | User feedback, competitor research |
| 2025-01-29 | 1.1.1 | Added Implementation Status section | Gap analysis findings |
Related Documents
- Quick Reference - One-page decision guide
- Database Schema v1.1 - Complete schema documentation
- Implementation Gap Analysis - Current vs target gaps
- Competitor Analysis - Industry research