Skip to content

Deep Dive into data.json

What is data.json?

data.json is a JSON file that contains all the information about you that will be used to generate the resume. The JSON file follows a custom schema. You can find the schema & the details about the fields in this page.

Please find the schema for the data.json file below.

Schema

The json schema for the metadata.json file is as follows:

schema
  {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "description": "Schema for rahul's resume generator https://github.com/ragarwalll/rahul-resume",
    "definitions": {
      "textSegment": {
        "type": "object",
        "description": "A segment of text that can be styled and optionally linked",
        "properties": {
          "text": {
            "type": "string",
            "description": "The actual text content"
          },
          "style": {
            "type": "object",
            "description": "Styling options for the text segment",
            "properties": {
              "bold": {
                "type": "boolean",
                "description": "Whether the text should be bold",
                "default": false
              },
              "italic": {
                "type": "boolean",
                "description": "Whether the text should be italicized",
                "default": false
              },
              "underline": {
                "type": "boolean",
                "description": "Whether the text should be underlined",
                "default": false
              }
            }
          },
          "href": {
            "type": "string",
            "format": "uri",
            "description": "Optional URL if the text should be a hyperlink"
          }
        },
        "required": ["text"]
      },
      "inlineList": {
        "type": "object",
        "description": "A list that appears inline with custom separator",
        "properties": {
          "separator": {
            "type": "string",
            "description": "Character or string used to separate list items",
            "default": "•"
          },
          "items": {
            "type": "array",
            "description": "Array of strings to be displayed inline",
            "items": { "type": "string" }
          }
        },
        "required": ["items"]
      },
      "listItem": {
        "type": "object",
        "description": "An item in a list that can contain text segments and/or an inline list",
        "properties": {
          "segments": {
            "type": "array",
            "description": "Array of text segments that make up the list item",
            "items": { "$ref": "#/definitions/textSegment" }
          },
          "inlineList": { "$ref": "#/definitions/inlineList" }
        }
      },
      "content": {
        "type": "object",
        "description": "Content block that can be either a list, paragraph, or table",
        "oneOf": [
          {
            "properties": {
              "type": {
                "const": "list",
                "description": "Indicates this content is a list"
              },
              "style": {
                "type": "object",
                "description": "Styling options for the list",
                "properties": {
                  "showBullets": {
                    "type": "boolean",
                    "description": "Whether to show bullets before list items"
                  }
                }
              },
              "items": {
                "type": "array",
                "description": "Array of list items",
                "items": { "$ref": "#/definitions/listItem" }
              }
            },
            "required": ["type", "items"]
          },
          {
            "properties": {
              "type": {
                "const": "paragraph",
                "description": "Indicates this content is a paragraph"
              },
              "text": {
                "type": "string",
                "description": "The paragraph text content"
              }
            },
            "required": ["type", "text"]
          },
          {
            "properties": {
              "type": {
                "const": "table",
                "description": "Indicates this content is a table"
              },
              "rows": {
                "type": "array",
                "description": "Array of table rows, each containing array of cell values",
                "items": {
                  "type": "array",
                  "items": { "type": "string" }
                }
              }
            },
            "required": ["type", "rows"]
          }
        ]
      },
      "metadata": {
        "type": "object",
        "description": "Metadata information for subsections such as duration and location",
        "properties": {
          "duration": {
            "type": "string",
            "description": "Time period or duration (e.g., 'Jan 2020 - Present')"
          },
          "location": {
            "type": "string",
            "description": "Geographic location or institution location"
          }
        }
      },
      "info": {
        "type": "object",
        "description": "Additional information for subsections",
        "properties": {
          "title": {
            "type": "string",
            "description": "Title or role description"
          },
          "sameLine": {
            "type": "boolean",
            "description": "Whether the title should appear on the same line as the heading",
            "default": false
          }
        }
      },
      "subsection": {
        "type": "object",
        "description": "A subsection within a main section containing detailed information",
        "required": ["heading"],
        "properties": {
          "heading": {
            "type": "string",
            "description": "The subsection heading (e.g., company name, project name)"
          },
          "info": { "$ref": "#/definitions/info" },
          "metadata": { "$ref": "#/definitions/metadata" },
          "content": { "$ref": "#/definitions/content" }
        }
      },
      "section": {
        "type": "object",
        "description": "A main section of the resume (e.g., Experience, Education)",
        "required": ["heading"],
        "properties": {
          "heading": {
            "type": "string",
            "description": "The section heading"
          },
          "moveToEnd": {
            "type": "boolean",
            "description": "Whether this section should be moved to the end of the resume",
            "default": false
          },
          "column": {
            "type": "integer",
            "minimum": 1,
            "maximum": 2,
            "default": 1,
            "description": "Which column this section should appear in (1 or 2)"
          },
          "columnSettings": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5,
            "default": 1,
            "description": "Number of columns for this section's content (1 to 5)"
          },
          "fullWidth": {
            "type": "boolean",
            "description": "Whether this section should span both columns",
            "default": false
          },
          "subsections": {
            "type": "array",
            "description": "Array of subsections within this section",
            "items": { "$ref": "#/definitions/subsection" }
          },
          "content": { "$ref": "#/definitions/content" }
        }
      }
    },
    "required": ["firstName", "lastName", "resume"],
    "properties": {
      "firstName": {
        "type": "string",
        "description": "First name of the resume owner"
      },
      "middleName": {
        "type": "string",
        "description": "Middle name of the resume owner",
        "default": ""
      },
      "lastName": {
        "type": "string",
        "description": "Last name of the resume owner"
      },
      "hideFooter": {
        "type": "boolean",
        "description": "Whether to hide the footer section of the resume",
        "default": false
      },
      "preset": {
        "type": "string",
        "enum": ["deedy-inspired-open-fonts", "carlito", "montserrat"],
        "default": "deedy-inspired-open-fonts",
        "description": "Visual style preset to be applied to the resume"
      },
      "spacing": {
        "type": "string",
        "enum": [
          "tight",
          "ultra",
          "maximum",
          "high_dense",
          "pro_dense",
          "semi_dense",
          "light_dense",
          "compact",
          "normal",
          "cozy",
          "airy",
          "minimal",
          "spacious"
        ],
        "default": "ultra",
        "description": "Spacing preset for the resume layout"
      },
      "showLastUpdated": {
        "type": "boolean",
        "description": "Whether to show the last updated timestamp on the resume",
        "default": true
      },
      "links": {
        "type": "array",
        "description": "Social media and other relevant links",
        "items": {
          "type": "object",
          "required": ["text", "href"],
          "properties": {
            "text": {
              "type": "string",
              "description": "Display text for the link"
            },
            "href": {
              "type": "string",
              "format": "uri",
              "description": "URL for the link"
            },
            "column": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5,
              "default": 1,
              "description": "Which column this link should appear in (1 to 5)"
            }
          }
        }
      },
      "resume": {
        "type": "object",
        "description": "Main resume content container",
        "required": ["sections"],
        "properties": {
          "sections": {
            "type": "array",
            "description": "Array of main sections in the resume",
            "items": { "$ref": "#/definitions/section" }
          }
        }
      }
    }
  }

