{
  "openapi": "3.1.0",
  "info": {
    "title": "Lucas Portfolio Actions API",
    "description": "Authenticated GPT Actions API for searching, analyzing, creating, editing, publishing, positioning, and deleting Lucas Honorato Lopes portfolio items and home profile versions through the Supabase Edge Function.",
    "version": "1.3.1"
  },
  "servers": [
    {
      "url": "https://nskivxitnqjldjgaogfu.supabase.co/functions/v1/portfolio-actions"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/items": {
      "get": {
        "operationId": "searchPortfolioItems",
        "x-openai-isConsequential": false,
        "summary": "Search and analyze portfolio items",
        "description": "Search portfolio items. For published site content, acervo, portfolio, or all contents, leave itemType unset to return content + projects. Presentation files are stored as presentationUrl/presentationKind on content or projects, not as an item type. Use includeDrafts=true for admin analysis/edit/delete. Returns body, tags, privateTags, links, positioning, and URL.",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Keyword query in Portuguese or English. Search covers titles, descriptions, body text, tags, private tags, presentation fields, and link labels/URLs.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "tag",
            "in": "query",
            "required": false,
            "description": "Optional normalized public or private tag filter such as backend, supabase, dados, cloud, frontend, ia, arquitetura, postgresql, case-study, or internal positioning tags.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "itemType",
            "in": "query",
            "required": false,
            "description": "Optional type filter. Do not set itemType for broad requests like conteudos publicados do site, itens publicados, acervo, portfolio, or todos os conteudos. Use content only for articles/notes/materials/videos excluding projects; project only for projects. Do not use presentation as itemType; use presentationUrl/presentationKind fields instead.",
            "schema": {
              "type": "string",
              "enum": ["content", "project"]
            }
          },
          {
            "name": "includeDrafts",
            "in": "query",
            "required": false,
            "description": "Include drafts and admin-only fields. Use true when reviewing, analyzing, editing, publishing, or deleting.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Maximum number of items to return. Values above 50 are capped.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 50,
              "default": 12
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Portfolio search results.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PortfolioItemListResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createPortfolioItem",
        "x-openai-isConsequential": true,
        "summary": "Create a portfolio item",
        "description": "Create a new project, content item, article, video reference, recommendation, course note, material, or content/project with a presentationUrl. Ask the user to confirm the exact payload before calling this action. Use published=false for drafts unless the user explicitly asks to publish.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePortfolioItemInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created portfolio item.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PortfolioItemResponse"
                }
              }
            }
          }
        }
      }
    },
    "/items/{slug}": {
      "get": {
        "operationId": "getPortfolioItem",
        "x-openai-isConsequential": false,
        "summary": "Get one portfolio item",
        "description": "Get one portfolio item by slug for detailed analysis or before editing/deleting. Use includeDrafts=true when the target may be a draft.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "The current portfolio item slug.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "includeDrafts",
            "in": "query",
            "required": false,
            "description": "Include drafts and admin-only fields. Use true before editing or deleting.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Portfolio item.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PortfolioItemResponse"
                }
              }
            }
          },
          "404": {
            "description": "No item exists for this slug."
          }
        }
      },
      "patch": {
        "operationId": "updatePortfolioItem",
        "x-openai-isConsequential": true,
        "summary": "Edit, publish, unpublish, or reposition a portfolio item",
        "description": "Partially update an existing item by slug. Omitted fields keep their current values. Ask the user to confirm the target slug and intended changes before calling this action.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "The current slug of the item to update.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdatePortfolioItemInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated portfolio item.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PortfolioItemResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deletePortfolioItem",
        "x-openai-isConsequential": true,
        "summary": "Delete a portfolio item",
        "description": "Delete an existing item by slug. Only call this after the user explicitly confirms the exact slug to delete.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "The current slug of the item to delete.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Deleted portfolio item.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeletePortfolioItemResponse"
                }
              }
            }
          }
        }
      }
    },
    "/home-profile": {
      "get": {
        "operationId": "listHomeProfileVersions",
        "x-openai-isConsequential": false,
        "summary": "List home profile versions",
        "description": "List all home profile versions, including the active version. Use this before analyzing or editing the home page positioning, hero copy, bio, contact links, stack, workflow, photo, or video.",
        "parameters": [
          {
            "name": "activeOnly",
            "in": "query",
            "required": false,
            "description": "Return only the active home profile version.",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Home profile versions.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HomeProfileVersionsResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "createHomeProfileVersion",
        "x-openai-isConsequential": true,
        "summary": "Create a home profile version",
        "description": "Create a new version of the portfolio home page. Ask the user to confirm the full version title, activation choice, and content before calling this action.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateHomeProfileVersionInput"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Created home profile version.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HomeProfileVersionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/home-profile/{id}": {
      "get": {
        "operationId": "getHomeProfileVersion",
        "x-openai-isConsequential": false,
        "summary": "Get one home profile version",
        "description": "Get a specific home profile version by id for detailed analysis or before editing/deleting.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The home profile version id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Home profile version.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HomeProfileVersionResponse"
                }
              }
            }
          },
          "404": {
            "description": "No home profile version exists for this id."
          }
        }
      },
      "patch": {
        "operationId": "updateHomeProfileVersion",
        "x-openai-isConsequential": true,
        "summary": "Edit a home profile version",
        "description": "Partially update a home profile version. Omitted fields keep their current values. Ask the user to confirm the target id and intended changes before calling this action.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The current home profile version id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateHomeProfileVersionInput"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Updated home profile version.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HomeProfileVersionResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "operationId": "deleteHomeProfileVersion",
        "x-openai-isConsequential": true,
        "summary": "Delete a non-active home profile version",
        "description": "Delete a home profile version by id. The active version and the default home version cannot be deleted. Only call this after the user explicitly confirms the exact id.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The home profile version id to delete.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Deleted home profile version.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteHomeProfileVersionResponse"
                }
              }
            }
          }
        }
      }
    },
    "/home-profile/{id}/activate": {
      "post": {
        "operationId": "activateHomeProfileVersion",
        "x-openai-isConsequential": true,
        "summary": "Activate a home profile version",
        "description": "Make one home profile version the active public home profile. Ask the user to confirm the exact id before calling this action.",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "The home profile version id to activate.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Activated home profile version.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HomeProfileVersionResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer"
      }
    },
    "schemas": {
      "PortfolioItemListResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "count": {
            "type": "integer"
          },
          "items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PortfolioItem"
            }
          }
        },
        "required": ["generatedAt", "count", "items"]
      },
      "PortfolioItemResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "item": {
            "$ref": "#/components/schemas/PortfolioItem"
          }
        },
        "required": ["generatedAt", "item"]
      },
      "DeletePortfolioItemResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "deleted": {
            "type": "boolean"
          },
          "item": {
            "$ref": "#/components/schemas/PortfolioItem"
          }
        },
        "required": ["generatedAt", "deleted", "item"]
      },
      "CreatePortfolioItemInput": {
        "type": "object",
        "properties": {
          "itemType": {
            "type": "string",
            "enum": ["content", "project"],
            "description": "Use project for portfolio projects and content for articles, videos, recommendations, notes, courses, and materials. Presentation files are links on the item via presentationUrl/presentationKind, not an itemType.",
            "default": "project"
          },
          "title": {
            "type": "string"
          },
          "slug": {
            "type": "string",
            "description": "Optional URL slug. If omitted, the API generates one from the title."
          },
          "description": {
            "type": "string",
            "description": "Short public summary."
          },
          "body": {
            "type": "string",
            "description": "Long-form notes, project case study, PDF summary, implementation details, article body, or analysis text."
          },
          "primaryTag": {
            "type": "string",
            "description": "Main public topic such as Backend, APIs, Dados, Supabase, Arquitetura, Cloud, Frontend, or IA."
          },
          "tags": {
            "type": "array",
            "description": "Public tags visible in the portfolio.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "privateTags": {
            "type": "array",
            "description": "Admin-only tags for internal organization, search, hiring narrative, status, or positioning. They are available to the GPT through authenticated /items.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PortfolioLink"
            },
            "default": []
          },
          "coverUrl": {
            "type": "string",
            "description": "Optional image URL for cards or detail pages."
          },
          "youtubeUrl": {
            "type": "string",
            "description": "Optional YouTube URL. The API validates YouTube links and also stores a generated video link."
          },
          "presentationUrl": {
            "type": "string",
            "description": "Optional presentation/material URL attached to this content or project. Can be a PDF, Google Slides, Drive presentation, Office deck, document, or similar URL."
          },
          "presentationKind": {
            "type": "string",
            "enum": ["pdf", "google-slides", "drive-presentation", "office"],
            "description": "Presentation source type. If omitted, the API tries to infer it from presentationUrl."
          },
          "featured": {
            "type": "boolean",
            "default": false
          },
          "pinned": {
            "type": "boolean",
            "description": "Pin this item ahead of regular ordering in portfolio lists.",
            "default": false
          },
          "published": {
            "type": "boolean",
            "description": "Use false for drafts unless the user explicitly asks to publish.",
            "default": false
          },
          "status": {
            "type": "string",
            "description": "Optional raw item status. Use draft for private drafts, published for normal public items, or existing project states such as development, in-production, or production."
          },
          "coverSlot": {
            "type": "string",
            "enum": ["hero", "card-1", "card-2", "card-3"],
            "description": "Optional managed cover slot for the contents/home cover area."
          },
          "readMinutes": {
            "type": "integer",
            "minimum": 1,
            "default": 5
          },
          "displayOrder": {
            "type": "integer",
            "description": "Lower numbers appear earlier before date fallback.",
            "default": 0
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Optional publication timestamp. If omitted when publishing, the API uses the current time."
          }
        },
        "required": ["itemType", "title", "description"]
      },
      "UpdatePortfolioItemInput": {
        "type": "object",
        "description": "Partial update. Omitted fields keep their current values.",
        "properties": {
          "itemType": {
            "type": "string",
            "enum": ["content", "project"]
          },
          "title": {
            "type": "string"
          },
          "newSlug": {
            "type": "string",
            "description": "Optional new slug for renaming the item. The path slug identifies the current item."
          },
          "description": {
            "type": "string"
          },
          "body": {
            "type": "string"
          },
          "primaryTag": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "privateTags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PortfolioLink"
            }
          },
          "coverUrl": {
            "type": "string"
          },
          "youtubeUrl": {
            "type": "string"
          },
          "presentationUrl": {
            "type": "string"
          },
          "presentationKind": {
            "type": "string",
            "enum": ["pdf", "google-slides", "drive-presentation", "office"]
          },
          "featured": {
            "type": "boolean"
          },
          "pinned": {
            "type": "boolean"
          },
          "published": {
            "type": "boolean"
          },
          "status": {
            "type": "string"
          },
          "coverSlot": {
            "type": "string",
            "enum": ["hero", "card-1", "card-2", "card-3"]
          },
          "readMinutes": {
            "type": "integer",
            "minimum": 1
          },
          "displayOrder": {
            "type": "integer"
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "PortfolioItem": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "body": {
            "type": "string"
          },
          "itemType": {
            "type": "string",
            "enum": ["content", "project"]
          },
          "primaryTag": {
            "type": "string"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "privateTags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "links": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PortfolioLink"
            }
          },
          "coverUrl": {
            "type": "string"
          },
          "youtubeUrl": {
            "type": "string"
          },
          "presentationUrl": {
            "type": "string"
          },
          "presentationKind": {
            "type": "string",
            "enum": ["pdf", "google-slides", "drive-presentation", "office"]
          },
          "featured": {
            "type": "boolean"
          },
          "pinned": {
            "type": "boolean"
          },
          "published": {
            "type": "boolean"
          },
          "status": {
            "type": "string"
          },
          "readMinutes": {
            "type": "integer"
          },
          "displayOrder": {
            "type": "integer"
          },
          "coverSlot": {
            "type": "string",
            "enum": ["hero", "card-1", "card-2", "card-3"]
          },
          "publishedAt": {
            "type": "string"
          },
          "updatedAt": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "slug",
          "title",
          "description",
          "body",
          "itemType",
          "primaryTag",
          "tags",
          "privateTags",
          "links",
          "featured",
          "pinned",
          "published",
          "status",
          "readMinutes",
          "displayOrder",
          "url"
        ]
      },
      "PortfolioLink": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "description": "Link kind such as github, demo, docs, drive, figma, video, pdf, slides, material, or article."
          },
          "label": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": ["kind", "label", "url"]
      },
      "HomeProfileVersionsResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "count": {
            "type": "integer"
          },
          "activeVersionId": {
            "type": ["string", "null"]
          },
          "versions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HomeProfileVersion"
            }
          }
        },
        "required": ["generatedAt", "count", "activeVersionId", "versions"]
      },
      "HomeProfileVersionResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "version": {
            "$ref": "#/components/schemas/HomeProfileVersion"
          }
        },
        "required": ["generatedAt", "version"]
      },
      "DeleteHomeProfileVersionResponse": {
        "type": "object",
        "properties": {
          "generatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "deleted": {
            "type": "boolean"
          },
          "version": {
            "$ref": "#/components/schemas/HomeProfileVersion"
          }
        },
        "required": ["generatedAt", "deleted", "version"]
      },
      "CreateHomeProfileVersionInput": {
        "type": "object",
        "description": "Create a reusable version of the home page positioning. The content object describes the public home hero, profile, contacts, workflow, stack, and video.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Optional stable id. If omitted, the API generates one from title."
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean",
            "description": "Whether to activate this version immediately.",
            "default": false
          },
          "content": {
            "$ref": "#/components/schemas/HomeProfileContent"
          }
        },
        "required": ["title", "content"]
      },
      "UpdateHomeProfileVersionInput": {
        "type": "object",
        "description": "Partial update. Omitted top-level fields and omitted content fields keep their current values.",
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean",
            "description": "Use true to activate this version after updating it."
          },
          "content": {
            "$ref": "#/components/schemas/HomeProfileContentPatch"
          }
        }
      },
      "HomeProfileVersion": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "isActive": {
            "type": "boolean"
          },
          "content": {
            "$ref": "#/components/schemas/HomeProfileContent"
          },
          "createdAt": {
            "type": "string"
          },
          "updatedAt": {
            "type": "string"
          }
        },
        "required": ["id", "title", "description", "isActive", "content"]
      },
      "HomeProfileContent": {
        "type": "object",
        "properties": {
          "leftName": {
            "type": "string"
          },
          "leftRole": {
            "type": "string"
          },
          "portfolioLabel": {
            "type": "string"
          },
          "introNumber": {
            "type": "string"
          },
          "introLabel": {
            "type": "string"
          },
          "headline": {
            "type": "string",
            "description": "Main multiline hero headline. New lines are preserved."
          },
          "headlineHighlight": {
            "type": "string"
          },
          "noteTitle": {
            "type": "string"
          },
          "noteBody": {
            "type": "string"
          },
          "aboutKicker": {
            "type": "string"
          },
          "aboutTagline": {
            "type": "string"
          },
          "photoUrl": {
            "type": "string"
          },
          "photoAlt": {
            "type": "string"
          },
          "profileName": {
            "type": "string"
          },
          "profileRole": {
            "type": "string"
          },
          "profileBio": {
            "type": "string"
          },
          "contacts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HomeProfileContact"
            }
          },
          "workTitle": {
            "type": "string"
          },
          "workBody": {
            "type": "string"
          },
          "workVideoUrl": {
            "type": "string",
            "description": "Optional YouTube URL shown in the home work section."
          },
          "workflowSteps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HomeWorkflowStep"
            }
          },
          "stackTitle": {
            "type": "string"
          },
          "stackItems": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "systemTitle": {
            "type": "string"
          },
          "footerNumber": {
            "type": "string"
          }
        },
        "required": [
          "leftName",
          "leftRole",
          "portfolioLabel",
          "introNumber",
          "introLabel",
          "headline",
          "headlineHighlight",
          "noteTitle",
          "noteBody",
          "aboutKicker",
          "aboutTagline",
          "photoUrl",
          "photoAlt",
          "profileName",
          "profileRole",
          "profileBio",
          "contacts",
          "workTitle",
          "workBody",
          "workVideoUrl",
          "workflowSteps",
          "stackTitle",
          "stackItems",
          "systemTitle",
          "footerNumber"
        ]
      },
      "HomeProfileContentPatch": {
        "type": "object",
        "description": "Partial home content update. Omitted fields keep their current values.",
        "properties": {
          "leftName": {
            "type": "string"
          },
          "leftRole": {
            "type": "string"
          },
          "portfolioLabel": {
            "type": "string"
          },
          "introNumber": {
            "type": "string"
          },
          "introLabel": {
            "type": "string"
          },
          "headline": {
            "type": "string"
          },
          "headlineHighlight": {
            "type": "string"
          },
          "noteTitle": {
            "type": "string"
          },
          "noteBody": {
            "type": "string"
          },
          "aboutKicker": {
            "type": "string"
          },
          "aboutTagline": {
            "type": "string"
          },
          "photoUrl": {
            "type": "string"
          },
          "photoAlt": {
            "type": "string"
          },
          "profileName": {
            "type": "string"
          },
          "profileRole": {
            "type": "string"
          },
          "profileBio": {
            "type": "string"
          },
          "contacts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HomeProfileContact"
            }
          },
          "workTitle": {
            "type": "string"
          },
          "workBody": {
            "type": "string"
          },
          "workVideoUrl": {
            "type": "string"
          },
          "workflowSteps": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HomeWorkflowStep"
            }
          },
          "stackTitle": {
            "type": "string"
          },
          "stackItems": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "systemTitle": {
            "type": "string"
          },
          "footerNumber": {
            "type": "string"
          }
        }
      },
      "HomeProfileContact": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "icon": {
            "type": "string",
            "enum": ["pin", "web", "code", "mail", "linkedin", "youtube", "github"]
          },
          "label": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        },
        "required": ["id", "icon", "label"]
      },
      "HomeWorkflowStep": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "label": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "abbreviation": {
            "type": "string"
          }
        },
        "required": ["id", "label", "description"]
      }
    }
  }
}
