hugo palma.work

CV JSON Schema

Reference for the Resume Builder JSON format

Overview

The resume is defined as a single JSON object with a "sections" array. Each element in the array is a section block that maps to a visual block in the PDF. Order matters — sections render top-to-bottom in the order they appear.

{
  "sections": [
    { "type": "header",     "..." : "..." },
    { "type": "summary",    "..." : "..." },
    { "type": "section",    "..." : "..." },
    { "type": "experience", "..." : "..." },
    { "type": "education",  "..." : "..." },
    { "type": "keywords",   "..." : "..." }
  ]
}
Flexibility: You can have any number of sections in any order. Use multiple "section" blocks for Skills, Certifications, Awards, etc. Use multiple "experience" blocks for Work, Projects, Volunteer, etc. Rename titles freely.

Section Types

1. header

The candidate's name and contact line. Typically the first section.

FieldTypeDescription
typestringMust be "header"
content.namestringFull name
content.contactstringContact info, pipe-separated: email | linkedin | phone | location
{
  "type": "header",
  "content": {
    "name": "Jane Smith",
    "contact": "[email protected] | linkedin.com/in/janesmith | (555) 987-6543 | Lisbon, PT"
  }
}

2. summary

A free-text block for professional summaries, objectives, or bios.

FieldTypeDescription
typestringMust be "summary"
titlestringSection heading (e.g. "Professional Summary", "Objective")
content.textstringThe summary paragraph
{
  "type": "summary",
  "title": "Professional Summary",
  "content": {
    "text": "Backend engineer with 6+ years building distributed systems and data pipelines."
  }
}

3. section

A generic bullet-point section. Use for skills, certifications, awards, languages, projects, or anything list-based.

FieldTypeDescription
typestringMust be "section"
titlestringSection heading (e.g. "Core Competencies", "Certifications")
content.bulletsstring[]Array of bullet-point strings
{
  "type": "section",
  "title": "Core Competencies",
  "content": {
    "bullets": [
      "Go, Python, TypeScript, SQL",
      "PostgreSQL, Redis, Kafka, Docker, Kubernetes",
      "CI/CD, Terraform, AWS (EC2, Lambda, S3)"
    ]
  }
}

4. experience

Work experience with companies and roles. Each company can hold multiple roles (promotions). Each role has its own date range and achievement bullets.

FieldTypeDescription
typestringMust be "experience"
titlestringSection heading (e.g. "Professional Experience", "Projects")
content.jobsobject[]Array of company objects
jobs[].companystringCompany or organisation name
jobs[].rolesobject[]Array of role objects within that company
roles[].titlestringJob title or position
roles[].periodstringDate range (e.g. "Jan 2022 - Present")
roles[].bulletsstring[]Achievements or responsibilities
{
  "type": "experience",
  "title": "Professional Experience",
  "content": {
    "jobs": [
      {
        "company": "Acme Corp",
        "roles": [
          {
            "title": "Senior Backend Engineer",
            "period": "Mar 2023 - Present",
            "bullets": [
              "Designed event-driven pipeline processing 2M+ events/day",
              "Reduced P95 API latency from 800ms to 120ms"
            ]
          },
          {
            "title": "Backend Engineer",
            "period": "Jun 2021 - Feb 2023",
            "bullets": [
              "Built internal tooling used by 40+ engineers daily"
            ]
          }
        ]
      }
    ]
  }
}
Multiple roles: List promotions or title changes at the same company as separate objects in the roles array. They render grouped under the company name.

5. education

Academic qualifications. Each entry is an institution with a degree, date range, and optional detail bullets.

FieldTypeDescription
typestringMust be "education"
titlestringSection heading (e.g. "Education")
content.entriesobject[]Array of education objects
entries[].institutionstringUniversity or school name
entries[].degreestringDegree or qualification
entries[].periodstringDate range
entries[].bulletsstring[]Honours, GPA, relevant coursework, etc.
{
  "type": "education",
  "title": "Education",
  "content": {
    "entries": [
      {
        "institution": "University of Lisbon",
        "degree": "BSc Computer Science",
        "period": "Sep 2016 - Jun 2020",
        "bullets": [
          "GPA: 16/20, Dean's List",
          "Thesis: Distributed Job Scheduling with Go"
        ]
      }
    ]
  }
}

6. keywords (optional)

Hidden keywords embedded in the PDF for ATS parsing. Invisible to humans but machine-readable.

FieldTypeDescription
typestringMust be "keywords"
content.keywordsstringComma or space-separated keyword string
{
  "type": "keywords",
  "content": {
    "keywords": "Python, AWS, Agile, Scrum, Project Management, Leadership"
  }
}

Full Example

{
  "sections": [
    {
      "type": "header",
      "content": {
        "name": "Jane Smith",
        "contact": "[email protected] | linkedin.com/in/janesmith | (555) 987-6543 | Lisbon, PT"
      }
    },
    {
      "type": "summary",
      "title": "Professional Summary",
      "content": {
        "text": "Backend engineer with 6+ years building distributed systems, data pipelines, and developer tooling."
      }
    },
    {
      "type": "section",
      "title": "Core Competencies",
      "content": {
        "bullets": [
          "Go, Python, TypeScript, SQL",
          "PostgreSQL, Redis, Kafka, Docker, Kubernetes"
        ]
      }
    },
    {
      "type": "experience",
      "title": "Professional Experience",
      "content": {
        "jobs": [
          {
            "company": "Acme Corp",
            "roles": [
              {
                "title": "Senior Backend Engineer",
                "period": "Mar 2023 - Present",
                "bullets": [
                  "Designed event-driven pipeline processing 2M+ events/day",
                  "Reduced P95 API latency from 800ms to 120ms"
                ]
              }
            ]
          }
        ]
      }
    },
    {
      "type": "education",
      "title": "Education",
      "content": {
        "entries": [
          {
            "institution": "University of Lisbon",
            "degree": "BSc Computer Science",
            "period": "Sep 2016 - Jun 2020",
            "bullets": ["GPA: 16/20"]
          }
        ]
      }
    },
    {
      "type": "keywords",
      "content": {
        "keywords": "Go, Golang, Python, distributed systems, microservices"
      }
    }
  ]
}

Rules