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.
- π Static CV (Data-Driven) - R-based CV generation with Google Sheets
- π Interactive CV - Modern web CV with animations
- π Deployment Options - GitHub Pages & hosting info
- π References & Attribution - Credits and inspiration
The main CV system using R and datadrivencv for professional, maintainable CV generation.
# Main generation script (recommended) - located at ./generate_cv.R
Rscript generate_cv.R
# Or use specific scripts
Rscript scripts/render_strayer_style_cv.RNote: The main generation script is generate_cv.R in the root directory.
- Live version: kyaneos.github.io/cv
- Local web version: Open
generated/latest.htmlin your browser - PDF version: Print the HTML to PDF using your browser
- Dated versions: Files are saved as
cv_YYYY-MM-DD.htmlingenerated/
- Edit your Google Sheets data
- Re-run the generation script
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
- 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
- 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
Your CV data is stored in 4 sheets:
| section | title | institution | location | start | end | description | in_resume |
|---|---|---|---|---|---|---|---|
| currently | Research Scientist | Sciminds @ UCSD | La Jolla CA | 2025 | Present | Lead projects... | TRUE |
| skill | level | details |
|---|---|---|
| Python | 4 | Data analysis, web development |
| loc | text |
|---|---|
| intro | Recent UCSD Psychology graduate... |
| loc | icon | contact |
|---|---|---|
| main | fas fa-envelope | jmoran@ucsd.edu |
Data Source: Google Sheets CV Data
- 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
Edit your Google Sheets data (easiest method):
- Main CV content: Google Sheets CV Data
- Add new entries to the
entriessheet - Update skills in the
language_skillssheet - Modify contact info in the
contact_infosheet - Edit intro text in the
text_blockssheet
Edit templates/justin_moran_cv_strayer_style.Rmd:
- 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}
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 */
}
/* Adjust spacing between sections */
.section {
margin-bottom: 2em; /* Change section spacing */
}@media print {
/* Styles that only apply to PDF */
.section {
page-break-inside: avoid; /* Prevent sections from breaking across pages */
}
}- Create new sheet in Google Sheets (e.g., "awards")
- Add to CV_printing_functions.R:
cv$awards <- read_gsheet(sheet_id = "awards")- Create print function for the new data type
- Add section to your template
Use the in_resume column in entries sheet:
TRUE: Appears in both CV and resume versionsFALSE: Only appears in full CV
Add new section values in your Google Sheets:
publications- for academic papersawards- for honors and awardspresentations- for talks and postersvolunteer- for volunteer work
::: {.col-container}
::: {.col-left}
Content for left column
:::
::: {.col-right}
Content for right column
:::
:::Force page breaks in PDF:
<!-- These breaks force a new page -->
<br>
<br>
<br><div class="highlight-box">
Important information in a highlighted box
</div>- Google Sheets: Add entries with
section = "publications" - 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'
))
- R (>= 4.0)
- Pandoc (for document conversion)
- Modern web browser (for PDF generation)
- Edit your Google Sheets data
- Run
Rscript generate_cv.R - Files are automatically updated in
generated/with date-stamped filenames - Use
generated/latest.htmlfor the most current version
Recommended method (for best results):
- Open
generated/latest.htmlin your browser - Press Cmd+P (macOS) or Ctrl+P (Windows)
- Select "Save as PDF"
- Choose "More settings" β Margins: None β Layout: Portrait
- Save as desired filename
- Current versions: Always use
generated/latest.htmlandgenerated/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
- 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
This CV system builds upon the excellent work by Nick Strayer:
- datadrivencv framework: https://github.com/nstrayer/datadrivencv
- Documentation: https://nickstrayer.me/datadrivencv/
- Design inspiration: https://nickstrayer.me/cv/
- 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
The interactive CV is located in the interactive/ directory and provides:
- 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
To modify the interactive CV:
- Edit content: Modify
interactive/index.htmldirectly - Styling: Update the CSS in the
<style>section - Functionality: Modify JavaScript in the
<script>section - Template: Use
interactive/cv-template.htmlas a starting template
- Static CV: Automatically deployed to
https://kyaneos.github.io/cv/ - Interactive CV: Automatically deployed to
https://kyaneos.github.io/cv/interactive/
- Upload HTML files from
generated/folder for static CV - Upload
interactive/folder for interactive CV - Update links as needed
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