Fields

Basic Details

{
  "firstName": "Rahul" // (1)
}
  1. ⚠ Required.
{
  "firstName": "Rahul",
  "middleName": ""  // (1)
}
  1. Optional.
{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal"  // (1)
}
  1. ⚠ Required.
{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [
      {
        "text": "git://ragarwalll", // (1)
        "href": "https://github.com/ragarwalll" // (2)
      },
      {
        "text": "linkedin://ragarwalll",
        "href": "https://www.linkedin.com/in/ragarwalll/",
        "column": 1 // (3)
      },
      {
        "text": "contact@therahulagarwal.com",
        "href": "mailto:contact@therahulagarwal.com",
        "column": 2 // (4)
      },
      {
        "text": "orcid://0009-0005-8806-1557",
        "href": "https://orcid.org/0009-0005-8806-1557",
        "column": 2
      }
  ],
}
  1. ⚠ Required. Defines the text that will be displayed for the link.
  2. ⚠ Required. Defines the URL that the link will redirect to.
  3. Optional. Defines the column in which the link will be displayed. Default is 1.
  4. Optionally define that the link will be displayed in the second column.

Visual Specifics

{
  "firstName": "Rahul",
  "preset": "deedy-inspired-open-fonts" // (1)
}
  1. Optional. Defines the preset that will be used to generate the resume. Default is deedy-inspired-open-fonts.

Note

The preset is a combination of the theme, font, and the layout. Following are the available presets.

  • deedy-inspired-open-fonts: Default preset.
  • deedy-inspired: It uses the helvetica font. Can be used only in local development.
  • carlito
  • montserrat

