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."
}
]