GitHub Copilot Skill

resume-builder

Generate professional resumes that conform to the Reactive Resume schema. Use when the user wants to create, build, or generate a resume through conversational AI, or asks about resume structure, sections, or content. This skill guides the agent to ask clarifying questions, avoid

LLM Mart · 0 points · 13 views 33 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download amruthpillai-reactive-resume-skills_resume-builder-ad91a08.zip · 11 KB
Part of amruthpillai/reactive-resume — 3 skills

Install

skills CLI npx skills add https://github.com/amruthpillai/reactive-resume/tree/main/skills/resume-builder
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install amruthpillai-reactive-resume@llmmart
Git git clone https://github.com/amruthpillai/reactive-resume.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole amruthpillai/reactive-resume collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Resume Builder for Reactive Resume

Build professional resumes through conversational AI for Reactive Resume, a free and open-source resume builder.

Core Principles

  1. Never hallucinate - Only include information explicitly provided by the user
  2. Ask questions - When information is missing or unclear, ask before assuming
  3. Be concise - Use clear, direct language; avoid filler words
  4. Validate output - Ensure all generated JSON conforms to the schema

Workflow

MCP Application Tracking

Reactive Resume MCP can manage job applications as well as resumes. When the user wants to track applications through an agent, use the application tools instead of asking them to open the web UI.

  • Use list_applications before changing existing records.
  • Use create_application for one new opportunity or import_applications for spreadsheet/CSV rows.
  • Use update_application to move stages, archive/unarchive, edit contacts, set follow-ups, link a resume, or update job details.
  • Use add_application_note to log timeline activity.
  • Use attach_application_document and remove_application_document for sent resume or cover-letter PDFs.
  • Use score_application_match, tailor_resume_for_application, and draft_application_message for Application Copilot workflows after a linked resume and job description exist.
  • Review AI-generated cover letters and follow-ups before sending them.

Step 1: Gather Basic Information

Ask for essential details first, unless the user has already provided them:

  • Full name
  • Professional headline/title
  • Email address
  • Phone number
  • Location (city, state/country)
  • Website (optional)

Step 2: Collect Section Content

For each section the user wants to include, gather specific details. Never invent dates, company names, or achievements.

Experience: company, position, location, period (e.g., "Jan 2020 - Present"), description of responsibilities/achievements

Education: school, degree, area of study, grade (optional), location, period

Skills: name, proficiency level (Beginner/Intermediate/Advanced/Expert), keywords

Projects: name, period, website (optional), description

Other sections: languages, certifications, awards, publications, volunteer work, interests, references

Step 3: Configure Layout and Design

Ask about preferences:

  • Template preference (15 available: azurill, bronzor, chikorita, ditto, ditgar, gengar, glalie, kakuna, lapras, leafish, meowth, onyx, pikachu, rhyhorn, scizor)
  • Page format: A4 or Letter
  • Which sections to include and their order

Step 4: Generate Valid JSON

Output must conform to the Reactive Resume schema. See references/schema.md for the complete schema structure.

Key requirements:

  • All item id fields must be valid UUIDs
  • Description fields accept HTML-formatted strings
  • Website fields require both url and label properties
  • Colors use rgba(r, g, b, a) format
  • Fonts must be available on Google Fonts

Resume Writing Tips

Share these tips when helping users craft their resume content:

Content Guidelines

  • Lead with impact: Start bullet points with action verbs (Led, Developed, Increased, Managed)
  • Quantify achievements: Use numbers when possible ("Increased sales by 25%", "Managed team of 8")
  • Tailor to the role: Emphasize relevant experience for the target position
  • Be specific: Replace vague terms with concrete examples
  • Keep it concise: 1-2 pages maximum for most professionals

Section Order Recommendations

For most professionals:

  1. Summary (if experienced)
  2. Experience
  3. Education
  4. Skills
  5. Projects (if relevant)
  6. Certifications/Awards

For students/recent graduates:

  1. Education
  2. Projects
  3. Skills
  4. Experience (if any)
  5. Activities/Volunteer

Common Mistakes to Avoid

  • Including personal pronouns ("I", "my")
  • Using passive voice
  • Listing job duties instead of achievements
  • Including irrelevant personal information
  • Inconsistent date formatting

Output Format

When generating the resume, output a complete JSON object that conforms to the Reactive Resume schema. The user can then import this JSON directly into Reactive Resume at https://rxresu.me.

Example minimal structure:

{
  "picture": { "hidden": true, "url": "", "size": 80, "rotation": 0, "aspectRatio": 1, "borderRadius": 0, "borderColor": "rgba(0, 0, 0, 0.5)", "borderWidth": 0, "shadowColor": "rgba(0, 0, 0, 0.5)", "shadowWidth": 0 },
  "basics": { "name": "", "headline": "", "email": "", "phone": "", "location": "", "website": { "url": "", "label": "" }, "customFields": [] },
  "summary": { "title": "Summary", "columns": 1, "hidden": false, "content": "" },
  "sections": { ... },
  "customSections": [],
  "metadata": { "template": "onyx", "layout": { ... }, ... }
}

For the complete schema, see references/schema.md.

Asking Good Questions

When information is missing, ask specific questions:

  • "What was your job title at [Company]?"
  • "What dates did you work there? (e.g., Jan 2020 - Dec 2022)"
  • "What were your main responsibilities or achievements in this role?"
  • "Do you have a specific target role or industry in mind?"

Avoid compound questions. Ask one thing at a time for clarity.

