{"openapi":"3.1.0","info":{"title":"mmatinca.eu portfolio API","version":"3.3.0","description":"Public read-only API of Marian Matinca's portfolio (AI Adoption Lead). Each resource includes a translations object with ro and en keys. Write endpoints are a personal admin surface and are not part of the public API. MCP server available at https://mmatinca.eu/mcp (no auth, streamable HTTP); docs at https://mmatinca.eu/agents.","contact":{"name":"Marian Matinca","url":"https://mmatinca.eu"}},"servers":[{"url":"https://mmatinca.eu"}],"paths":{"/api/health":{"get":{"summary":"Health check (also verifies the DB)","responses":{"200":{"description":"Service and database respond"},"503":{"description":"DB unavailable"}}}},"/api/profile":{"get":{"summary":"Unified professional profile: experience, certifications, measurable results","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["ro","en"],"default":"en"},"description":"Content language. List endpoints return full translations.{ro,en} objects regardless."}],"responses":{"200":{"description":"Profile object with experience[], certifications[], measurable_results[]"}}}},"/api/search":{"get":{"summary":"Full-text search across projects, blog, experience, certifications and results","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2},"example":"AI compliance"},{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["ro","en"],"default":"en"},"description":"Content language. List endpoints return full translations.{ro,en} objects regardless."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":25,"default":5}}],"responses":{"200":{"description":"Typed hits: {type, id|slug, title, snippet, url}"},"400":{"description":"q shorter than 2 characters"}}}},"/api/projects":{"get":{"summary":"All projects, ordered by sort_order","parameters":[{"name":"lang","in":"query","required":false,"schema":{"type":"string","enum":["ro","en"],"default":"en"},"description":"Content language. List endpoints return full translations.{ro,en} objects regardless."}],"responses":{"200":{"description":"List of projects","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Project"}}}}}}}},"/api/projects/{id}":{"get":{"summary":"One project by id","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"example":"digital-compass"}],"responses":{"200":{"description":"The requested project","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}}},"404":{"description":"Not found"}}}},"/api/blog":{"get":{"summary":"Published articles, newest first","responses":{"200":{"description":"List of articles with translations.{ro,en}"}}}},"/api/blog/{slug}":{"get":{"summary":"One article by slug","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The requested article"},"404":{"description":"Not found"}}}},"/api/experience":{"get":{"summary":"Professional experience","responses":{"200":{"description":"List with translations.{ro,en}"}}}},"/api/certifications":{"get":{"summary":"Certifications","responses":{"200":{"description":"List with translations.{ro,en}"}}}},"/api/results":{"get":{"summary":"Measurable results (real project KPIs)","responses":{"200":{"description":"List with translations.{ro,en}"}}}},"/api/sections":{"get":{"summary":"Site sections and their visibility","responses":{"200":{"description":"List of sections"}}}}},"components":{"schemas":{"Project":{"type":"object","properties":{"id":{"type":"string"},"sort_order":{"type":"integer"},"icon_name":{"type":"string"},"link_url":{"type":["string","null"],"description":"The project's live site"},"link_type":{"type":["string","null"]},"translations":{"type":"object","properties":{"ro":{"$ref":"#/components/schemas/ProjectTranslation"},"en":{"$ref":"#/components/schemas/ProjectTranslation"}}}}},"ProjectTranslation":{"type":"object","properties":{"title":{"type":"string"},"category":{"type":"string"},"problem":{"type":"string"},"result":{"type":"string"},"description":{"type":"string"},"long_description":{"type":"string","description":"Markdown"},"details":{"type":"string","description":"Serialized JSON array of bullets"},"tags":{"type":"string","description":"Serialized JSON array"}}}}}}