Skip to content

Latest commit

Β 

History

59 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Justin Moran's CV Repository

This repository contains two CV systems:

πŸ“„ Static CV (Main) - kyaneos.github.io/cv

A professional data-driven CV built with R and datadrivencv, inspired by Nick Strayer's design.

πŸš€ Interactive CV - kyaneos.github.io/cv/interactive

A modern interactive CV website with dark/light mode, animations, and dynamic content.

πŸ“‹ Table of Contents


πŸ“„ Static CV (Data-Driven)

The main CV system using R and datadrivencv for professional, maintainable CV generation.

πŸš€ Quick Start

1. Generate Your CV

# Main generation script (recommended) - located at ./generate_cv.R
Rscript generate_cv.R

# Or use specific scripts
Rscript scripts/render_strayer_style_cv.R

Note: The main generation script is generate_cv.R in the root directory.

2. View Your CV

  • Live version: kyaneos.github.io/cv
  • Local web version: Open generated/latest.html in your browser
  • PDF version: Print the HTML to PDF using your browser
  • Dated versions: Files are saved as cv_YYYY-MM-DD.html in generated/

3. Update Content

πŸ“ File Structure

cv/
β”œβ”€β”€ README.md                           # This documentation
β”œβ”€β”€ generate_cv.R                       # ⭐ Main CV generation script
β”œβ”€β”€ google_sheets_data.txt              # Template data for Google Sheets
β”‚
β”œβ”€β”€ templates/                          # CV templates
β”‚   β”œβ”€β”€ justin_moran_cv_strayer_style.Rmd  # ⭐ Main CV template (Strayer design)
β”‚   └── cv_basic.Rmd                    # Basic CV template
β”‚
β”œβ”€β”€ scripts/                            # Generation scripts
β”‚   β”œβ”€β”€ render_strayer_style_cv.R       # Strayer-style CV generator
β”‚   └── render_basic_cv.R               # Basic CV generator
β”‚
β”œβ”€β”€ generated/                          # Output files (auto-generated)
β”‚   β”œβ”€β”€ latest.html                     # ⭐ Current web CV (symlink)
β”‚   β”œβ”€β”€ latest_pdf.html                 # Current PDF-optimized version (symlink)
β”‚   β”œβ”€β”€ cv_YYYY-MM-DD.html              # Date-stamped web versions
β”‚   β”œβ”€β”€ cv_YYYY-MM-DD_pdf.html          # Date-stamped PDF versions
β”‚   └── *.pdf                           # PDF versions
β”‚
└── datadrivencv/                       # CV framework
    β”œβ”€β”€ CV_printing_functions.R         # Core CV functions
    β”œβ”€β”€ dd_cv.css                       # CV styling
    └── cv.Rmd                          # Original Strayer template

🎯 Features

  • Data-driven: Content stored in Google Sheets for easy updates
  • Professional design: Inspired by Nick Strayer's CV layout
  • Academic format: Sections optimized for research positions
  • Responsive: Works on desktop and mobile devices
  • Easy maintenance: Update data in sheets, regenerate instantly
  • Automatic file management: Date-stamped versions with old file cleanup

🎨 Academic Sections

  • Currently: Active research positions
  • Education and Training: Academic background and past positions
  • Manuscripts: Publications and in-preparation works
  • Open Scientific Software: Research tools and applications
  • Technical Skills: Programming, research, and domain expertise

πŸ“Š Google Sheets Data Structure

Your CV data is stored in 4 sheets:

Sheet 1: "entries"

section title institution location start end description in_resume
currently Research Scientist Sciminds @ UCSD La Jolla CA 2025 Present Lead projects... TRUE

Sheet 2: "language_skills"

skill level details
Python 4 Data analysis, web development

Sheet 3: "text_blocks"

loc text
intro Recent UCSD Psychology graduate...

Sheet 4: "contact_info"

loc icon contact
main fas fa-envelope jmoran@ucsd.edu

Data Source: Google Sheets CV Data

Formatting Tips

  • Line breaks: Use <br> in Google Sheets cells for line breaks
  • HTML formatting: You can use basic HTML formatting in Google Sheets (e.g., <strong>text</strong> for bold)
  • Multiple descriptions: Use separate columns description_1, description_2, etc. for automatic bullet points

