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": "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",
"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
}
],
}
- Required. Defines the text that will be displayed for the link.
- Required. Defines the URL that the link will redirect to.
- Optional. Defines the column in which the link will be displayed. Default is
1
. - Optionally define that the link will be displayed in the
second column
.
Visual Specifics
- 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.
- 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)
}
- 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)
}
]
}
}
- Required. Defines the heading of the section.
{
"firstName": "Rahul",
"middleName": "",
"lastName": "Agarwal",
"links": [],
"resume": {
"sections": [
{
"heading": "Experience",
"subsections": [] // (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)
}
]
}
}
- 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)
}
]
}
}
- 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)
}
]
}
}
- 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)
}]
}
]
}
}
- 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)
}
}]
}
]
}
}
- Required. You can use it to define anything, mostly you current role(s) is advisable.
- 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)
}
}]
}
]
}
}
- Optional. You can use it to define anything, mostly the duration is advisable.
- 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)
}]
}
]
}
}
- 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)
}
}]
}
]
}
}
- 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)
}
}
}]
}
]
}
}
- 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.
- 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": "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.
- 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."
}
]
}
]
}
}]
}
]
}
}
- Optional. Defines if the text should be displayed in bold. Default is
false
. - Optional. Defines if the text should be displayed in underline. Default is
false
.
Following are the supported styles.
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"
]
}
]
},
]
}
}]
}
]
}
}
- 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.
Additional: Links¶
Let's say you wanna add links to the list or paragraph. Something like this.
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.",
}
]
}
]
}
}]
}
]
}
}