Files (reactive-resume)
  • references
    • schema.md 105.1 KB
      # Reactive Resume Schema Reference
      
      Generated by `pnpm docs:gen` from `resumeDataSchema`. Do not edit this file directly.
      
      Canonical schema: https://rxresu.me/schema.json
      
      ## Required top-level fields
      
      `picture`, `basics`, `summary`, `sections`, `customSections`, and `metadata`
      
      ## Union variant shapes
      
      Choose one coherent shape for each union value. Required fields are local to that variant; optional fields remain in the field catalog.
      
      | Path | Type/variant | Item schema | Representative required shape |
      | --- | --- | --- | --- |
      | `customSections[]` | `summary` | `summaryItemSchema` | `{ id, hidden, content }` |
      | `customSections[]` | `profiles` | `profileItemSchema` | `{ id, hidden, icon, iconColor, network, username, website }` |
      | `customSections[]` | `experience` | `experienceItemSchema` | `{ id, hidden, company, position, location, period, website, description, roles }` |
      | `customSections[]` | `education` | `educationItemSchema` | `{ id, hidden, school, degree, area, grade, location, period, website, description }` |
      | `customSections[]` | `projects` | `projectItemSchema` | `{ id, hidden, name, period, website, description }` |
      | `customSections[]` | `skills` | `skillItemSchema` | `{ id, hidden, icon, iconColor, name, proficiency, level, keywords }` |
      | `customSections[]` | `languages` | `languageItemSchema` | `{ id, hidden, language, fluency, level }` |
      | `customSections[]` | `interests` | `interestItemSchema` | `{ id, hidden, icon, iconColor, name, keywords }` |
      | `customSections[]` | `awards` | `awardItemSchema` | `{ id, hidden, title, awarder, date, website, description }` |
      | `customSections[]` | `certifications` | `certificationItemSchema` | `{ id, hidden, title, issuer, date, website, description }` |
      | `customSections[]` | `publications` | `publicationItemSchema` | `{ id, hidden, title, publisher, date, website, description }` |
      | `customSections[]` | `volunteer` | `volunteerItemSchema` | `{ id, hidden, organization, location, period, website, description }` |
      | `customSections[]` | `references` | `referenceItemSchema` | `{ id, hidden, name, position, website, phone, description }` |
      | `customSections[]` | `cover-letter` | `coverLetterItemSchema` | `{ id, hidden, recipient, content }` |
      
      ## Field catalog
      
      | Path | Type | Required | Constraints and default | Description |
      | --- | --- | --- | --- | --- |
      | `picture` | `object` | yes | — | Configuration for photograph displayed on the resume |
      | `picture.hidden` | `boolean` | yes | — | Whether to hide the picture from the resume. |
      | `picture.fit` | `string` | no | enum: ["cover","contain"]; default: "cover" | How the picture fits its frame: cover crops overflow, while contain preserves the whole image. |
      | `picture.url` | `string` | yes | — | The URL to the picture to display on the resume. Prefer local app-served paths (for example /uploads/...) populated via upload. |
      | `picture.size` | `number` | yes | minimum: 32; maximum: 512 | The size of the picture to display on the resume, defined in points (pt). |
      | `picture.rotation` | `number` | yes | minimum: 0; maximum: 360 | The rotation of the picture to display on the resume, defined in degrees (°). |
      | `picture.aspectRatio` | `number` | yes | minimum: 0.5; maximum: 2.5 | The aspect ratio of the picture to display on the resume, defined as width / height (e.g. 1.5 for 1.5:1 or 0.5 for 1:2). |
      | `picture.borderRadius` | `number` | yes | minimum: 0; maximum: 100 | The border radius of the picture to display on the resume, defined in points (pt). |
      | `picture.borderColor` | `string` | yes | — | The color of the border of the picture to display on the resume, defined as rgba(r, g, b, a). |
      | `picture.borderWidth` | `number` | yes | minimum: 0 | The width of the border of the picture to display on the resume, defined in points (pt). |
      | `picture.shadowColor` | `string` | yes | — | The color of the shadow of the picture to display on the resume, defined as rgba(r, g, b, a). |
      | `picture.shadowWidth` | `number` | yes | minimum: 0 | The width of the shadow of the picture to display on the resume, defined in points (pt). |
      | `basics` | `object` | yes | — | Basic information about the author, such as name, email, phone, location, and website |
      | `basics.name` | `string` | yes | — | The full name of the author of the resume. |
      | `basics.headline` | `string` | yes | — | The headline of the author of the resume. |
      | `basics.email` | `string` | yes | — | The email address of the author of the resume. |
      | `basics.phone` | `string` | yes | — | The phone number of the author of the resume. |
      | `basics.location` | `string` | yes | — | The location of the author of the resume. |
      | `basics.website` | `object` | yes | — | The website of the author of the resume. |
      | `basics.website.url` | `string` | yes | — | The URL to show as a link. Must be a valid URL with a protocol (http:// or https://). |
      | `basics.website.label` | `string` | yes | — | The label to display for the URL. Leave blank to display the URL as-is. |
      | `basics.customFields` | `array` | yes | — | The custom fields to display on the resume. |
      | `basics.customFields[]` | `object` | — | — | — |
      | `basics.customFields[].id` | `string` | yes | — | The unique identifier for the custom field. Usually generated as a UUID. |
      | `basics.customFields[].icon` | `string` | yes | — | The icon to display for the custom field. Must be a valid icon name from @phosphor-icons/web icon set, or an empty string to hide. Default to '' (empty string) when unsure which icons are available. |
      | `basics.customFields[].text` | `string` | yes | — | The text to display for the custom field. |
      | `basics.customFields[].link` | `string` | yes | default: "" | If the custom field should be a link, the URL to link to. |
      | `summary` | `object` | yes | — | Summary section of the resume, useful for a short bio or introduction |
      | `summary.title` | `string` | yes | — | The title of the summary of the resume. |
      | `summary.icon` | `string` | yes | default: "" | Phosphor icon name to display before the summary section title in the PDF output. Empty string uses the default summary icon; 'none' hides the icon. |
      | `summary.columns` | `integer` | yes | minimum: 1; maximum: 6; default: 1 | The number of columns the summary should span across. |
      | `summary.hidden` | `boolean` | yes | — | Whether to hide the summary from the resume. |
      | `summary.showHeading` | `boolean` | no | default: true | Whether to show the summary heading, icon, and decoration while retaining summary content. |
      | `summary.keepTogether` | `boolean` | yes | default: false | If true, the summary is kept on a single page instead of splitting across a page break. |
      | `summary.startOnNewPage` | `boolean` | yes | default: false | If true, the summary always begins on a new page. |
      | `summary.content` | `string` | yes | — | The content of the summary of the resume. This should be a HTML-formatted string. |
      | `sections` | `object` | yes | — | Various sections of the resume, such as experience, education, projects, etc. |
      | `sections.profiles` | `object` | yes | — | The section to display the profiles of the author. |
      | `sections.profiles.title` | `string` | yes | — | The title of the section. |
      | `sections.profiles.icon` | `string` | yes | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `sections.profiles.columns` | `integer` | yes | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `sections.profiles.hidden` | `boolean` | yes | — | Whether to hide the section from the resume. |
      | `sections.profiles.showHeading` | `boolean` | no | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `sections.profiles.keepTogether` | `boolean` | yes | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `sections.profiles.startOnNewPage` | `boolean` | yes | default: false | If true, the section always begins on a new page. |
      | `sections.profiles.items` | `array` | yes | — | The items to display in the profiles section. |
      | `sections.profiles.items[]` | `object` | — | — | — |
      | `sections.profiles.items[].id` | `string` | yes | — | The unique identifier for the item. Usually generated as a UUID. |
      | `sections.profiles.items[].hidden` | `boolean` | yes | — | Whether to hide the item from the resume. |
      | `sections.profiles.items[].icon` | `string` | yes | — | The icon to display for the custom field. Must be a valid icon name from @phosphor-icons/web icon set, or an empty string to hide. Default to '' (empty string) when unsure which icons are available. |
      | `sections.profiles.items[].iconColor` | `string` | yes | default: "" | Custom color for the icon, defined as rgba(r, g, b, a). Leave blank to use the template default icon color. |
      | `sections.profiles.items[].network` | `string` | yes | minLength: 1 | The name of the network or platform. |
      | `sections.profiles.items[].username` | `string` | yes | — | The username of the author on the network or platform. |
      | `sections.profiles.items[].website` | `object` | yes | default: {"url":"","label":"","inlineLink":false} | The link to the profile of the author on the network or platform, if any. |
      | `sections.profiles.items[].website.url` | `string` | yes | — | The URL to show as a link. Must be a valid URL with a protocol (http:// or https://). |
      | `sections.profiles.items[].website.label` | `string` | yes | — | The label to display for the URL. Leave blank to display the URL as-is. |
      | `sections.profiles.items[].website.inlineLink` | `boolean` | yes | default: false | If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom. |
      | `sections.experience` | `object` | yes | — | The section to display the experience of the author. |
      | `sections.experience.title` | `string` | yes | — | The title of the section. |
      | `sections.experience.icon` | `string` | yes | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `sections.experience.columns` | `integer` | yes | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `sections.experience.hidden` | `boolean` | yes | — | Whether to hide the section from the resume. |
      | `sections.experience.showHeading` | `boolean` | no | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `sections.experience.keepTogether` | `boolean` | yes | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `sections.experience.startOnNewPage` | `boolean` | yes | default: false | If true, the section always begins on a new page. |
      | `sections.experience.items` | `array` | yes | — | The items to display in the experience section. |
      | `sections.experience.items[]` | `object` | — | — | — |
      | `sections.experience.items[].id` | `string` | yes | — | The unique identifier for the item. Usually generated as a UUID. |
      | `sections.experience.items[].hidden` | `boolean` | yes | — | Whether to hide the item from the resume. |
      | `sections.experience.items[].company` | `string` | yes | minLength: 1 | The name of the company or organization. |
      | `sections.experience.items[].position` | `string` | yes | — | The position held at the company or organization. Used when there is only a single role. If multiple roles are provided in the 'roles' field, this serves as a summary title or can be left blank. |
      | `sections.experience.items[].location` | `string` | yes | — | The location of the company or organization. |
      | `sections.experience.items[].period` | `string` | yes | — | The overall period of time at the company. When multiple roles are used, this should reflect the total tenure. |
      | `sections.experience.items[].website` | `object` | yes | default: {"url":"","label":"","inlineLink":false} | The website of the company or organization, if any. |
      | `sections.experience.items[].website.url` | `string` | yes | — | The URL to show as a link. Must be a valid URL with a protocol (http:// or https://). |
      | `sections.experience.items[].website.label` | `string` | yes | — | The label to display for the URL. Leave blank to display the URL as-is. |
      | `sections.experience.items[].website.inlineLink` | `boolean` | yes | default: false | If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom. |
      | `sections.experience.items[].description` | `string` | yes | — | The description of the experience. This should be a HTML-formatted string. |
      | `sections.experience.items[].roles` | `array` | yes | default: [] | List of individual roles held at this company to show career progression. |
      | `sections.experience.items[].roles[]` | `object` | — | — | — |
      | `sections.experience.items[].roles[].id` | `string` | yes | — | The unique identifier for the role. Usually generated as a UUID. |
      | `sections.experience.items[].roles[].position` | `string` | yes | — | The position or job title for this role. |
      | `sections.experience.items[].roles[].period` | `string` | yes | — | The period of time this role was held. |
      | `sections.experience.items[].roles[].description` | `string` | yes | — | The description of this specific role. This should be a HTML-formatted string. |
      | `sections.education` | `object` | yes | — | The section to display the education of the author. |
      | `sections.education.title` | `string` | yes | — | The title of the section. |
      | `sections.education.icon` | `string` | yes | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `sections.education.columns` | `integer` | yes | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `sections.education.hidden` | `boolean` | yes | — | Whether to hide the section from the resume. |
      | `sections.education.showHeading` | `boolean` | no | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `sections.education.keepTogether` | `boolean` | yes | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `sections.education.startOnNewPage` | `boolean` | yes | default: false | If true, the section always begins on a new page. |
      | `sections.education.items` | `array` | yes | — | The items to display in the education section. |
      | `sections.education.items[]` | `object` | — | — | — |
      | `sections.education.items[].id` | `string` | yes | — | The unique identifier for the item. Usually generated as a UUID. |
      | `sections.education.items[].hidden` | `boolean` | yes | — | Whether to hide the item from the resume. |
      | `sections.education.items[].school` | `string` | yes | minLength: 1 | The name of the school or institution. |
      | `sections.education.items[].degree` | `string` | yes | — | The degree or qualification obtained. |
      | `sections.education.items[].area` | `string` | yes | — | The area of study or specialization. |
      | `sections.education.items[].grade` | `string` | yes | — | The grade or score achieved. |
      | `sections.education.items[].location` | `string` | yes | — | The location of the school or institution. |
      | `sections.education.items[].period` | `string` | yes | — | The period of time the education was obtained over. |
      | `sections.education.items[].website` | `object` | yes | default: {"url":"","label":"","inlineLink":false} | The website of the school or institution, if any. |
      | `sections.education.items[].website.url` | `string` | yes | — | The URL to show as a link. Must be a valid URL with a protocol (http:// or https://). |
      | `sections.education.items[].website.label` | `string` | yes | — | The label to display for the URL. Leave blank to display the URL as-is. |
      | `sections.education.items[].website.inlineLink` | `boolean` | yes | default: false | If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom. |
      | `sections.education.items[].description` | `string` | yes | — | The description of the education. This should be a HTML-formatted string. |
      | `sections.projects` | `object` | yes | — | The section to display the projects of the author. |
      | `sections.projects.title` | `string` | yes | — | The title of the section. |
      | `sections.projects.icon` | `string` | yes | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `sections.projects.columns` | `integer` | yes | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `sections.projects.hidden` | `boolean` | yes | — | Whether to hide the section from the resume. |
      | `sections.projects.showHeading` | `boolean` | no | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `sections.projects.keepTogether` | `boolean` | yes | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `sections.projects.startOnNewPage` | `boolean` | yes | default: false | If true, the section always begins on a new page. |
      | `sections.projects.items` | `array` | yes | — | The items to display in the projects section. |
      | `sections.projects.items[]` | `object` | — | — | — |
      | `sections.projects.items[].id` | `string` | yes | — | The unique identifier for the item. Usually generated as a UUID. |
      | `sections.projects.items[].hidden` | `boolean` | yes | — | Whether to hide the item from the resume. |
      | `sections.projects.items[].name` | `string` | yes | minLength: 1 | The name of the project. |
      | `sections.projects.items[].period` | `string` | yes | — | The period of time the project was worked on. |
      | `sections.projects.items[].website` | `object` | yes | default: {"url":"","label":"","inlineLink":false} | The link to the project, if any. |
      | `sections.projects.items[].website.url` | `string` | yes | — | The URL to show as a link. Must be a valid URL with a protocol (http:// or https://). |
      | `sections.projects.items[].website.label` | `string` | yes | — | The label to display for the URL. Leave blank to display the URL as-is. |
      | `sections.projects.items[].website.inlineLink` | `boolean` | yes | default: false | If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom. |
      | `sections.projects.items[].description` | `string` | yes | — | The description of the project. This should be a HTML-formatted string. |
      | `sections.skills` | `object` | yes | — | The section to display the skills of the author. |
      | `sections.skills.title` | `string` | yes | — | The title of the section. |
      | `sections.skills.icon` | `string` | yes | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `sections.skills.columns` | `integer` | yes | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `sections.skills.hidden` | `boolean` | yes | — | Whether to hide the section from the resume. |
      | `sections.skills.showHeading` | `boolean` | no | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `sections.skills.keepTogether` | `boolean` | yes | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `sections.skills.startOnNewPage` | `boolean` | yes | default: false | If true, the section always begins on a new page. |
      | `sections.skills.items` | `array` | yes | — | The items to display in the skills section. |
      | `sections.skills.items[]` | `object` | — | — | — |
      | `sections.skills.items[].id` | `string` | yes | — | The unique identifier for the item. Usually generated as a UUID. |
      | `sections.skills.items[].hidden` | `boolean` | yes | — | Whether to hide the item from the resume. |
      | `sections.skills.items[].icon` | `string` | yes | — | The icon to display for the custom field. Must be a valid icon name from @phosphor-icons/web icon set, or an empty string to hide. Default to '' (empty string) when unsure which icons are available. |
      | `sections.skills.items[].iconColor` | `string` | yes | default: "" | Custom color for the icon, defined as rgba(r, g, b, a). Leave blank to use the template default icon color. |
      | `sections.skills.items[].name` | `string` | yes | minLength: 1 | The name of the skill. |
      | `sections.skills.items[].proficiency` | `string` | yes | — | The proficiency level of the skill. Can be any text, such as 'Beginner', 'Intermediate', 'Advanced', etc. |
      | `sections.skills.items[].level` | `number` | yes | minimum: 0; maximum: 5; default: 0 | The proficiency level of the skill, defined as a number between 0 and 5. If set to 0, the icons displaying the level will be hidden. |
      | `sections.skills.items[].keywords` | `array` | yes | default: [] | The keywords associated with the skill, if any. These are displayed as tags below the name. |
      | `sections.skills.items[].keywords[]` | `string` | — | — | — |
      | `sections.skills.keywordLayout` | `string` | no | enum: ["inline","list"]; default: "inline" | How skill keywords are displayed: inline separated by commas, or one bullet per keyword. |
      | `sections.skills.layout` | `string` | no | enum: ["default","inline"]; default: "default" | The layout style for skill items. 'inline' places item fields next to name |
      | `sections.languages` | `object` | yes | — | The section to display the languages of the author. |
      | `sections.languages.title` | `string` | yes | — | The title of the section. |
      | `sections.languages.icon` | `string` | yes | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `sections.languages.columns` | `integer` | yes | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `sections.languages.hidden` | `boolean` | yes | — | Whether to hide the section from the resume. |
      | `sections.languages.showHeading` | `boolean` | no | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `sections.languages.keepTogether` | `boolean` | yes | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `sections.languages.startOnNewPage` | `boolean` | yes | default: false | If true, the section always begins on a new page. |
      | `sections.languages.items` | `array` | yes | — | The items to display in the languages section. |
      | `sections.languages.items[]` | `object` | — | — | — |
      | `sections.languages.items[].id` | `string` | yes | — | The unique identifier for the item. Usually generated as a UUID. |
      | `sections.languages.items[].hidden` | `boolean` | yes | — | Whether to hide the item from the resume. |
      | `sections.languages.items[].language` | `string` | yes | minLength: 1 | The name of the language the author knows. |
      | `sections.languages.items[].fluency` | `string` | yes | — | The fluency level of the language. Can be any text, such as 'Native', 'Fluent', 'Conversational', etc. or can also be a CEFR level (A1, A2, B1, B2, C1, C2). |
      | `sections.languages.items[].level` | `number` | yes | minimum: 0; maximum: 5; default: 0 | The proficiency level of the language, defined as a number between 0 and 5. If set to 0, the icons displaying the level will be hidden. |
      | `sections.interests` | `object` | yes | — | The section to display the interests of the author. |
      | `sections.interests.title` | `string` | yes | — | The title of the section. |
      | `sections.interests.icon` | `string` | yes | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `sections.interests.columns` | `integer` | yes | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `sections.interests.hidden` | `boolean` | yes | — | Whether to hide the section from the resume. |
      | `sections.interests.showHeading` | `boolean` | no | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `sections.interests.keepTogether` | `boolean` | yes | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `sections.interests.startOnNewPage` | `boolean` | yes | default: false | If true, the section always begins on a new page. |
      | `sections.interests.items` | `array` | yes | — | The items to display in the interests section. |
      | `sections.interests.items[]` | `object` | — | — | — |
      | `sections.interests.items[].id` | `string` | yes | — | The unique identifier for the item. Usually generated as a UUID. |
      | `sections.interests.items[].hidden` | `boolean` | yes | — | Whether to hide the item from the resume. |
      | `sections.interests.items[].icon` | `string` | yes | — | The icon to display for the custom field. Must be a valid icon name from @phosphor-icons/web icon set, or an empty string to hide. Default to '' (empty string) when unsure which icons are available. |
      | `sections.interests.items[].iconColor` | `string` | yes | default: "" | Custom color for the icon, defined as rgba(r, g, b, a). Leave blank to use the template default icon color. |
      | `sections.interests.items[].name` | `string` | yes | minLength: 1 | The name of the interest/hobby. |
      | `sections.interests.items[].keywords` | `array` | yes | default: [] | The keywords associated with the interest/hobby, if any. These are displayed as tags below the name. |
      | `sections.interests.items[].keywords[]` | `string` | — | — | — |
      | `sections.awards` | `object` | yes | — | The section to display the awards of the author. |
      | `sections.awards.title` | `string` | yes | — | The title of the section. |
      | `sections.awards.icon` | `string` | yes | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `sections.awards.columns` | `integer` | yes | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `sections.awards.hidden` | `boolean` | yes | — | Whether to hide the section from the resume. |
      | `sections.awards.showHeading` | `boolean` | no | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `sections.awards.keepTogether` | `boolean` | yes | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `sections.awards.startOnNewPage` | `boolean` | yes | default: false | If true, the section always begins on a new page. |
      | `sections.awards.items` | `array` | yes | — | The items to display in the awards section. |
      | `sections.awards.items[]` | `object` | — | — | — |
      | `sections.awards.items[].id` | `string` | yes | — | The unique identifier for the item. Usually generated as a UUID. |
      | `sections.awards.items[].hidden` | `boolean` | yes | — | Whether to hide the item from the resume. |
      | `sections.awards.items[].title` | `string` | yes | minLength: 1 | The title of the award. |
      | `sections.awards.items[].awarder` | `string` | yes | — | The awarder of the award. |
      | `sections.awards.items[].date` | `string` | yes | — | The date when the award was received. |
      | `sections.awards.items[].website` | `object` | yes | default: {"url":"","label":"","inlineLink":false} | The website of the award, if any. |
      | `sections.awards.items[].website.url` | `string` | yes | — | The URL to show as a link. Must be a valid URL with a protocol (http:// or https://). |
      | `sections.awards.items[].website.label` | `string` | yes | — | The label to display for the URL. Leave blank to display the URL as-is. |
      | `sections.awards.items[].website.inlineLink` | `boolean` | yes | default: false | If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom. |
      | `sections.awards.items[].description` | `string` | yes | — | The description of the award. This should be a HTML-formatted string. |
      | `sections.certifications` | `object` | yes | — | The section to display the certifications of the author. |
      | `sections.certifications.title` | `string` | yes | — | The title of the section. |
      | `sections.certifications.icon` | `string` | yes | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `sections.certifications.columns` | `integer` | yes | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `sections.certifications.hidden` | `boolean` | yes | — | Whether to hide the section from the resume. |
      | `sections.certifications.showHeading` | `boolean` | no | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `sections.certifications.keepTogether` | `boolean` | yes | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `sections.certifications.startOnNewPage` | `boolean` | yes | default: false | If true, the section always begins on a new page. |
      | `sections.certifications.items` | `array` | yes | — | The items to display in the certifications section. |
      | `sections.certifications.items[]` | `object` | — | — | — |
      | `sections.certifications.items[].id` | `string` | yes | — | The unique identifier for the item. Usually generated as a UUID. |
      | `sections.certifications.items[].hidden` | `boolean` | yes | — | Whether to hide the item from the resume. |
      | `sections.certifications.items[].title` | `string` | yes | minLength: 1 | The title of the certification. |
      | `sections.certifications.items[].issuer` | `string` | yes | — | The issuer of the certification. |
      | `sections.certifications.items[].date` | `string` | yes | — | The date when the certification was received. |
      | `sections.certifications.items[].website` | `object` | yes | default: {"url":"","label":"","inlineLink":false} | The website of the certification, if any. |
      | `sections.certifications.items[].website.url` | `string` | yes | — | The URL to show as a link. Must be a valid URL with a protocol (http:// or https://). |
      | `sections.certifications.items[].website.label` | `string` | yes | — | The label to display for the URL. Leave blank to display the URL as-is. |
      | `sections.certifications.items[].website.inlineLink` | `boolean` | yes | default: false | If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom. |
      | `sections.certifications.items[].description` | `string` | yes | — | The description of the certification. This should be a HTML-formatted string. |
      | `sections.publications` | `object` | yes | — | The section to display the publications of the author. |
      | `sections.publications.title` | `string` | yes | — | The title of the section. |
      | `sections.publications.icon` | `string` | yes | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `sections.publications.columns` | `integer` | yes | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `sections.publications.hidden` | `boolean` | yes | — | Whether to hide the section from the resume. |
      | `sections.publications.showHeading` | `boolean` | no | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `sections.publications.keepTogether` | `boolean` | yes | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `sections.publications.startOnNewPage` | `boolean` | yes | default: false | If true, the section always begins on a new page. |
      | `sections.publications.items` | `array` | yes | — | The items to display in the publications section. |
      | `sections.publications.items[]` | `object` | — | — | — |
      | `sections.publications.items[].id` | `string` | yes | — | The unique identifier for the item. Usually generated as a UUID. |
      | `sections.publications.items[].hidden` | `boolean` | yes | — | Whether to hide the item from the resume. |
      | `sections.publications.items[].title` | `string` | yes | minLength: 1 | The title of the publication. |
      | `sections.publications.items[].publisher` | `string` | yes | — | The publisher of the publication. |
      | `sections.publications.items[].date` | `string` | yes | — | The date when the publication was published. |
      | `sections.publications.items[].website` | `object` | yes | default: {"url":"","label":"","inlineLink":false} | The link to the publication, if any. |
      | `sections.publications.items[].website.url` | `string` | yes | — | The URL to show as a link. Must be a valid URL with a protocol (http:// or https://). |
      | `sections.publications.items[].website.label` | `string` | yes | — | The label to display for the URL. Leave blank to display the URL as-is. |
      | `sections.publications.items[].website.inlineLink` | `boolean` | yes | default: false | If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom. |
      | `sections.publications.items[].description` | `string` | yes | — | The description of the publication. This should be a HTML-formatted string. |
      | `sections.volunteer` | `object` | yes | — | The section to display the volunteer experience of the author. |
      | `sections.volunteer.title` | `string` | yes | — | The title of the section. |
      | `sections.volunteer.icon` | `string` | yes | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `sections.volunteer.columns` | `integer` | yes | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `sections.volunteer.hidden` | `boolean` | yes | — | Whether to hide the section from the resume. |
      | `sections.volunteer.showHeading` | `boolean` | no | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `sections.volunteer.keepTogether` | `boolean` | yes | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `sections.volunteer.startOnNewPage` | `boolean` | yes | default: false | If true, the section always begins on a new page. |
      | `sections.volunteer.items` | `array` | yes | — | The items to display in the volunteer section. |
      | `sections.volunteer.items[]` | `object` | — | — | — |
      | `sections.volunteer.items[].id` | `string` | yes | — | The unique identifier for the item. Usually generated as a UUID. |
      | `sections.volunteer.items[].hidden` | `boolean` | yes | — | Whether to hide the item from the resume. |
      | `sections.volunteer.items[].organization` | `string` | yes | minLength: 1 | The name of the organization or company. |
      | `sections.volunteer.items[].location` | `string` | yes | — | The location of the organization or company. |
      | `sections.volunteer.items[].period` | `string` | yes | — | The period of time the author was volunteered at the organization or company. |
      | `sections.volunteer.items[].website` | `object` | yes | default: {"url":"","label":"","inlineLink":false} | The link to the organization or company, if any. |
      | `sections.volunteer.items[].website.url` | `string` | yes | — | The URL to show as a link. Must be a valid URL with a protocol (http:// or https://). |
      | `sections.volunteer.items[].website.label` | `string` | yes | — | The label to display for the URL. Leave blank to display the URL as-is. |
      | `sections.volunteer.items[].website.inlineLink` | `boolean` | yes | default: false | If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom. |
      | `sections.volunteer.items[].description` | `string` | yes | — | The description of the volunteer experience. This should be a HTML-formatted string. |
      | `sections.references` | `object` | yes | — | The section to display the references of the author. |
      | `sections.references.title` | `string` | yes | — | The title of the section. |
      | `sections.references.icon` | `string` | yes | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `sections.references.columns` | `integer` | yes | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `sections.references.hidden` | `boolean` | yes | — | Whether to hide the section from the resume. |
      | `sections.references.showHeading` | `boolean` | no | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `sections.references.keepTogether` | `boolean` | yes | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `sections.references.startOnNewPage` | `boolean` | yes | default: false | If true, the section always begins on a new page. |
      | `sections.references.items` | `array` | yes | — | The items to display in the references section. |
      | `sections.references.items[]` | `object` | — | — | — |
      | `sections.references.items[].id` | `string` | yes | — | The unique identifier for the item. Usually generated as a UUID. |
      | `sections.references.items[].hidden` | `boolean` | yes | — | Whether to hide the item from the resume. |
      | `sections.references.items[].name` | `string` | yes | minLength: 1 | The name of the reference, or a note such as 'Available upon request'. |
      | `sections.references.items[].position` | `string` | yes | — | The position or job title of the reference. |
      | `sections.references.items[].website` | `object` | yes | default: {"url":"","label":"","inlineLink":false} | The website or LinkedIn profile of the reference, if any. |
      | `sections.references.items[].website.url` | `string` | yes | — | The URL to show as a link. Must be a valid URL with a protocol (http:// or https://). |
      | `sections.references.items[].website.label` | `string` | yes | — | The label to display for the URL. Leave blank to display the URL as-is. |
      | `sections.references.items[].website.inlineLink` | `boolean` | yes | default: false | If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom. |
      | `sections.references.items[].phone` | `string` | yes | — | The phone number of the reference. |
      | `sections.references.items[].description` | `string` | yes | — | The description of the reference. Can be used to display a quote, a testimonial, etc. This should be a HTML-formatted string. |
      | `customSections` | `array` | yes | — | Custom sections of the resume, such as a custom section for notes, etc. |
      | `customSections[]` | `object or object or object or object or object or object or object or object or object or object or object or object or object or object` | — | — | — |
      | `customSections[]` | `object` | — (type summary, schema summaryItemSchema at customSections[]) | — | — |
      | `customSections[].title` | `string` | yes (type summary, schema summaryItemSchema at customSections[]) | — | The title of the section. |
      | `customSections[].icon` | `string` | yes (type summary, schema summaryItemSchema at customSections[]) | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `customSections[].columns` | `integer` | yes (type summary, schema summaryItemSchema at customSections[]) | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `customSections[].hidden` | `boolean` | yes (type summary, schema summaryItemSchema at customSections[]) | — | Whether to hide the section from the resume. |
      | `customSections[].showHeading` | `boolean` | no (type summary, schema summaryItemSchema at customSections[]) | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `customSections[].keepTogether` | `boolean` | yes (type summary, schema summaryItemSchema at customSections[]) | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `customSections[].startOnNewPage` | `boolean` | yes (type summary, schema summaryItemSchema at customSections[]) | default: false | If true, the section always begins on a new page. |
      | `customSections[].keywordLayout` | `any` | no (type summary, schema summaryItemSchema at customSections[]) | — | — |
      | `customSections[].id` | `string` | yes (type summary, schema summaryItemSchema at customSections[]) | — | The unique identifier for the custom section. Usually generated as a UUID. |
      | `customSections[].type` | `string` | yes (type summary, schema summaryItemSchema at customSections[]) | — | The type of items this custom section contains. Determines which item schema and form fields to use. |
      | `customSections[].items` | `array` | yes (type summary, schema summaryItemSchema at customSections[]) | — | The items to display in the custom section. Items follow the schema of the section type. |
      | `customSections[].items[]` | `object` | — (type summary, schema summaryItemSchema at customSections[]) | — | — |
      | `customSections[].items[].id` | `string` | yes (type summary, schema summaryItemSchema at customSections[]) | — | The unique identifier for the item. Usually generated as a UUID. |
      | `customSections[].items[].hidden` | `boolean` | yes (type summary, schema summaryItemSchema at customSections[]) | — | Whether to hide the item from the resume. |
      | `customSections[].items[].content` | `string` | yes (type summary, schema summaryItemSchema at customSections[]) | — | The rich text content of the summary item. This should be a HTML-formatted string. |
      | `customSections[]` | `object` | — (type profiles, schema profileItemSchema at customSections[]) | — | — |
      | `customSections[].title` | `string` | yes (type profiles, schema profileItemSchema at customSections[]) | — | The title of the section. |
      | `customSections[].icon` | `string` | yes (type profiles, schema profileItemSchema at customSections[]) | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `customSections[].columns` | `integer` | yes (type profiles, schema profileItemSchema at customSections[]) | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `customSections[].hidden` | `boolean` | yes (type profiles, schema profileItemSchema at customSections[]) | — | Whether to hide the section from the resume. |
      | `customSections[].showHeading` | `boolean` | no (type profiles, schema profileItemSchema at customSections[]) | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `customSections[].keepTogether` | `boolean` | yes (type profiles, schema profileItemSchema at customSections[]) | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `customSections[].startOnNewPage` | `boolean` | yes (type profiles, schema profileItemSchema at customSections[]) | default: false | If true, the section always begins on a new page. |
      | `customSections[].keywordLayout` | `any` | no (type profiles, schema profileItemSchema at customSections[]) | — | — |
      | `customSections[].id` | `string` | yes (type profiles, schema profileItemSchema at customSections[]) | — | The unique identifier for the custom section. Usually generated as a UUID. |
      | `customSections[].type` | `string` | yes (type profiles, schema profileItemSchema at customSections[]) | — | The type of items this custom section contains. Determines which item schema and form fields to use. |
      | `customSections[].items` | `array` | yes (type profiles, schema profileItemSchema at customSections[]) | — | The items to display in the custom section. Items follow the schema of the section type. |
      | `customSections[].items[]` | `object` | — (type profiles, schema profileItemSchema at customSections[]) | — | — |
      | `customSections[].items[].id` | `string` | yes (type profiles, schema profileItemSchema at customSections[]) | — | The unique identifier for the item. Usually generated as a UUID. |
      | `customSections[].items[].hidden` | `boolean` | yes (type profiles, schema profileItemSchema at customSections[]) | — | Whether to hide the item from the resume. |
      | `customSections[].items[].icon` | `string` | yes (type profiles, schema profileItemSchema at customSections[]) | — | The icon to display for the custom field. Must be a valid icon name from @phosphor-icons/web icon set, or an empty string to hide. Default to '' (empty string) when unsure which icons are available. |
      | `customSections[].items[].iconColor` | `string` | yes (type profiles, schema profileItemSchema at customSections[]) | default: "" | Custom color for the icon, defined as rgba(r, g, b, a). Leave blank to use the template default icon color. |
      | `customSections[].items[].network` | `string` | yes (type profiles, schema profileItemSchema at customSections[]) | minLength: 1 | The name of the network or platform. |
      | `customSections[].items[].username` | `string` | yes (type profiles, schema profileItemSchema at customSections[]) | — | The username of the author on the network or platform. |
      | `customSections[].items[].website` | `object` | yes (type profiles, schema profileItemSchema at customSections[]) | default: {"url":"","label":"","inlineLink":false} | The link to the profile of the author on the network or platform, if any. |
      | `customSections[].items[].website.url` | `string` | yes (type profiles, schema profileItemSchema at customSections[]) | — | The URL to show as a link. Must be a valid URL with a protocol (http:// or https://). |
      | `customSections[].items[].website.label` | `string` | yes (type profiles, schema profileItemSchema at customSections[]) | — | The label to display for the URL. Leave blank to display the URL as-is. |
      | `customSections[].items[].website.inlineLink` | `boolean` | yes (type profiles, schema profileItemSchema at customSections[]) | default: false | If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom. |
      | `customSections[]` | `object` | — (type experience, schema experienceItemSchema at customSections[]) | — | — |
      | `customSections[].title` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | — | The title of the section. |
      | `customSections[].icon` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `customSections[].columns` | `integer` | yes (type experience, schema experienceItemSchema at customSections[]) | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `customSections[].hidden` | `boolean` | yes (type experience, schema experienceItemSchema at customSections[]) | — | Whether to hide the section from the resume. |
      | `customSections[].showHeading` | `boolean` | no (type experience, schema experienceItemSchema at customSections[]) | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `customSections[].keepTogether` | `boolean` | yes (type experience, schema experienceItemSchema at customSections[]) | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `customSections[].startOnNewPage` | `boolean` | yes (type experience, schema experienceItemSchema at customSections[]) | default: false | If true, the section always begins on a new page. |
      | `customSections[].keywordLayout` | `any` | no (type experience, schema experienceItemSchema at customSections[]) | — | — |
      | `customSections[].id` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | — | The unique identifier for the custom section. Usually generated as a UUID. |
      | `customSections[].type` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | — | The type of items this custom section contains. Determines which item schema and form fields to use. |
      | `customSections[].items` | `array` | yes (type experience, schema experienceItemSchema at customSections[]) | — | The items to display in the custom section. Items follow the schema of the section type. |
      | `customSections[].items[]` | `object` | — (type experience, schema experienceItemSchema at customSections[]) | — | — |
      | `customSections[].items[].id` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | — | The unique identifier for the item. Usually generated as a UUID. |
      | `customSections[].items[].hidden` | `boolean` | yes (type experience, schema experienceItemSchema at customSections[]) | — | Whether to hide the item from the resume. |
      | `customSections[].items[].company` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | minLength: 1 | The name of the company or organization. |
      | `customSections[].items[].position` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | — | The position held at the company or organization. Used when there is only a single role. If multiple roles are provided in the 'roles' field, this serves as a summary title or can be left blank. |
      | `customSections[].items[].location` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | — | The location of the company or organization. |
      | `customSections[].items[].period` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | — | The overall period of time at the company. When multiple roles are used, this should reflect the total tenure. |
      | `customSections[].items[].website` | `object` | yes (type experience, schema experienceItemSchema at customSections[]) | default: {"url":"","label":"","inlineLink":false} | The website of the company or organization, if any. |
      | `customSections[].items[].website.url` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | — | The URL to show as a link. Must be a valid URL with a protocol (http:// or https://). |
      | `customSections[].items[].website.label` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | — | The label to display for the URL. Leave blank to display the URL as-is. |
      | `customSections[].items[].website.inlineLink` | `boolean` | yes (type experience, schema experienceItemSchema at customSections[]) | default: false | If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom. |
      | `customSections[].items[].description` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | — | The description of the experience. This should be a HTML-formatted string. |
      | `customSections[].items[].roles` | `array` | yes (type experience, schema experienceItemSchema at customSections[]) | default: [] | List of individual roles held at this company to show career progression. |
      | `customSections[].items[].roles[]` | `object` | — (type experience, schema experienceItemSchema at customSections[]) | — | — |
      | `customSections[].items[].roles[].id` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | — | The unique identifier for the role. Usually generated as a UUID. |
      | `customSections[].items[].roles[].position` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | — | The position or job title for this role. |
      | `customSections[].items[].roles[].period` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | — | The period of time this role was held. |
      | `customSections[].items[].roles[].description` | `string` | yes (type experience, schema experienceItemSchema at customSections[]) | — | The description of this specific role. This should be a HTML-formatted string. |
      | `customSections[]` | `object` | — (type education, schema educationItemSchema at customSections[]) | — | — |
      | `customSections[].title` | `string` | yes (type education, schema educationItemSchema at customSections[]) | — | The title of the section. |
      | `customSections[].icon` | `string` | yes (type education, schema educationItemSchema at customSections[]) | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `customSections[].columns` | `integer` | yes (type education, schema educationItemSchema at customSections[]) | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `customSections[].hidden` | `boolean` | yes (type education, schema educationItemSchema at customSections[]) | — | Whether to hide the section from the resume. |
      | `customSections[].showHeading` | `boolean` | no (type education, schema educationItemSchema at customSections[]) | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `customSections[].keepTogether` | `boolean` | yes (type education, schema educationItemSchema at customSections[]) | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `customSections[].startOnNewPage` | `boolean` | yes (type education, schema educationItemSchema at customSections[]) | default: false | If true, the section always begins on a new page. |
      | `customSections[].keywordLayout` | `any` | no (type education, schema educationItemSchema at customSections[]) | — | — |
      | `customSections[].id` | `string` | yes (type education, schema educationItemSchema at customSections[]) | — | The unique identifier for the custom section. Usually generated as a UUID. |
      | `customSections[].type` | `string` | yes (type education, schema educationItemSchema at customSections[]) | — | The type of items this custom section contains. Determines which item schema and form fields to use. |
      | `customSections[].items` | `array` | yes (type education, schema educationItemSchema at customSections[]) | — | The items to display in the custom section. Items follow the schema of the section type. |
      | `customSections[].items[]` | `object` | — (type education, schema educationItemSchema at customSections[]) | — | — |
      | `customSections[].items[].id` | `string` | yes (type education, schema educationItemSchema at customSections[]) | — | The unique identifier for the item. Usually generated as a UUID. |
      | `customSections[].items[].hidden` | `boolean` | yes (type education, schema educationItemSchema at customSections[]) | — | Whether to hide the item from the resume. |
      | `customSections[].items[].school` | `string` | yes (type education, schema educationItemSchema at customSections[]) | minLength: 1 | The name of the school or institution. |
      | `customSections[].items[].degree` | `string` | yes (type education, schema educationItemSchema at customSections[]) | — | The degree or qualification obtained. |
      | `customSections[].items[].area` | `string` | yes (type education, schema educationItemSchema at customSections[]) | — | The area of study or specialization. |
      | `customSections[].items[].grade` | `string` | yes (type education, schema educationItemSchema at customSections[]) | — | The grade or score achieved. |
      | `customSections[].items[].location` | `string` | yes (type education, schema educationItemSchema at customSections[]) | — | The location of the school or institution. |
      | `customSections[].items[].period` | `string` | yes (type education, schema educationItemSchema at customSections[]) | — | The period of time the education was obtained over. |
      | `customSections[].items[].website` | `object` | yes (type education, schema educationItemSchema at customSections[]) | default: {"url":"","label":"","inlineLink":false} | The website of the school or institution, if any. |
      | `customSections[].items[].website.url` | `string` | yes (type education, schema educationItemSchema at customSections[]) | — | The URL to show as a link. Must be a valid URL with a protocol (http:// or https://). |
      | `customSections[].items[].website.label` | `string` | yes (type education, schema educationItemSchema at customSections[]) | — | The label to display for the URL. Leave blank to display the URL as-is. |
      | `customSections[].items[].website.inlineLink` | `boolean` | yes (type education, schema educationItemSchema at customSections[]) | default: false | If true, the website URL is rendered as a hyperlink on the title instead of a separate link at the bottom. |
      | `customSections[].items[].description` | `string` | yes (type education, schema educationItemSchema at customSections[]) | — | The description of the education. This should be a HTML-formatted string. |
      | `customSections[]` | `object` | — (type projects, schema projectItemSchema at customSections[]) | — | — |
      | `customSections[].title` | `string` | yes (type projects, schema projectItemSchema at customSections[]) | — | The title of the section. |
      | `customSections[].icon` | `string` | yes (type projects, schema projectItemSchema at customSections[]) | default: "" | Phosphor icon name to display before the section title in the PDF output. Empty string uses the default section icon; 'none' hides the icon. |
      | `customSections[].columns` | `integer` | yes (type projects, schema projectItemSchema at customSections[]) | minimum: 1; maximum: 6; default: 1 | The number of columns the section should span across. |
      | `customSections[].hidden` | `boolean` | yes (type projects, schema projectItemSchema at customSections[]) | — | Whether to hide the section from the resume. |
      | `customSections[].showHeading` | `boolean` | no (type projects, schema projectItemSchema at customSections[]) | default: true | Whether to show the section heading, icon, and decoration while retaining section content. |
      | `customSections[].keepTogether` | `boolean` | yes (type projects, schema projectItemSchema at customSections[]) | default: false | If true, the section is kept on a single page instead of splitting across a page break. |
      | `customSections[].startOnNewPage` | `boolean` | yes (type projects, schema projectItemSchema at customSections[]) | default: false | If true, the section always begins on a new page. |
      | `customSections[].keywordLayout` | `any` | no (type projects, schema projectItemSchema at customSections[]) | — | — |
      | `customSections[].id` | `string` | yes (type projects, schema projectItemSchema at customSections[])
  • SKILL.md 5.6 KB
    ---
    name: resume-builder
    description: Generate professional resumes that conform to the Reactive Resume schema. Use when the user wants to create, build, or generate a resume through conversational AI, or asks about resume structure, sections, or content. This skill guides the agent to ask clarifying questions, avoid hallucination, and produce valid JSON output for https://rxresu.me.
    ---
    
    # Resume Builder for Reactive Resume
    
    Build professional resumes through conversational AI for [Reactive Resume](https://rxresu.me), a free and open-source resume builder.
    
    ## Core Principles
    
    1. **Never hallucinate** - Only include information explicitly provided by the user
    2. **Ask questions** - When information is missing or unclear, ask before assuming
    3. **Be concise** - Use clear, direct language; avoid filler words
    4. **Validate output** - Ensure all generated JSON conforms to the schema
    
    ## Workflow
    
    ### MCP Application Tracking
    
    Reactive Resume MCP can manage job applications as well as resumes. When the user wants to track applications through an agent, use the application tools instead of asking them to open the web UI.
    
    - Use `list_applications` before changing existing records.
    - Use `create_application` for one new opportunity or `import_applications` for spreadsheet/CSV rows.
    - Use `update_application` to move stages, archive/unarchive, edit contacts, set follow-ups, link a resume, or update job details.
    - Use `add_application_note` to log timeline activity.
    - Use `attach_application_document` and `remove_application_document` for sent resume or cover-letter PDFs.
    - Use `score_application_match`, `tailor_resume_for_application`, and `draft_application_message` for Application Copilot workflows after a linked resume and job description exist.
    - Review AI-generated cover letters and follow-ups before sending them.
    
    ### Step 1: Gather Basic Information
    
    Ask for essential details first, unless the user has already provided them:
    
    - Full name
    - Professional headline/title
    - Email address
    - Phone number
    - Location (city, state/country)
    - Website (optional)
    
    ### Step 2: Collect Section Content
    
    For each section the user wants to include, gather specific details. Never invent dates, company names, or achievements.
    
    **Experience**: company, position, location, period (e.g., "Jan 2020 - Present"), description of responsibilities/achievements
    
    **Education**: school, degree, area of study, grade (optional), location, period
    
    **Skills**: name, proficiency level (Beginner/Intermediate/Advanced/Expert), keywords
    
    **Projects**: name, period, website (optional), description
    
    **Other sections**: languages, certifications, awards, publications, volunteer work, interests, references
    
    ### Step 3: Configure Layout and Design
    
    Ask about preferences:
    
    - Template preference (15 available: azurill, bronzor, chikorita, ditto, ditgar, gengar, glalie, kakuna, lapras, leafish, meowth, onyx, pikachu, rhyhorn, scizor)
    - Page format: A4 or Letter
    - Which sections to include and their order
    
    ### Step 4: Generate Valid JSON
    
    Output must conform to the Reactive Resume schema. See [references/schema.md](references/schema.md) for the complete schema structure.
    
    Key requirements:
    
    - All item `id` fields must be valid UUIDs
    - Description fields accept HTML-formatted strings
    - Website fields require both `url` and `label` properties
    - Colors use `rgba(r, g, b, a)` format
    - Fonts must be available on Google Fonts
    
    ## Resume Writing Tips
    
    Share these tips when helping users craft their resume content:
    
    ### Content Guidelines
    
    - **Lead with impact**: Start bullet points with action verbs (Led, Developed, Increased, Managed)
    - **Quantify achievements**: Use numbers when possible ("Increased sales by 25%", "Managed team of 8")
    - **Tailor to the role**: Emphasize relevant experience for the target position
    - **Be specific**: Replace vague terms with concrete examples
    - **Keep it concise**: 1-2 pages maximum for most professionals
    
    ### Section Order Recommendations
    
    For most professionals:
    
    1. Summary (if experienced)
    2. Experience
    3. Education
    4. Skills
    5. Projects (if relevant)
    6. Certifications/Awards
    
    For students/recent graduates:
    
    1. Education
    2. Projects
    3. Skills
    4. Experience (if any)
    5. Activities/Volunteer
    
    ### Common Mistakes to Avoid
    
    - Including personal pronouns ("I", "my")
    - Using passive voice
    - Listing job duties instead of achievements
    - Including irrelevant personal information
    - Inconsistent date formatting
    
    ## Output Format
    
    When generating the resume, output a complete JSON object that conforms to the Reactive Resume schema. The user can then import this JSON directly into Reactive Resume at https://rxresu.me.
    
    Example minimal structure:
    
    ```json
    {
      "picture": { "hidden": true, "url": "", "size": 80, "rotation": 0, "aspectRatio": 1, "borderRadius": 0, "borderColor": "rgba(0, 0, 0, 0.5)", "borderWidth": 0, "shadowColor": "rgba(0, 0, 0, 0.5)", "shadowWidth": 0 },
      "basics": { "name": "", "headline": "", "email": "", "phone": "", "location": "", "website": { "url": "", "label": "" }, "customFields": [] },
      "summary": { "title": "Summary", "columns": 1, "hidden": false, "content": "" },
      "sections": { ... },
      "customSections": [],
      "metadata": { "template": "onyx", "layout": { ... }, ... }
    }
    ```
    
    For the complete schema, see [references/schema.md](references/schema.md).
    
    ## Asking Good Questions
    
    When information is missing, ask specific questions:
    
    - "What was your job title at [Company]?"
    - "What dates did you work there? (e.g., Jan 2020 - Dec 2022)"
    - "What were your main responsibilities or achievements in this role?"
    - "Do you have a specific target role or industry in mind?"
    
    Avoid compound questions. Ask one thing at a time for clarity.
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related