πŸ”§ Customization Guide

πŸ“ Adding/Editing Content

Edit your Google Sheets data (easiest method):

  • Main CV content: Google Sheets CV Data
  • Add new entries to the entries sheet
  • Update skills in the language_skills sheet
  • Modify contact info in the contact_info sheet
  • Edit intro text in the text_blocks sheet

πŸ“‹ Adding New Sections

Edit templates/justin_moran_cv_strayer_style.Rmd:

  1. Add a new section anywhere in the Main section:
New Section Name {data-icon=your-icon}
--------------------------------------------------------------------------------

```{r}
CV <- CV |> print_section('your_section_name')

2. **Add the corresponding data** to your Google Sheets `entries` sheet:
   - Set `section` column to `your_section_name`
   - Add your entries with the new section name

3. **Available FontAwesome icons**: laptop, graduation-cap, book, code, suitcase, briefcase, award, star, etc.

### 🎨 Changing Section Titles

In `templates/justin_moran_cv_strayer_style.Rmd`, modify the section headers:

```markdown
<!-- Change this line -->
Education and Training {data-icon=graduation-cap data-concise=true}
<!-- To something like -->
Academic Background {data-icon=university data-concise=true}

πŸ“‘ Adding Margin Notes (Aside Blocks)

Add contextual information next to any section:

Your Section {data-icon=icon}
--------------------------------------------------------------------------------

