951 lines
26 KiB
Markdown
951 lines
26 KiB
Markdown
# CV Styling Guide - Robin Collins
|
||
## Professional Document Formatting Standards
|
||
|
||
---
|
||
|
||
## Table of Contents
|
||
1. [Design Philosophy](#design-philosophy)
|
||
2. [Color Palette](#color-palette)
|
||
3. [Typography Standards](#typography-standards)
|
||
4. [Required Imports](#required-imports)
|
||
5. [Document Structure](#document-structure)
|
||
6. [Style Definitions](#style-definitions)
|
||
7. [Content Formatting Patterns](#content-formatting-patterns)
|
||
8. [Complete Code Examples](#complete-code-examples)
|
||
|
||
---
|
||
|
||
## Design Philosophy
|
||
|
||
**Professional, Modern, Technology-Focused**
|
||
|
||
This CV styling emphasizes:
|
||
- **Calibri font** for modern, professional appearance with excellent screen and print readability
|
||
- **Professional blue accent color** (#11217B) for brand consistency and visual interest
|
||
- **Left-aligned headers** for contemporary, clean layout
|
||
- **Clear visual hierarchy** through typography, color, and spacing
|
||
- **Clickable contact links** for digital accessibility
|
||
- **Structured job/project titles** with consistent formatting for scannability
|
||
|
||
---
|
||
|
||
## Color Palette
|
||
|
||
### Primary Brand Color
|
||
```javascript
|
||
const BRAND_BLUE = "11217B"; // Professional navy blue
|
||
```
|
||
|
||
**Hex:** `#11217B`
|
||
**RGB:** `17, 33, 123`
|
||
**Usage:** Name, section headings, section borders, job titles, project names
|
||
|
||
### Neutral Colors
|
||
```javascript
|
||
const BLACK = "000000"; // Body text, standard information
|
||
```
|
||
|
||
**Usage:** Body text, company names, separators, dates, locations
|
||
|
||
### Standard Link Color
|
||
Use the built-in `"Hyperlink"` style for email and web links (typically blue with underline).
|
||
|
||
---
|
||
|
||
## Typography Standards
|
||
|
||
### Font Specifications
|
||
|
||
**Primary Font:** Calibri (throughout entire document)
|
||
|
||
```javascript
|
||
font: "Calibri"
|
||
```
|
||
|
||
**Why Calibri?**
|
||
- Modern, professional sans-serif font
|
||
- Excellent readability on screen and print
|
||
- Default Microsoft Office font (ensures consistency across systems)
|
||
- Clean, contemporary appearance suitable for technology professionals
|
||
|
||
### Font Sizing Hierarchy
|
||
|
||
| Element | Size (half-points) | Size (points) | Purpose |
|
||
|---------|-------------------|---------------|---------|
|
||
| Name | 66 | 33pt | Maximum visual impact for primary identifier |
|
||
| Section Headings | 28 | 14pt | Clear section delineation |
|
||
| Body Text (Default) | 22 | 11pt | Standard readable text |
|
||
| Job Titles | 22 | 11pt | Consistent with body but styled differently |
|
||
| Body Paragraphs | 21 | 10.5pt | Slightly smaller for better text density |
|
||
| Contact Info | 22 | 11pt | Readable, professional |
|
||
|
||
**Note:** docx library uses half-points (multiply point size × 2)
|
||
|
||
---
|
||
|
||
## Required Imports
|
||
|
||
Always include these imports at the start of your CV generation file:
|
||
|
||
```javascript
|
||
const {
|
||
Document,
|
||
Packer,
|
||
Paragraph,
|
||
TextRun,
|
||
AlignmentType,
|
||
LevelFormat,
|
||
BorderStyle,
|
||
ExternalHyperlink
|
||
} = require('docx');
|
||
const fs = require('fs');
|
||
```
|
||
|
||
**Key imports for CV styling:**
|
||
- `BorderStyle` - Required for section heading underlines
|
||
- `ExternalHyperlink` - Required for clickable email and GitHub links
|
||
- `LevelFormat` - Required for bullet list formatting
|
||
|
||
---
|
||
|
||
## Document Structure
|
||
|
||
### Default Document Settings
|
||
|
||
```javascript
|
||
const doc = new Document({
|
||
styles: {
|
||
default: {
|
||
document: {
|
||
run: { font: "Calibri", size: 22 }
|
||
}
|
||
},
|
||
paragraphStyles: [
|
||
// Style definitions go here
|
||
]
|
||
},
|
||
numbering: {
|
||
config: [
|
||
// Bullet list configuration
|
||
]
|
||
},
|
||
sections: [{
|
||
properties: {
|
||
page: {
|
||
margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 }
|
||
}
|
||
},
|
||
children: [
|
||
// Content goes here
|
||
]
|
||
}]
|
||
});
|
||
```
|
||
|
||
**Key settings:**
|
||
- Default font: Calibri, 11pt (22 half-points)
|
||
- Margins: 1 inch (1440 DXA) on all sides
|
||
- Standard letter page size (default)
|
||
|
||
---
|
||
|
||
## Style Definitions
|
||
|
||
### 1. Name Style
|
||
|
||
**Purpose:** Primary identifier at the top of CV
|
||
|
||
```javascript
|
||
{
|
||
id: "Name",
|
||
name: "Name",
|
||
basedOn: "Normal",
|
||
run: {
|
||
font: "Calibri",
|
||
size: 66, // 33pt - Large, impactful
|
||
bold: true,
|
||
color: "11217B" // Brand blue
|
||
},
|
||
paragraph: {
|
||
spacing: { after: 60 },
|
||
alignment: AlignmentType.LEFT
|
||
}
|
||
}
|
||
```
|
||
|
||
**Key characteristics:**
|
||
- Left-aligned (modern, professional layout)
|
||
- Large size (33pt) for maximum impact
|
||
- Brand blue color for visual identity
|
||
- Bold weight for emphasis
|
||
- Minimal spacing after (60)
|
||
|
||
**Usage:**
|
||
```javascript
|
||
new Paragraph({
|
||
style: "Name",
|
||
children: [new TextRun("ROBIN COLLINS")]
|
||
})
|
||
```
|
||
|
||
---
|
||
|
||
### 2. Contact Info Style
|
||
|
||
**Purpose:** Email, phone, GitHub links
|
||
|
||
```javascript
|
||
{
|
||
id: "ContactInfo",
|
||
name: "Contact Info",
|
||
basedOn: "Normal",
|
||
run: {
|
||
font: "Calibri",
|
||
size: 22 // 11pt - Standard size
|
||
},
|
||
paragraph: {
|
||
spacing: { after: 120 },
|
||
alignment: AlignmentType.LEFT
|
||
}
|
||
}
|
||
```
|
||
|
||
**Key characteristics:**
|
||
- Left-aligned (consistent with name)
|
||
- Standard size (11pt)
|
||
- More spacing after (120) to separate header from body
|
||
|
||
**Usage (with clickable links):**
|
||
```javascript
|
||
new Paragraph({
|
||
style: "ContactInfo",
|
||
children: [
|
||
new ExternalHyperlink({
|
||
children: [new TextRun({ text: "robin.f.collins@outlook.com", style: "Hyperlink" })],
|
||
link: "mailto:robin.f.collins@outlook.com"
|
||
}),
|
||
new TextRun(" | 0475 795 732 | "),
|
||
new ExternalHyperlink({
|
||
children: [new TextRun({ text: "github.com/robin-collins", style: "Hyperlink" })],
|
||
link: "https://github.com/robin-collins"
|
||
})
|
||
]
|
||
})
|
||
```
|
||
|
||
**Important:**
|
||
- Use `ExternalHyperlink` for clickable email (mailto:) and web links
|
||
- Use `style: "Hyperlink"` on TextRun within hyperlinks for standard link styling
|
||
- Separate elements with ` | ` (pipe character with spaces)
|
||
|
||
---
|
||
|
||
### 3. Section Heading Style
|
||
|
||
**Purpose:** Major section headers (PROFILE, CORE COMPETENCIES, etc.)
|
||
|
||
```javascript
|
||
{
|
||
id: "SectionHeading",
|
||
name: "Section Heading",
|
||
basedOn: "Normal",
|
||
run: {
|
||
font: "Calibri",
|
||
size: 28, // 14pt - Prominent but not overwhelming
|
||
bold: true,
|
||
color: "11217B" // Brand blue
|
||
},
|
||
paragraph: {
|
||
spacing: {
|
||
before: 200, // Space above for clear separation
|
||
after: 120 // Space below before content
|
||
},
|
||
border: {
|
||
bottom: {
|
||
color: "11217B", // Brand blue underline
|
||
space: 1,
|
||
style: BorderStyle.SINGLE,
|
||
size: 18 // Border thickness
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**Key characteristics:**
|
||
- Brand blue color for visual identity
|
||
- Bold weight for emphasis
|
||
- 14pt size for hierarchy
|
||
- **Bottom border in brand blue** - signature visual element
|
||
- Substantial spacing before (200) to separate sections
|
||
- Spacing after (120) before section content
|
||
|
||
**Usage:**
|
||
```javascript
|
||
new Paragraph({
|
||
style: "SectionHeading",
|
||
children: [new TextRun("PROFILE")]
|
||
})
|
||
```
|
||
|
||
**Visual effect:**
|
||
```
|
||
PROFILE
|
||
─────────────────────────────────────
|
||
(Blue underline extends across the text)
|
||
```
|
||
|
||
---
|
||
|
||
### 4. Job Title Style
|
||
|
||
**Purpose:** Job titles, company names, project titles (with custom internal formatting)
|
||
|
||
```javascript
|
||
{
|
||
id: "JobTitle",
|
||
name: "Job Title",
|
||
basedOn: "Normal",
|
||
run: {
|
||
font: "Calibri",
|
||
size: 22, // 11pt - Same as body
|
||
bold: true, // Default bold (overridden per TextRun)
|
||
color: "11217B" // Default brand blue (overridden per TextRun)
|
||
},
|
||
paragraph: {
|
||
spacing: {
|
||
before: 120, // Space above for separation from previous content
|
||
after: 60 // Space below before bullet points
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
**Key characteristics:**
|
||
- Style provides defaults (blue, bold) but individual TextRuns override
|
||
- Same size as body text (11pt)
|
||
- Spacing creates visual grouping with following bullet points
|
||
|
||
**Usage:** See [Job Title Formatting Pattern](#job-title-formatting-pattern) below
|
||
|
||
---
|
||
|
||
### 5. Body Style
|
||
|
||
**Purpose:** Body paragraphs, profile section, any standard text
|
||
|
||
```javascript
|
||
{
|
||
id: "Body",
|
||
name: "Body",
|
||
basedOn: "Normal",
|
||
run: {
|
||
font: "Calibri",
|
||
size: 21 // 10.5pt - Slightly smaller for better density
|
||
},
|
||
paragraph: {
|
||
spacing: { after: 100 },
|
||
alignment: AlignmentType.JUSTIFIED
|
||
}
|
||
}
|
||
```
|
||
|
||
**Key characteristics:**
|
||
- Slightly smaller (10.5pt) than default for better text density in paragraphs
|
||
- **Justified alignment** for professional, polished appearance
|
||
- Standard spacing after (100)
|
||
|
||
**Usage:**
|
||
```javascript
|
||
new Paragraph({
|
||
style: "Body",
|
||
children: [new TextRun("Your body text content here...")]
|
||
})
|
||
```
|
||
|
||
---
|
||
|
||
## Bullet List Configuration
|
||
|
||
**Purpose:** All bullet point lists throughout CV
|
||
|
||
```javascript
|
||
numbering: {
|
||
config: [
|
||
{
|
||
reference: "bullet-list",
|
||
levels: [{
|
||
level: 0,
|
||
format: LevelFormat.BULLET,
|
||
text: "•",
|
||
alignment: AlignmentType.LEFT,
|
||
style: {
|
||
paragraph: {
|
||
indent: {
|
||
left: 720, // 0.5 inch indent
|
||
hanging: 360 // 0.25 inch hanging indent
|
||
}
|
||
}
|
||
}
|
||
}]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
**Key settings:**
|
||
- Standard bullet character: `•`
|
||
- Left indent: 0.5 inch (720 DXA)
|
||
- Hanging indent: 0.25 inch (360 DXA)
|
||
- Use `LevelFormat.BULLET` constant (not string "bullet")
|
||
|
||
**Usage in content:**
|
||
```javascript
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [
|
||
new TextRun({ text: "Business Development & Technology Sales: ", bold: true }),
|
||
new TextRun("Description text here...")
|
||
]
|
||
})
|
||
```
|
||
|
||
**Pattern for competency/skill bullets:**
|
||
- **Bold label** followed by colon and space: `{ text: "Label: ", bold: true }`
|
||
- Regular text for description: `new TextRun("Description...")`
|
||
|
||
---
|
||
|
||
## Content Formatting Patterns
|
||
|
||
### Job Title Formatting Pattern
|
||
|
||
**Structure:** `Job Title | Company Name | Location | Dates`
|
||
|
||
**Formatting rules:**
|
||
1. **Job Title:** Bold, Brand Blue (#11217B)
|
||
2. **Separator:** ` | ` (pipe with spaces), Black (#000000)
|
||
3. **Company Name:** Bold, Black (#000000)
|
||
4. **Separator:** ` | ` (pipe with spaces), Black (#000000)
|
||
5. **Location:** Italic, Black (#000000)
|
||
6. **Separator:** ` | ` (pipe with spaces), Black (#000000)
|
||
7. **Dates:** Regular (no bold/italic), Black (#000000)
|
||
|
||
**Code template:**
|
||
```javascript
|
||
new Paragraph({
|
||
style: "JobTitle",
|
||
children: [
|
||
new TextRun({ text: "Job Title Text", bold: true, color: "11217B" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "Company Name", bold: true, color: "000000" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "Location", italics: true, color: "000000" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "Date Range", color: "000000" })
|
||
]
|
||
})
|
||
```
|
||
|
||
**Example 1 - Full format (Professional Experience):**
|
||
```javascript
|
||
new Paragraph({
|
||
style: "JobTitle",
|
||
children: [
|
||
new TextRun({ text: "Support Engineer", bold: true, color: "11217B" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "IRIST IT", bold: true, color: "000000" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "Adelaide SA", italics: true, color: "000000" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "2019", color: "000000" })
|
||
]
|
||
})
|
||
```
|
||
|
||
**Visual result:**
|
||
```
|
||
Support Engineer | IRIST IT | Adelaide SA | 2019
|
||
^^^^^^^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^ ^^^^
|
||
Bold Blue Bold Black Italic Black Regular Black
|
||
```
|
||
|
||
**Example 2 - Career break (no company/location):**
|
||
```javascript
|
||
new Paragraph({
|
||
style: "JobTitle",
|
||
children: [
|
||
new TextRun({ text: "Personal Leave", bold: true, color: "11217B" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "December 2017 – January 2025", color: "000000" })
|
||
]
|
||
})
|
||
```
|
||
|
||
---
|
||
|
||
### Project Title Formatting Pattern
|
||
|
||
**Structure:** `Project Name | Company/Organization | Dates`
|
||
|
||
**Formatting rules:**
|
||
1. **Project Name:** Bold, Brand Blue (#11217B)
|
||
2. **Separator:** ` | ` (pipe with spaces), Black (#000000)
|
||
3. **Company/Organization:** Bold, Black (#000000)
|
||
4. **Separator:** ` | ` (pipe with spaces), Black (#000000)
|
||
5. **Dates:** Italic, Black (#000000)
|
||
|
||
**Code template:**
|
||
```javascript
|
||
new Paragraph({
|
||
style: "JobTitle", // Uses JobTitle style
|
||
children: [
|
||
new TextRun({ text: "Project Name", bold: true, color: "11217B" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "Company or Organization", bold: true, color: "000000" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "Date Range", italics: true, color: "000000" })
|
||
]
|
||
})
|
||
```
|
||
|
||
**Example:**
|
||
```javascript
|
||
new Paragraph({
|
||
style: "JobTitle",
|
||
children: [
|
||
new TextRun({ text: "Healthcare IT Compliance & Support", bold: true, color: "11217B" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "Flaxmill Road Doctors Surgery", bold: true, color: "000000" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "2014-2017", italics: true, color: "000000" })
|
||
]
|
||
})
|
||
```
|
||
|
||
**Visual result:**
|
||
```
|
||
Healthcare IT Compliance & Support | Flaxmill Road Doctors Surgery | 2014-2017
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^
|
||
Bold Blue Bold Black Italic Black
|
||
```
|
||
|
||
**Note:** Projects use dates in italic to visually differentiate from job titles where dates are regular text.
|
||
|
||
---
|
||
|
||
### Competency/Skill Bullet Formatting Pattern
|
||
|
||
**Structure:** Bold label followed by colon, then description text
|
||
|
||
**Code template:**
|
||
```javascript
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [
|
||
new TextRun({ text: "Competency Label: ", bold: true }),
|
||
new TextRun("Detailed description and supporting information...")
|
||
]
|
||
})
|
||
```
|
||
|
||
**Example:**
|
||
```javascript
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [
|
||
new TextRun({ text: "Business Development & Technology Sales: ", bold: true }),
|
||
new TextRun("Proven success in B2B technology sales, pipeline generation through multi-channel outreach...")
|
||
]
|
||
})
|
||
```
|
||
|
||
**Visual result:**
|
||
```
|
||
• Business Development & Technology Sales: Proven success in B2B
|
||
technology sales, pipeline generation through multi-channel outreach...
|
||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||
Bold label with colon
|
||
```
|
||
|
||
---
|
||
|
||
### Technical Skills Bullet Formatting Pattern
|
||
|
||
**Structure:** Bold category label followed by colon, then technologies/tools
|
||
|
||
**Code template:**
|
||
```javascript
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [
|
||
new TextRun({ text: "Category Name: ", bold: true }),
|
||
new TextRun("Technology 1, Technology 2, Technology 3 | Tool A, Tool B")
|
||
]
|
||
})
|
||
```
|
||
|
||
**Example:**
|
||
```javascript
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [
|
||
new TextRun({ text: "AI/ML & Automation: ", bold: true }),
|
||
new TextRun("TensorFlow, PyTorch, Keras, Scikit-learn, OpenAI GPT, Anthropic Claude | Python, PowerShell, Bash scripting | Terraform, Ansible")
|
||
]
|
||
})
|
||
```
|
||
|
||
**Visual result:**
|
||
```
|
||
• AI/ML & Automation: TensorFlow, PyTorch, Keras, Scikit-learn,
|
||
OpenAI GPT, Anthropic Claude | Python, PowerShell, Bash scripting
|
||
^^^^^^^^^^^^^^^^^^^
|
||
Bold category
|
||
```
|
||
|
||
**Separator conventions:**
|
||
- Comma (`,`) - Between similar items in a list
|
||
- Pipe (`|`) - Between different sub-categories of tools/technologies
|
||
|
||
---
|
||
|
||
### Achievement Bullet Formatting Pattern
|
||
|
||
**Structure:** Plain text or text with emphasized portions
|
||
|
||
**Standard bullet (no emphasis):**
|
||
```javascript
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [new TextRun("Achievement or responsibility description...")]
|
||
})
|
||
```
|
||
|
||
**Bullet with emphasized metrics:**
|
||
```javascript
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [
|
||
new TextRun("Led critical EMOTET cyberattack response, developing comprehensive remediation strategy and restoring all affected systems within "),
|
||
new TextRun({ text: "12 hours", bold: true }),
|
||
new TextRun(" through expert crisis management")
|
||
]
|
||
})
|
||
```
|
||
|
||
**Usage guideline:**
|
||
- Most bullets are plain text
|
||
- Use inline bold for key metrics or critical outcomes
|
||
- Keep emphasis minimal for professional appearance
|
||
|
||
---
|
||
|
||
## Complete Code Examples
|
||
|
||
### Example 1: Complete Header Section
|
||
|
||
```javascript
|
||
// Header with name and contact info
|
||
new Paragraph({
|
||
style: "Name",
|
||
children: [new TextRun("ROBIN COLLINS")]
|
||
}),
|
||
new Paragraph({
|
||
style: "ContactInfo",
|
||
children: [
|
||
new ExternalHyperlink({
|
||
children: [new TextRun({ text: "robin.f.collins@outlook.com", style: "Hyperlink" })],
|
||
link: "mailto:robin.f.collins@outlook.com"
|
||
}),
|
||
new TextRun(" | 0475 795 732 | "),
|
||
new ExternalHyperlink({
|
||
children: [new TextRun({ text: "github.com/robin-collins", style: "Hyperlink" })],
|
||
link: "https://github.com/robin-collins"
|
||
})
|
||
]
|
||
}),
|
||
```
|
||
|
||
---
|
||
|
||
### Example 2: Complete Section with Content
|
||
|
||
```javascript
|
||
// Section heading
|
||
new Paragraph({
|
||
style: "SectionHeading",
|
||
children: [new TextRun("CORE COMPETENCIES")]
|
||
}),
|
||
|
||
// Competency bullets
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [
|
||
new TextRun({ text: "Business Development & Technology Sales: ", bold: true }),
|
||
new TextRun("Proven success in B2B technology sales, pipeline generation through multi-channel outreach (phone, email, face-to-face networking), and consultative selling approach.")
|
||
]
|
||
}),
|
||
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [
|
||
new TextRun({ text: "AI & Automation Expertise: ", bold: true }),
|
||
new TextRun("Deep hands-on knowledge of artificial intelligence, machine learning, and automation technologies.")
|
||
]
|
||
}),
|
||
```
|
||
|
||
---
|
||
|
||
### Example 3: Complete Job Entry
|
||
|
||
```javascript
|
||
// Job title with structured formatting
|
||
new Paragraph({
|
||
style: "JobTitle",
|
||
children: [
|
||
new TextRun({ text: "Support Engineer", bold: true, color: "11217B" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "IRIST IT", bold: true, color: "000000" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "Adelaide SA", italics: true, color: "000000" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "2019", color: "000000" })
|
||
]
|
||
}),
|
||
|
||
// Achievement bullets
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [new TextRun("Provided Level 1, 2, and 3 technical support, troubleshooting complex hardware, software, and network issues across diverse client environments")]
|
||
}),
|
||
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [new TextRun("Led critical EMOTET cyberattack response, developing comprehensive remediation strategy and restoring all affected systems within 12 hours")]
|
||
}),
|
||
```
|
||
|
||
---
|
||
|
||
### Example 4: Complete Project Entry
|
||
|
||
```javascript
|
||
// Project title with structured formatting
|
||
new Paragraph({
|
||
style: "JobTitle",
|
||
children: [
|
||
new TextRun({ text: "Healthcare IT Compliance & Support", bold: true, color: "11217B" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "Flaxmill Road Doctors Surgery", bold: true, color: "000000" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "2014-2017", italics: true, color: "000000" })
|
||
]
|
||
}),
|
||
|
||
// Project achievement bullets
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [new TextRun("Provided comprehensive IT consulting and compliance services, conducting audits and remediating PCEHR/MyHR compliance gaps within 3 months")]
|
||
}),
|
||
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [new TextRun("Implemented secure, centralized electronic health record system with robust backup/disaster recovery solutions")]
|
||
}),
|
||
```
|
||
|
||
---
|
||
|
||
## Document Generation and Export
|
||
|
||
### File Output
|
||
|
||
```javascript
|
||
// Generate document buffer and save to file
|
||
Packer.toBuffer(doc).then(buffer => {
|
||
fs.writeFileSync("Collins_Robin_CV_Enhanced_Technology_Sales.docx", buffer);
|
||
console.log("Updated CV created successfully");
|
||
});
|
||
```
|
||
|
||
**File naming convention:**
|
||
- Format: `Collins_Robin_CV_[Descriptor].docx`
|
||
- Example: `Collins_Robin_CV_Enhanced_Technology_Sales.docx`
|
||
- Use descriptive suffixes for different versions/purposes
|
||
|
||
---
|
||
|
||
## Style Application Guidelines
|
||
|
||
### When to Use Each Style
|
||
|
||
| Style | Usage | Example |
|
||
|-------|-------|---------|
|
||
| `Name` | Only for candidate name at top of document | ROBIN COLLINS |
|
||
| `ContactInfo` | Contact information line (email, phone, links) | Email \| Phone \| GitHub |
|
||
| `SectionHeading` | Major section headers | PROFILE, EXPERIENCE, SKILLS |
|
||
| `JobTitle` | Job titles, project titles, any structured titles | Job \| Company \| Location \| Dates |
|
||
| `Body` | Profile paragraphs, any narrative text blocks | Profile summary, descriptions |
|
||
| `numbering: bullet-list` | All bullet point lists | Skills, achievements, responsibilities |
|
||
|
||
### Consistency Rules
|
||
|
||
1. **Always specify font explicitly** in each style definition (`font: "Calibri"`)
|
||
2. **Always specify color explicitly** in job/project title TextRuns
|
||
3. **Use pipe separators consistently** (` | ` with spaces) in structured titles
|
||
4. **Apply bold to labels** in competency/skill bullets
|
||
5. **Use justified alignment** for body paragraphs only
|
||
6. **Use left alignment** for everything else (name, contact, headings, titles, bullets)
|
||
|
||
---
|
||
|
||
## Common Patterns Quick Reference
|
||
|
||
### Pattern 1: Section with Bullet Content
|
||
```javascript
|
||
new Paragraph({
|
||
style: "SectionHeading",
|
||
children: [new TextRun("SECTION NAME")]
|
||
}),
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [new TextRun({ text: "Label: ", bold: true }), new TextRun("Content...")]
|
||
}),
|
||
```
|
||
|
||
### Pattern 2: Job Entry
|
||
```javascript
|
||
new Paragraph({
|
||
style: "JobTitle",
|
||
children: [
|
||
new TextRun({ text: "Title", bold: true, color: "11217B" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "Company", bold: true, color: "000000" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "Location", italics: true, color: "000000" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "Dates", color: "000000" })
|
||
]
|
||
}),
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [new TextRun("Achievement...")]
|
||
}),
|
||
```
|
||
|
||
### Pattern 3: Project Entry
|
||
```javascript
|
||
new Paragraph({
|
||
style: "JobTitle",
|
||
children: [
|
||
new TextRun({ text: "Project Name", bold: true, color: "11217B" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "Organization", bold: true, color: "000000" }),
|
||
new TextRun({ text: " | ", color: "000000" }),
|
||
new TextRun({ text: "Dates", italics: true, color: "000000" }) // Note: Italic for projects
|
||
]
|
||
}),
|
||
new Paragraph({
|
||
numbering: { reference: "bullet-list", level: 0 },
|
||
children: [new TextRun("Project achievement...")]
|
||
}),
|
||
```
|
||
|
||
---
|
||
|
||
## Validation Checklist
|
||
|
||
Before generating final document, verify:
|
||
|
||
- [ ] All imports included (especially `BorderStyle`, `ExternalHyperlink`)
|
||
- [ ] Font set to `"Calibri"` in all style definitions
|
||
- [ ] Brand blue color (`"11217B"`) used consistently for name, headings, titles
|
||
- [ ] Section headings include bottom border
|
||
- [ ] Contact info includes clickable hyperlinks
|
||
- [ ] Job titles use structured 5-part format (Title | Company | Location | Dates)
|
||
- [ ] Project titles use structured 3-part format with italic dates
|
||
- [ ] All separators use ` | ` (pipe with spaces)
|
||
- [ ] Color specified explicitly in all TextRuns within job/project titles
|
||
- [ ] Bullet list uses `LevelFormat.BULLET` constant
|
||
- [ ] Body paragraphs use justified alignment
|
||
- [ ] Margins set to 1440 (1 inch) on all sides
|
||
|
||
---
|
||
|
||
## Version History
|
||
|
||
**Version 1.0** - November 3, 2025
|
||
- Initial style guide created
|
||
- Documented Calibri font standard
|
||
- Documented brand blue color (#11217B)
|
||
- Documented structured title formatting patterns
|
||
- Documented hyperlink usage in contact information
|
||
- Documented section heading border styling
|
||
|
||
---
|
||
|
||
## Notes for Future Updates
|
||
|
||
### Maintaining Consistency
|
||
- Always refer to this guide when creating new CV versions
|
||
- Update this guide if making any intentional style changes
|
||
- Keep code examples synchronized with current standards
|
||
|
||
### Adding New Sections
|
||
When adding new content sections:
|
||
1. Use existing style definitions (don't create new ones unless necessary)
|
||
2. Follow established formatting patterns for similar content
|
||
3. Maintain consistent spacing (before/after values)
|
||
4. Use appropriate bullet or paragraph format
|
||
|
||
### Customizing for Different Positions
|
||
To customize CV for different job applications:
|
||
- **Keep all styles unchanged** (consistency is key)
|
||
- Modify content order/emphasis in sections
|
||
- Adjust bullet point content and emphasis
|
||
- Keep visual design consistent for brand recognition
|
||
|
||
---
|
||
|
||
## Technical Reference
|
||
|
||
### DXA Units Conversion
|
||
- 1 inch = 1440 DXA (twentieths of a point)
|
||
- Common values:
|
||
- 720 DXA = 0.5 inch
|
||
- 360 DXA = 0.25 inch
|
||
- 1440 DXA = 1 inch
|
||
|
||
### Half-Point Font Sizes
|
||
- docx library uses half-points
|
||
- To convert: Point size × 2 = half-points
|
||
- Examples:
|
||
- 11pt = 22 half-points
|
||
- 14pt = 28 half-points
|
||
- 33pt = 66 half-points
|
||
|
||
### Color Format
|
||
- Use 6-character hex color codes (without #)
|
||
- Examples:
|
||
- `"11217B"` = Professional blue
|
||
- `"000000"` = Black
|
||
- `"FFFFFF"` = White
|
||
|
||
---
|
||
|
||
## Support and Questions
|
||
|
||
For questions or clarifications about this styling guide:
|
||
1. Refer to code examples in this document first
|
||
2. Check existing CV source files for implementation examples
|
||
3. Test changes in isolated code before applying to full document
|
||
4. Maintain backup of working version before major style updates
|
||
|
||
---
|
||
|
||
**Document maintained by:** Robin Collins
|
||
**Last updated:** November 3, 2025
|
||
**Purpose:** Standard reference for all CV document generation and updates
|