{
  "version": "1.0",
  "generatedAt": "2026-06-18T08:32:39.108Z",
  "site": {
    "name": "Interface Lab",
    "url": "https://lab.roman-leonenko.de/",
    "description": "Practical notes on generative UI, agentic frontends, A2UI/AG-UI, and the frontend architecture of AI products.",
    "language": "en",
    "author": {
      "name": "Roman Leonenko",
      "profile": "https://www.linkedin.com/in/roman-leonenko"
    }
  },
  "content": {
    "totalArticles": 11,
    "latestUpdate": "2026-06-17T13:00:00.000Z",
    "articles": [
      {
        "slug": "mcp-apps-explained-for-frontend-engineers",
        "url": "https://lab.roman-leonenko.de/posts/mcp-apps-explained-for-frontend-engineers/",
        "title": "MCP Apps explained for frontend engineers",
        "description": "How the MCP Apps extension lets tools return interactive UI resources — and how it compares to A2UI and AG-UI for product teams building on LLM responses.",
        "contentType": "article",
        "expertiseLevel": "beginner",
        "wordCount": 881,
        "readingTimeMinutes": 5,
        "published": "2026-06-17T13:00:00.000Z",
        "modified": "2026-06-17T13:00:00.000Z",
        "author": "Roman Leonenko",
        "tags": [
          "AI interfaces",
          "agentic frontend",
          "frontend architecture",
          "generative UI"
        ],
        "series": {
          "id": "llm-interface-protocols",
          "title": "LLM Interface Protocols",
          "order": 6
        }
      },
      {
        "slug": "a2ui-explained-for-frontend-engineers",
        "url": "https://lab.roman-leonenko.de/posts/a2ui-explained-for-frontend-engineers/",
        "title": "A2UI explained for frontend engineers",
        "description": "How Google's declarative agent UI spec lets LLMs propose native component trees across trust boundaries — without executing generated code.",
        "contentType": "article",
        "expertiseLevel": "beginner",
        "wordCount": 853,
        "readingTimeMinutes": 5,
        "published": "2026-06-17T10:00:00.000Z",
        "modified": "2026-06-17T10:00:00.000Z",
        "author": "Roman Leonenko",
        "tags": [
          "AI interfaces",
          "generative UI",
          "frontend architecture",
          "agentic frontend"
        ],
        "series": {
          "id": "llm-interface-protocols",
          "title": "LLM Interface Protocols",
          "order": 5
        }
      },
      {
        "slug": "ag-ui-explained-for-frontend-engineers",
        "url": "https://lab.roman-leonenko.de/posts/ag-ui-explained-for-frontend-engineers/",
        "title": "AG-UI explained for frontend engineers",
        "description": "What the Agent–User Interaction Protocol standardizes, how it differs from A2UI and MCP, and when your agentic frontend needs it.",
        "contentType": "article",
        "expertiseLevel": "beginner",
        "wordCount": 954,
        "readingTimeMinutes": 5,
        "published": "2026-06-17T07:00:00.000Z",
        "modified": "2026-06-17T07:00:00.000Z",
        "author": "Roman Leonenko",
        "tags": [
          "AI interfaces",
          "frontend architecture",
          "agentic frontend",
          "generative UI"
        ],
        "series": {
          "id": "llm-interface-protocols",
          "title": "LLM Interface Protocols",
          "order": 4
        }
      },
      {
        "slug": "streaming-protocols-from-tokens-to-ui-messages",
        "url": "https://lab.roman-leonenko.de/posts/streaming-protocols-from-tokens-to-ui-messages/",
        "title": "Streaming protocols: from tokens to UI messages",
        "description": "How text streams, SSE data streams, and UIMessage parts carry LLM output to the frontend — and what frontend engineers need from each.",
        "contentType": "article",
        "expertiseLevel": "beginner",
        "wordCount": 849,
        "readingTimeMinutes": 5,
        "published": "2026-06-16T13:00:00.000Z",
        "modified": "2026-06-16T13:00:00.000Z",
        "author": "Roman Leonenko",
        "tags": [
          "AI interfaces",
          "frontend architecture",
          "agentic frontend",
          "chat UX"
        ],
        "series": {
          "id": "llm-interface-protocols",
          "title": "LLM Interface Protocols",
          "order": 3
        }
      },
      {
        "slug": "output-contracts-structured-outputs-and-tool-calling",
        "url": "https://lab.roman-leonenko.de/posts/output-contracts-structured-outputs-and-tool-calling/",
        "title": "Output contracts: structured outputs and tool calling",
        "description": "How JSON Schema, tool use, and typed objects form the first protocol layer between LLM responses and frontend interfaces.",
        "contentType": "article",
        "expertiseLevel": "beginner",
        "wordCount": 884,
        "readingTimeMinutes": 5,
        "published": "2026-06-16T10:00:00.000Z",
        "modified": "2026-06-16T10:00:00.000Z",
        "author": "Roman Leonenko",
        "tags": [
          "AI interfaces",
          "structured outputs",
          "frontend architecture",
          "agentic frontend"
        ],
        "series": {
          "id": "llm-interface-protocols",
          "title": "LLM Interface Protocols",
          "order": 2
        }
      },
      {
        "slug": "the-protocol-landscape-for-llm-interfaces",
        "url": "https://lab.roman-leonenko.de/posts/the-protocol-landscape-for-llm-interfaces/",
        "title": "The protocol landscape for LLM interfaces",
        "description": "A factual map of the open specs and transport layers that turn model output into product UI — from structured outputs and streaming to AG-UI, A2UI, and MCP Apps.",
        "contentType": "article",
        "expertiseLevel": "beginner",
        "wordCount": 1120,
        "readingTimeMinutes": 6,
        "published": "2026-06-16T07:00:00.000Z",
        "modified": "2026-06-16T07:00:00.000Z",
        "author": "Roman Leonenko",
        "tags": [
          "AI interfaces",
          "frontend architecture",
          "agentic frontend",
          "generative UI"
        ],
        "series": {
          "id": "llm-interface-protocols",
          "title": "LLM Interface Protocols",
          "order": 1
        }
      },
      {
        "slug": "from-prompt-box-to-workflow",
        "url": "https://lab.roman-leonenko.de/posts/from-prompt-box-to-workflow/",
        "title": "From prompt box to workflow",
        "description": "How AI products can evolve from single prompts into durable workflows with memory, checkpoints, and state.",
        "contentType": "article",
        "expertiseLevel": "beginner",
        "wordCount": 752,
        "readingTimeMinutes": 4,
        "published": "2026-06-15T08:00:00.000Z",
        "modified": "2026-06-15T08:00:00.000Z",
        "author": "Roman Leonenko",
        "tags": [
          "AI interfaces",
          "workflows",
          "agentic frontend",
          "product design"
        ],
        "series": {
          "id": "ai-interface-foundations",
          "title": "AI Interface Foundations",
          "order": 4
        }
      },
      {
        "slug": "trust-boundaries-in-ai-ui",
        "url": "https://lab.roman-leonenko.de/posts/trust-boundaries-in-ai-ui/",
        "title": "Trust boundaries in AI interfaces",
        "description": "A practical way to separate suggestions, generated artifacts, and user-approved actions in AI products.",
        "contentType": "article",
        "expertiseLevel": "beginner",
        "wordCount": 852,
        "readingTimeMinutes": 5,
        "published": "2026-06-08T07:00:00.000Z",
        "modified": "2026-06-08T07:00:00.000Z",
        "author": "Roman Leonenko",
        "tags": [
          "AI interfaces",
          "trust",
          "frontend architecture",
          "UX"
        ],
        "series": {
          "id": "ai-interface-foundations",
          "title": "AI Interface Foundations",
          "order": 3
        }
      },
      {
        "slug": "structured-outputs-need-structured-interfaces",
        "url": "https://lab.roman-leonenko.de/posts/structured-outputs-need-structured-interfaces/",
        "title": "Structured outputs need structured interfaces",
        "description": "How schemas, components, and model responses work together to make AI interfaces predictable.",
        "contentType": "article",
        "expertiseLevel": "beginner",
        "wordCount": 757,
        "readingTimeMinutes": 4,
        "published": "2026-06-01T08:00:00.000Z",
        "modified": "2026-06-01T08:00:00.000Z",
        "author": "Roman Leonenko",
        "tags": [
          "AI interfaces",
          "structured outputs",
          "frontend architecture",
          "generative UI"
        ],
        "series": {
          "id": "ai-interface-foundations",
          "title": "AI Interface Foundations",
          "order": 2
        }
      },
      {
        "slug": "chat-is-a-surface-not-the-product",
        "url": "https://lab.roman-leonenko.de/posts/chat-is-a-surface-not-the-product/",
        "title": "Chat is a surface, not the product",
        "description": "Why AI products should treat chat as an entry point into structured UI, workflows, and decisions.",
        "contentType": "article",
        "expertiseLevel": "beginner",
        "wordCount": 791,
        "readingTimeMinutes": 4,
        "published": "2026-05-25T07:00:00.000Z",
        "modified": "2026-05-25T07:00:00.000Z",
        "author": "Roman Leonenko",
        "tags": [
          "AI interfaces",
          "chat UX",
          "product design",
          "generative UI"
        ],
        "series": {
          "id": "ai-interface-foundations",
          "title": "AI Interface Foundations",
          "order": 1
        }
      },
      {
        "slug": "start-here-interface-lab",
        "url": "https://lab.roman-leonenko.de/posts/start-here-interface-lab/",
        "title": "Start here: what Interface Lab is about",
        "description": "A practical guide to chat UX, generative UI, and AI frontend architecture — what Interface Lab covers, why it matters, and where to start.",
        "contentType": "article",
        "expertiseLevel": "beginner",
        "wordCount": 594,
        "readingTimeMinutes": 3,
        "published": "2026-05-18T08:00:00.000Z",
        "modified": "2026-05-18T08:00:00.000Z",
        "author": "Roman Leonenko",
        "tags": [
          "AI interfaces",
          "chat UX",
          "generative UI",
          "frontend architecture"
        ],
        "series": null
      }
    ]
  },
  "usage": {
    "permitted": [
      "read",
      "index",
      "quote"
    ],
    "attributionRequired": true,
    "attribution": "Roman Leonenko — Interface Lab (cite the canonical article URL)"
  },
  "endpoints": {
    "llmsTxt": "https://lab.roman-leonenko.de/llms.txt",
    "articles": "https://lab.roman-leonenko.de/api/articles.json",
    "rss": "https://lab.roman-leonenko.de/rss.xml",
    "wellKnown": "https://lab.roman-leonenko.de/.well-known/llm.json"
  },
  "notes": "Machine-readable content manifest. This array is the complete article set (static site, no pagination). /api/articles.json is the same list without the site wrapper. /llms.txt is a curated Markdown overview. Human search is handled client-side (Pagefind)."
}