{
  "openapi": "3.1.0",
  "info": {
    "title": "DevWren public data API",
    "version": "1.0.0",
    "summary": "Read-only data about Rokibul Hasan (DevWren): profile, services, pricing, projects and blog posts.",
    "description": "Static JSON files, regenerated with every deploy from the same content as devwren.com. No authentication, no rate limits, GET only. To start a project, use the contact details in profile.json — this API cannot send messages.",
    "contact": {
      "name": "Rokibul Hasan",
      "email": "hi@devwren.com",
      "url": "https://devwren.com/contact"
    }
  },
  "externalDocs": {
    "description": "Human-readable docs",
    "url": "https://devwren.com/developers"
  },
  "security": [],
  "servers": [
    {
      "url": "https://devwren.com/api/v1"
    }
  ],
  "paths": {
    "/profile.json": {
      "get": {
        "operationId": "getProfile",
        "summary": "Get profile",
        "description": "Who, where, availability, skills and how to get in touch.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Profile"
                }
              }
            }
          },
          "404": {
            "description": "No such file (the site's 404 page)."
          }
        }
      }
    },
    "/services.json": {
      "get": {
        "operationId": "listServices",
        "summary": "List services",
        "description": "Every service offered, with technologies, examples and guides.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Services"
                }
              }
            }
          },
          "404": {
            "description": "No such file (the site's 404 page)."
          }
        }
      }
    },
    "/pricing.json": {
      "get": {
        "operationId": "getPricing",
        "summary": "Get pricing",
        "description": "The plans and their starting prices in USD, by category.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Pricing"
                }
              }
            }
          },
          "404": {
            "description": "No such file (the site's 404 page)."
          }
        }
      }
    },
    "/projects.json": {
      "get": {
        "operationId": "listProjects",
        "summary": "List projects",
        "description": "The published case studies and products.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Projects"
                }
              }
            }
          },
          "404": {
            "description": "No such file (the site's 404 page)."
          }
        }
      }
    },
    "/posts.json": {
      "get": {
        "operationId": "listPosts",
        "summary": "List posts",
        "description": "The blog guides, in the order the blog lists them.",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Posts"
                }
              }
            }
          },
          "404": {
            "description": "No such file (the site's 404 page)."
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Link": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Profile": {
        "type": "object",
        "required": [
          "name",
          "brand",
          "role",
          "url",
          "contact"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "brand": {
            "type": "string"
          },
          "role": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "location": {
            "type": "object",
            "properties": {
              "city": {
                "type": "string"
              },
              "country": {
                "type": "string"
              },
              "timeZone": {
                "type": "string"
              },
              "utcOffset": {
                "type": "string"
              }
            }
          },
          "areaServed": {
            "type": "string"
          },
          "availability": {
            "type": "string"
          },
          "writingCodeSince": {
            "type": "integer"
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "skills": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "contact": {
            "type": "object",
            "properties": {
              "email": {
                "type": "string",
                "format": "email"
              },
              "whatsapp": {
                "type": "string",
                "format": "uri"
              },
              "form": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "profiles": {
            "type": "object",
            "properties": {
              "linkedin": {
                "type": "string",
                "format": "uri"
              },
              "github": {
                "type": "string",
                "format": "uri"
              },
              "fiverr": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          "links": {
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "format": "uri"
            }
          }
        }
      },
      "Service": {
        "type": "object",
        "required": [
          "id",
          "name",
          "summary",
          "url"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "technologies": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "examples": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Link"
            }
          },
          "guides": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Link"
            }
          }
        }
      },
      "Services": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Service"
        }
      },
      "Plan": {
        "type": "object",
        "required": [
          "id",
          "tier",
          "startingPrice"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "tier": {
            "type": "string",
            "enum": [
              "MVP",
              "Flexible",
              "Advanced"
            ]
          },
          "startingPrice": {
            "type": "integer",
            "description": "US dollars."
          },
          "bestFor": {
            "type": "string"
          },
          "includes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "quote": {
            "type": "string",
            "format": "uri",
            "description": "The contact form with this plan prefilled."
          }
        }
      },
      "Pricing": {
        "type": "object",
        "required": [
          "currency",
          "categories"
        ],
        "properties": {
          "currency": {
            "type": "string",
            "const": "USD"
          },
          "note": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "everyPlanIncludes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "name",
                "plans"
              ],
              "properties": {
                "id": {
                  "type": "string"
                },
                "name": {
                  "type": "string"
                },
                "summary": {
                  "type": "string"
                },
                "url": {
                  "type": "string",
                  "format": "uri"
                },
                "plans": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Plan"
                  }
                }
              }
            }
          }
        }
      },
      "Project": {
        "type": "object",
        "required": [
          "name",
          "url"
        ],
        "properties": {
          "name": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Projects": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Project"
        }
      },
      "Post": {
        "type": "object",
        "required": [
          "slug",
          "title",
          "url"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "tags": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "published": {
            "type": "string",
            "format": "date"
          },
          "readingMinutes": {
            "type": "integer"
          },
          "cover": {
            "type": "string",
            "format": "uri"
          }
        }
      },
      "Posts": {
        "type": "array",
        "items": {
          "$ref": "#/components/schemas/Post"
        }
      }
    }
  }
}
