WRITEWISE

2 Squirrels AI

Technology Stack

AI-powered story development and audiobook creation platform with 5-agent CrewAI orchestration. A guided 6-step wizard walks authors through concept to final export (ePub and MP3 audiobooks).

Orchestration CrewAI
LLM OpenAI GPT-4o
Frontend Vue 3 + Pinia
Backend FastAPI
TTS ElevenLabs

5-Agent CrewAI System

💡
Story Consultant
Concept Brainstorming
👤
Character Developer
Character Profiles
📐
Plot Architect
Story Structure
✍️
Writing Assistant
Prose Generation
📝
Editor
Content Review

Workflow 1: Story Concept Brainstorming

%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#C17852', 'primaryTextColor': '#F0F6FC', 'primaryBorderColor': '#4A5E32', 'lineColor': '#E6C98F', 'secondaryColor': '#161B22', 'tertiaryColor': '#0D1117', 'background': '#0D1117', 'mainBkg': '#161B22', 'nodeBorder': '#4A5E32', 'clusterBkg': '#161B22', 'clusterBorder': '#4A5E32', 'titleColor': '#E6C98F', 'edgeLabelBackground': '#161B22'}}}%%
flowchart TB
    subgraph Input["📥 USER INPUT"]
        IDEA["💭 Initial Story Idea"]
        GENRE["🎭 Genre & Themes"]
        AUDIENCE["👥 Target Audience"]
    end

    subgraph Frontend["🖥️ VUE 3 FRONTEND"]
        FORM["📋 StepConcept Form"]
        BTN["🤖 Get AI Help"]
    end

    subgraph API["⚡ FASTAPI"]
        POST["POST /api/ai/brainstorm"]
        INIT["🔧 Init WriteWiseAgents"]
    end

    subgraph Agent["🤖 CREWAI"]
        CONSULT["💡 Story Consultant Agent"]
        TASK["📋 Brainstorming Task"]
    end

    subgraph Output["📤 RESULTS"]
        PREMISE["📝 Refined Premise"]
        HOOK["🎣 Story Hook"]
        CONFLICT["⚔️ Core Conflict"]
        SUGGEST["💡 AI Suggestions"]
    end

    subgraph DB["💾 DATABASE"]
        SAVE[("📄 StoryConcept")]
    end

    IDEA --> FORM
    GENRE --> FORM
    AUDIENCE --> FORM
    FORM --> BTN
    BTN --> POST
    POST --> INIT
    INIT --> TASK
    TASK --> CONSULT
    CONSULT --> PREMISE
    CONSULT --> HOOK
    CONSULT --> CONFLICT
    CONSULT --> SUGGEST
    SUGGEST --> SAVE
                

Workflow 2: Character Development

%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#C17852', 'primaryTextColor': '#F0F6FC', 'primaryBorderColor': '#4A5E32', 'lineColor': '#E6C98F', 'secondaryColor': '#161B22', 'tertiaryColor': '#0D1117', 'background': '#0D1117', 'mainBkg': '#161B22', 'nodeBorder': '#4A5E32', 'clusterBkg': '#161B22', 'clusterBorder': '#4A5E32', 'titleColor': '#E6C98F', 'edgeLabelBackground': '#161B22'}}}%%
flowchart LR
    subgraph Input["📥 CHARACTER INPUT"]
        NAME["👤 Name & Role"]
        ATTRS["📋 Basic Attributes"]
    end

    subgraph Context["📚 STORY CONTEXT"]
        CONCEPT["💡 Story Concept"]
        GENRE["🎭 Genre/Themes"]
    end

    subgraph API["⚡ FASTAPI"]
        POST["POST /ai/develop-character"]
    end

    subgraph Agent["🤖 CHARACTER DEVELOPER"]
        DEV["👤 Character Developer Agent"]
    end

    subgraph Output["📤 CHARACTER PROFILE"]
        TRAITS["🎭 Personality Traits"]
        BACK["📜 Background Story"]
        ARC["📈 Character Arc"]
        REL["🔗 Relationships"]
        MOTIV["💪 Motivations"]
    end

    subgraph DB["💾 DATABASE"]
        SAVE[("👤 Character Model")]
    end

    NAME --> POST
    ATTRS --> POST
    CONCEPT --> POST
    GENRE --> POST
    POST --> DEV
    DEV --> TRAITS
    DEV --> BACK
    DEV --> ARC
    DEV --> REL
    DEV --> MOTIV
    MOTIV --> SAVE
                

