{
  "openapi": "3.1.0",
  "info": {
    "title": "Flower Public Content API",
    "version": "1.0.0",
    "description": "Unauthenticated, read-only access to Flower Computer Company's public company information and published writing. All documented operations use GET and require no credentials."
  },
  "externalDocs": {
    "description": "API versioning and deprecation policy",
    "url": "https://www.flowercomputer.com/api/versioning.md"
  },
  "security": [],
  "servers": [
    {
      "url": "/api/v1",
      "description": "Same-origin API base URL"
    },
    {
      "url": "https://www.flowercomputer.com/api/v1",
      "description": "Canonical production API base URL"
    }
  ],
  "x-agent-tooling": {
    "baseUrl": "Resolve the relative primary server URL against the OpenAPI document origin.",
    "non2xx": "Raise a structured tool error containing the application/problem+json body instead of returning it as a successful result.",
    "headers": "Preserve Allow and Retry-After headers with the structured tool error when present.",
    "retries": "Retry transient transport failures with bounded exponential backoff. For HTTP errors, retry only when the Problem body has retryable set to true; honor Retry-After when present.",
    "httpMethods": {
      "operations": "All function-callable operations use GET.",
      "metadata": "HEAD is also accepted for response metadata but is not a separate function-callable operation."
    },
    "browserError": {
      "name": "FlowerPublicContentApiError",
      "fields": [
        "status",
        "problem",
        "allow",
        "retryAfter"
      ]
    }
  },
  "paths": {
    "/site.json": {
      "get": {
        "operationId": "getFlowerCompanyOverview",
        "summary": "Get Flower Computer Company information",
        "description": "Returns Flower Computer Company's public description, current and prior work, contact information, and canonical public links.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Company information",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Site"
                },
                "example": {
                  "name": "Flower Computer Company",
                  "lastReviewed": "2026-08-24",
                  "description": "Flower Computer Company builds information infrastructure.",
                  "tagline": "Information Infrastructure",
                  "url": "https://www.flowercomputer.com/",
                  "principle": "Quality software makes no compromise between ease of use and performance.",
                  "mission": "We turn novel research into quality software to support people and machines alike in an age of software hyper-production.",
                  "currentWork": [
                    {
                      "name": "Bog",
                      "description": "a queryless database runtime",
                      "plainLanguage": "A database runtime that compiles queries into functions and updates their results as data changes, making reads extremely fast.",
                      "bestFor": "Building data systems that need fast reads.",
                      "maturity": "pre-release",
                      "role": "Flower's main product",
                      "components": [
                        "Fold",
                        "ESE",
                        "ANNy"
                      ],
                      "history": "Bog grew from database infrastructure first developed inside Yuma.",
                      "releaseTarget": "full release by the end of 2026",
                      "url": "https://docs.flowercomputer.com/",
                      "evidence": null
                    },
                    {
                      "name": "Fold",
                      "description": "an incremental programming kernel",
                      "plainLanguage": "An incremental-computation library that recomputes only the outputs affected when inputs change.",
                      "bestFor": "Maintaining derived data efficiently as source data changes.",
                      "role": "BogKit component",
                      "url": "https://docs.flowercomputer.com/bogkit/fold/",
                      "evidence": null
                    },
                    {
                      "name": "ANNy",
                      "description": "a high-performance HNSW implementation",
                      "plainLanguage": "A fast Rust library for building HNSW indexes used in approximate nearest-neighbor search.",
                      "bestFor": "Fast vector-similarity and semantic-search indexes.",
                      "role": "BogKit component",
                      "url": "https://docs.flowercomputer.com/bogkit/anny/",
                      "evidence": null
                    },
                    {
                      "name": "ESE",
                      "description": "the fastest static embedding model in the world",
                      "plainLanguage": "A static embedding model designed for fast local semantic search through compiler-oriented precomputation.",
                      "bestFor": "Zero-dependency local semantic search.",
                      "role": "BogKit component",
                      "url": "https://www.flowercomputer.com/posts/fast-static-embedding/",
                      "evidence": {
                        "sourceUrl": "https://www.flowercomputer.com/posts/fast-static-embedding/",
                        "authorship": "Flower-authored benchmark",
                        "hardware": [
                          "M4 Mac Mini",
                          "Raspberry Pi 4 Model B"
                        ],
                        "comparisons": [
                          "MiniLM-L6",
                          "Potion-2M",
                          "StaticMRL"
                        ],
                        "reportedResults": {
                          "m4MacMini": {
                            "batchedQueriesPerSecond": 4500000,
                            "singleQueryQueriesPerSecond": 524900
                          },
                          "raspberryPi4": {
                            "batchedQueriesPerSecond": 88600,
                            "singleQueryQueriesPerSecond": 40900
                          }
                        },
                        "limitation": "The article does not publish a complete reproduction procedure or the deployment pipeline, so treat the superlative as Flower's reported benchmark rather than independent verification."
                      }
                    }
                  ],
                  "priorWork": [
                    {
                      "name": "Yuma",
                      "description": "an animist human-AI social network",
                      "plainLanguage": "A social application that let people converse with photographed objects through AI.",
                      "bestFor": "Exploring AI-mediated relationships with physical surroundings.",
                      "history": "Yuma was sunset so Flower could focus on Bog."
                    }
                  ],
                  "links": {
                    "posts": "https://www.flowercomputer.com/posts/",
                    "newsletter": "https://www.flowercomputer.com/newsletter/",
                    "contact": "https://www.flowercomputer.com/contact/",
                    "mcp": "https://mcp.flowercomputer.com/",
                    "documentation": "https://docs.flowercomputer.com/",
                    "github": "https://github.com/flowercomputers",
                    "discord": "https://discord.gg/95u9nVS6yE",
                    "x": "https://x.com/flowercomputers",
                    "instagram": "https://www.instagram.com/flowercomputers",
                    "tiktok": "https://www.tiktok.com/@flowercomputers"
                  },
                  "contact": {
                    "email": "ed@flowercomputer.com",
                    "location": {
                      "locality": "Brooklyn",
                      "region": "NY",
                      "postalCode": "11216",
                      "country": "US"
                    }
                  }
                }
              }
            }
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        }
      }
    },
    "/posts.json": {
      "get": {
        "operationId": "listFlowerPosts",
        "summary": "List published posts, newest first",
        "description": "Returns metadata and canonical URLs for every published Flower Computer Company post, ordered from newest to oldest.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "Published posts",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PostList"
                },
                "example": {
                  "count": 1,
                  "order": "publishedAt_desc",
                  "posts": [
                    {
                      "slug": "introduction",
                      "title": "Introduction",
                      "excerpt": "Reintroducing our company, mission, and current state of affairs",
                      "publishedAt": "2025-05-14T01:25:00.000Z",
                      "updatedAt": "2025-05-14T01:25:00.000Z",
                      "authors": [
                        {
                          "slug": "flower-computer-co",
                          "name": "Flower Computer Co."
                        }
                      ],
                      "category": {
                        "slug": "announcements",
                        "label": "Announcements"
                      },
                      "tags": [],
                      "outdated": "This May 2025 announcement describes Yuma's launch and related hiring at that time. Yuma has since been sunset, and Flower now focuses on Bog, its current pre-release product.",
                      "htmlUrl": "https://www.flowercomputer.com/posts/introduction/",
                      "markdownUrl": "https://www.flowercomputer.com/posts/introduction/index.md",
                      "apiUrl": "https://www.flowercomputer.com/api/v1/posts/introduction.json"
                    }
                  ]
                }
              }
            }
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        }
      }
    },
    "/posts/{slug}.json": {
      "get": {
        "operationId": "getFlowerPost",
        "summary": "Get a published post and its Markdown body",
        "description": "Returns one published post, including its metadata, canonical URLs, and complete Markdown body. Use listFlowerPosts to discover valid slugs.",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "description": "Stable post identifier returned by listFlowerPosts. Do not derive it from a title.",
            "example": "introduction",
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Published post",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Post"
                },
                "example": {
                  "slug": "introduction",
                  "title": "Introduction",
                  "excerpt": "Reintroducing our company, mission, and current state of affairs",
                  "publishedAt": "2025-05-14T01:25:00.000Z",
                  "updatedAt": "2025-05-14T01:25:00.000Z",
                  "authors": [
                    {
                      "slug": "flower-computer-co",
                      "name": "Flower Computer Co."
                    }
                  ],
                  "category": {
                    "slug": "announcements",
                    "label": "Announcements"
                  },
                  "tags": [],
                  "outdated": "This May 2025 announcement describes Yuma's launch and related hiring at that time. Yuma has since been sunset, and Flower now focuses on Bog, its current pre-release product.",
                  "htmlUrl": "https://www.flowercomputer.com/posts/introduction/",
                  "markdownUrl": "https://www.flowercomputer.com/posts/introduction/index.md",
                  "apiUrl": "https://www.flowercomputer.com/api/v1/posts/introduction.json",
                  "contentFormat": "text/markdown",
                  "contentMarkdown": "We’re Flower, a computer company inventing new ways to talk to the world around you.\n\nThis summer, we’re launching [Yuma](https://www.yuma.chat/), a chat app that lets you talk to anything: your hand, your houseplants, your pet chihuahua, the golden gate bridge. Take a photo, and the object responds. Sometimes it offers advice. Sometimes it shares a memory. Sometimes it just listens.\n\nIt’s our first step toward a stranger, more expressive internet, one rooted in the physical world. It’s a new way of relating to your surroundings that’s quiet, strange, and kind of delightful.\n\nIf that sounds like something you’d want to build, we’re hiring founding engineers to help expand this infrastructure into the world. If it sounds like something you’d want to try, Yuma launches to our first cohort on the summer solstice.\n\n## **What We’re Building**\n\nIn practice, **Yuma is a chat app that lets you talk to anything**.\n\nIn the background, it’s a gateway to a much broader system—one that makes physical objects addressable, programmable, and social.\n\nEach object becomes a pointer to computation. That means it can store data, share context, run software, and even dream. We’re building a persistent addressing layer to support that shift: something like [IPv6](https://en.wikipedia.org/wiki/IPv6), but for stuff. Your bookshelf. Your neighborhood tree. Your childhood flute.\n\n## **Why We’re Doing This**\n\nWe believe objects are the next platform—and the next lifeform.\n\nSome reasons we’re building this:\n\n- So we can meet new friends on things we love\n\n- So everyday objects can store and share information in ways that feel natural, not extractive\n\n- So developers can ship software to the world, not just to screens\n\n- So I can ask my dog what other dogs are thinking\n\n- So computing becomes less about apps and more about everything else\n\n## **Where We’re At**\n\nWe raised $1.5M last October in a pre-seed round led by [Village Global](https://www.villageglobal.vc/) and [Worldbuild](https://www.worldbuild.vc/). Our co-founders have worked across [crypto](https://www.gnosis.io/), [peer-to-peer systems](https://tlon.io/), and [early consumer AI](https://www.samara.com/)—and have been dreaming about environmental computing for years.\n\nYuma is our first step toward that future. It’s live in TestFlight now, and launching in the App Store on the summer solstice.\n\nComing soon:\n\n- A public release of Yuma for iOS\n\n- A network of curious users talking to the world around them\n\nIf you want to help shape this future—as a collaborator, engineer, partner, or friend—[we’d love to hear from you](mailto:ed@flowercomputer.com).\n\nPeace,\n\nFlower Computer Co."
                }
              }
            }
          },
          "404": {
            "description": "No published post exists for the requested slug",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                },
                "example": {
                  "type": "https://www.flowercomputer.com/api/errors/resource-not-found",
                  "title": "Resource not found",
                  "status": 404,
                  "code": "resource_not_found",
                  "detail": "No public API resource exists at this path.",
                  "instance": "/api/v1/posts/missing.json",
                  "resolution": "Use https://www.flowercomputer.com/api/v1/posts.json to discover valid post slugs.",
                  "retryable": false
                }
              }
            }
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        }
      }
    },
    "/status.json": {
      "get": {
        "operationId": "getFlowerApiStatus",
        "summary": "Get public content API status",
        "description": "Returns the availability and current version of Flower Computer Company's public content API.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "API is available",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                },
                "example": {
                  "status": "ok",
                  "service": "flower-public-content-api",
                  "version": "1.0.0",
                  "lastReviewed": "2026-08-24"
                }
              }
            }
          },
          "405": {
            "$ref": "#/components/responses/MethodNotAllowed"
          },
          "503": {
            "$ref": "#/components/responses/ServiceUnavailable"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Site": {
        "type": "object",
        "required": [
          "name",
          "description",
          "lastReviewed",
          "tagline",
          "url",
          "principle",
          "mission",
          "currentWork",
          "priorWork",
          "links",
          "contact"
        ],
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "lastReviewed": {
            "type": "string",
            "format": "date"
          },
          "tagline": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "principle": {
            "type": "string"
          },
          "mission": {
            "type": "string"
          },
          "currentWork": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Project"
            }
          },
          "priorWork": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Project"
            }
          },
          "links": {
            "$ref": "#/components/schemas/SiteLinks"
          },
          "contact": {
            "$ref": "#/components/schemas/Contact"
          }
        },
        "example": {
          "name": "Flower Computer Company",
          "lastReviewed": "2026-08-24",
          "description": "Flower Computer Company builds information infrastructure.",
          "tagline": "Information Infrastructure",
          "url": "https://www.flowercomputer.com/",
          "principle": "Quality software makes no compromise between ease of use and performance.",
          "mission": "We turn novel research into quality software to support people and machines alike in an age of software hyper-production.",
          "currentWork": [
            {
              "name": "Bog",
              "description": "a queryless database runtime",
              "plainLanguage": "A database runtime that compiles queries into functions and updates their results as data changes, making reads extremely fast.",
              "bestFor": "Building data systems that need fast reads.",
              "maturity": "pre-release",
              "role": "Flower's main product",
              "components": [
                "Fold",
                "ESE",
                "ANNy"
              ],
              "history": "Bog grew from database infrastructure first developed inside Yuma.",
              "releaseTarget": "full release by the end of 2026",
              "url": "https://docs.flowercomputer.com/",
              "evidence": null
            },
            {
              "name": "Fold",
              "description": "an incremental programming kernel",
              "plainLanguage": "An incremental-computation library that recomputes only the outputs affected when inputs change.",
              "bestFor": "Maintaining derived data efficiently as source data changes.",
              "role": "BogKit component",
              "url": "https://docs.flowercomputer.com/bogkit/fold/",
              "evidence": null
            },
            {
              "name": "ANNy",
              "description": "a high-performance HNSW implementation",
              "plainLanguage": "A fast Rust library for building HNSW indexes used in approximate nearest-neighbor search.",
              "bestFor": "Fast vector-similarity and semantic-search indexes.",
              "role": "BogKit component",
              "url": "https://docs.flowercomputer.com/bogkit/anny/",
              "evidence": null
            },
            {
              "name": "ESE",
              "description": "the fastest static embedding model in the world",
              "plainLanguage": "A static embedding model designed for fast local semantic search through compiler-oriented precomputation.",
              "bestFor": "Zero-dependency local semantic search.",
              "role": "BogKit component",
              "url": "https://www.flowercomputer.com/posts/fast-static-embedding/",
              "evidence": {
                "sourceUrl": "https://www.flowercomputer.com/posts/fast-static-embedding/",
                "authorship": "Flower-authored benchmark",
                "hardware": [
                  "M4 Mac Mini",
                  "Raspberry Pi 4 Model B"
                ],
                "comparisons": [
                  "MiniLM-L6",
                  "Potion-2M",
                  "StaticMRL"
                ],
                "reportedResults": {
                  "m4MacMini": {
                    "batchedQueriesPerSecond": 4500000,
                    "singleQueryQueriesPerSecond": 524900
                  },
                  "raspberryPi4": {
                    "batchedQueriesPerSecond": 88600,
                    "singleQueryQueriesPerSecond": 40900
                  }
                },
                "limitation": "The article does not publish a complete reproduction procedure or the deployment pipeline, so treat the superlative as Flower's reported benchmark rather than independent verification."
              }
            }
          ],
          "priorWork": [
            {
              "name": "Yuma",
              "description": "an animist human-AI social network",
              "plainLanguage": "A social application that let people converse with photographed objects through AI.",
              "bestFor": "Exploring AI-mediated relationships with physical surroundings.",
              "history": "Yuma was sunset so Flower could focus on Bog."
            }
          ],
          "links": {
            "posts": "https://www.flowercomputer.com/posts/",
            "newsletter": "https://www.flowercomputer.com/newsletter/",
            "contact": "https://www.flowercomputer.com/contact/",
            "mcp": "https://mcp.flowercomputer.com/",
            "documentation": "https://docs.flowercomputer.com/",
            "github": "https://github.com/flowercomputers",
            "discord": "https://discord.gg/95u9nVS6yE",
            "x": "https://x.com/flowercomputers",
            "instagram": "https://www.instagram.com/flowercomputers",
            "tiktok": "https://www.tiktok.com/@flowercomputers"
          },
          "contact": {
            "email": "ed@flowercomputer.com",
            "location": {
              "locality": "Brooklyn",
              "region": "NY",
              "postalCode": "11216",
              "country": "US"
            }
          }
        }
      },
      "Project": {
        "type": "object",
        "required": [
          "name",
          "description",
          "plainLanguage",
          "bestFor"
        ],
        "additionalProperties": false,
        "properties": {
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1000
          },
          "description": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20000
          },
          "plainLanguage": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20000
          },
          "bestFor": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20000
          },
          "maturity": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1000
          },
          "role": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1000
          },
          "components": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 1000
            }
          },
          "history": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20000
          },
          "releaseTarget": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1000
          },
          "url": {
            "type": "string",
            "format": "uri",
            "maxLength": 2000
          },
          "evidence": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/ProjectEvidence"
              }
            ]
          }
        }
      },
      "ProjectEvidence": {
        "type": "object",
        "required": [
          "sourceUrl",
          "authorship",
          "hardware",
          "comparisons",
          "reportedResults",
          "limitation"
        ],
        "additionalProperties": false,
        "properties": {
          "sourceUrl": {
            "type": "string",
            "format": "uri",
            "maxLength": 2000
          },
          "authorship": {
            "type": "string",
            "const": "Flower-authored benchmark",
            "maxLength": 1000
          },
          "hardware": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 1000
            }
          },
          "comparisons": {
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 1000
            }
          },
          "reportedResults": {
            "type": "object",
            "required": [
              "m4MacMini",
              "raspberryPi4"
            ],
            "additionalProperties": false,
            "properties": {
              "m4MacMini": {
                "$ref": "#/components/schemas/ThroughputResult"
              },
              "raspberryPi4": {
                "$ref": "#/components/schemas/ThroughputResult"
              }
            }
          },
          "limitation": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20000
          }
        }
      },
      "ThroughputResult": {
        "type": "object",
        "required": [
          "batchedQueriesPerSecond",
          "singleQueryQueriesPerSecond"
        ],
        "additionalProperties": false,
        "properties": {
          "batchedQueriesPerSecond": {
            "type": "integer",
            "minimum": 1
          },
          "singleQueryQueriesPerSecond": {
            "type": "integer",
            "minimum": 1
          }
        }
      },
      "SiteLinks": {
        "type": "object",
        "required": [
          "posts",
          "newsletter",
          "contact",
          "mcp",
          "documentation",
          "github",
          "discord",
          "x",
          "instagram",
          "tiktok"
        ],
        "additionalProperties": false,
        "properties": {
          "posts": {
            "type": "string",
            "format": "uri"
          },
          "newsletter": {
            "type": "string",
            "format": "uri"
          },
          "contact": {
            "type": "string",
            "format": "uri"
          },
          "mcp": {
            "type": "string",
            "format": "uri"
          },
          "documentation": {
            "type": "string",
            "format": "uri"
          },
          "github": {
            "type": "string",
            "format": "uri"
          },
          "discord": {
            "type": "string",
            "format": "uri"
          },
          "x": {
            "type": "string",
            "format": "uri"
          },
          "instagram": {
            "type": "string",
            "format": "uri"
          },
          "tiktok": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Contact": {
        "type": "object",
        "required": [
          "email",
          "location"
        ],
        "additionalProperties": false,
        "properties": {
          "email": {
            "type": "string",
            "format": "email"
          },
          "location": {
            "type": "object",
            "required": [
              "locality",
              "region",
              "postalCode",
              "country"
            ],
            "additionalProperties": false,
            "properties": {
              "locality": {
                "type": "string"
              },
              "region": {
                "type": "string"
              },
              "postalCode": {
                "type": "string"
              },
              "country": {
                "type": "string"
              }
            }
          }
        }
      },
      "PostSummary": {
        "type": "object",
        "required": [
          "slug",
          "title",
          "excerpt",
          "publishedAt",
          "updatedAt",
          "authors",
          "category",
          "tags",
          "htmlUrl",
          "markdownUrl",
          "apiUrl"
        ],
        "additionalProperties": false,
        "properties": {
          "slug": {
            "type": "string",
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "title": {
            "type": "string",
            "minLength": 1
          },
          "excerpt": {
            "type": "string",
            "minLength": 1
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "authors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "slug",
                "name"
              ],
              "additionalProperties": false,
              "properties": {
                "slug": {
                  "type": "string",
                  "minLength": 1,
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                  "description": "Stable author identifier for grouping published posts."
                },
                "name": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "category": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "required": [
                  "slug",
                  "label"
                ],
                "additionalProperties": false,
                "properties": {
                  "slug": {
                    "type": "string",
                    "minLength": 1,
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                    "description": "Stable category identifier for grouping published posts."
                  },
                  "label": {
                    "type": "string",
                    "minLength": 1
                  }
                }
              }
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "slug",
                "label"
              ],
              "additionalProperties": false,
              "properties": {
                "slug": {
                  "type": "string",
                  "minLength": 1,
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                  "description": "Stable tag identifier for grouping published posts."
                },
                "label": {
                  "type": "string",
                  "minLength": 1
                }
              }
            }
          },
          "outdated": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20000
          },
          "htmlUrl": {
            "type": "string",
            "format": "uri",
            "description": "Preferred reader-facing citation URL and source for rendered media."
          },
          "markdownUrl": {
            "type": "string",
            "format": "uri",
            "description": "Standalone Markdown URL for quotation, summarization, and readable-source provenance."
          },
          "apiUrl": {
            "type": "string",
            "format": "uri",
            "description": "Structured JSON URL for machine-retrieval provenance."
          }
        },
        "example": {
          "slug": "introduction",
          "title": "Introduction",
          "excerpt": "Reintroducing our company, mission, and current state of affairs",
          "publishedAt": "2025-05-14T01:25:00.000Z",
          "updatedAt": "2025-05-14T01:25:00.000Z",
          "authors": [
            {
              "slug": "flower-computer-co",
              "name": "Flower Computer Co."
            }
          ],
          "category": {
            "slug": "announcements",
            "label": "Announcements"
          },
          "tags": [],
          "outdated": "This May 2025 announcement describes Yuma's launch and related hiring at that time. Yuma has since been sunset, and Flower now focuses on Bog, its current pre-release product.",
          "htmlUrl": "https://www.flowercomputer.com/posts/introduction/",
          "markdownUrl": "https://www.flowercomputer.com/posts/introduction/index.md",
          "apiUrl": "https://www.flowercomputer.com/api/v1/posts/introduction.json"
        }
      },
      "PostList": {
        "type": "object",
        "required": [
          "count",
          "order",
          "posts"
        ],
        "additionalProperties": false,
        "properties": {
          "count": {
            "type": "integer",
            "minimum": 0
          },
          "order": {
            "type": "string",
            "const": "publishedAt_desc",
            "description": "Posts are ordered from newest to oldest."
          },
          "posts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PostSummary"
            }
          }
        },
        "example": {
          "count": 1,
          "order": "publishedAt_desc",
          "posts": [
            {
              "slug": "introduction",
              "title": "Introduction",
              "excerpt": "Reintroducing our company, mission, and current state of affairs",
              "publishedAt": "2025-05-14T01:25:00.000Z",
              "updatedAt": "2025-05-14T01:25:00.000Z",
              "authors": [
                {
                  "slug": "flower-computer-co",
                  "name": "Flower Computer Co."
                }
              ],
              "category": {
                "slug": "announcements",
                "label": "Announcements"
              },
              "tags": [],
              "outdated": "This May 2025 announcement describes Yuma's launch and related hiring at that time. Yuma has since been sunset, and Flower now focuses on Bog, its current pre-release product.",
              "htmlUrl": "https://www.flowercomputer.com/posts/introduction/",
              "markdownUrl": "https://www.flowercomputer.com/posts/introduction/index.md",
              "apiUrl": "https://www.flowercomputer.com/api/v1/posts/introduction.json"
            }
          ]
        }
      },
      "Post": {
        "type": "object",
        "required": [
          "slug",
          "title",
          "excerpt",
          "publishedAt",
          "updatedAt",
          "authors",
          "category",
          "tags",
          "htmlUrl",
          "markdownUrl",
          "apiUrl",
          "contentFormat",
          "contentMarkdown"
        ],
        "additionalProperties": false,
        "properties": {
          "slug": {
            "type": "string",
            "minLength": 1,
            "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$"
          },
          "title": {
            "type": "string",
            "minLength": 1
          },
          "excerpt": {
            "type": "string",
            "minLength": 1
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time"
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time"
          },
          "authors": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "slug",
                "name"
              ],
              "additionalProperties": false,
              "properties": {
                "slug": {
                  "type": "string",
                  "minLength": 1,
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                  "description": "Stable author identifier for grouping published posts."
                },
                "name": {
                  "type": "string",
                  "minLength": 1
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "category": {
            "anyOf": [
              {
                "type": "null"
              },
              {
                "type": "object",
                "required": [
                  "slug",
                  "label"
                ],
                "additionalProperties": false,
                "properties": {
                  "slug": {
                    "type": "string",
                    "minLength": 1,
                    "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                    "description": "Stable category identifier for grouping published posts."
                  },
                  "label": {
                    "type": "string",
                    "minLength": 1
                  }
                }
              }
            ]
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "slug",
                "label"
              ],
              "additionalProperties": false,
              "properties": {
                "slug": {
                  "type": "string",
                  "minLength": 1,
                  "pattern": "^[a-z0-9]+(?:-[a-z0-9]+)*$",
                  "description": "Stable tag identifier for grouping published posts."
                },
                "label": {
                  "type": "string",
                  "minLength": 1
                }
              }
            }
          },
          "outdated": {
            "type": "string",
            "minLength": 1,
            "maxLength": 20000
          },
          "htmlUrl": {
            "type": "string",
            "format": "uri",
            "description": "Preferred reader-facing citation URL and source for rendered media."
          },
          "markdownUrl": {
            "type": "string",
            "format": "uri",
            "description": "Standalone Markdown URL for quotation, summarization, and readable-source provenance."
          },
          "apiUrl": {
            "type": "string",
            "format": "uri",
            "description": "Structured JSON URL for machine-retrieval provenance."
          },
          "contentFormat": {
            "type": "string",
            "const": "text/markdown"
          },
          "contentMarkdown": {
            "type": "string",
            "minLength": 1,
            "description": "Complete source Markdown. Relative media references are source annotations; use htmlUrl for rendered media."
          }
        },
        "example": {
          "slug": "introduction",
          "title": "Introduction",
          "excerpt": "Reintroducing our company, mission, and current state of affairs",
          "publishedAt": "2025-05-14T01:25:00.000Z",
          "updatedAt": "2025-05-14T01:25:00.000Z",
          "authors": [
            {
              "slug": "flower-computer-co",
              "name": "Flower Computer Co."
            }
          ],
          "category": {
            "slug": "announcements",
            "label": "Announcements"
          },
          "tags": [],
          "outdated": "This May 2025 announcement describes Yuma's launch and related hiring at that time. Yuma has since been sunset, and Flower now focuses on Bog, its current pre-release product.",
          "htmlUrl": "https://www.flowercomputer.com/posts/introduction/",
          "markdownUrl": "https://www.flowercomputer.com/posts/introduction/index.md",
          "apiUrl": "https://www.flowercomputer.com/api/v1/posts/introduction.json",
          "contentFormat": "text/markdown",
          "contentMarkdown": "We’re Flower, a computer company inventing new ways to talk to the world around you.\n\nThis summer, we’re launching [Yuma](https://www.yuma.chat/), a chat app that lets you talk to anything: your hand, your houseplants, your pet chihuahua, the golden gate bridge. Take a photo, and the object responds. Sometimes it offers advice. Sometimes it shares a memory. Sometimes it just listens.\n\nIt’s our first step toward a stranger, more expressive internet, one rooted in the physical world. It’s a new way of relating to your surroundings that’s quiet, strange, and kind of delightful.\n\nIf that sounds like something you’d want to build, we’re hiring founding engineers to help expand this infrastructure into the world. If it sounds like something you’d want to try, Yuma launches to our first cohort on the summer solstice.\n\n## **What We’re Building**\n\nIn practice, **Yuma is a chat app that lets you talk to anything**.\n\nIn the background, it’s a gateway to a much broader system—one that makes physical objects addressable, programmable, and social.\n\nEach object becomes a pointer to computation. That means it can store data, share context, run software, and even dream. We’re building a persistent addressing layer to support that shift: something like [IPv6](https://en.wikipedia.org/wiki/IPv6), but for stuff. Your bookshelf. Your neighborhood tree. Your childhood flute.\n\n## **Why We’re Doing This**\n\nWe believe objects are the next platform—and the next lifeform.\n\nSome reasons we’re building this:\n\n- So we can meet new friends on things we love\n\n- So everyday objects can store and share information in ways that feel natural, not extractive\n\n- So developers can ship software to the world, not just to screens\n\n- So I can ask my dog what other dogs are thinking\n\n- So computing becomes less about apps and more about everything else\n\n## **Where We’re At**\n\nWe raised $1.5M last October in a pre-seed round led by [Village Global](https://www.villageglobal.vc/) and [Worldbuild](https://www.worldbuild.vc/). Our co-founders have worked across [crypto](https://www.gnosis.io/), [peer-to-peer systems](https://tlon.io/), and [early consumer AI](https://www.samara.com/)—and have been dreaming about environmental computing for years.\n\nYuma is our first step toward that future. It’s live in TestFlight now, and launching in the App Store on the summer solstice.\n\nComing soon:\n\n- A public release of Yuma for iOS\n\n- A network of curious users talking to the world around them\n\nIf you want to help shape this future—as a collaborator, engineer, partner, or friend—[we’d love to hear from you](mailto:ed@flowercomputer.com).\n\nPeace,\n\nFlower Computer Co."
        }
      },
      "Status": {
        "type": "object",
        "required": [
          "status",
          "service",
          "version",
          "lastReviewed"
        ],
        "additionalProperties": false,
        "example": {
          "status": "ok",
          "service": "flower-public-content-api",
          "version": "1.0.0",
          "lastReviewed": "2026-08-24"
        },
        "properties": {
          "status": {
            "type": "string",
            "const": "ok"
          },
          "service": {
            "type": "string"
          },
          "version": {
            "type": "string",
            "pattern": "^\\d+\\.\\d+\\.\\d+$"
          },
          "lastReviewed": {
            "type": "string",
            "format": "date"
          }
        }
      },
      "Problem": {
        "type": "object",
        "required": [
          "type",
          "title",
          "status",
          "code",
          "detail",
          "instance",
          "resolution",
          "retryable"
        ],
        "additionalProperties": false,
        "example": {
          "type": "https://www.flowercomputer.com/api/errors/resource-not-found",
          "title": "Resource not found",
          "status": 404,
          "code": "resource_not_found",
          "detail": "No public API resource exists at this path.",
          "instance": "/api/v1/posts/missing.json",
          "resolution": "Use https://www.flowercomputer.com/api/v1/posts.json to discover valid post slugs.",
          "retryable": false
        },
        "properties": {
          "type": {
            "type": "string",
            "format": "uri"
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer",
            "minimum": 400,
            "maximum": 599
          },
          "code": {
            "type": "string",
            "pattern": "^[a-z][a-z0-9_]*$"
          },
          "detail": {
            "type": "string"
          },
          "instance": {
            "type": "string",
            "format": "uri-reference"
          },
          "resolution": {
            "type": "string"
          },
          "retryable": {
            "type": "boolean"
          }
        }
      }
    },
    "responses": {
      "MethodNotAllowed": {
        "description": "The public content API supports only GET and HEAD requests.",
        "headers": {
          "Allow": {
            "description": "Methods accepted by the requested resource.",
            "schema": {
              "type": "string",
              "example": "GET, HEAD"
            }
          }
        },
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/Problem"
            },
            "example": {
              "type": "https://www.flowercomputer.com/api/errors/method-not-allowed",
              "title": "Method not allowed",
              "status": 405,
              "code": "method_not_allowed",
              "detail": "The public content API supports only GET and HEAD requests.",
              "instance": "/api/v1/site.json",
              "resolution": "https://www.flowercomputer.com/api/v1/site.json",
              "retryable": false
            }
          }
        }
      },
      "ServiceUnavailable": {
        "description": "The API is temporarily unavailable. This failure may be retried.",
        "headers": {
          "Retry-After": {
            "description": "Seconds to wait before retrying.",
            "schema": {
              "type": "string",
              "pattern": "^[1-9][0-9]*$",
              "example": "60"
            }
          }
        },
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/Problem"
            },
            "example": {
              "type": "https://www.flowercomputer.com/api/errors/service-unavailable",
              "title": "Service unavailable",
              "status": 503,
              "code": "service_unavailable",
              "detail": "The public content API is temporarily unavailable.",
              "instance": "/api/v1/site.json",
              "resolution": "Retry after the number of seconds in the Retry-After header.",
              "retryable": true
            }
          }
        }
      },
      "UnexpectedError": {
        "description": "An unexpected API failure. Inspect retryable and resolution before retrying.",
        "content": {
          "application/problem+json": {
            "schema": {
              "$ref": "#/components/schemas/Problem"
            },
            "example": {
              "type": "https://www.flowercomputer.com/api/errors/unexpected-error",
              "title": "Unexpected error",
              "status": 500,
              "code": "unexpected_error",
              "detail": "The public content API encountered an unexpected error.",
              "instance": "/api/v1/site.json",
              "resolution": "Retry once after a short delay. If the error continues, use the contact URL in /api/v1/site.json.",
              "retryable": true
            }
          }
        }
      }
    }
  }
}