Suggestion

If you are generating the resume for ATS, it is advisable to use the carlito preset.

{
  "firstName": "Rahul",
  "preset": "deedy-inspired-open-fonts",
  "spacing": "ultra" // (1)
}
  1. Optional. Defines the spacing between the sections. Default is ultra.

Note

Following are the available spacings.

  • tight
  • ultra
  • maximum
  • high_dense
  • pro_dense
  • semi_dense
  • light_dense
  • compact
  • normal
  • cozy
  • airy
  • minimal
  • spacious

Suggestion

If you have a lot of content, it is advisable to use ultra or tight spacing.

{
  "firstName": "Rahul",
  "preset": "deedy-inspired-open-fonts",
  "spacing": "ultra"
  "hideFooter": true // (1)
}
  1. Optional. Defines if the footer should be hidden. Default is false.

By default, the footer contains the This resume was generated using text. If you don't want to display it, you can use this field.

Sections

key: resume.sections[]

Sections are the main content of the resume. Each section can have multiple subsections. The subsections can have multiple fields. Let's talk about each field in the sections.

{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience" // (1)
      }
    ]
  }
}
  1. ⚠ Required. Defines the heading of the section.
{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "subsections": [] // (1)
      }
    ]
  }
}
  1. ⚠ Required. Defines the subsections of the section. Refer to the subsections section for more details.

Please refer to the subsections section for more details.

{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "subsections": [],
        "content": {} // (1)
      }
    ]
  }
}
  1. ⚠ Required. Defines the content of the section. Refer to the content section for more details.

Note

Sometimes, you might not need subsections. In that case, you can directly define the content in a section itself.

Please refer to the content section for more details.

Visual Specifics

{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "column": 2 // (1)
      }
    ]
  }
}
  1. Optional. Defines the column in which the section will be displayed. Default is 1.

Note

Currently only one & two columns are supported. More columns will be added in the future. So, for now, you can use 1 or 2.

{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "column": 2,
        "columnSettings": 2 // (1)
      }
    ]
  }
}
  1. Optional. Defines the number of columns for the subsections. Default is 1.

Note

columnSettings basically means if the subsections should be displayed in multiple columns. If you have a lot of subsections, you can use this to display them in multiple columns.

Suggestion

Ideally, to imporve readability, you can use columnSettings with 2 if you have more than 4 subsections.

Subsections

key: resume.sections[].subsections[]

Subsections are the sub-content of the sections. Each subsection can have multiple fields. Let's talk about each field in the subsections.

{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "subsections": [{
          "heading": "SAP Labs India" // (1)
        }]
      }
    ]
  }
}
  1. ⚠ Required. Defines the heading of the section.
{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "subsections": [{
          "heading": "SAP Labs India",
          "info": {
            "title": "Software Engineer", // (1)
            "sameLine": true // (2)
          }
        }]
      }
    ]
  }
}
  1. ⚠ Required. You can use it to define anything, mostly you current role(s) is advisable.
  2. Optional. Defines if the title should be displayed in the same line as the subsection heading. Default is false.

Note

The name info might be misleading but you can consider it as the subtitle of the subsection.

{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "subsections": [{
          "heading": "SAP Labs India",
          "info": {
            "title": "Software Engineer",
            "sameLine": true
          },
          "metadata": {
            "duration": "July 2019 - Present", // (1)
            "location": "Bangalore, India" // (2)
          }
        }]
      }
    ]
  }
}
  1. Optional. You can use it to define anything, mostly the duration is advisable.
  2. Optional. You can use it to define anything, mostly the location is advisable.

Note

The name metadata might be misleading but you can consider it as the extra information about the subsection.

{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "subsections": [{
          "heading": "SAP Labs India",
          "info": {
            "title": "Software Engineer",
            "sameLine": true
          },
          "metadata": {
            "duration": "July 2019 - Present",
            "location": "Bangalore, India"
          },
          "content": {} // (1)
        }]
      }
    ]
  }
}
  1. ⚠ Required. Defines the content of the subsection. Refer to the content section for more details.

Please refer to the content section for more details.

Content

key: resume.sections[].subsections[].content

key: resume.sections[].content

As the name suggests, it is the content of the subsection. You can define the type of content you want to display. Let's talk about each field in the content.

Note

Content can be part of each subsection or the section itself.

