Profile API

Read public profile, skills, experience, education, contact, case studies, and results as separate REST resources.

Public, read-only endpoints. No authentication required. GET returns JSON, HEAD returns the same headers without a body, and OPTIONS supports CORS preflight.

Request headers

Accept-Languagestring · Optional
Optional. Choose en or es. Regional tags and quality weights are supported, for example es-PE, en;q=0.8. Defaults to en when no supported preference matches.
If-None-Matchstring · Optional
Optional. Send a previous ETag to receive 304 when the resource is unchanged.

GET/api/v1/profile

Get the name, headline, and professional summary.

Parameters

No path or query parameters.

Request

curl "https://gedy.dev/api/v1/profile" \
  -H "Accept: application/json" \
  -H "Accept-Language: en"

Response 200 · application/json

{
  "name": "Gedy Palomino",
  "headline": "Senior Cloud & AI Engineer",
  "summary": "Senior software engineer with 7+ years designing, building, and operating end-to-end systems. Strong background in backend architecture, infrastructure, and event-driven distributed systems. Hands-on experience with managed services and Linux system administration. Currently focused on AI-powered applications, automation, and agent-based development workflows. Solid working knowledge of Linux, networking, SQL/NoSQL data systems, authentication, cryptography, and security engineering."
}

GET/api/v1/skills

List technical skills grouped by focus area.

Parameters

qQuery · string · Optional
Search skill names and group titles; returns complete matching groups. Optional string, 1–100 characters after trimming. Case-insensitive substring match. Omit to return all records. Empty, repeated, or unknown parameters return 400.

Request

curl "https://gedy.dev/api/v1/skills?q=cloud" \
  -H "Accept: application/json" \
  -H "Accept-Language: en"

Response 200 · application/json

[
  {
    "title": "Backend and cloud",
    "summary": "Typed services, APIs, distributed systems, and repeatable infrastructure.",
    "skills": [
      "TypeScript/JavaScript",
      "Python",
      "Lua",
      "Go",
      "SQL",
      "API design and OpenAPI",
      "Microservices",
      "Event-driven architecture",
      "Serverless architecture",
      "Linux system administration",
      "Docker and CI/CD",
      "Infrastructure as code"
    ]
  }
]

GET/api/v1/experience

List roles, companies, periods, and highlights.

Parameters

companyQuery · string · Optional
Filter by company name. Optional string, 1–100 characters after trimming. Case-insensitive substring match. Omit to return all records. Empty, repeated, or unknown parameters return 400.

Request

curl "https://gedy.dev/api/v1/experience?company=Encora%20Inc." \
  -H "Accept: application/json" \
  -H "Accept-Language: en"

Response 200 · application/json

[
  {
    "id": "encora",
    "role": "Senior Software Engineer",
    "company": "Encora Inc.",
    "companyUrl": "https://www.encora.com/",
    "context": "Consulting: enterprise e-commerce",
    "period": "Jul 2023 – Present",
    "highlights": [
      "Own the product and user microservices for Alicorp, Peru's largest consumer goods company, supporting 2 backend tenants, 4 consumer applications, 35 distributors, ~3K products, ~150K users, and high-traffic core commerce services.",
      "Implemented user authentication, product search, navigation, pricing, and promotion workflows including combinable min/max price, combo, and payment-method rules.",
      "Implemented stored procedures and schema migrations; optimized hot queries across large relational datasets, improving average execution time by ~50%.",
      "Optimized under-tuned APIs and workflows, reducing peak-hour latency from up to 6s to sub-1s, lowering database CPU/RAM usage from ~85% to ~30% through indexing, Redis cache tuning with selective field loading, and Node.js Worker Threads.",
      "Improved production reliability with New Relic telemetry, structured logging, and targeted fixes, reducing incidents and maintaining near-zero rollbacks in owned repositories.",
      "Conducted technical interviews for senior engineering candidates, owning the technical evaluation process and delivering hiring recommendations to stakeholders."
    ]
  }
]

GET/api/v1/experience/{id}

Get one record by its ID.

Parameters

idPath · string · Required
Required. Use an id returned by the collection endpoint. IDs are case-sensitive.

Request

curl "https://gedy.dev/api/v1/experience/encora" \
  -H "Accept: application/json" \
  -H "Accept-Language: en"

Response 200 · application/json

{
  "id": "encora",
  "role": "Senior Software Engineer",
  "company": "Encora Inc.",
  "companyUrl": "https://www.encora.com/",
  "context": "Consulting: enterprise e-commerce",
  "period": "Jul 2023 – Present",
  "highlights": [
    "Own the product and user microservices for Alicorp, Peru's largest consumer goods company, supporting 2 backend tenants, 4 consumer applications, 35 distributors, ~3K products, ~150K users, and high-traffic core commerce services.",
    "Implemented user authentication, product search, navigation, pricing, and promotion workflows including combinable min/max price, combo, and payment-method rules.",
    "Implemented stored procedures and schema migrations; optimized hot queries across large relational datasets, improving average execution time by ~50%.",
    "Optimized under-tuned APIs and workflows, reducing peak-hour latency from up to 6s to sub-1s, lowering database CPU/RAM usage from ~85% to ~30% through indexing, Redis cache tuning with selective field loading, and Node.js Worker Threads.",
    "Improved production reliability with New Relic telemetry, structured logging, and targeted fixes, reducing incidents and maintaining near-zero rollbacks in owned repositories.",
    "Conducted technical interviews for senior engineering candidates, owning the technical evaluation process and delivering hiring recommendations to stakeholders."
  ]
}

