Skip to Content
πŸ“š MyStoryFlow Docs β€” Your guide to preserving family stories
System Architecturev1.1 UX Roadmap

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:

  1. Voice-First Creation - Talk naturally, we transcribe and enhance
  2. AI Conversation Partner (Elena) - Guided story extraction through dialogue
  3. Original Voice Preservation - Digital book includes audio artifacts
  4. Family Collaboration - Multiple family members can contribute and edit
  5. 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

  1. Stories are the unit of content - All editing happens on stories
  2. Books reference stories by ID - story_ids UUID[] array maintains order
  3. Section breaks are metadata - section_breaks JSONB stores where to add β€œPart 1”, β€œPart 2” etc.
  4. Story belongs to ONE book - If needed in multiple books, duplicate the story

Current State Assessment

SectionCurrent ItemsProblem
Create & CaptureNew Story, AI Conversation, Voice Recording, Import4 ways to do same thing
My ContentBook Projects, Stories, Books, Media Gallery”Book Projects” vs β€œBooks” confusion
PublishingBook Designer, KDP Manager, Export CenterBook Designer duplicates /books/new

Database Architecture (Validated 2025-01-29)

FeatureCurrent StateNotes
books.story_ids UUID[]EXISTSAlready implemented
stories.source_conversation_ids UUID[]EXISTSAlready implemented
stories.source_recording_ids UUID[]MISSINGMigration needed
books.section_breaks JSONBMISSINGMigration needed
book_chapters tableActiveTo be deprecated
conversations table0 rowsLegacy, 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] β”œβ”€β”€ Help

IMPORTANT: 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

PhaseFocusPriorityRisk Level
1Foundation & NavigationHighLow
2Unified Content CreationHighMedium
3Story-Centric Data ModelCriticalMedium
4Editor Progressive DisclosureMediumLow

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:

  1. Voice (Recommended for seniors)
  2. AI Conversation (Elena)
  3. Write
  4. 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

LevelCan ViewCan CommentCan Add ContentCan Edit Stories
ViewerYesNoNoNo
CommenterYesYesNoNo
ContributorYesYesYes (own only)Own only
EditorYesYesYesAll family stories
AdminYesYesYesAll + manage members

Amendment Log

DateVersionAmendmentReason
2025-01-291.0Initial documentCombined architecture + UX review
2025-01-291.1Major revision: Story = Chapter modelUser feedback, competitor research
2025-01-291.1.1Added Implementation Status sectionGap analysis findings