openapi: 3.1.0
info:
  title: Gabriel Lopez Romero Portfolio API
  version: 1.0.0
  description: Public machine-readable API and agent discovery interface for Gabriel
    Lopez Romero (Backend & Systems Engineer). Provides structured developer profile,
    technical projects, academic research publications, and skill sets.
  contact:
    name: Gabriel Lopez Romero
    email: gabriellopezromero@gmail.com
    url: https://lopezromerogabriel.vercel.app/
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
servers:
- url: https://lopezromerogabriel.vercel.app
  description: Production deployment on Vercel
paths:
  /:
    get:
      summary: Portfolio Homepage
      description: 'Returns the portfolio homepage. Supports HTTP content negotiation:
        requests with Accept: text/markdown receive a full markdown representation
        (acceptmarkdown.com compliant); requests with Accept: text/html receive standard
        HTML.'
      operationId: getHomepage
      responses:
        '200':
          description: Successful homepage response
          headers:
            Vary:
              schema:
                type: string
              description: Accept, Accept-Encoding
          content:
            text/html:
              schema:
                type: string
            text/markdown:
              schema:
                type: string
  /api/profile:
    get:
      summary: Developer Profile
      description: Returns Gabriel Lopez Romero full developer profile, biography,
        contact information, education, and career summary.
      operationId: getProfile
      parameters:
      - name: lang
        in: query
        description: 'Language code for localization (en or es). Default: en'
        required: false
        schema:
          type: string
          enum:
          - en
          - es
          default: en
      responses:
        '200':
          description: Successful profile payload
          content:
            application/json:
              schema:
                ? ''
                : '#/components/schemas/Profile'
        '400':
          description: Bad request or invalid parameters
          content:
            application/json:
              schema:
                ? ''
                : '#/components/schemas/ErrorResponse'
  /api/projects:
    get:
      summary: Software Projects
      description: Returns the list of featured engineering projects with repository
        URLs, descriptions, and technical stacks.
      operationId: getProjects
      responses:
        '200':
          description: List of featured projects
          content:
            application/json:
              schema:
                type: object
                properties:
                  projects:
                    type: array
                    items:
                      ? ''
                      : '#/components/schemas/Project'
  /api/research:
    get:
      summary: Research Publications & Papers
      description: Returns academic publications, technical reports, and scientific
        conference abstracts.
      operationId: getResearch
      responses:
        '200':
          description: List of research publications and abstracts
          content:
            application/json:
              schema:
                type: object
                properties:
                  research:
                    type: array
                    items:
                      ? ''
                      : '#/components/schemas/ResearchItem'
  /api/skills:
    get:
      summary: Categorized Technical Skills
      description: Returns the complete taxonomy of technical skills categorized into
        Backend & Systems, Cloud & DevOps, Databases & Storage, and Observability
        & Tooling.
      operationId: getSkills
      responses:
        '200':
          description: Categorized technical skill sets
          content:
            application/json:
              schema:
                type: object
                properties:
                  categories:
                    type: array
                    items:
                      ? ''
                      : '#/components/schemas/SkillCategory'
  /llms.txt:
    get:
      summary: LLM Discovery Index
      description: Curated LLM context following the /llms.txt specification.
      operationId: getLlmsTxt
      responses:
        '200':
          description: llms.txt markdown index
          content:
            text/plain:
              schema:
                type: string
            text/markdown:
              schema:
                type: string
  /llms-full.txt:
    get:
      summary: Comprehensive Full LLM Context
      description: Complete markdown document containing all profile data, project
        deep dives, research papers, and technical skills for LLMs.
      operationId: getLlmsFullTxt
      responses:
        '200':
          description: Full markdown curriculum
          content:
            text/plain:
              schema:
                type: string
            text/markdown:
              schema:
                type: string
components:
  schemas:
    Profile:
      type: object
      properties:
        name:
          type: string
          example: Gabriel Lopez Romero
        title:
          type: string
          example: Backend Engineer | Systems, Cloud & Performance
        email:
          type: string
          example: gabriellopezromero@gmail.com
        website:
          type: string
          example: https://lopezromerogabriel.vercel.app/
        bio:
          type: string
        links:
          type: object
          properties:
            github:
              type: string
            linkedin:
              type: string
            orcid:
              type: string
            scholar:
              type: string
        education:
          type: array
          items:
            type: object
            properties:
              degree:
                type: string
              institution:
                type: string
              period:
                type: string
      required:
      - name
      - title
      - email
      - bio
    Project:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        status:
          type: string
        description:
          type: string
        tags:
          type: array
          items:
            type: string
        repositoryUrl:
          type: string
        demoUrl:
          type: string
          nullable: true
      required:
      - id
      - name
      - description
      - tags
      - repositoryUrl
    ResearchItem:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        status:
          type: string
        venue:
          type: string
        abstract:
          type: string
        tags:
          type: array
          items:
            type: string
        proceedingsUrl:
          type: string
          nullable: true
        scholarUrl:
          type: string
          nullable: true
      required:
      - id
      - title
      - status
      - abstract
      - tags
    SkillCategory:
      type: object
      properties:
        name:
          type: string
        skills:
          type: array
          items:
            type: string
      required:
      - name
      - skills
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: NOT_FOUND
            message:
              type: string
              example: The requested resource was not found.
            status:
              type: integer
              example: 404
            resolution:
              type: string
              example: Consult /openapi.json for available endpoints or /llms.txt
                for site map.
          required:
          - code
          - message
          - status
          - resolution
      required:
      - error