{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "subsections": [{
          "heading": "SAP Labs India",
          "info": {
            "title": "Software Engineer",
            "sameLine": true
          },
          "metadata": {
            "duration": "July 2019 - Present",
            "location": "Bangalore, India"
          },
          "content": {
            "type": "list|paragraph|table" // (1)
          }
        }]
      }
    ]
  }
}
  1. ⚠ Required. Defines the type of content you want to display in the subsection.
{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "subsections": [{
          "heading": "SAP Labs India",
          "info": {
            "title": "Software Engineer",
            "sameLine": true
          },
          "metadata": {
            "duration": "July 2019 - Present",
            "location": "Bangalore, India"
          },
          "content": {
            "type": "list|paragraph|table",
            "style": {
              "showBullet": true, // (1)
            }
          }
        }]
      }
    ]
  }
}
  1. Optional. Defines if the bullet should be displayed in the list. Default is true.

Currently, only showBullet is supported. More styles will be added in the future.

List

Use Case 1

Let's say you wanna simply display two points in the list. Something like this.

  1. Developed and implemented a Visual Studio Code extension that streamlined project onboarding processes, reducing setup time by 60% and enhancing productivity for 1,500+ developers across multiple product teams.
  2. Developed a centralized onboarding platform that consolidated all pre-joining requirements for scholar programs, establishing a single source of truth that processes 150+ new graduates annually and reducing onboarding complexity by eliminating multiple touchpoints.

The json would look something like this.

{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "subsections": [{
          "heading": "SAP Labs India",
          "info": {
            "title": "Software Engineer",
            "sameLine": true
          },
          "metadata": {
            "duration": "July 2019 - Present",
            "location": "Bangalore, India"
          },
          "content": {
            "type": "list",
            "style": {
              "showBullet": true
            },
            "items": [
              {
                "segments": [
                  {
                    "text": "Developed and implemented a Visual Studio Code extension that streamlined project onboarding processes, reducing setup time by 60% and enhancing productivity for 1,500+ developers across multiple product teams."
                  }
                ]
              },
              {
                "segments": [
                  {
                    "text": "Developed a centralized onboarding platform that consolidated all pre-joining requirements for scholar programs, establishing a single source of truth that processes 150+ new graduates annually and reducing onboarding complexity by eliminating multiple touchpoints."
                  }
                ]
              }
            ]
          }
        }]
      }
    ]
  }
}

Use Case 2

Now let say you wanna underline some parts of the text & make some text bold. Something like this.

  1. Developed and implemented a Visual Studio Code extension that streamlined project onboarding processes, reducing setup time by 60% and enhancing productivity for 1,500+ developers(underline) across multiple product teams.

The json would look something like this.

{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "subsections": [{
          "heading": "SAP Labs India",
          "info": {
            "title": "Software Engineer",
            "sameLine": true
          },
          "metadata": {
            "duration": "July 2019 - Present",
            "location": "Bangalore, India"
          },
          "content": {
            "type": "list",
            "style": {
              "showBullet": true
            },
            "items": [
              {
                "segments": [
                  {
                    "text": "Developed and implemented a"
                  },
                  {
                    "text": "Visual Studio Code extension",
                    "style": {
                      "bold": true // (1)
                    }
                  },
                  {
                    "text": "that streamlined project onboarding processes, reducing setup time by 60% and"
                  },
                  {
                    "text": "enhancing productivity for 1,500+ developers",
                    "style": {
                      "underline": true // (2)
                    }
                  },
                  {
                    "text": "across multiple product teams."
                  }
                ]
              },
              {
                "segments": [
                  {
                    "text": "Developed a centralized onboarding platform that consolidated all pre-joining requirements for scholar programs, establishing a single source of truth that processes 150+ new graduates annually and reducing onboarding complexity by eliminating multiple touchpoints."
                  }
                ]
              }
            ]
          }
        }]
      }
    ]
  }
}
  1. Optional. Defines if the text should be displayed in bold. Default is false.
  2. Optional. Defines if the text should be displayed in underline. Default is false.

Following are the supported styles.

{
  "bold": true|false,
  "italic": true|false,
  "underline": true|false,
}

Inline List

Let's say you wanna display a list without new lines. Something like this.

Over 6000 lines:
Java • JS • PHP • LaTeX
Over 1000 lines:
C • C++ • GO
Familiar:
Swift • Ruby

The json would look something like this.

