{"openapi":"3.0.3","info":{"title":"deploy-baba Portfolio & API","description":"Live demos and documentation for the deploy-baba ecosystem","contact":{"name":"shantopagla","email":"it@shantopagla.com"},"license":{"name":"MIT OR Apache-2.0"},"version":"0.1.0"},"paths":{"/api/competencies":{"get":{"tags":["resume"],"operationId":"list_competencies","responses":{"200":{"description":"List of all competency categories","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Competency"}}}}}}}},"/api/competencies/{slug}":{"get":{"tags":["resume"],"operationId":"get_competency","parameters":[{"name":"slug","in":"path","description":"Competency slug, e.g. 'cloud-infrastructure'","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Competency detail with cross-referenced evidence","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompetencyWithEvidence"}}}},"404":{"description":"Competency not found"}}}},"/api/crates":{"get":{"tags":["crates"],"operationId":"list_crates","responses":{"200":{"description":"List of all crates","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CrateInfo"}}}}}}}},"/api/crates/{name}":{"get":{"tags":["crates"],"operationId":"get_crate","parameters":[{"name":"name","in":"path","description":"Crate name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Crate details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrateInfo"}}}},"404":{"description":"Crate not found"}}}},"/api/demo/config/parse":{"post":{"tags":["demo"],"operationId":"parse_config","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseConfigRequest"}}},"required":true},"responses":{"200":{"description":"Config parsed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseConfigResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseConfigResponse"}}}}}}},"/api/demo/spec/generate":{"post":{"tags":["demo"],"operationId":"generate_spec","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateSpecRequest"}}},"required":true},"responses":{"200":{"description":"OpenAPI spec generated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateSpecResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateSpecResponse"}}}}}}},"/api/jobs":{"get":{"tags":["resume"],"operationId":"list_jobs","parameters":[{"name":"view","in":"query","description":"View mode: `\"chronological\"` (default).","required":false,"schema":{"type":"string","nullable":true}}],"responses":{"200":{"description":"List of all job positions","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Job"}}}}}}}},"/api/jobs/{slug}":{"get":{"tags":["resume"],"operationId":"get_job","parameters":[{"name":"slug","in":"path","description":"Job slug, e.g. 'scala-computing'","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Job detail with accomplishment bullets","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobWithDetails"}}}},"404":{"description":"Job not found"}}}},"/api/stack":{"get":{"tags":["stack"],"operationId":"get_stack","responses":{"200":{"description":"Stack configuration as JSON","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"tags":["health"],"operationId":"get_health","responses":{"200":{"description":"Service is healthy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}}},"components":{"schemas":{"Competency":{"type":"object","description":"A competency / skill category.","required":["id","slug","name","description","sort_order"],"properties":{"description":{"type":"string"},"icon":{"type":"string","nullable":true},"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"slug":{"type":"string"},"sort_order":{"type":"integer","format":"int64"}}},"CompetencyWithEvidence":{"allOf":[{"$ref":"#/components/schemas/Competency"},{"type":"object","required":["evidence"],"properties":{"evidence":{"type":"array","items":{"$ref":"#/components/schemas/EvidenceItem"}}}}],"description":"A competency with its supporting evidence items."},"CrateInfo":{"type":"object","description":"Information about a single deploy-baba library crate.","required":["name","version","description","traits"],"properties":{"description":{"type":"string","description":"Short description of the crate's purpose."},"name":{"type":"string","description":"Crate package name (e.g. `\"api-openapi\"`)."},"traits":{"type":"array","items":{"type":"string"},"description":"Trait names this crate implements or exposes."},"version":{"type":"string","description":"Semver version string."}}},"GenerateSpecRequest":{"type":"object","description":"Request body for `POST /api/demo/spec/generate`.","required":["title","fields"],"properties":{"fields":{"type":"array","items":{"$ref":"#/components/schemas/Field"},"description":"Fields that form the resource schema."},"title":{"type":"string","description":"Title of the generated OpenAPI spec."}}},"GenerateSpecResponse":{"type":"object","description":"Response from `POST /api/demo/spec/generate`.","required":["spec"],"properties":{"spec":{"description":"The generated OpenAPI 3.0 spec as a JSON object."}}},"HealthResponse":{"type":"object","description":"Service health check response.","required":["status","version"],"properties":{"status":{"type":"string","description":"Status string, always `\"ok\"` when the service is healthy."},"version":{"type":"string","description":"Semver version of the deployed binary."}}},"Job":{"type":"object","description":"A single job position.","required":["id","slug","company","title","start_date","summary","sort_order"],"properties":{"company":{"type":"string"},"end_date":{"type":"string","nullable":true},"id":{"type":"integer","format":"int64"},"location":{"type":"string","nullable":true},"slug":{"type":"string"},"sort_order":{"type":"integer","format":"int64"},"start_date":{"type":"string"},"summary":{"type":"string"},"tech_stack":{"type":"array","items":{"type":"string"},"description":"Technology names, split from comma-separated DB storage.","nullable":true},"title":{"type":"string"}}},"JobWithDetails":{"allOf":[{"$ref":"#/components/schemas/Job"},{"type":"object","required":["details"],"properties":{"details":{"type":"array","items":{"$ref":"#/components/schemas/JobDetail"}}}}],"description":"A job with its associated bullet-point details."},"ParseConfigRequest":{"type":"object","description":"Request body for `POST /api/demo/config/parse`.","required":["format","content"],"properties":{"content":{"type":"string","description":"Raw config text to parse."},"format":{"type":"string","description":"Format of the config content: `\"toml\"`, `\"json\"`, or `\"yaml\"`."}}},"ParseConfigResponse":{"type":"object","description":"Response from `POST /api/demo/config/parse`.","required":["success"],"properties":{"error":{"type":"string","description":"Human-readable error message, if parsing failed.","nullable":true},"parsed":{"description":"Parsed representation as JSON, if successful.","nullable":true},"success":{"type":"boolean","description":"Whether parsing succeeded."}}}}},"tags":[{"name":"health","description":"Service health checks"},{"name":"crates","description":"deploy-baba crate information"},{"name":"stack","description":"Stack configuration examples"},{"name":"demo","description":"Live API demonstrations"},{"name":"resume","description":"Career timeline and competency data"},{"name":"contact","description":"Contact form and PoW challenge"},{"name":"about","description":"About page content"},{"name":"social","description":"Social links"},{"name":"admin","description":"Protected admin CRUD (requires auth)"}]}