7 Commits

12 changed files with 321 additions and 314 deletions

View File

@@ -60,14 +60,6 @@ jobs:
cv.tex
latexmk_use_xelatex: false
- name: Delete existing tag
continue-on-error: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git tag -d latest || true
git push origin :refs/tags/latest || true
- name: Upload Public PDFs as Release
uses: softprops/action-gh-release@v1
with:
@@ -78,6 +70,26 @@ jobs:
tag_name: latest
body: |
Latest version of resume and CV (public version)
This release is automatically updated with each push to main. For versioned releases, see the numbered releases.
prerelease: false
draft: false
fail_on_unmatched_files: true
generate_release_notes: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# Create a numbered release for version history
- name: Create Numbered Release
uses: softprops/action-gh-release@v1
with:
files: |
resume.pdf
cv.pdf
name: Release ${{ github.run_number }}
tag_name: release-${{ github.run_number }}
body: |
Version ${{ github.run_number }} of resume and CV (public version)
prerelease: false
draft: false
fail_on_unmatched_files: true

120
README.md
View File

@@ -1,77 +1,73 @@
# LaTeX Resume and CV Template
# Resume & CV Generator
This repository contains a LaTeX template for creating both a resume and an extended CV. The template is designed to handle both public and private versions of your documents, making it perfect for sharing on GitHub while keeping sensitive information private.
A LaTeX-based resume and CV generator with automated builds for both public and private versions. This repository serves two purposes:
1. An actively maintained resume/CV using modern CI/CD practices
2. A template that anyone can fork and customize for their own use
## Features
## Overview
- Clean, professional LaTeX template for both resume and CV
- Handles sensitive information securely using GitHub Secrets
- Automated PDF generation using GitHub Actions
- BibTeX integration for publications
- Public and private versions of documents
This project demonstrates professional DevOps practices while providing a beautiful LaTeX resume:
- Automated builds via GitHub Actions for continuous deployment
- Secure handling of sensitive information through environment variables
- Containerized local development with Docker
- Clean separation of content and styling
## Setup
## Latest PDFs
1. Fork this repository
2. For public use:
- The default `personal_info.tex` will be used with placeholder information
- Customize by editing `personal_info.tex` with your public information
3. For private use:
- Copy `personal_info_template.tex` to `personal_info_private.tex`
- Fill in your private information in `personal_info_private.tex`
- Add your sensitive information as GitHub Secrets (see below)
The most recent public versions are always available at:
- Resume: `https://github.com/USERNAME/resume-cv/releases/download/latest/resume.pdf`
- CV: `https://github.com/USERNAME/resume-cv/releases/download/latest/cv.pdf`
## GitHub Secrets
Replace `USERNAME` with your GitHub username after forking.
To handle sensitive information in GitHub Actions, add these secrets to your repository:
- `PERSONAL_EMAIL`: Your primary email address
- `PERSONAL_PHONE`: Your phone number
- `PERSONAL_SCHOOL_EMAIL`: Your school email address
- `PERSONAL_HOME_ADDRESS`: Your home address (multi-line)
- `PERSONAL_SCHOOL_ADDRESS`: Your school address (multi-line)
## Local Development
1. Clone the repository
2. For public version:
- Use the existing `personal_info.tex`
3. For private version:
- Create `personal_info_private.tex` from the template
- Add your private information
4. Compile using:
```bash
# For initial compilation
pdflatex document.tex
# If you have bibliography
bibtex document
# Run twice more for references
pdflatex document.tex
pdflatex document.tex
```
Replace `document.tex` with either `cv.tex` or `resume.tex`
## GitHub Actions
The workflow automatically:
- Builds public versions of both resume and CV on every push
- Creates private versions if you're the repository owner
- Uploads both versions as artifacts
## Directory Structure
## Project Structure
```
.
├── cv.tex # Extended CV template
├── resume.tex # Resume template
├── personal_info.tex # Public information (committed)
├── personal_info_template.tex # Template for private info
├── personal_info_private.tex # Private information (git-ignored)
├── cv.tex # Extended CV template
├── resume.tex # Resume template (subset of CV)
├── shared/ # Shared components
│ ├── style/ # Common LaTeX styles
│ │ └── common.tex # Shared style definitions
│ └── sections/ # Shared content sections
│ ├── header.tex # Contact information
│ ├── education.tex
│ ├── skills.tex
│ ├── coursework.tex
│ └── publications.tex
├── .secrets # Personal information (git-ignored)
├── build-local.sh # Local build script
└── subfiles/
└── refs.bib # BibTeX references
└── refs.bib # BibTeX references
```
## Using as a Template
1. Fork this repository
2. Copy `.secrets-template` to `.secrets` and fill in your personal information
3. Run `./build-local.sh` to generate both public and private versions
- Public version omits sensitive information like phone and address
- Private version includes all personal details from `.secrets`
- The script automatically generates and cleans up temporary files
## Modifying Content
The project uses a modular structure to avoid duplication:
- Common sections are stored in `shared/sections/`
- Styling is defined in `shared/style/common.tex`
- The resume is a subset of the CV, reusing shared components
- Add new sections by creating files in `shared/sections/` and including them with `\input{}`
## CI/CD Pipeline
The repository showcases modern DevOps practices through GitHub Actions:
- Automated PDF generation on every push
- Public version published as GitHub release with stable URLs
- Private version securely generated for repository owner
- Environment variables managed through GitHub Secrets
You can see these practices in action by checking the [Actions tab](../../actions) and [Releases](../../releases).
## License
This template is available under the MIT License. Feel free to use and modify it for your own needs.
This template is available under the MIT License. Feel free to fork and customize it for your own needs.

