Skip to content

Naomi's Resume

Naomi’s Resume (hereinafter the β€œApplication”) is a static site generator that transforms a YAML or JSON resume source into a styled HTML resume website, along with downloadable formats. It is designed for easy customization and deployment, using TypeScript for parsing and rendering, and outputs a ready-to-host static site.

1. User Documentation

The Application generates a professional, accessible resume website from structured data. The live website displays:

Features

  • Responsive Design: Mobile-friendly layout that works on all devices
  • Print-Optimized: Print or save as PDF with optimized styling
  • Multiple Formats: Download resume data in YAML or JSON format
  • Professional Sections: Employment, volunteer work, education, certifications, projects, and publications
  • Navigation Links: Quick jump links to different resume sections
  • Contact Integration: Direct links to testimonials and contact forms

Using the Resume Website

  1. Browse Sections: Use the navigation links to jump to specific sections (Employment, Education, etc.)
  2. Download Data: Click β€œYAML” or β€œJSON” links to download the resume in structured formats
  3. Print/Save PDF: Click the β€œprint” link to open browser print dialog for PDF saving
  4. Contact: Use the β€œsubmit your own request” link to contact for opportunities

Resume Sections

  • Employment: Current and past positions with company details, dates, and descriptions
  • Volunteer Work: Community involvement and volunteer positions
  • Education: Academic background and certifications
  • Certifications: Professional certifications and credentials
  • Projects: Notable projects and achievements
  • Publications: Articles, papers, and published works

2. Technical Documentation

The Resume Builder is a Node.js-based static site generator that transforms YAML resume data into a complete website.

Architecture

  • TypeScript Parser: src/parse.ts - Main build script that processes YAML data
  • Data Schema: src/interfaces/resume.ts - TypeScript interfaces defining resume structure
  • Source Data: src/source.yaml - YAML file containing all resume information
  • Static Assets: src/static/ - CSS styles and JavaScript for the generated site
  • Output: site/ - Generated HTML, CSS, JS, YAML, and JSON files

Requirements

  • Node.js (latest LTS recommended)
  • pnpm package manager
  • TypeScript support via tsx

Installation & Setup

Terminal window
# Clone the repository
git clone <repository-url>
cd resume
# Install dependencies
pnpm install
# Build the site
pnpm run build

Available Scripts

  • pnpm run build - Generate the static site from YAML data
  • pnpm run lint - Run ESLint for code quality
  • pnpm run spelling - Check spelling in source.yaml
  • pnpm run test - Run validation tests

Data Structure

The resume data follows this schema:

  • name: Full name
  • contact: Contact information
  • summary: Professional summary
  • employment[]: Array of employment positions
  • volunteer[]: Array of volunteer positions
  • education[]: Array of educational background
  • certifications[]: Array of certifications
  • projects[]: Array of notable projects
  • publications[]: Array of publications

Customization

  1. Content: Edit src/source.yaml with your resume data
  2. Styling: Modify src/static/style.css for visual customization
  3. Structure: Update src/parse.ts to change HTML generation
  4. Types: Extend src/interfaces/resume.ts for new data fields

Deployment

The site/ directory contains all files needed for static hosting:

  • index.html - Main resume webpage
  • style.css - Styling
  • dates.js - JavaScript for date handling
  • resume.yaml - YAML format download
  • resume.json - JSON format download

Deploy to any static hosting service (Netlify, Vercel, GitHub Pages, etc.)

License

This software is licensed under Naomi’s Public License. Copyright held by Naomi Carrigan.

For complete legal terms, refer to:

Data Privacy

The resume website is a static site that:

  • Does not collect user data
  • Does not use cookies or tracking
  • Does not store personal information
  • Contains only publicly available professional information

Third-Party Services

The generated website may include links to external services:

  • Testimonials platform (testimonials.nhcarrigan.com)
  • Contact forms (forms.nhcarrigan.com)
  • External headers/scripts (cdn.nhcarrigan.com)

Users should review the privacy policies of any external services they choose to interact with.

4. Contributing Documentation

Getting Started

  1. Fork the repository
  2. Clone your fork locally
  3. Install dependencies: pnpm install
  4. Make your changes
  5. Test your changes: pnpm run build && pnpm run test && pnpm run lint && pnpm run spelling
  6. Submit a pull request

Contribution Guidelines

  • Read the Code of Conduct before participating
  • Follow the existing code style and conventions
  • Only modify src/source.yaml for content changes
  • Do not commit files in the site/ directory (auto-generated)
  • Ensure all tests pass before submitting
  • Provide clear commit messages and PR descriptions

Development Workflow

  1. Content Updates: Edit src/source.yaml with new resume information
  2. Code Changes: Modify TypeScript files in src/ directory
  3. Styling: Update CSS in src/static/style.css
  4. Testing: Add tests in test/ directory using Vitest
  5. Build: Run pnpm run build to generate the site

Quality Checks

All contributions must pass:

  • ESLint: Code quality and style checking
  • Spelling: cspell validation of YAML content
  • Tests: Vitest validation of data structure
  • Build: Successful site generation

Reporting Issues

  • Use GitHub Issues for bugs and feature requests
  • Provide detailed reproduction steps for bugs
  • Include relevant error messages and logs
  • Tag issues appropriately (bug, enhancement, documentation)

Contact

Project Structure

src/
β”œβ”€β”€ parse.ts # Main build script
β”œβ”€β”€ source.yaml # Resume data (edit this)
β”œβ”€β”€ interfaces/
β”‚ └── resume.ts # TypeScript type definitions
└── static/
β”œβ”€β”€ style.css # Website styling
└── dates.js # Date handling JavaScript
test/
└── validate.spec.ts # Validation tests
site/ # Generated output (do not edit)
β”œβ”€β”€ index.html
β”œβ”€β”€ style.css
β”œβ”€β”€ dates.js
β”œβ”€β”€ resume.yaml
└── resume.json