{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "subsections": [{
          "heading": "SAP Labs India",
          "info": {
            "title": "Software Engineer",
            "sameLine": true
          },
          "metadata": {
            "duration": "July 2019 - Present",
            "location": "Bangalore, India"
          },
          "content": {
            "type": "list",
            "style": {
              "showBullet": false
            },
            "items": [
              {
                "segments": [
                  {
                    "text": "Over 6000 lines:"
                  },
                  "inlineList": { // (1)
                    "separator": "•",
                    "items": [
                      "Java",
                      "JS",
                      "PHP",
                      "LaTeX"
                    ]
                  }
                ]
              },
              {
                "segments": [
                  {
                    "text": "Over 1000 lines:"
                  },
                  "inlineList": {
                    "separator": "•",
                    "items": [
                      "C",
                      "C++",
                      "GO"
                    ]
                  }
                ]
              },
              {
                "segments": [
                  {
                    "text": "Familiar:"
                  },
                  "inlineList": {
                    "separator": "•",
                    "items": [
                      "Swift",
                      "Ruby"
                    ]
                  }
                ]
              },
            ]
          }
        }]
      }
    ]
  }
}
  1. Optional. Defines the inline list, which means list without new lines. You can define the separator and the items.

Paragraph

Take an example where you wanna display a paragraph. Something like this.

Developed and implemented a Visual Studio Code extension that streamlined project onboarding processes, reducing setup time by 60% and enhancing productivity for 1,500+ developers across multiple product teams.

Developed a centralized onboarding platform that consolidated all pre-joining requirements for scholar programs, establishing a single source of truth that processes 150+ new graduates annually and reducing onboarding complexity by eliminating multiple touchpoints.

The json would look something like this.

{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "subsections": [{
          "heading": "SAP Labs India",
          "info": {
            "title": "Software Engineer",
            "sameLine": true
          },
          "metadata": {
            "duration": "July 2019 - Present",
            "location": "Bangalore, India"
          },
          "content": {
            "type": "paragraph",
            "items": [
              {
                "segments": [
                  {
                    "text": "Developed and implemented a Visual Studio Code extension that streamlined project onboarding processes, reducing setup time by 60% and enhancing productivity for 1,500+ developers across multiple product teams."
                  }
                ]
              },
              {
                "segments": [
                  {
                    "text": "Developed a centralized onboarding platform that consolidated all pre-joining requirements for scholar programs, establishing a single source of truth that processes 150+ new graduates annually and reducing onboarding complexity by eliminating multiple touchpoints."
                  }
                ]
              }
            ]
          }
        }]
      }
    ]
  }
}

Table

Let's say you have an awards section where you wanna display the awards in a table. Something like this.

2021 Award 1
2022 Award 2

Note

Ignore the weird table header formatting. It's just for the sake of understanding.

The json would look something like this.

{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "subsections": [{
          "heading": "SAP Labs India",
          "info": {
            "title": "Software Engineer",
            "sameLine": true
          },
          "metadata": {
            "duration": "July 2019 - Present",
            "location": "Bangalore, India"
          },
          "content": {
            "type": "table",
            "rows": [
              ["2021", "Award 1"],
              ["2022", "Award 2"]
            ]
          }
        }]
      }
    ]
  }
}

Note

The table is a simple table with rows only. More complex tables will be supported in the future.

Let's say you wanna add links to the list or paragraph. Something like this.

  1. You can connect me on LinkedIn.
  2. Here is my Github profile.

The json would look something like this.

{
  "firstName": "Rahul",
  "middleName": "",
  "lastName": "Agarwal",
  "links": [],
  "resume": {
    "sections": [
      {
        "heading": "Experience",
        "subsections": [{
          "heading": "SAP Labs India",
          "info": {
            "title": "Software Engineer",
            "sameLine": true
          },
          "metadata": {
            "duration": "July 2019 - Present",
            "location": "Bangalore, India"
          },
          "content": {
            "type": "list|paragraph",
            "items": [
              {
                "segments": [
                  {
                    "text": "You can connect me on"
                  },
                  {
                    "text": "LinkedIn",
                    "href": "https://www.linkedin.com/in/ragarwalll/",
                    "style": {
                      "bold": true
                    }
                  }
                ]
              },
              {
                "segments": [
                  {
                    "text": "Here is my"
                  },
                  {
                    "text": "Github",
                    "href": "https://www.github.com/ragarwalll"
                  },
                  {
                    "text": "profile.",
                  }
                ]
              }
            ]
          }
        }]
      }
    ]
  }
}