GET/api/v1/education

List degrees and institutions.

Parameters

No path or query parameters.

Request

curl "https://gedy.dev/api/v1/education" \
  -H "Accept: application/json" \
  -H "Accept-Language: en"

Response 200 · application/json

[
  {
    "degree": "Systems Engineering",
    "credential": "Bachelor's degree",
    "institution": "San Cristóbal of Huamanga University",
    "institutionUrl": ""
  }
]

GET/api/v1/contact

Get public contact details and links.

Parameters

No path or query parameters.

Request

curl "https://gedy.dev/api/v1/contact" \
  -H "Accept: application/json" \
  -H "Accept-Language: en"

Response 200 · application/json

{
  "contacts": [
    {
      "kind": "email",
      "label": "email",
      "text": "gedy.palomino@gmail.com",
      "url": "mailto:gedy.palomino@gmail.com"
    }
  ],
  "links": [
    {
      "kind": "linkedin",
      "text": "linkedin.com/in/gedy-palomino",
      "url": "https://www.linkedin.com/in/gedy-palomino/"
    },
    {
      "kind": "github",
      "text": "github.com/gedzeppelin",
      "url": "https://github.com/gedzeppelin"
    }
  ]
}

GET/api/v1/case-studies

List published case studies and their results.

Parameters

organizationQuery · string · Optional
Filter by organization name. Optional string, 1–100 characters after trimming. Case-insensitive substring match. Omit to return all records. Empty, repeated, or unknown parameters return 400.

Request

curl "https://gedy.dev/api/v1/case-studies?organization=Open-source%20project" \
  -H "Accept: application/json" \
  -H "Accept-Language: en"

Response 200 · application/json

[
  {
    "id": "dossier-resume-as-code",
    "title": "Dossier: Resume as Code",
    "mobileTitle": "Dossier",
    "summary": "A typed Python package that validates resume data and renders Markdown or PDF.",
    "organization": "Open-source project",
    "context": "Resume tooling",
    "problem": "The resume feeds Markdown and PDF outputs, so each format needs to follow the same schema.",
    "intervention": "Built a Python package and CLI that validates resume data, exports JSON Schema, and renders Markdown or LuaLaTeX/PDF.",
    "result": "Both renderers use the validated models and skip sections disabled in the source.",
    "resultItems": [
      "Pydantic rejects unknown fields before rendering.",
      "The CLI exports JSON Schema from the runtime models.",
      "Markdown and LuaLaTeX/PDF read the same validated model."
    ]
  }
]

GET/api/v1/case-studies/{id}

Get one record by its ID.

Parameters

idPath · string · Required
Required. Use an id returned by the collection endpoint. IDs are case-sensitive.

Request

curl "https://gedy.dev/api/v1/case-studies/dossier-resume-as-code" \
  -H "Accept: application/json" \
  -H "Accept-Language: en"

Response 200 · application/json

{
  "id": "dossier-resume-as-code",
  "title": "Dossier: Resume as Code",
  "mobileTitle": "Dossier",
  "summary": "A typed Python package that validates resume data and renders Markdown or PDF.",
  "organization": "Open-source project",
  "context": "Resume tooling",
  "problem": "The resume feeds Markdown and PDF outputs, so each format needs to follow the same schema.",
  "intervention": "Built a Python package and CLI that validates resume data, exports JSON Schema, and renders Markdown or LuaLaTeX/PDF.",
  "result": "Both renderers use the validated models and skip sections disabled in the source.",
  "resultItems": [
    "Pydantic rejects unknown fields before rendering.",
    "The CLI exports JSON Schema from the runtime models.",
    "Markdown and LuaLaTeX/PDF read the same validated model."
  ]
}

GET/api/v1/metrics

List published result metrics.

Parameters

No path or query parameters.

Request

curl "https://gedy.dev/api/v1/metrics" \
  -H "Accept: application/json" \
  -H "Accept-Language: en"

Response 200 · application/json

[
  {
    "id": "years",
    "value": "7+",
    "label": "Years building production software",
    "summary": "Backend, cloud, mobile, and AI work across production systems."
  },
  {
    "id": "open-source",
    "value": "OSS",
    "label": "Open-source projects",
    "summary": "A few tools I build are available on GitHub."
  },
  {
    "id": "ai-automation",
    "value": "15+",
    "label": "AI automations and agent workflows",
    "summary": "More than 15 automations and coding-agent workflows."
  }
]