Workflow 3: Plot Structure Generation

%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#C17852', 'primaryTextColor': '#F0F6FC', 'primaryBorderColor': '#4A5E32', 'lineColor': '#E6C98F', 'secondaryColor': '#161B22', 'tertiaryColor': '#0D1117', 'background': '#0D1117', 'mainBkg': '#161B22', 'nodeBorder': '#4A5E32', 'clusterBkg': '#161B22', 'clusterBorder': '#4A5E32', 'titleColor': '#E6C98F', 'edgeLabelBackground': '#161B22'}}}%%
flowchart TB
    subgraph Context["📚 FULL STORY CONTEXT"]
        CONCEPT["💡 Story Concept"]
        CHARS["👥 All Characters"]
    end

    subgraph Agent["🤖 PLOT ARCHITECT"]
        ARCH["📐 Plot Architect Agent"]
        PREMIUM["⭐ GPT-4o Premium"]
    end

    subgraph ThreeAct["📖 THREE-ACT STRUCTURE"]
        ACT1["🎬 Act One (25%)
Inciting Incident"] ACT2["⚔️ Act Two (50%)
Midpoint & Challenges"] ACT3["🏆 Act Three (25%)
Climax & Resolution"] end subgraph Output["📤 PLOT DETAILS"] EVENTS["📋 Key Events"] SUBPLOTS["🔀 Subplots"] PACING["⏱️ Pacing Notes"] end subgraph DB["💾 DATABASE"] SAVE[("📐 PlotStructure")] end CONCEPT --> ARCH CHARS --> ARCH ARCH --> PREMIUM PREMIUM --> ACT1 PREMIUM --> ACT2 PREMIUM --> ACT3 ACT1 --> EVENTS ACT2 --> EVENTS ACT3 --> EVENTS EVENTS --> SUBPLOTS SUBPLOTS --> PACING PACING --> SAVE

Workflow 4: Chapter Outline Generation

%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#C17852', 'primaryTextColor': '#F0F6FC', 'primaryBorderColor': '#4A5E32', 'lineColor': '#E6C98F', 'secondaryColor': '#161B22', 'tertiaryColor': '#0D1117', 'background': '#0D1117', 'mainBkg': '#161B22', 'nodeBorder': '#4A5E32', 'clusterBkg': '#161B22', 'clusterBorder': '#4A5E32', 'titleColor': '#E6C98F', 'edgeLabelBackground': '#161B22'}}}%%
flowchart LR
    subgraph Input["📥 PLOT STRUCTURE"]
        PLOT["📐 Three-Act Plot"]
        TARGET["🎯 Target: 45min
6,750 words"] end subgraph Agent["🤖 PLOT ARCHITECT"] ARCH["📐 Plot Architect"] CALC["🧮 Word Distribution
150 words/min"] end subgraph Chapters["📚 CHAPTER BREAKDOWN"] CH1["📖 Chapter 1"] CH2["📖 Chapter 2"] CH3["📖 Chapter 3"] CHN["📖 Chapter N..."] end subgraph Details["📋 PER CHAPTER"] SUM["📝 Summary"] SCENES["🎬 Scene List"] POV["👁️ POV Character"] end subgraph DB["💾 DATABASE"] SAVE[("📚 Chapter Records")] end PLOT --> ARCH TARGET --> CALC ARCH --> CALC CALC --> CH1 CALC --> CH2 CALC --> CH3 CALC --> CHN CH1 --> SUM SUM --> SCENES SCENES --> POV POV --> SAVE

Workflow 5: AI Chapter Generation & Enhancement

%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#C17852', 'primaryTextColor': '#F0F6FC', 'primaryBorderColor': '#4A5E32', 'lineColor': '#E6C98F', 'secondaryColor': '#161B22', 'tertiaryColor': '#0D1117', 'background': '#0D1117', 'mainBkg': '#161B22', 'nodeBorder': '#4A5E32', 'clusterBkg': '#161B22', 'clusterBorder': '#4A5E32', 'titleColor': '#E6C98F', 'edgeLabelBackground': '#161B22'}}}%%
flowchart TB
    subgraph PathA["🤖 AI GENERATION"]
        OUTLINE_A["📋 Chapter Outline"]
        GEN["POST /ai/generate-chapter"]
        WRITE_A["✍️ Writing Assistant"]
        PROSE_A["📝 Full Prose
2000+ words"] end subgraph PathB["✨ USER ENHANCEMENT"] USER_TEXT["📝 User Written Text"] SELECT["✂️ Select Text"] TYPE["📋 Enhancement Type"] ENHANCE["POST /ai/enhance-writing"] WRITE_B["✍️ Writing Assistant"] end subgraph Types["🎨 ENHANCEMENT TYPES"] POLISH["✨ Polish: Clarity & Flow"] EXPAND["📈 Expand: Add Detail"] DIALOG["💬 Dialogue: Authenticity"] DESC["🎨 Description: Sensory"] end subgraph Output["📤 OUTPUT"] EDITOR["📝 Rich Text Editor"] SAVE[("💾 Chapter Content")] end OUTLINE_A --> GEN GEN --> WRITE_A WRITE_A --> PROSE_A PROSE_A --> EDITOR USER_TEXT --> SELECT SELECT --> TYPE TYPE --> ENHANCE POLISH --> WRITE_B EXPAND --> WRITE_B DIALOG --> WRITE_B DESC --> WRITE_B ENHANCE --> WRITE_B WRITE_B --> EDITOR EDITOR --> SAVE

Workflow 6: Export & Audiobook Generation

%%{init: {'theme': 'dark', 'themeVariables': { 'primaryColor': '#C17852', 'primaryTextColor': '#F0F6FC', 'primaryBorderColor': '#4A5E32', 'lineColor': '#E6C98F', 'secondaryColor': '#161B22', 'tertiaryColor': '#0D1117', 'background': '#0D1117', 'mainBkg': '#161B22', 'nodeBorder': '#4A5E32', 'clusterBkg': '#161B22', 'clusterBorder': '#4A5E32', 'titleColor': '#E6C98F', 'edgeLabelBackground': '#161B22'}}}%%
flowchart TB
    subgraph Input["📥 EXPORT REQUEST"]
        CHAPTERS["📚 All Chapters"]
        FORMAT{"📦 Format?"}
    end

    subgraph EPub["📖 EPUB PATH"]
        EPUB_TASK["🔧 generate_epub_task"]
        EBOOKLIB["📚 ebooklib Service"]
        EPUB_META["📋 Metadata + Chapters"]
        EPUB_FILE["📖 story.epub"]
    end

    subgraph Audio["🎧 AUDIOBOOK PATH"]
        TTS_SELECT["🎤 Select Provider"]
        TTS_PROVIDERS["OpenAI | ElevenLabs
Google | AWS Polly"] TTS_PROCESS["🔊 Per-Chapter TTS"] MERGE["🔗 Merge Audio"] MP3["🎧 audiobook.mp3"] end subgraph Status["📡 PROGRESS"] POLL["🔄 Poll /export/status"] PROGRESS["📊 Progress Updates"] end subgraph Output["📤 DOWNLOAD"] COMPLETE["✅ Export Complete"] DOWNLOAD["⬇️ Download File"] end CHAPTERS --> FORMAT FORMAT -->|"ePub"| EPUB_TASK EPUB_TASK --> EBOOKLIB EBOOKLIB --> EPUB_META EPUB_META --> EPUB_FILE FORMAT -->|"Audio"| TTS_SELECT TTS_SELECT --> TTS_PROVIDERS TTS_PROVIDERS --> TTS_PROCESS TTS_PROCESS --> MERGE MERGE --> MP3 EPUB_FILE --> POLL MP3 --> POLL POLL --> PROGRESS PROGRESS --> COMPLETE COMPLETE --> DOWNLOAD