::: aside
```{r}
if(params$pdf_mode){
  cat("This appears in the margin in PDF mode - helpful context about this section")
} else {
  cat("This appears in the sidebar in web mode - can include links or additional info")
}

:::

CV <- CV |> print_section('your_section')

### 🎭 Modifying the Sidebar

Edit the **Aside** section in `templates/justin_moran_cv_strayer_style.Rmd`:

#### Change Contact Info:
- Edit the `contact_info` sheet in Google Sheets
- Icons use FontAwesome format: `fas fa-envelope`, `fab fa-linkedin`, etc.

#### Modify Skills Display:
- Edit the `language_skills` sheet in Google Sheets  
- `level` column: 1-5 scale for skill bars
- `details` column: description text

#### Add Custom Sidebar Content:
```markdown
New Sidebar Section {#custom-section}
--------------------------------------------------------------------------------

```{r}
cat("Your custom sidebar content here")

### 🎨 Styling Customization

#### Colors and Fonts
Edit `datadrivencv/dd_cv.css`:

```css
/* Main color scheme */
:root {
  --main-color: #2c3e50;        /* Change primary color */
  --accent-color: #3498db;      /* Change accent color */  
  --text-color: #333;           /* Change text color */
}

/* Fonts */
body {
  font-family: 'Georgia', serif; /* Change main font */
}

Section Spacing

/* Adjust spacing between sections */
.section {
  margin-bottom: 2em; /* Change section spacing */
}

PDF-Specific Styling

@media print {
  /* Styles that only apply to PDF */
  .section {
    page-break-inside: avoid; /* Prevent sections from breaking across pages */
  }
}

πŸ“Š Advanced Data Management

Adding New Data Types

  1. Create new sheet in Google Sheets (e.g., "awards")
  2. Add to CV_printing_functions.R:
cv$awards <- read_gsheet(sheet_id = "awards")
  1. Create print function for the new data type
  2. Add section to your template

Filtering Content

Use the in_resume column in entries sheet:

  • TRUE: Appears in both CV and resume versions
  • FALSE: Only appears in full CV

Custom Entry Types

Add new section values in your Google Sheets:

  • publications - for academic papers
  • awards - for honors and awards
  • presentations - for talks and posters
  • volunteer - for volunteer work

πŸ”§ Layout Modifications

Two-Column Layout for Sections

::: {.col-container}
::: {.col-left}
Content for left column
:::
::: {.col-right}  
Content for right column
:::
:::

Page Breaks

Force page breaks in PDF:

<!-- These breaks force a new page -->
<br>
<br>
<br>

Custom HTML Elements

<div class="highlight-box">
Important information in a highlighted box
</div>

πŸš€ Advanced Customization Examples

Add Publications Section:

  1. Google Sheets: Add entries with section = "publications"
  2. Template:
Publications {data-icon=book-open}
--------------------------------------------------------------------------------

::: aside
```{r}
cat("Peer-reviewed publications and conference proceedings")

:::

CV <- CV |> print_section('publications')

#### Custom Skills Section:
```markdown
Programming Languages {data-icon=code}
--------------------------------------------------------------------------------

```{r}
# Custom skills display
skills_data <- CV$skills |> filter(skill_type == "programming")
for(i in 1:nrow(skills_data)) {
  cat(paste0("**", skills_data$skill[i], "**: ", skills_data$details[i], "\n\n"))
}

### 🎯 Pro Tips

- **Test changes**: Run `Rscript generate_cv.R` after each modification
- **Backup**: Keep a copy of your working template before major changes
- **Version control**: Use git to track changes to your templates
- **Responsive design**: Test both web and PDF versions after styling changes
- **Print preview**: Always check PDF output for proper formatting

## πŸ›  Technical Requirements

### R Packages
```r
install.packages(c(
  'rmarkdown',
  'pagedown', 
  'googlesheets4',
  'readr',
  'stringr',
  'dplyr',
  'tidyr',
  'lubridate',
  'glue'
))

System Dependencies

  • R (>= 4.0)
  • Pandoc (for document conversion)
  • Modern web browser (for PDF generation)

πŸ“ Usage Notes

Updating Content

  1. Edit your Google Sheets data
  2. Run Rscript generate_cv.R
  3. Files are automatically updated in generated/ with date-stamped filenames
  4. Use generated/latest.html for the most current version

PDF Generation

Recommended method (for best results):

  1. Open generated/latest.html in your browser
  2. Press Cmd+P (macOS) or Ctrl+P (Windows)
  3. Select "Save as PDF"
  4. Choose "More settings" β†’ Margins: None β†’ Layout: Portrait
  5. Save as desired filename

File Management

  • Current versions: Always use generated/latest.html and generated/latest_pdf.html
  • Dated versions: Files are automatically saved as cv_YYYY-MM-DD.html
  • Automatic cleanup: Old files are automatically removed (keeps 10 most recent)
  • Recent files: The script displays the 6 most recent files when run

Troubleshooting

  • Google Sheets access: Ensure sheet is set to "Anyone with link can view"
  • Missing packages: Install all required R packages listed above
  • Generation errors: Check that Google Sheets has all 4 required sheets with correct names

πŸ“š References & Attribution

This CV system builds upon the excellent work by Nick Strayer:

Key Features Adapted

  • Professional sidebar layout with contact info and skills
  • Section icons using FontAwesome
  • Aside blocks for contextual information
  • Clean academic styling
  • Data-driven content management from Google Sheets

πŸš€ Interactive CV

The interactive CV is located in the interactive/ directory and provides:

✨ Features

  • Dark/Light mode toggle with smooth transitions
  • Scroll animations - sections fade in as you scroll
  • Interactive skills - click categories to filter skills
  • Responsive design - works on desktop and mobile
  • Modern styling - clean, professional appearance

πŸ”§ Customization

To modify the interactive CV:

  1. Edit content: Modify interactive/index.html directly
  2. Styling: Update the CSS in the <style> section
  3. Functionality: Modify JavaScript in the <script> section
  4. Template: Use interactive/cv-template.html as a starting template

🌐 Live URLs


πŸš€ Deployment Options

GitHub Pages (Current Setup)

  • Static CV: Automatically deployed to https://kyaneos.github.io/cv/
  • Interactive CV: Automatically deployed to https://kyaneos.github.io/cv/interactive/

Personal Website

  • Upload HTML files from generated/ folder for static CV
  • Upload interactive/ folder for interactive CV
  • Update links as needed

🀝 Contributing

This is a personal CV repository, but feel free to:

  • Fork for your own use
  • Submit issues for bugs
  • Suggest improvements
  • Share adaptations

Last updated: September 2025
Built with: datadrivencv, R, RMarkdown, Google Sheets
Inspired by: Nick Strayer's CV design and framework

Releases

Packages

Contributors

Languages