%% A note on syntax:
%% 1. Since node IDs cannot have spaces, prefer to give each milestone a short name with any spaces replaced by `-`. For instance, "Development Tools Implemented" becomes "Dev-Tools".

%% For unclear reasons, PyCharm's mermaid editor does not support title attributes. Comment on or off the title as needed.

%% ---
%% title: Grants.gov modernization milestones
%% ---

%% Diagram is oriented left-to-right ("LR") rather than top-to-bottom

flowchart LR

    subgraph NOFO
        NOFO-Milestone-Planning:::executing
        NOFO-Prototypes:::executing
        Start-PRA-Comment:::executing
        NOFO-Prototypes-Metrics:::executing
        NOFO-Prototypes-Metrics & NOFO-Prototypes -->
        NOFO-Prototypes-Learnings:::planning
        NOFOs-Readability-Scoring
        NOFOs-Writing-Assistance-Plan:::planning --> NOFOs-Writing-Assistance
        NOFO-Grant-Solutions-Templates
        NOFO-Prototypes --> NOFO-Grant-Solutions-Templates
    end

    subgraph Personalization
        Save-NOFOs
        NOFOs-Worked
        Profile-Builder
        Save-NOFOs & NOFOs-Worked & Profile-Builder --> NOFO-Recommendations-API
        NOFO-Recommendations-API --> NOFO-Recommendations-UI:::northStar
    end

    subgraph User-Research
        Research-Synthesis
        Generative-User-Research:::finished --> Research-Synthesis:::finished
        Research-Synthesis --> ev1[Research Synthesis informs *everything*\n related to UI/UX.\nLines not shown here for simplicity.]
        Research-Synthesis --> User-Research-TBD
        Research-Synthesis --> Unified-Brand
        Research-Synthesis --> User-Research-NOFO-Writing
        Document-GrantSolutions
        User-Research-Compensation
        User-Research-Database
    end

    subgraph Sam.gov integration
        Document-Sam
        Document-Sam --> Sam-APIs:::northStar
        Document-Sam --> Sam-Help-Desk
    end

    subgraph Search
        Search-API
        NOFOs-Text
        Search-API --> Search-UI:::northStar
        Search-API --> NOFOs-Text-Search
        Search-API --> Geographic-Search
        Search-User-Research
        Search-API & Search-User-Research --> Additional-Search
        NOFOs-Text --> NOFOs-Text-Search
        NOFOs-Text --> NOFOs-Readability-Scoring
        NOFOs-Text-Search --> Search-API-2.0:::northStar
    end

    subgraph AuthN and AuthZ
        Document-AuthN-AuthZ
        Document-AuthN-AuthZ --> AuthN-API
        Document-AuthN-AuthZ --> AuthZ-API
        AuthN-API --> AuthZ-API
        AuthN-API --> OAuth
        AuthN-API --> Entity-API:::northStar
        Entity-API --> Sam-APIs
        Entity-API --> Save-NOFOs
        Entity-API --> NOFOs-Worked
        Entity-API --> Profile-Builder
    end

    subgraph User interface
        Web-Analytics-Legacy
        FE-Plan
        FE-Plan --> Static-Site:::northStar
        FE-CI-CD
        FE-Plan --> FE-CI-CD
        FE-Plan --> CMS
        FE-Plan --> Web-Analytics
        FE-Plan & CMS --> i18n
        CMS --> CMS-Open-Source
        CMS-Open-Source & i18n --> Translation-Process:::northStar
        FE-CI-CD --> Foundational-UI:::northStar
        Foundational-UI --> Search-UI
        Foundational-UI --> NOFO-Recommendations-UI
        Design-Tooling --> Static-Site & Foundational-UI & User-Research-Compensation & User-Research-Database
    end

    subgraph Expanded-UI
        NOFO-Listing-UI
        NOFO-Listing-UI & User-Research-NOFO-Writing --> NOFO-Listing-UI-Enhanced:::northStar
        Foundational-UI --> NOFO-Listing-UI
        Foundational-UI --> Sam-Assistance-UI
        Document-Sam --> Sam-Assistance-UI
        Foundational-UI --> Grants-Assistance-UI
        Foundational-UI --> Help-UI
        Foundational-UI --> AuthN-UI
        Foundational-UI --> AuthZ-UI
        AuthN-API --> AuthN-UI
        AuthZ-API --> AuthZ-UI
    end

    subgraph Define goals
        Define-Goals:::northStar
        Define-Goals --> Measurement-Strategy
        Measurement-Strategy --> Measurement-Dashboard
    end

    subgraph Analytics
        Analytics-API
        Define-Goals --> Analytics-API
        Analytics-API --> Data-Quality-API
        Analytics-API & Data-Quality-API --> Analytics-Visualization:::northStar
        Measurement-Dashboard --> Analytics-Visualization
        Analytics-API --> Place-Of-Performance-API
        Place-Of-Performance-API --> Place-Of-Performance-Visualization:::northStar
    end

    subgraph Initial API deployment
        Onboard-Dev-Team --> SaaS-Plan
        SaaS-Plan
        API-Plan::planning
        Legacy-Architecture
        Onboard-Dev-Team:::executing
        Onboard-Dev-Team --> Feature-Flags
        API-Plan --> API-Docs-Plan
        Onboard-Dev-Team --> DB-Replica
        Onboard-Dev-Team & API-Plan --> Dev-Tools
        Beta-Domain
        Beta-Domain --> Static-Site
        DB-Plan & API-Plan --> Infrastructure-as-Code
        DB-Replica & DB-Plan --> DB-Test-Data
        DB-Plan & API-Plan & DB-Test-Data & DB-Replica & Dev-Tools & Beta-Domain --> GET-Opportunities:::northStar
        API-Plan & GET-Opportunities --> Webhooks-Opportunities
        GET-Opportunities --> API-Docs
        GET-Opportunities --> AuthN-API
        GET-Opportunities --> Analytics-API
        API-Docs-Plan & Beta-Domain --> API-Docs
        API-Plan --> API-Versioning
        API-Plan --> Performance-Testing
        DB-Plan & API-Plan --> Opportunity-Protocol
        API-Plan--> AB-Testing-Plan
        ATO
        CI-CD
        API-Plan --> CI-CD
        CI-CD --> CI-CD-Metrics
        CI-CD --> Incident-Response
        API-Plan --> Dependency-Fundraising-Tracking
        GET-Opportunities --> Search-API
        GET-Opportunities --> NOFOs-Text
        API-Plan & GET-Opportunities --> API-Security
    end

    subgraph Hackathon
        Participatory-Plan
        Participatory-Plan --> Hacakthon-Page
        Hackathon-Data
        Hackathon-Listing:::northStar
        Participatory-Plan --> Recruit-Hackathon-Workgroups
        Participatory-Plan --> Recruit-Hackathon-Participants
        RFI
        RFI-Tools
        Hacakthon-Page & NOFO-Prototypes --> Hackathon-Listing
        Recruit-Hackathon-Workgroups & Recruit-Hackathon-Participants --> Hackathon-Listing
        Hackathon-Listing --> Hackathon-Apply
        Hackathon-Listing --> Hackathon-Listing-Internal-Entry
        Hackathon-Apply --> Hackathon-Data
        Hackathon-Apply --> Hackathon-Apply-Internal-Entry
        Analytics-API --> Hackathon-Data
        Hackathon-Data --> Hackathon-Data-Internal-Entry
    end

    subgraph Communications Tooling
        Setup-Meetings
        Comms-Platforms:::planning --> Milestone-Template:::executing
        Comms-Platforms --> Open-Source-Tools
        Open-Source-Tools & Comms-Platforms --> Open-Source-Group:::northStar
        Open-Source-Group --> Hackathon-Listing
        Bug-Bounty
    end

    subgraph Legend
        direction LR
        a4[This milestone is not yet planned] --> a3[This milestone is being planned]:::planning
        a2[This milestone is being executed]:::executing --> a1[This milestone is finished]:::finished
        a5[This milestone is a 'north star' milestone]:::northStar
    end


    %% Define some styles
    classDef planning fill:#9999FF
    classDef executing fill:#FF6633
    classDef finished fill:#99FF33
    classDef northStar fill:#cc99ff
