Skip to main content
Prompt: “Create a simple CRM to manage leads for my online SAAS business”
Output:
{
    "domainModel": {
        "models": [
            {
                "id": "urn:sutro:model:user",
                "name": "User",
                "isUserModel": true,
                "fields": [
                    {
                        "id": "urn:sutro:edge:name",
                        "name": "name",
                        "to": "p_TEXT",
                        "relationshipType": "hasOne"
                    },
                    {
                        "id": "urn:sutro:edge:email",
                        "name": "email",
                        "to": "p_TEXT",
                        "relationshipType": "hasOne"
                    },
                    {
                        "id": "urn:sutro:edge:ownedLeads",
                        "name": "ownedLeads",
                        "to": "urn:sutro:model:lead",
                        "relationshipType": "hasMany"
                    }
                ],
                "requirements": [
                    {
                        "id": "@requirement/userInspect",
                        "type": "usability",
                        "parentId": null,
                        "description": "Users should be able to view their own profile and current lead assignments",
                        "importanceForUser": "required",
                        "importanceForBusiness": "required",
                        "frequencyOfUse": "occasionally"
                    }
                ],
                "navigateToOnCreate": "/",
                "navigateToOnDelete": "/"
            },
            {
                "id": "urn:sutro:model:lead",
                "name": "Lead",
                "isUserModel": false,
                "fields": [
                    {
                        "id": "urn:sutro:edge:name",
                        "name": "name",
                        "to": "p_TEXT",
                        "relationshipType": "hasOne"
                    },
                    {
                        "id": "urn:sutro:edge:email",
                        "name": "email",
                        "to": "p_TEXT",
                        "relationshipType": "hasOne"
                    },
                    {
                        "id": "urn:sutro:edge:phone",
                        "name": "phone",
                        "to": "p_PHONE_NUMBER",
                        "relationshipType": "hasOne"
                    },
                    {
                        "id": "urn:sutro:edge:source",
                        "name": "source",
                        "to": "p_TEXT",
                        "relationshipType": "hasOne"
                    },
                    {
                        "id": "urn:sutro:edge:status",
                        "name": "status",
                        "to": "p_TEXT",
                        "relationshipType": "hasOne"
                    },
                    {
                        "id": "urn:sutro:edge:owner",
                        "name": "owner",
                        "to": "urn:sutro:model:user",
                        "relationshipType": "belongsToOne"
                    },
                    {
                        "id": "urn:sutro:edge:activities",
                        "name": "activities",
                        "to": "urn:sutro:model:activity",
                        "relationshipType": "hasMany"
                    },
                    {
                        "id": "urn:sutro:edge:notes",
                        "name": "notes",
                        "to": "p_TEXT",
                        "relationshipType": "hasOne"
                    },
                    {
                        "id": "urn:sutro:edge:createdAt",
                        "name": "createdAt",
                        "to": "p_DATE_TIME",
                        "relationshipType": "hasOne"
                    },
                    {
                        "id": "urn:sutro:edge:updatedAt",
                        "name": "updatedAt",
                        "to": "p_DATE_TIME",
                        "relationshipType": "hasOne"
                    }
                ],
                "requirements": [
                    {
                        "id": "@requirement/captureLeadInfo",
                        "type": "userJourneyStep",
                        "parentId": "@userJourney/createNewLead",
                        "description": "User enters lead contact information (name, email, phone) with validation applied per @requirement/dataValidation",
                        "importanceForUser": "critical",
                        "importanceForBusiness": "critical",
                        "frequencyOfUse": "often"
                    },
                    {
                        "id": "@requirement/specifyLeadSource",
                        "type": "userJourneyStep",
                        "parentId": "@userJourney/createNewLead",
                        "description": "User specifies the lead source (website, referral, campaign, etc.)",
                        "importanceForUser": "critical",
                        "importanceForBusiness": "critical",
                        "frequencyOfUse": "often"
                    },
                    {
                        "id": "@requirement/assignLeadOwner",
                        "type": "userJourneyStep",
                        "parentId": "@userJourney/createNewLead",
                        "description": "User assigns the lead to a sales team member per @requirement/leadOwnershipTracking",
                        "importanceForUser": "critical",
                        "importanceForBusiness": "critical",
                        "frequencyOfUse": "often"
                    },
                    {
                        "id": "@requirement/displayLeadsSummary",
                        "type": "userJourneyStep",
                        "parentId": "@userJourney/viewLeadList",
                        "description": "LeadList displays all leads with key information (name, email, phone, source, status)",
                        "importanceForUser": "critical",
                        "importanceForBusiness": "critical",
                        "frequencyOfUse": "always"
                    },
                    {
                        "id": "@requirement/changeLeadStatus",
                        "type": "userJourneyStep",
                        "parentId": "@userJourney/updateLeadStatus",
                        "description": "User advances lead status through pipeline stages (new → contacted → qualified → converted/lost) using Lead.advanceStatus",
                        "importanceForUser": "required",
                        "importanceForBusiness": "required",
                        "frequencyOfUse": "often"
                    },
                    {
                        "id": "@requirement/dataValidation",
                        "type": "usability",
                        "parentId": null,
                        "description": "Email and phone number fields should be validated to ensure data quality and prevent invalid entries",
                        "importanceForUser": "required",
                        "importanceForBusiness": "required",
                        "frequencyOfUse": "always"
                    },
                    {
                        "id": "@requirement/leadOwnershipTracking",
                        "type": "usability",
                        "parentId": null,
                        "description": "System should track which sales representative owns each lead and allow reassignment",
                        "importanceForUser": "required",
                        "importanceForBusiness": "required",
                        "frequencyOfUse": "often"
                    },
                    {
                        "id": "@requirement/auditTrail",
                        "type": "usability",
                        "parentId": null,
                        "description": "All changes to leads should be tracked with timestamps and user information for compliance and transparency",
                        "importanceForUser": "vital",
                        "importanceForBusiness": "vital",
                        "frequencyOfUse": "often"
                    }
                ],
                "navigateToOnCreate": "/leads/:leadId",
                "navigateToOnDelete": "/leads"
            },
            {
                "id": "urn:sutro:model:activity",
                "name": "Activity",
                "isUserModel": false,
                "fields": [
                    {
                        "id": "urn:sutro:edge:type",
                        "name": "type",
                        "to": "p_TEXT",
                        "relationshipType": "hasOne"
                    },
                    {
                        "id": "urn:sutro:edge:lead",
                        "name": "lead",
                        "to": "urn:sutro:model:lead",
                        "relationshipType": "belongsToOne"
                    },
                    {
                        "id": "urn:sutro:edge:details",
                        "name": "details",
                        "to": "p_TEXT",
                        "relationshipType": "hasOne"
                    },
                    {
                        "id": "urn:sutro:edge:timestamp",
                        "name": "timestamp",
                        "to": "p_DATE_TIME",
                        "relationshipType": "hasOne"
                    },
                    {
                        "id": "urn:sutro:edge:createdBy",
                        "name": "createdBy",
                        "to": "urn:sutro:model:user",
                        "relationshipType": "belongsToOne"
                    }
                ],
                "requirements": [
                    {
                        "id": "@requirement/enterActivityDetails",
                        "type": "userJourneyStep",
                        "parentId": "@userJourney/logLeadInteraction",
                        "description": "User enters activity details, notes, and timestamp information",
                        "importanceForUser": "required",
                        "importanceForBusiness": "required",
                        "frequencyOfUse": "often"
                    },
                    {
                        "id": "@requirement/selectActivityType",
                        "type": "userJourneyStep",
                        "parentId": "@userJourney/logLeadInteraction",
                        "description": "User selects activity type (call, email, meeting, or note)",
                        "importanceForUser": "required",
                        "importanceForBusiness": "required",
                        "frequencyOfUse": "often"
                    },
                    {
                        "id": "@requirement/auditTrail",
                        "type": "usability",
                        "parentId": null,
                        "description": "All changes to leads should be tracked with timestamps and user information for compliance and transparency",
                        "importanceForUser": "vital",
                        "importanceForBusiness": "vital",
                        "frequencyOfUse": "often"
                    }
                ],
                "navigateToOnCreate": "/leads/:leadId",
                "navigateToOnDelete": "/leads/:leadId"
            }
        ]
    },
    "requirements": [
        {
            "id": "@requirement/dataValidation",
            "type": "usability",
            "parentId": null,
            "description": "Email and phone number fields should be validated to ensure data quality and prevent invalid entries",
            "importanceForUser": "required",
            "importanceForBusiness": "required",
            "frequencyOfUse": "always"
        },
        {
            "id": "@requirement/leadOwnershipTracking",
            "type": "usability",
            "parentId": null,
            "description": "System should track which sales representative owns each lead and allow reassignment",
            "importanceForUser": "required",
            "importanceForBusiness": "required",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/auditTrail",
            "type": "usability",
            "parentId": null,
            "description": "All changes to leads should be tracked with timestamps and user information for compliance and transparency",
            "importanceForUser": "vital",
            "importanceForBusiness": "vital",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/userInspect",
            "type": "usability",
            "parentId": null,
            "description": "Users should be able to view their own profile and current lead assignments",
            "importanceForUser": "required",
            "importanceForBusiness": "required",
            "frequencyOfUse": "occasionally"
        },
        {
            "id": "@requirement/newLeadForm",
            "type": "userJourneyStep",
            "parentId": "@userJourney/createNewLead",
            "description": "User navigates to the LeadList and initiates lead creation",
            "importanceForUser": "critical",
            "importanceForBusiness": "critical",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/captureLeadInfo",
            "type": "userJourneyStep",
            "parentId": "@userJourney/createNewLead",
            "description": "User enters lead contact information (name, email, phone) with validation applied per @requirement/dataValidation",
            "importanceForUser": "critical",
            "importanceForBusiness": "critical",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/specifyLeadSource",
            "type": "userJourneyStep",
            "parentId": "@userJourney/createNewLead",
            "description": "User specifies the lead source (website, referral, campaign, etc.)",
            "importanceForUser": "critical",
            "importanceForBusiness": "critical",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/assignLeadOwner",
            "type": "userJourneyStep",
            "parentId": "@userJourney/createNewLead",
            "description": "User assigns the lead to a sales team member per @requirement/leadOwnershipTracking",
            "importanceForUser": "critical",
            "importanceForBusiness": "critical",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/confirmLeadCreation",
            "type": "userJourneyStep",
            "parentId": "@userJourney/createNewLead",
            "description": "LeadList.addLead creates the lead and stores it in the system, audit trail is created",
            "importanceForUser": "critical",
            "importanceForBusiness": "critical",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/accessLeadList",
            "type": "userJourneyStep",
            "parentId": "@userJourney/viewLeadList",
            "description": "User navigates to the leads list view",
            "importanceForUser": "critical",
            "importanceForBusiness": "critical",
            "frequencyOfUse": "always"
        },
        {
            "id": "@requirement/displayLeadsSummary",
            "type": "userJourneyStep",
            "parentId": "@userJourney/viewLeadList",
            "description": "LeadList displays all leads with key information (name, email, phone, source, status)",
            "importanceForUser": "critical",
            "importanceForBusiness": "critical",
            "frequencyOfUse": "always"
        },
        {
            "id": "@requirement/searchFilterLeads",
            "type": "userJourneyStep",
            "parentId": "@userJourney/viewLeadList",
            "description": "User can search or filter leads using LeadList.findRelevantLead by various criteria",
            "importanceForUser": "critical",
            "importanceForBusiness": "critical",
            "frequencyOfUse": "always"
        },
        {
            "id": "@requirement/viewLeadDetail",
            "type": "userJourneyStep",
            "parentId": "@userJourney/viewLeadList",
            "description": "User selects a lead and calls Lead.inspect to view full details",
            "importanceForUser": "critical",
            "importanceForBusiness": "critical",
            "frequencyOfUse": "always"
        },
        {
            "id": "@requirement/openLeadRecord",
            "type": "userJourneyStep",
            "parentId": "@userJourney/updateLeadStatus",
            "description": "User finds and opens a lead record using LeadList.findRelevantLead and Lead.inspect",
            "importanceForUser": "required",
            "importanceForBusiness": "required",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/changeLeadStatus",
            "type": "userJourneyStep",
            "parentId": "@userJourney/updateLeadStatus",
            "description": "User advances lead status through pipeline stages (new → contacted → qualified → converted/lost) using Lead.advanceStatus",
            "importanceForUser": "required",
            "importanceForBusiness": "required",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/updateLeadDetails",
            "type": "userJourneyStep",
            "parentId": "@userJourney/updateLeadStatus",
            "description": "User updates other details as needed using Lead.updateContactInfo or Lead.reassignOwner",
            "importanceForUser": "required",
            "importanceForBusiness": "required",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/persistLeadChanges",
            "type": "userJourneyStep",
            "parentId": "@userJourney/updateLeadStatus",
            "description": "System saves changes and creates audit trail entries per @requirement/auditTrail",
            "importanceForUser": "required",
            "importanceForBusiness": "required",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/openLeadForActivity",
            "type": "userJourneyStep",
            "parentId": "@userJourney/logLeadInteraction",
            "description": "User finds and opens a lead record using LeadList.findRelevantLead",
            "importanceForUser": "required",
            "importanceForBusiness": "required",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/selectActivityType",
            "type": "userJourneyStep",
            "parentId": "@userJourney/logLeadInteraction",
            "description": "User selects activity type (call, email, meeting, or note)",
            "importanceForUser": "required",
            "importanceForBusiness": "required",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/enterActivityDetails",
            "type": "userJourneyStep",
            "parentId": "@userJourney/logLeadInteraction",
            "description": "User enters activity details, notes, and timestamp information",
            "importanceForUser": "required",
            "importanceForBusiness": "required",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/persistActivity",
            "type": "userJourneyStep",
            "parentId": "@userJourney/logLeadInteraction",
            "description": "ActivityLog.logActivity creates the activity record with permanent audit trail per @requirement/auditTrail",
            "importanceForUser": "required",
            "importanceForBusiness": "required",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/accessPipelineView",
            "type": "userJourneyStep",
            "parentId": "@userJourney/viewLeadPipeline",
            "description": "User navigates to the pipeline or dashboard view",
            "importanceForUser": "required",
            "importanceForBusiness": "required",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/displayPipelineStages",
            "type": "userJourneyStep",
            "parentId": "@userJourney/viewLeadPipeline",
            "description": "Pipeline.viewByStage organizes and displays leads in columns by status/stage (new, contacted, qualified, converted, lost)",
            "importanceForUser": "required",
            "importanceForBusiness": "required",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/viewStageCounts",
            "type": "userJourneyStep",
            "parentId": "@userJourney/viewLeadPipeline",
            "description": "User can see lead counts for each pipeline stage to understand distribution",
            "importanceForUser": "required",
            "importanceForBusiness": "required",
            "frequencyOfUse": "often"
        },
        {
            "id": "@requirement/identifyPriorities",
            "type": "userJourneyStep",
            "parentId": "@userJourney/viewLeadPipeline",
            "description": "User uses Pipeline.identifyBottlenecks to spot stages with high lead counts and identify priority areas",
            "importanceForUser": "required",
            "importanceForBusiness": "required",
            "frequencyOfUse": "often"
        }
    ],
    "sitemap": {
        "nodes": [
            {
                "id": "dashboard",
                "type": "Page",
                "route": "/",
                "context": null,
                "content": [
                    {
                        "title": "Pipeline Overview",
                        "description": "Visual dashboard displaying leads organized by pipeline stages (new, contacted, qualified, converted, lost) with lead counts and status indicators for quick pipeline management"
                    },
                    {
                        "title": "Quick Stats",
                        "description": "Summary metrics showing total leads, leads by stage, and key performance indicators for sales pipeline"
                    },
                    {
                        "title": "Recent Activities",
                        "description": "Feed of recently logged activities including calls, emails, meetings, and notes across all leads with timestamps"
                    }
                ],
                "referencesRequirements": [
                    "@requirement/accessPipelineView",
                    "@requirement/displayPipelineStages",
                    "@requirement/viewStageCounts",
                    "@requirement/identifyPriorities"
                ]
            },
            {
                "id": "leadsList",
                "type": "ListView",
                "route": "/leads",
                "context": null,
                "content": [
                    {
                        "title": "Leads List",
                        "description": "Comprehensive list of all leads in the system with key information including name, email, phone, source, status, and assigned owner"
                    },
                    {
                        "title": "Search and Filter",
                        "description": "Search capabilities and filter options to find leads by name, email, source, status, or assigned owner"
                    },
                    {
                        "title": "Create Lead Action",
                        "description": "Quick action button to initiate the creation of a new lead"
                    }
                ],
                "referencesRequirements": [
                    "@requirement/accessLeadList",
                    "@requirement/displayLeadsSummary",
                    "@requirement/searchFilterLeads",
                    "@requirement/newLeadForm"
                ]
            },
            {
                "id": "createLead",
                "type": "FormView",
                "route": "/leads/new",
                "context": null,
                "content": [
                    {
                        "title": "Lead Information",
                        "description": "Form fields for capturing lead contact information including name, email (with validation), and phone number (with validation per @requirement/dataValidation)"
                    },
                    {
                        "title": "Lead Source",
                        "description": "Dropdown or selection field for specifying lead source such as website, referral, campaign, or other sources"
                    },
                    {
                        "title": "Lead Owner Assignment",
                        "description": "Selection field to assign the lead to a sales team member per @requirement/leadOwnershipTracking"
                    },
                    {
                        "title": "Submit Action",
                        "description": "Button to confirm and create the lead with all entered information and audit trail"
                    }
                ],
                "referencesRequirements": [
                    "@requirement/newLeadForm",
                    "@requirement/captureLeadInfo",
                    "@requirement/specifyLeadSource",
                    "@requirement/assignLeadOwner",
                    "@requirement/confirmLeadCreation",
                    "@requirement/dataValidation",
                    "@requirement/leadOwnershipTracking",
                    "@requirement/auditTrail"
                ]
            },
            {
                "id": "leadDetail",
                "type": "Page",
                "route": "/leads/:leadId",
                "context": {
                    "leadId": "urn:sutro:model:lead"
                },
                "content": [
                    {
                        "title": "Lead Information",
                        "description": "Display and editing of lead contact details including name, email, phone, source, and current status with validation applied"
                    },
                    {
                        "title": "Lead Status",
                        "description": "Current pipeline stage of the lead (new, contacted, qualified, converted, lost) with ability to advance to next stage"
                    },
                    {
                        "title": "Lead Owner",
                        "description": "Display of current assigned owner and ability to reassign the lead to another sales representative per @requirement/leadOwnershipTracking"
                    },
                    {
                        "title": "Activity History",
                        "description": "Timeline of all logged activities (calls, emails, meetings, notes) associated with this lead with timestamps and user information for audit trail per @requirement/auditTrail"
                    },
                    {
                        "title": "Log Activity",
                        "description": "Form section to log new interactions with the lead including activity type, details, and notes"
                    }
                ],
                "referencesRequirements": [
                    "@requirement/viewLeadDetail",
                    "@requirement/openLeadRecord",
                    "@requirement/changeLeadStatus",
                    "@requirement/updateLeadDetails",
                    "@requirement/persistLeadChanges",
                    "@requirement/openLeadForActivity",
                    "@requirement/selectActivityType",
                    "@requirement/enterActivityDetails",
                    "@requirement/persistActivity",
                    "@requirement/dataValidation",
                    "@requirement/leadOwnershipTracking",
                    "@requirement/auditTrail"
                ]
            },
            {
                "id": "userProfile",
                "type": "Page",
                "route": "/profile",
                "context": null,
                "content": [
                    {
                        "title": "User Profile Information",
                        "description": "Display of current user's profile details including name and email address"
                    },
                    {
                        "title": "Assigned Leads Summary",
                        "description": "Overview of leads assigned to the current user with status breakdown and quick access links"
                    }
                ],
                "referencesRequirements": [
                    "@requirement/userInspect"
                ]
            }
        ],
        "edges": [
            {
                "from": "dashboard",
                "to": "leadsList",
                "type": "Navigate",
                "context": null,
                "outputContext": null
            },
            {
                "from": "dashboard",
                "to": "leadDetail",
                "type": "Navigate",
                "context": {
                    "leadId": null
                },
                "outputContext": null
            },
            {
                "from": "dashboard",
                "to": "userProfile",
                "type": "Navigate",
                "context": null,
                "outputContext": null
            },
            {
                "from": "leadsList",
                "to": "createLead",
                "type": "Navigate",
                "context": null,
                "outputContext": null
            },
            {
                "from": "leadsList",
                "to": "leadDetail",
                "type": "Navigate",
                "context": {
                    "leadId": null
                },
                "outputContext": null
            },
            {
                "from": "createLead",
                "to": "leadDetail",
                "type": "Create",
                "context": null,
                "outputContext": "leadId"
            },
            {
                "from": "createLead",
                "to": "leadsList",
                "type": "Navigate",
                "context": null,
                "outputContext": null
            },
            {
                "from": "leadDetail",
                "to": "leadsList",
                "type": "Navigate",
                "context": null,
                "outputContext": null
            },
            {
                "from": "leadDetail",
                "to": "leadDetail",
                "type": "Edit",
                "context": {
                    "leadId": null
                },
                "outputContext": null
            }
        ]
    }
}