88
build-docker.sh Executable file
View File

@@ -0,0 +1,88 @@
#!/bin/bash
# Source secrets if the file exists
if [ -f .secrets ]; then
source .secrets
else
echo "Warning: .secrets file not found. Building public version only."
fi
# Set defaults for missing variables
PERSONAL_NAME=${PERSONAL_NAME:-$(whoami)}
PERSONAL_EMAIL=${PERSONAL_EMAIL:-""}
PERSONAL_WEBSITE=${PERSONAL_WEBSITE:-""}
PERSONAL_SCHOOL_EMAIL=${PERSONAL_SCHOOL_EMAIL:-""}
PERSONAL_PHONE=${PERSONAL_PHONE:-""}
PERSONAL_HOME_ADDRESS_LINE1=${PERSONAL_HOME_ADDRESS_LINE1:-""}
PERSONAL_HOME_ADDRESS_LINE2=${PERSONAL_HOME_ADDRESS_LINE2:-""}
PERSONAL_SCHOOL_ADDRESS_LINE1=${PERSONAL_SCHOOL_ADDRESS_LINE1:-""}
PERSONAL_SCHOOL_ADDRESS_LINE2=${PERSONAL_SCHOOL_ADDRESS_LINE2:-""}
PERSONAL_SCHOOL_ADDRESS_LINE3=${PERSONAL_SCHOOL_ADDRESS_LINE3:-""}
# Function to cleanup
cleanup() {
rm -f *.aux *.log *.out *.fls *.fdb_latexmk *.synctex.gz *.bbl *.blg personal_info.tex
if [ -f personal_info.tex.bak ]; then
mv personal_info.tex.bak personal_info.tex
fi
}
trap cleanup EXIT
mkdir -p output
# Backup current personal_info.tex if it exists
if [ -f personal_info.tex ]; then
cp personal_info.tex personal_info.tex.bak
fi
# Build private version (if secrets are available)
if [ -n "$PERSONAL_PHONE" ] || [ -n "$PERSONAL_HOME_ADDRESS_LINE1" ] || [ -n "$PERSONAL_SCHOOL_ADDRESS_LINE1" ]; then
echo "Building private version..."
cat > personal_info.tex << EOL
% Private version of personal information
\newcommand{\personalName}{$PERSONAL_NAME}
\newcommand{\personalEmail}{$PERSONAL_EMAIL}
\newcommand{\personalPhone}{$PERSONAL_PHONE}
\newcommand{\personalWebsite}{$PERSONAL_WEBSITE}
\newcommand{\personalSchoolEmail}{$PERSONAL_SCHOOL_EMAIL}
\newcommand{\personalHomeAddressLineOne}{$PERSONAL_HOME_ADDRESS_LINE1}
\newcommand{\personalHomeAddressLineTwo}{$PERSONAL_HOME_ADDRESS_LINE2}
\newcommand{\personalSchoolAddressLineOne}{$PERSONAL_SCHOOL_ADDRESS_LINE1}
\newcommand{\personalSchoolAddressLineTwo}{$PERSONAL_SCHOOL_ADDRESS_LINE2}
\newcommand{\personalSchoolAddressLineThree}{$PERSONAL_SCHOOL_ADDRESS_LINE3}
EOL
docker build --platform linux/arm64 -t resume-builder .
docker run --platform linux/arm64 --rm \
-v "$(pwd):/workspace" \
-v "$(pwd)/output:/workspace/output" \
resume-builder bash -c "latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex cv.tex && mv *.pdf output/"
mv output/resume.pdf output/resume-private.pdf 2>/dev/null || true
mv output/cv.pdf output/cv-private.pdf 2>/dev/null || true
fi
# Build public version
echo "Building public version..."
cat > personal_info.tex << EOL
% Public version of personal information
\newcommand{\personalName}{$PERSONAL_NAME}
\newcommand{\personalEmail}{$PERSONAL_EMAIL}
\newcommand{\personalPhone}{~}
\newcommand{\personalWebsite}{$PERSONAL_WEBSITE}
\newcommand{\personalSchoolEmail}{$PERSONAL_SCHOOL_EMAIL}
\newcommand{\personalHomeAddressLineOne}{~}
\newcommand{\personalHomeAddressLineTwo}{~}
\newcommand{\personalSchoolAddressLineOne}{~}
\newcommand{\personalSchoolAddressLineTwo}{~}
\newcommand{\personalSchoolAddressLineThree}{~}
EOL
docker run --platform linux/arm64 --rm \
-v "$(pwd):/workspace" \
-v "$(pwd)/output:/workspace/output" \
resume-builder bash -c "latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex cv.tex && mv resume.pdf output/resume-public.pdf && mv cv.pdf output/cv-public.pdf"
echo "Build complete!"
echo "Generated files in output/:"
ls -l output/

