Swirls

SWIRLS_

  • How it works
  • Pricing

56 matches

OverviewDeliver client operations10Win and grow accounts8Resolve customer issues6Create and distribute content9Run people and operations5Review money and agreements3Monitor systems and data9Compose dependable work6

56 matches

OverviewDeliver client operations10Win and grow accounts8Resolve customer issues6Create and distribute content9Run people and operations5Review money and agreements3Monitor systems and data9Compose dependable work6
← Content & MediaFormView on GitHub

Recipe Generator

Generates recipes from available ingredients and dietary preferences.

ai

Source

/**
 * Generates recipes based on available ingredients and dietary preferences.
 */

form recipe_request {
  label: "Recipe Generator"
  schema: @json {
    {
      "type": "object",
      "required": ["ingredients"],
      "properties": {
        "ingredients": { "type": "string", "title": "Available Ingredients (comma-separated)" },
        "dietary": {
          "type": "string",
          "title": "Dietary Preference",
          "enum": ["none", "vegetarian", "vegan", "gluten_free", "keto", "paleo"]
        },
        "cuisine": { "type": "string", "title": "Preferred Cuisine" },
        "max_time_minutes": { "type": "number", "title": "Max Cooking Time (minutes)" }
      }
    }
  }
}

workflow generate_recipe {
  label: "Generate Recipe"

  root {
    type: code
    label: "Extract request"
    code: @ts { return context.nodes.root.input }
    outputSchema: @json {
      {
        "type": "object",
        "properties": {
          "ingredients": { "type": "string" },
          "dietary": { "type": "string" },
          "cuisine": { "type": "string" },
          "max_time_minutes": { "type": "number" }
        }
      }
    }
  }

  node create_recipe {
    type: ai
    label: "Create recipe"
    kind: object
    model: "google/gemini-2.5-flash"
    prompt: @ts {
      const req = context.nodes.root.output
      return "Create a recipe using these ingredients: " + req.ingredients + "\n\nDietary preference: " + (req.dietary || "none") + "\nCuisine: " + (req.cuisine || "any") + "\nMax time: " + (req.max_time_minutes || "no limit") + " minutes"
    }
    schema: @json {
      {
        "type": "object",
        "required": ["name", "ingredients_list", "instructions", "prep_time", "cook_time"],
        "properties": {
          "name": { "type": "string" },
          "description": { "type": "string" },
          "ingredients_list": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "item": { "type": "string" },
                "amount": { "type": "string" }
              }
            }
          },
          "instructions": { "type": "array", "items": { "type": "string" } },
          "prep_time": { "type": "number" },
          "cook_time": { "type": "number" },
          "servings": { "type": "number" },
          "difficulty": { "type": "string", "enum": ["easy", "medium", "hard"] }
        }
      }
    }
    temperature: 0.8
  }

  node format {
    type: code
    label: "Format recipe"
    code: @ts {
      const recipe = context.nodes.create_recipe.output
      return {
        name: recipe.name,
        description: recipe.description || "",
        total_time: recipe.prep_time + recipe.cook_time,
        servings: recipe.servings || 4,
        difficulty: recipe.difficulty || "medium",
        ingredients: recipe.ingredients_list,
        steps: recipe.instructions
      }
    }
  }

  flow {
    root -> create_recipe
    create_recipe -> format
  }
}

trigger on_recipe_request {
  form:recipe_request -> generate_recipe
  enabled: true
}

Flow

Trigger to workflow

recipe_requestform
generate_recipe
Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

Workflow nodes

CODE
Code Node
Extract request
AI
AI Node
Create recipe
CODE
Code Node
Format recipe
Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.