{"openapi":"3.1.0","info":{"title":"rgbjoy public portfolio API","version":"1.0.0","description":"Read Tom Fletcher's public profile, projects, and experiments. No authentication required. All search terms must match; matching is case-insensitive. Content is authored portfolio data, not a crawl of external project sites."},"servers":[{"url":"https://rgbjoy.com"}],"paths":{"/api/catalog":{"get":{"operationId":"searchPortfolio","summary":"Read or search rgbjoy projects and experiments","parameters":[{"name":"q","in":"query","description":"Words to match across titles, descriptions, technologies, and keywords.","schema":{"type":"string"}},{"name":"kind","in":"query","schema":{"type":"string","enum":["project","experiment"]}}],"responses":{"200":{"description":"Public profile and all matching entries; an empty search result has total 0 and entries [].","content":{"application/json":{"schema":{"type":"object","required":["version","profile","source","total","entries"],"properties":{"version":{"type":"string"},"profile":{"type":"object","required":["name","alias","url","description","profiles"],"properties":{"name":{"type":"string"},"alias":{"type":"string"},"url":{"type":"string"},"description":{"type":"string"},"profiles":{"type":"array","items":{"type":"object","required":["name","url"],"properties":{"name":{"type":"string"},"url":{"type":"string"}}}}}},"source":{"type":"string"},"total":{"type":"integer","minimum":0},"entries":{"type":"array","items":{"type":"object","required":["id","kind","title","url","description","technologies","keywords"],"properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["project","experiment"]},"title":{"type":"string"},"url":{"type":"string","format":"uri"},"description":{"type":["string","null"]},"year":{"type":"string","description":"Projects only: year or authored status label such as Coming soon or Ongoing."},"category":{"type":"string"},"publishedMonth":{"type":"string","pattern":"^\\d{4}-\\d{2}$"},"status":{"type":"string","enum":["live","wip","archived"]},"technologies":{"type":"array","items":{"type":"string"}},"keywords":{"type":"array","items":{"type":"string"}}}}}}}}}},"400":{"description":"Invalid kind filter.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"string"}}}}}}}}}}}