View File

@@ -21,7 +21,7 @@ PERSONAL_SCHOOL_ADDRESS_LINE3=${PERSONAL_SCHOOL_ADDRESS_LINE3:-""}
# Function to cleanup
cleanup() {
rm -f *.aux *.log *.out *.fls *.fdb_latexmk *.synctex.gz *.bbl *.blg
rm -f *.aux *.log *.out *.fls *.fdb_latexmk *.synctex.gz *.bbl *.blg personal_info.tex
if [ -f personal_info.tex.bak ]; then
mv personal_info.tex.bak personal_info.tex
fi
@@ -30,11 +30,35 @@ cleanup() {
trap cleanup EXIT
mkdir -p output
# Check if required LaTeX tools are available locally
check_latex_tools() {
command -v latexmk >/dev/null 2>&1 || return 1
command -v pdflatex >/dev/null 2>&1 || return 1
return 0
}
# Function to build using local tools
build_local() {
latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode "$1"
}
# Function to build using Docker
build_docker() {
echo "Local LaTeX tools not found, falling back to Docker..."
./build-docker.sh
exit $?
}
# Backup current personal_info.tex if it exists
if [ -f personal_info.tex ]; then
cp personal_info.tex personal_info.tex.bak
fi
# Check if we can use local tools, otherwise fall back to Docker
if ! check_latex_tools; then
build_docker
fi
# Build private version (if secrets are available)
if [ -n "$PERSONAL_PHONE" ] || [ -n "$PERSONAL_HOME_ADDRESS_LINE1" ] || [ -n "$PERSONAL_SCHOOL_ADDRESS_LINE1" ]; then
echo "Building private version..."
@@ -52,14 +76,11 @@ if [ -n "$PERSONAL_PHONE" ] || [ -n "$PERSONAL_HOME_ADDRESS_LINE1" ] || [ -n "$P
\newcommand{\personalSchoolAddressLineThree}{$PERSONAL_SCHOOL_ADDRESS_LINE3}
EOL
docker build --platform linux/arm64 -t resume-builder .
docker run --platform linux/arm64 --rm \
-v "$(pwd):/workspace" \
-v "$(pwd)/output:/workspace/output" \
resume-builder bash -c "latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex cv.tex && mv *.pdf output/"
mv output/resume.pdf output/resume-private.pdf 2>/dev/null || true
mv output/cv.pdf output/cv-private.pdf 2>/dev/null || true
build_local resume.tex
build_local cv.tex
mv resume.pdf output/resume-private.pdf 2>/dev/null || true
mv cv.pdf output/cv-private.pdf 2>/dev/null || true
fi
# Build public version
@@ -78,10 +99,11 @@ cat > personal_info.tex << EOL
\newcommand{\personalSchoolAddressLineThree}{~}
EOL
docker run --platform linux/arm64 --rm \
-v "$(pwd):/workspace" \
-v "$(pwd)/output:/workspace/output" \
resume-builder bash -c "latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex cv.tex && mv resume.pdf output/resume-public.pdf && mv cv.pdf output/cv-public.pdf"
build_local resume.tex
build_local cv.tex
mv resume.pdf output/resume-public.pdf
mv cv.pdf output/cv-public.pdf
echo "Build complete!"
echo "Generated files in output/:"

113
cv.tex
View File

@@ -1,78 +1,15 @@
\documentclass{article}
\setlength{\parindent}{0pt}
\setlength{\parskip}{0em}
\usepackage{enumitem}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[left=0.5in,top=0.5in,right=0.5in,bottom=0.5in]{geometry}
% Define spacing variables
\newlength{\sectspaceabove}
\newlength{\sectspacebelow}
\setlength{\sectspaceabove}{-0em} % Space before section titles
\setlength{\sectspacebelow}{-0.5em} % Space after section titles
\usepackage{etoolbox}
\patchcmd{\thebibliography}{\section*{\refname}}{}{}{}
% Hide page numbers
\pagestyle{empty}
% Custom macro for small caps and bold
\newcommand{\textscbf}[1]{\textbf{\textsc{#1}}}
% Custom macro for section headers with controlled spacing
\newcommand{\resumesection}[1]{%
\vspace{\sectspaceabove}%
\begin{center}
\textscbf{#1}
\end{center}%
\vspace{\sectspacebelow}%
}
% Include common style
\input{shared/style/common}
% Include personal information
\input{personal_info}
\begin{document}
\begin{center}
{\large \textscbf{\personalName}}
\end{center}
\vspace{0.5em}
\noindent
\begin{minipage}[t]{0.33\textwidth}
\raggedright
\ifx\personalSchoolAddressLineOne\empty\else
\mbox{}\par\nobreak\vspace{-\baselineskip}
\personalSchoolAddressLineOne\\%
\personalSchoolAddressLineTwo\\%
\personalSchoolAddressLineThree%
\fi
\end{minipage}%
\hfill%
\begin{minipage}[t]{0.33\textwidth}
\centering
\href{mailto:\personalEmail}{\personalEmail}%
\ifx\personalSchoolEmail\empty\else
\\\href{mailto:\personalSchoolEmail}{\personalSchoolEmail}%
\fi
\ifx\personalPhone\empty\else
\\\personalPhone%
\fi
\\\href{https://\personalWebsite}{\personalWebsite}%
\end{minipage}%
\hfill%
\begin{minipage}[t]{0.33\textwidth}
\raggedleft
\ifx\personalHomeAddressLineOne\empty\else
\personalHomeAddressLineOne\\%
\personalHomeAddressLineTwo%
\fi
\end{minipage}
\vspace{1em}
% Header with contact information
\input{shared/sections/header}
% Professional Summary Section
\noindent
@@ -82,14 +19,8 @@
Published researcher in human-robot interaction with experience in both academic and commercial software development.
\end{minipage}
\resumesection{Education}
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
\textbf{Bachelor of Science in Computer Science and Engineering} \hfill \textbf{Expected Graduation: May 2026}
\begin{itemize}[noitemsep,topsep=2pt]
\item Cumulative Engineering GPA: 3.90. Dean's List: Fall 2022, Fall 2023, Spring 2024
\end{itemize}
% Education section
\input{shared/sections/education}
\resumesection{Experience}
@@ -119,7 +50,6 @@
\item Managed live production during race events, coordinating camera operators, replay, and graphics control
\end{itemize}
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
\textbf{Computer Science Researcher - Human-Robot Interaction} \hfill \textbf{Jan 2023 Present}
@@ -131,7 +61,7 @@
\textbf{Computer Science Research Assistant - Chemical Engineering Department} \hfill \textbf{Aug 2023 Present}
\begin{itemize}[noitemsep,topsep=2pt]
\item Designed and implemented an automated data collection system using a microcontroller and C++ to collect real-time temperature, pressure, and humidity data in harsh environments
\item Currently integrating robotic arm into existing coffee research project to automate repeated brewing-related tasks and data collection, freeing up researchers from unskilled repetitive work
\item Currently assisting in robotic hardware integration into an existing coffee research project to automate repeated brewing-related tasks and data collection, freeing up researchers from unskilled repetitive work
\end{itemize}
\textbf{Computer Science Teaching Assistant} \hfill \textbf{Jan 2024 - Present}
@@ -164,7 +94,6 @@
\item Assisted staff in one-laptop per person deployment and support in response to the COVID-19 pandemic, teaching students how to fully utilize newly-available remote learning tools and programs
\end{itemize}
\resumesection{Activities}
\textscbf{AIChE Chem-E-Car Competition Team} \hfill \textscbf{Lewisburg, PA}
@@ -225,29 +154,9 @@
\item Presented the design of our car in a poster session, heavily focusing on the safety-related aspects of our design
\end{itemize}
\resumesection{Publications}
\nocite{*}
\bibliography{subfiles/refs.bib}
\bibliographystyle{plain}
\resumesection{Relevant Coursework}
\textbf{Systems \& Architecture:} Computer Systems, Operating Systems Design, Computer Networks \& Security
\textbf{Software Development:} Software Engineering, Data Structures \& Algorithms, Research Methods, Ethics in Computing
\textbf{Mathematics:} Calculus II, Linear Algebra, Discrete Mathematics, Statistics, Applied Statistics with R, Data Mining
\resumesection{Skills \& Interests}
\textbf{Languages \& Frameworks:} Java, C/C++, Python, JavaScript/TypeScript, React, Next.js, PHP, SQL
\textbf{Backend \& DevOps:} REST APIs, MySQL, PostgreSQL, Docker, Apache Web Server, NGINX, ROS2
\textbf{Cloud \& Infrastructure:} AWS, GCP, Azure, Backblaze, Linux (RHEL/Debian), CI/CD
\textbf{Development Tools:} Git, JetBrains Suite, VS Code, Cursor, Linux CLI
% Shared sections
\input{shared/sections/publications}
\input{shared/sections/coursework}
\input{shared/sections/skills}
\end{document}

View File

@@ -1,87 +1,18 @@
\documentclass{article}
\setlength{\parindent}{0pt}
\setlength{\parskip}{0em}
\usepackage{enumitem}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[left=0.5in,top=0.5in,right=0.5in,bottom=0.5in]{geometry}
% Define spacing variables
\newlength{\sectspaceabove}
\newlength{\sectspacebelow}
\setlength{\sectspaceabove}{-0.5em} % Space before section titles
\setlength{\sectspacebelow}{-0.5em} % Space after section titles
\usepackage{etoolbox}
\patchcmd{\thebibliography}{\section*{\refname}}{}{}{}
% Hide page numbers
\pagestyle{empty}
% Custom macro for small caps and bold
\newcommand{\textscbf}[1]{\textbf{\textsc{#1}}}
% Custom macro for section headers with controlled spacing
\newcommand{\resumesection}[1]{%
\vspace{\sectspaceabove}%
\begin{center}
\textscbf{#1}
\end{center}%
\vspace{\sectspacebelow}%
}
% Include common style
\input{shared/style/common}
% Include personal information
\input{personal_info}
\begin{document}
\begin{center}
{\large \textscbf{\personalName}}
\end{center}
\vspace{0.5em}
% Header with contact information
\input{shared/sections/header}
\noindent
\begin{minipage}[t]{0.33\textwidth}
\raggedright
\ifx\personalSchoolAddressLineOne\empty\else
\mbox{}\par\nobreak\vspace{-\baselineskip}
\personalSchoolAddressLineOne\\%
\personalSchoolAddressLineTwo\\%
\personalSchoolAddressLineThree%
\fi
\end{minipage}%
\hfill%
\begin{minipage}[t]{0.33\textwidth}
\centering
\href{mailto:\personalEmail}{\personalEmail}%
\ifx\personalSchoolEmail\empty\else
\\\href{mailto:\personalSchoolEmail}{\personalSchoolEmail}%
\fi
\ifx\personalPhone\empty\else
\\\personalPhone%
\fi
\\\href{https://\personalWebsite}{\personalWebsite}%
\end{minipage}%
\hfill%
\begin{minipage}[t]{0.33\textwidth}
\raggedleft
\ifx\personalHomeAddressLineOne\empty\else
\personalHomeAddressLineOne\\%
\personalHomeAddressLineTwo%
\fi
\end{minipage}
\vspace{1em}
\resumesection{Education}
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
\textbf{Bachelor of Science in Computer Science and Engineering} \hfill \textbf{Expected Graduation: May 2026}
\begin{itemize}[noitemsep,topsep=2pt]
\item Cumulative Engineering GPA: 3.90. Dean's List: Fall 2022, Fall 2023, Spring 2024
\end{itemize}
% Education section
\input{shared/sections/education}
\resumesection{Experience}
@@ -95,28 +26,6 @@
\item Orchestrated migration to containerized architecture using Docker and implemented automated backup systems to improve reliability
\end{itemize}
%\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
%
%\textbf{Computer Science Researcher - Human-Robot Interaction} \hfill \textbf{Jan 2023 Present}
%\begin{itemize}[noitemsep,topsep=2pt]
% \item Co-founded an interdisciplinary research lab and meeting group, engaging peers in the world of human-robot interaction
% \item Led ongoing development of a platform for Human-Robot Interaction experiments, resulting in a first-author publication
%\end{itemize}
%
%\textbf{Teaching Assistant and Tutor - Computer Science, Engineering, and Physics} \hfill \textbf{Aug 2023 - Present}
%\begin{itemize}[noitemsep,topsep=2pt]
%\item Mentored diverse student groups in Java programming, Arduino development, and physics lab experiments, adapting teaching methods to various learning styles
%\item Guided engineering teams through agile development cycles while emphasizing ethical design considerations and proper documentation
%\item Supported data analysis across disciplines using Excel, Logger Pro, and custom software tools
%\item Fostered inclusive learning environments through hands-on workshops and one-on-one tutoring sessions
%\end{itemize}
%
%\textbf{Computer Science Research Assistant - Chemical Engineering Department} \hfill \textbf{Aug 2023 Present}
%\begin{itemize}[noitemsep,topsep=2pt]
% \item Developed sensor systems to improve data collection in coffee-related biochemical research, enhancing accuracy and efficiency of experiments using custom software tools to streamline data analysis.
%\end{itemize}
%
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
\textbf{Computer Science Researcher - Human-Robot Interaction} \hfill \textbf{Jan 2023 Present}
@@ -128,7 +37,7 @@
\textbf{Computer Science Research Assistant - Chemical Engineering Department} \hfill \textbf{Aug 2023 Present}
\begin{itemize}[noitemsep,topsep=2pt]
\item Designed and implemented an automated data collection system using a microcontroller and C++ to collect real-time temperature, pressure, and humidity data in harsh environments
\item Currently integrating robotic arm into existing coffee research project to automate repeated brewing-related tasks and data collection, freeing up researchers from unskilled repetitive work
\item Currently assisting in robotic hardware integration into an existing coffee research project to automate repeated brewing-related tasks and data collection, freeing up researchers from unskilled repetitive work
\end{itemize}
\textbf{Teaching Assistant \& Engineering Tutor} \hfill \textbf{Aug 2023 - Present}
@@ -138,16 +47,8 @@
\item Provided technical mentorship at the Engineering Study Spot, focusing on programming concepts and system design
\end{itemize}
\resumesection{Activities}
%\textscbf{Bucknell Coffee Society} \hfill \textscbf{Lewisburg, PA}
%
%\textbf{Treasurer} \hfill \textbf{Oct 2023 Present}
%\begin{itemize}[noitemsep,topsep=2pt]
% \item Co-established and launched a new campus organization, managing financial operations and coordinating event logistics.
%\end{itemize}
\textscbf{AIChE Chem-E-Car Competition Team} \hfill \textscbf{Lewisburg, PA}
\textbf{President, Electrical and Mechanical Team Lead} \hfill \textbf{Jan 2023 Present}
@@ -156,28 +57,9 @@
\item Implemented finite state machine architecture integrating spectrometer readings, relay control, and LED feedback for real-time reaction monitoring in isolated chamber conditions
\end{itemize}
\resumesection{Publications}
\nocite{*}
\bibliography{subfiles/refs.bib}
\bibliographystyle{plain}
\resumesection{Relevant Coursework}
\textbf{Systems \& Architecture:} Computer Systems, Operating Systems Design, Computer Networks \& Security
\textbf{Software Development:} Software Engineering, Data Structures \& Algorithms, Research Methods, Ethics in Computing
\textbf{Mathematics:} Calculus II, Linear Algebra, Discrete Mathematics, Statistics, Applied Statistics with R, Data Mining
\resumesection{Skills \& Interests}
\textbf{Languages \& Frameworks:} Java, C/C++, Python, JavaScript/TypeScript, React, Next.js, PHP, SQL
\textbf{Backend \& DevOps:} REST APIs, MySQL, PostgreSQL, Docker, Apache Web Server, NGINX, ROS2
\textbf{Cloud \& Infrastructure:} AWS, GCP, Azure, Backblaze, Linux (RHEL/Debian), CI/CD
\textbf{Development Tools:} Git, JetBrains Suite, VS Code, Cursor, Linux CLI
% Shared sections
\input{shared/sections/publications}
\input{shared/sections/coursework}
\input{shared/sections/skills}
\end{document}

View File

@@ -0,0 +1,7 @@
\resumesection{Relevant Coursework}
\textbf{Systems \& Architecture:} Computer Systems, Operating Systems Design, Computer Networks \& Security
\textbf{Software Development:} Software Engineering, Data Structures \& Algorithms, Research Methods, Ethics in Computing
\textbf{Mathematics:} Calculus II, Linear Algebra, Discrete Mathematics, Statistics, Applied Statistics with R, Data Mining

View File

@@ -0,0 +1,8 @@
\resumesection{Education}
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
\textbf{Bachelor of Science in Computer Science and Engineering} \hfill \textbf{Expected Graduation: May 2026}
\begin{itemize}[noitemsep,topsep=2pt]
\item Cumulative Engineering GPA: 3.90. Dean's List: Fall 2022, Fall 2023, Spring 2024
\end{itemize}

View File

@@ -0,0 +1,38 @@
\begin{center}
{\large \textscbf{\personalName}}
\end{center}
\vspace{0.5em}
\noindent
\begin{minipage}[t]{0.33\textwidth}
\raggedright
\ifx\personalSchoolAddressLineOne\empty\else
\mbox{}\par\nobreak\vspace{-\baselineskip}
\personalSchoolAddressLineOne\\%
\personalSchoolAddressLineTwo\\%
\personalSchoolAddressLineThree%
\fi
\end{minipage}%
\hfill%
\begin{minipage}[t]{0.33\textwidth}
\centering
\href{mailto:\personalEmail}{\personalEmail}%
\ifx\personalSchoolEmail\empty\else
\\\href{mailto:\personalSchoolEmail}{\personalSchoolEmail}%
\fi
\\\href{https://\personalWebsite}{\personalWebsite}%
\ifx\personalPhone\empty\else
\\\personalPhone%
\fi
\end{minipage}%
\hfill%
\begin{minipage}[t]{0.33\textwidth}
\raggedleft
\ifx\personalHomeAddressLineOne\empty\else
\personalHomeAddressLineOne\\%
\personalHomeAddressLineTwo%
\fi
\end{minipage}
\vspace{1em}

View File

@@ -0,0 +1,5 @@
\resumesection{Publications}
\nocite{*}
\bibliography{subfiles/refs.bib}
\bibliographystyle{plain}

View File

@@ -0,0 +1,9 @@
\resumesection{Skills \& Interests}
\textbf{Languages \& Frameworks:} Java, C/C++, Python, JavaScript/TypeScript, React, Next.js, PHP, SQL
\textbf{Backend \& DevOps:} REST APIs, MySQL, PostgreSQL, Docker, Apache Web Server, NGINX, ROS2
\textbf{Cloud \& Infrastructure:} AWS, GCP, Azure, Backblaze, Linux (RHEL/Debian), CI/CD
\textbf{Development Tools:} Git, JetBrains Suite, VS Code, Cursor, Linux CLI

31
shared/style/common.tex Normal file
View File

@@ -0,0 +1,31 @@
\setlength{\parindent}{0pt}
\setlength{\parskip}{0em}
\usepackage{enumitem}
\usepackage{hyperref}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[left=0.5in,top=0.5in,right=0.5in,bottom=0.5in]{geometry}
% Define spacing variables
\newlength{\sectspaceabove}
\newlength{\sectspacebelow}
\setlength{\sectspaceabove}{-0.5em} % Space before section titles
\setlength{\sectspacebelow}{-0.5em} % Space after section titles
\usepackage{etoolbox}
\patchcmd{\thebibliography}{\section*{\refname}}{}{}{}
% Hide page numbers
\pagestyle{empty}
% Custom macro for small caps and bold
\newcommand{\textscbf}[1]{\textbf{\textsc{#1}}}
% Custom macro for section headers with controlled spacing
\newcommand{\resumesection}[1]{%
\vspace{\sectspaceabove}%
\begin{center}
\textscbf{#1}
\end{center}%
\vspace{\sectspacebelow}%
}