# Creating Your First Step Let's create your first workflow step! We'll build a step that validates text content. ## Setting Up First, create a new file for your workflow in the `src/mastra/workflows` directory. Let's name this file `content-workflow.ts` ## Creating a Validation Step Add this code to your workflow file: ```typescript import { createStep } from "@mastra/core/workflows"; import { z } from "zod"; const validateContentStep = createStep({ id: "validate-content", description: "Validates incoming text content", inputSchema: z.object({ content: z.string().min(1, "Content cannot be empty"), type: z.enum(["article", "blog", "social"]).default("article"), }), outputSchema: z.object({ content: z.string(), type: z.string(), wordCount: z.number(), isValid: z.boolean(), }), execute: async ({ inputData }) => { const { content, type } = inputData; const wordCount = content.trim().split(/\s+/).length; const isValid = wordCount >= 5; // Minimum 5 words if (!isValid) { throw new Error(`Content too short: ${wordCount} words`); } return { content: content.trim(), type, wordCount, isValid, }; }, }); ``` ## Understanding the Code - **ID**: Unique identifier for this step - **Input Schema**: Expects `content` (string) and optional `type` - **Output Schema**: Returns content, type, word count, and validation status - **Execute**: Contains the validation logic Your first step is ready! Next, you'll test it to make sure it works correctly.