mirror of
https://github.com/soconnor0919/resume-cv.git
synced 2026-09-22 22:31:30 -04:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3c80f1460f | ||
|
|
0ef6d12a32 | ||
|
|
e9c96e288b |
@@ -16,10 +16,8 @@ jobs:
|
|||||||
container: ghcr.io/xu-cheng/texlive-alpine:latest
|
container: ghcr.io/xu-cheng/texlive-alpine:latest
|
||||||
steps:
|
steps:
|
||||||
- name: Install system dependencies
|
- name: Install system dependencies
|
||||||
run: apk add --no-cache git gettext bash nodejs
|
run: apk add --no-cache git gettext bash nodejs poppler-utils
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Create public info file
|
- name: Create public info file
|
||||||
env:
|
env:
|
||||||
PERSONAL_NAME: ${{ secrets.PERSONAL_NAME || github.repository_owner }}
|
PERSONAL_NAME: ${{ secrets.PERSONAL_NAME || github.repository_owner }}
|
||||||
@@ -28,7 +26,6 @@ jobs:
|
|||||||
PERSONAL_SCHOOL_EMAIL: ${{ secrets.PERSONAL_SCHOOL_EMAIL || '' }}
|
PERSONAL_SCHOOL_EMAIL: ${{ secrets.PERSONAL_SCHOOL_EMAIL || '' }}
|
||||||
run: |
|
run: |
|
||||||
cat > personal_info.tex << 'EOL'
|
cat > personal_info.tex << 'EOL'
|
||||||
% Public version of personal information
|
|
||||||
\newcommand{\personalName}{$PERSONAL_NAME}
|
\newcommand{\personalName}{$PERSONAL_NAME}
|
||||||
\newcommand{\personalEmail}{$PERSONAL_EMAIL}
|
\newcommand{\personalEmail}{$PERSONAL_EMAIL}
|
||||||
\newcommand{\personalPhone}{~}
|
\newcommand{\personalPhone}{~}
|
||||||
@@ -42,31 +39,16 @@ jobs:
|
|||||||
EOL
|
EOL
|
||||||
envsubst < personal_info.tex > personal_info.tex.tmp
|
envsubst < personal_info.tex > personal_info.tex.tmp
|
||||||
mv personal_info.tex.tmp personal_info.tex
|
mv personal_info.tex.tmp personal_info.tex
|
||||||
|
|
||||||
- name: Cache TeX Live
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
/tmp/texlive
|
|
||||||
~/.texlive*
|
|
||||||
key: texlive-${{ runner.os }}-${{ hashFiles('**/*.tex', 'subfiles/**/*.tex') }}
|
|
||||||
restore-keys: |
|
|
||||||
texlive-${{ runner.os }}-
|
|
||||||
|
|
||||||
- name: Create TeX Live directory
|
|
||||||
run: mkdir -p /tmp/texlive
|
|
||||||
|
|
||||||
- name: Compile LaTeX
|
- name: Compile LaTeX
|
||||||
run: |
|
run: |
|
||||||
latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex
|
latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex
|
||||||
latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode cv.tex
|
latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode cv.tex
|
||||||
|
- name: Enforce one-page resume
|
||||||
- name: List generated PDFs
|
run: |
|
||||||
run: ls -la *.pdf
|
pages=$(pdfinfo resume.pdf | awk '/^Pages:/ {print $2}')
|
||||||
|
echo "Resume pages: $pages"
|
||||||
# --- GITHUB RELEASES (Run only on GitHub) ---
|
test "$pages" -eq 1
|
||||||
- name: Upload Public PDFs as Release (GitHub)
|
- name: Update latest release
|
||||||
if: github.server_url == 'https://github.com'
|
|
||||||
uses: ncipollo/release-action@v1
|
uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
artifacts: "resume.pdf,cv.pdf"
|
artifacts: "resume.pdf,cv.pdf"
|
||||||
@@ -74,15 +56,13 @@ jobs:
|
|||||||
name: Latest PDFs
|
name: Latest PDFs
|
||||||
body: |
|
body: |
|
||||||
Latest compiled resume and CV (public versions)
|
Latest compiled resume and CV (public versions)
|
||||||
|
|
||||||
Built from commit ${{ github.sha }}
|
Built from commit ${{ github.sha }}
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
allowUpdates: true
|
allowUpdates: true
|
||||||
removeArtifacts: true
|
removeArtifacts: true
|
||||||
replacesArtifacts: true
|
replacesArtifacts: true
|
||||||
|
- name: Create numbered release
|
||||||
- name: Create Numbered Release (GitHub)
|
if: github.event_name == 'push'
|
||||||
if: github.server_url == 'https://github.com'
|
|
||||||
uses: ncipollo/release-action@v1
|
uses: ncipollo/release-action@v1
|
||||||
with:
|
with:
|
||||||
artifacts: "resume.pdf,cv.pdf"
|
artifacts: "resume.pdf,cv.pdf"
|
||||||
@@ -90,171 +70,7 @@ jobs:
|
|||||||
name: Release ${{ github.run_number }}
|
name: Release ${{ github.run_number }}
|
||||||
body: |
|
body: |
|
||||||
Automated release #${{ github.run_number }}
|
Automated release #${{ github.run_number }}
|
||||||
|
|
||||||
Built from commit ${{ github.sha }}
|
Built from commit ${{ github.sha }}
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
draft: false
|
draft: false
|
||||||
prerelease: false
|
prerelease: false
|
||||||
|
|
||||||
# --- GITEA RELEASES (Run only on Gitea) ---
|
|
||||||
- name: Upload Public PDFs as Release (Gitea)
|
|
||||||
if: github.server_url != 'https://github.com'
|
|
||||||
uses: akkuman/gitea-release-action@v1
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
files: |
|
|
||||||
resume.pdf
|
|
||||||
cv.pdf
|
|
||||||
name: Latest PDFs
|
|
||||||
tag_name: latest
|
|
||||||
prerelease: false
|
|
||||||
draft: false
|
|
||||||
|
|
||||||
- name: Create Numbered Release (Gitea)
|
|
||||||
if: github.server_url != 'https://github.com'
|
|
||||||
uses: akkuman/gitea-release-action@v1
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
files: |
|
|
||||||
resume.pdf
|
|
||||||
cv.pdf
|
|
||||||
name: Release ${{ github.run_number }}
|
|
||||||
tag_name: release-${{ github.run_number }}
|
|
||||||
prerelease: false
|
|
||||||
draft: false
|
|
||||||
|
|
||||||
build-private-github:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container: ghcr.io/xu-cheng/texlive-alpine:latest
|
|
||||||
if: github.actor == github.repository_owner && github.server_url == 'https://github.com'
|
|
||||||
steps:
|
|
||||||
- name: Install system dependencies
|
|
||||||
run: apk add --no-cache git gettext bash nodejs
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Create private info file
|
|
||||||
env:
|
|
||||||
PERSONAL_NAME: ${{ secrets.PERSONAL_NAME || github.repository_owner }}
|
|
||||||
PERSONAL_EMAIL: ${{ secrets.PERSONAL_EMAIL || '' }}
|
|
||||||
PERSONAL_WEBSITE: ${{ secrets.PERSONAL_WEBSITE || '' }}
|
|
||||||
PERSONAL_SCHOOL_EMAIL: ${{ secrets.PERSONAL_SCHOOL_EMAIL || '' }}
|
|
||||||
PERSONAL_PHONE: ${{ secrets.PERSONAL_PHONE || '' }}
|
|
||||||
PERSONAL_HOME_ADDRESS_LINE1: ${{ secrets.PERSONAL_HOME_ADDRESS_LINE1 || '' }}
|
|
||||||
PERSONAL_HOME_ADDRESS_LINE2: ${{ secrets.PERSONAL_HOME_ADDRESS_LINE2 || '' }}
|
|
||||||
PERSONAL_SCHOOL_ADDRESS_LINE1: ${{ secrets.PERSONAL_SCHOOL_ADDRESS_LINE1 || '' }}
|
|
||||||
PERSONAL_SCHOOL_ADDRESS_LINE2: ${{ secrets.PERSONAL_SCHOOL_ADDRESS_LINE2 || '' }}
|
|
||||||
PERSONAL_SCHOOL_ADDRESS_LINE3: ${{ secrets.PERSONAL_SCHOOL_ADDRESS_LINE3 || '' }}
|
|
||||||
run: |
|
|
||||||
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
|
|
||||||
envsubst < personal_info.tex > personal_info.tex.tmp
|
|
||||||
mv personal_info.tex.tmp personal_info.tex
|
|
||||||
|
|
||||||
- name: Cache TeX Live
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
/tmp/texlive
|
|
||||||
~/.texlive*
|
|
||||||
key: texlive-${{ runner.os }}-${{ hashFiles('**/*.tex', 'subfiles/**/*.tex') }}
|
|
||||||
restore-keys: |
|
|
||||||
texlive-${{ runner.os }}-
|
|
||||||
|
|
||||||
- name: Create TeX Live directory
|
|
||||||
run: mkdir -p /tmp/texlive
|
|
||||||
|
|
||||||
- name: Compile LaTeX
|
|
||||||
run: |
|
|
||||||
latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex
|
|
||||||
latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode cv.tex
|
|
||||||
|
|
||||||
- name: List generated PDFs
|
|
||||||
run: ls -la *.pdf
|
|
||||||
|
|
||||||
- name: Upload Private PDFs
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: private-documents
|
|
||||||
path: |
|
|
||||||
resume.pdf
|
|
||||||
cv.pdf
|
|
||||||
|
|
||||||
build-private-gitea:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
container: ghcr.io/xu-cheng/texlive-alpine:latest
|
|
||||||
if: github.actor == github.repository_owner && github.server_url != 'https://github.com'
|
|
||||||
steps:
|
|
||||||
- name: Install system dependencies
|
|
||||||
run: apk add --no-cache git gettext bash nodejs
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Create private info file
|
|
||||||
env:
|
|
||||||
PERSONAL_NAME: ${{ secrets.PERSONAL_NAME || github.repository_owner }}
|
|
||||||
PERSONAL_EMAIL: ${{ secrets.PERSONAL_EMAIL || '' }}
|
|
||||||
PERSONAL_WEBSITE: ${{ secrets.PERSONAL_WEBSITE || '' }}
|
|
||||||
PERSONAL_SCHOOL_EMAIL: ${{ secrets.PERSONAL_SCHOOL_EMAIL || '' }}
|
|
||||||
PERSONAL_PHONE: ${{ secrets.PERSONAL_PHONE || '' }}
|
|
||||||
PERSONAL_HOME_ADDRESS_LINE1: ${{ secrets.PERSONAL_HOME_ADDRESS_LINE1 || '' }}
|
|
||||||
PERSONAL_HOME_ADDRESS_LINE2: ${{ secrets.PERSONAL_HOME_ADDRESS_LINE2 || '' }}
|
|
||||||
PERSONAL_SCHOOL_ADDRESS_LINE1: ${{ secrets.PERSONAL_SCHOOL_ADDRESS_LINE1 || '' }}
|
|
||||||
PERSONAL_SCHOOL_ADDRESS_LINE2: ${{ secrets.PERSONAL_SCHOOL_ADDRESS_LINE2 || '' }}
|
|
||||||
PERSONAL_SCHOOL_ADDRESS_LINE3: ${{ secrets.PERSONAL_SCHOOL_ADDRESS_LINE3 || '' }}
|
|
||||||
run: |
|
|
||||||
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
|
|
||||||
envsubst < personal_info.tex > personal_info.tex.tmp
|
|
||||||
mv personal_info.tex.tmp personal_info.tex
|
|
||||||
|
|
||||||
- name: Cache TeX Live
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: |
|
|
||||||
/tmp/texlive
|
|
||||||
~/.texlive*
|
|
||||||
key: texlive-${{ runner.os }}-${{ hashFiles('**/*.tex', 'subfiles/**/*.tex') }}
|
|
||||||
restore-keys: |
|
|
||||||
texlive-${{ runner.os }}-
|
|
||||||
|
|
||||||
- name: Create TeX Live directory
|
|
||||||
run: mkdir -p /tmp/texlive
|
|
||||||
|
|
||||||
- name: Compile LaTeX
|
|
||||||
run: |
|
|
||||||
latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode resume.tex
|
|
||||||
latexmk -pdf -file-line-error -halt-on-error -interaction=nonstopmode cv.tex
|
|
||||||
|
|
||||||
- name: List generated PDFs
|
|
||||||
run: ls -la *.pdf
|
|
||||||
|
|
||||||
- name: Upload Private PDFs
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: private-documents
|
|
||||||
path: |
|
|
||||||
resume.pdf
|
|
||||||
cv.pdf
|
|
||||||
@@ -12,7 +12,7 @@ SCRIPTS_DIR = scripts
|
|||||||
export BUILD_DIR
|
export BUILD_DIR
|
||||||
|
|
||||||
# Targets
|
# Targets
|
||||||
.PHONY: all clean docker-build docker public private resume cv help
|
.PHONY: all clean docker-build docker public private resume cv first-ascent help
|
||||||
|
|
||||||
all: public private
|
all: public private
|
||||||
|
|
||||||
@@ -80,6 +80,14 @@ cv: $(OUTPUT_DIR) $(BUILD_DIR)
|
|||||||
@cp $(BUILD_DIR)/cv.pdf $(OUTPUT_DIR)/cv-private.pdf
|
@cp $(BUILD_DIR)/cv.pdf $(OUTPUT_DIR)/cv-private.pdf
|
||||||
@echo "CV built successfully!"
|
@echo "CV built successfully!"
|
||||||
|
|
||||||
|
# First Ascent USA application (2-page targeted version)
|
||||||
|
first-ascent: $(OUTPUT_DIR) $(BUILD_DIR)
|
||||||
|
@echo "Building First Ascent resume..."
|
||||||
|
@$(SCRIPTS_DIR)/generate-personal-info.sh private
|
||||||
|
@TEXINPUTS=".:$(BUILD_DIR):" $(LATEX) -output-directory=$(BUILD_DIR) first-ascent.tex
|
||||||
|
@cp $(BUILD_DIR)/first-ascent.pdf $(OUTPUT_DIR)/first-ascent.pdf
|
||||||
|
@echo "Built output/first-ascent.pdf"
|
||||||
|
|
||||||
# Docker build
|
# Docker build
|
||||||
docker-build:
|
docker-build:
|
||||||
@docker build -t $(DOCKER_IMAGE) .
|
@docker build -t $(DOCKER_IMAGE) .
|
||||||
|
|||||||
@@ -231,7 +231,7 @@ My research focuses on advancing human-robot interaction through improved experi
|
|||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item James M. Pommersheim Research and Innovation in Engineering Award --- Bucknell University College of Engineering (2026)
|
\item James M. Pommersheim Research and Innovation in Engineering Award --- Bucknell University College of Engineering (2026)
|
||||||
\item Dean's List (7 semesters): Fall 2022, Fall 2023, Spring 2024, Fall 2024, Spring 2025, Fall 2025, Spring 2026
|
\item Dean's List (7 semesters): Fall 2022, Fall 2023, Spring 2024, Fall 2024, Spring 2025, Fall 2025, Spring 2026
|
||||||
\item GPA: 3.71/4.0 \textbullet{} Engineering GPA: 3.92/4.0
|
\item GPA: 3.71/4.0 \textbullet{} Engineering GPA: 3.92/4.0 \textbullet{} Magna Cum Laude
|
||||||
\item AIChE Mid-Atlantic Chem-E-Car Competition - 2nd Place (2024)
|
\item AIChE Mid-Atlantic Chem-E-Car Competition - 2nd Place (2024)
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,127 @@
|
|||||||
|
\documentclass{article}
|
||||||
|
|
||||||
|
% Include common style
|
||||||
|
\input{shared/style/common}
|
||||||
|
|
||||||
|
% Include personal information (check build/ first, then root)
|
||||||
|
\IfFileExists{build/personal_info.tex}{\input{build/personal_info}}{\input{personal_info}}
|
||||||
|
|
||||||
|
\begin{document}
|
||||||
|
|
||||||
|
% Header with contact information
|
||||||
|
\input{shared/sections/header}
|
||||||
|
|
||||||
|
\resumesection{Profile}
|
||||||
|
|
||||||
|
CS \& engineering graduate with 2 first-author publications at IEEE RO-MAN, 3.71/4.0 GPA, and six years building production software at scale. Researcher who ships: HRIStudio went from academic concept to a platform deployed across robot hardware; Riverhead Raceway serves 250k+ monthly visitors and 10M+ API requests/month. Starting M.S. in Computer Engineering at Boston University fall 2026.
|
||||||
|
|
||||||
|
% Education section
|
||||||
|
\input{shared/sections/education}
|
||||||
|
|
||||||
|
\resumesection{Publications}
|
||||||
|
|
||||||
|
\textbf{First Author, IEEE International Conference on Robot \& Human Interactive Communication (RO-MAN)}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item O'Connor, S. \& Perrone, L.F. ``A Web-Based Wizard-of-Oz Platform for Collaborative and Reproducible HRI Research'' \textit{IEEE RO-MAN 2025}, Eindhoven, The Netherlands
|
||||||
|
\item O'Connor, S. \& Perrone, L.F. ``HRIStudio: A Framework for Wizard-of-Oz Experiments in HRI Studies'' \textit{IEEE RO-MAN 2024}, Pasadena, CA
|
||||||
|
\item O'Connor, S. ``A Web-Based Wizard-of-Oz Platform for Collaborative and Reproducible HRI Research'' \textit{Bachelor's Honors Thesis}, Bucknell University, 2026
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\resumesection{Research Experience}
|
||||||
|
|
||||||
|
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
||||||
|
|
||||||
|
\textbf{Human-Robot Interaction Researcher} \hfill \textbf{Jan 2023 – May 2026}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Published 2 first-author papers at IEEE RO-MAN (2024, 2025) on HRIStudio, a web-based Wizard-of-Oz platform enabling reproducible HRI studies across multiple robot platforms
|
||||||
|
\item Completed honors thesis evaluating HRIStudio via pilot study: achieved 100\% design fidelity and 96.7\% execution reliability vs.\ 66.7\% baseline; SUS usability score 76.7 vs.\ 59.2 for industry-standard Choregraphe
|
||||||
|
\item Architected modular plugin system enabling cross-platform robot control (NAO, Pepper, custom) through JSON-defined interfaces with WebSocket teleoperation and RESTful ROS integration
|
||||||
|
\item Designed comprehensive data logging system capturing interaction timelines and experimental conditions with microsecond precision for reproducibility analysis
|
||||||
|
\item Received James M. Pommersheim Research \& Innovation in Engineering Award for outstanding scholarly invention
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textbf{Computer Science Research Assistant – Chemical Engineering Dept.} \hfill \textbf{Aug 2023 – May 2025}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Built Python pipelines integrating atmospheric and water quality sensor streams for environmental monitoring research; bridged CS expertise with domain-specific research needs across disciplines
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\resumesection{Professional Experience}
|
||||||
|
|
||||||
|
\textscbf{Riverhead Raceway} \hfill \textscbf{Riverhead, NY}
|
||||||
|
|
||||||
|
\textbf{Software Developer} \hfill \textbf{Oct 2020 – May 2026}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Architected and deployed full-stack real-time statistics platform serving 1,500+ concurrent users and 250k+ monthly visitors using Next.js, TypeScript, PostgreSQL, and Docker
|
||||||
|
\item Designed RESTful APIs for mobile applications and third-party integrations, processing 10M+ API requests monthly; handled \$100,000+ in payment processing
|
||||||
|
\item Built automated CI/CD pipelines with GitHub Actions and monitoring systems, maintaining 99.9\% uptime; led digital transformation replacing legacy paper-based systems with modern web applications
|
||||||
|
\item Optimized database queries reducing page load times by 60\% through intelligent caching and indexing strategies
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
||||||
|
|
||||||
|
\textbf{Teaching Assistant – Software Engineering \& Engineering Design} \hfill \textbf{Aug 2023 – May 2026}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Mentored 150+ students across software engineering, design patterns, and embedded systems; developed automated testing frameworks and grading tools improving learning outcomes
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\resumesection{Selected Projects}
|
||||||
|
|
||||||
|
\textbf{Real-time Racing Statistics Platform} \hfill \textbf{Next.js/TypeScript/PostgreSQL}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Production system serving 1,500+ concurrent users; implemented WebSocket real-time data streaming with auto-reconnection, state synchronization, and WCAG 2.1 AA accessibility compliance
|
||||||
|
\item Optimized database queries reducing page load times by 60\%; designed full mobile API and third-party integration layer
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textbf{Autonomous Vehicle Control – Chem-E-Car} \hfill \textbf{C++/Arduino}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Led 15-member interdisciplinary team as president; designed embedded FSM control system with real-time sensor fusion achieving \textpm10cm distance precision; 2nd place AIChE Mid-Atlantic (2024), competed at AIChE National
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textbf{Formula One Performance Prediction} \hfill \textbf{Python/ML}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Developed ensemble ML models (LightGBM, XGBoost, Random Forest) to predict F1 lap times; engineered features from weather, track characteristics, and historical data with cross-validation and hyperparameter optimization
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textbf{Computer System from Scratch – Nand2Tetris} \hfill \textbf{HDL/Assembly/Java}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Built complete computer from NAND gates through OS: designed logic gates, ALU, CPU, and RAM modules in HDL; wrote assembler, VM translator, and compiler for a high-level object-oriented language
|
||||||
|
\item Implemented functional OS with memory management, I/O handling, and graphics — demonstrating full-stack systems understanding from silicon to software
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\resumesection{Leadership \& Activities}
|
||||||
|
|
||||||
|
\textscbf{AIChE Chem-E-Car Competition Team} \hfill \textscbf{Bucknell University}
|
||||||
|
|
||||||
|
\textbf{President, Electrical/Mechanical Team Lead} \hfill \textbf{Jan 2023 – May 2026}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Led 15-member interdisciplinary team; introduced agile development and version control practices to hardware development; mentored members in embedded systems and control theory
|
||||||
|
\item Managed technical roadmap across multiple competition cycles, coordinating electrical, mechanical, and software sub-teams toward competition deadlines
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\textscbf{Bucknell Coffee Society} \hfill \textscbf{Bucknell University}
|
||||||
|
|
||||||
|
\textbf{Co-Founder and Treasurer} \hfill \textbf{Oct 2023 – May 2026}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Co-established campus organization from scratch; managed \$5,000+ annual budget, coordinated events, and maintained vendor relationships
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
% Full Technical Skills
|
||||||
|
\input{shared/sections/skills}
|
||||||
|
|
||||||
|
\resumesection{Conferences \& Presentations}
|
||||||
|
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item \textbf{IEEE RO-MAN 2025} (Aug 2025, Eindhoven, The Netherlands) --- ``A Web-Based Wizard-of-Oz Platform for Collaborative and Reproducible Human-Robot Interaction Research''
|
||||||
|
\item \textbf{IEEE RO-MAN 2024} (Aug 2024, Pasadena, CA) --- ``HRIStudio: A Framework for Wizard-of-Oz Experiments in HRI Studies'' (Late Breaking Report)
|
||||||
|
\item \textbf{AIChE Annual Student Conference} (Oct 2024, San Diego, CA) --- Chem-E-Car National Competition; poster on safety-critical embedded systems design
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\resumesection{Honors \& Awards}
|
||||||
|
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item James M. Pommersheim Research \& Innovation in Engineering Award --- Bucknell University College of Engineering (2026)
|
||||||
|
\item Dean's List (7 semesters): Fall 2022, Fall 2023, Spring 2024, Fall 2024, Spring 2025, Fall 2025, Spring 2026
|
||||||
|
\item AIChE Mid-Atlantic Chem-E-Car Competition --- 2nd Place (2024)
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
\end{document}
|
||||||
+22
-44
@@ -1,72 +1,50 @@
|
|||||||
\documentclass{article}
|
\documentclass{article}
|
||||||
|
|
||||||
% Include common style
|
|
||||||
\input{shared/style/common}
|
\input{shared/style/common}
|
||||||
|
|
||||||
% Include personal information (check build/ first, then root)
|
|
||||||
\IfFileExists{build/personal_info.tex}{\input{build/personal_info}}{\input{personal_info}}
|
\IfFileExists{build/personal_info.tex}{\input{build/personal_info}}{\input{personal_info}}
|
||||||
|
|
||||||
\begin{document}
|
\begin{document}
|
||||||
|
|
||||||
% Header with contact information
|
|
||||||
\input{shared/sections/header}
|
\input{shared/sections/header}
|
||||||
|
|
||||||
% Education section
|
|
||||||
\input{shared/sections/education}
|
\input{shared/sections/education}
|
||||||
|
|
||||||
% Publications section
|
\resumesection{Publications \& Research}
|
||||||
\resumesection{Publications}
|
\textbf{Human-Robot Interaction Researcher, Bucknell University} \hfill \textbf{Jan 2023 – May 2026}
|
||||||
|
|
||||||
\textbf{First Author, IEEE International Conference on Robot \& Human Interactive Communication (RO-MAN)}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item O'Connor, S. \& Perrone, L.F. ``A Web-Based Wizard-of-Oz Platform for Collaborative and Reproducible HRI Research'' \textit{IEEE RO-MAN 2025}, Eindhoven, The Netherlands
|
\item Published two first-author papers at IEEE RO-MAN (2024, 2025) on HRIStudio, a web-based Wizard-of-Oz platform for reproducible HRI studies; completed an honors thesis evaluating the platform
|
||||||
\item O'Connor, S. \& Perrone, L.F. ``HRIStudio: A Framework for Wizard-of-Oz Experiments in HRI Studies'' \textit{IEEE RO-MAN 2024}, Pasadena, CA
|
\item Achieved 100\% design fidelity and 96.7\% execution reliability vs.\ 66.7\% baseline; SUS usability score 76.7 vs.\ 59.2 for Choregraphe
|
||||||
\item O'Connor, S. ``A Web-Based Wizard-of-Oz Platform for Collaborative and Reproducible HRI Research'' \textit{Bachelor's Honors Thesis}, Bucknell University, 2026
|
\item Architected modular robot plugins, WebSocket teleoperation, comprehensive experiment logging, and RESTful ROS integration for NAO, Pepper, and custom robots
|
||||||
\end{itemize}
|
|
||||||
|
|
||||||
\resumesection{Research Experience}
|
|
||||||
|
|
||||||
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
|
||||||
|
|
||||||
\textbf{Human-Robot Interaction Researcher} \hfill \textbf{Jan 2023 – May 2026}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
|
||||||
\item Published 2 first-author papers at IEEE RO-MAN (2024, 2025) on HRIStudio, a web-based Wizard-of-Oz platform enabling reproducible HRI studies across multiple robot platforms
|
|
||||||
\item Completed honors thesis evaluating HRIStudio via pilot study: achieved 100\% design fidelity and 96.7 execution reliability vs.\ 66.7 baseline; SUS score 76.7 vs.\ 59.2 for Choregraphe
|
|
||||||
\item Architected modular plugin system with WebSocket teleoperation and RESTful API integrating ROS for NAO, Pepper, and custom robots
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
\textit{O'Connor, S. \& Perrone, L.F.}, ``A Web-Based Wizard-of-Oz Platform for Collaborative and Reproducible HRI Research,'' IEEE RO-MAN 2025.\\
|
||||||
|
\textit{O'Connor, S. \& Perrone, L.F.}, ``HRIStudio: A Framework for Wizard-of-Oz Experiments in HRI Studies,'' IEEE RO-MAN 2024.
|
||||||
|
|
||||||
\resumesection{Professional Experience}
|
\resumesection{Professional Experience}
|
||||||
|
\textscbf{Hadlock technologies LLC} \hfill \textscbf{New York}
|
||||||
|
\textbf{Founder \& Software Engineer} \hfill \textbf{2026 – Present}
|
||||||
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
|
\item Founded Hadlock technologies LLC and built RaceTix, a digital ticketing platform integrating Shopify with signed, idempotent webhooks for automated ticket issuance and QR-code fulfillment
|
||||||
|
\item Developed real-time scanning and redemption workflows with event validation, partial redemption, role-based permissions, and append-only audit logging
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
\textscbf{Riverhead Raceway} \hfill \textscbf{Riverhead, NY}
|
\textscbf{Riverhead Raceway} \hfill \textscbf{Riverhead, NY}
|
||||||
|
\textbf{Software Developer} \hfill \textbf{Oct 2020 – Present}
|
||||||
\textbf{Software Developer} \hfill \textbf{Oct 2020 – May 2026}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Architected and deployed full-stack real-time statistics platform serving 1500+ concurrent users and 250k+ monthly visitors using Next.js, TypeScript, PostgreSQL, and Docker
|
\item Architected and deployed RaceHub, a Next.js/TypeScript/PostgreSQL production platform serving 1,500+ concurrent users and 250k+ monthly visitors
|
||||||
\item Designed and implemented RESTful APIs for mobile applications and third-party integrations, processing 10M+ API requests monthly
|
\item Designed APIs processing 10M+ requests monthly and built Docker/GitHub Actions CI/CD, monitoring, and automated operations maintaining 99.9\% uptime during racing season
|
||||||
\item Built automated CI/CD pipelines with GitHub Actions and monitoring systems, maintaining 99.9\% uptime across racing season
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
\textscbf{Bucknell University} \hfill \textscbf{Lewisburg, PA}
|
||||||
|
|
||||||
\textbf{Teaching Assistant – Software Engineering \& Engineering Design} \hfill \textbf{Aug 2023 – May 2026}
|
\textbf{Teaching Assistant – Software Engineering \& Engineering Design} \hfill \textbf{Aug 2023 – May 2026}
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Mentored 150+ students across software engineering, design patterns, and embedded systems (Arduino, microcontrollers)
|
\item Mentored 150+ students in software engineering, design patterns, and embedded systems; developed automated testing and grading tools
|
||||||
\item Developed automated testing frameworks and grading tools, improving learning outcomes while streamlining assessment processes
|
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
\resumesection{Selected Projects}
|
\resumesection{Selected Engineering Projects}
|
||||||
|
\textbf{Computer System from Scratch – Nand2Tetris} \hfill \textbf{HDL/Assembly/Java}
|
||||||
\textbf{HRIStudio Research Platform} \hfill \textbf{Next.js/TypeScript/ROS}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Full-stack web application for managing HRI experiments with WebSocket robot control, role-based access, and comprehensive data logging for reproducibility
|
\item Built a complete computer from NAND gates through OS: designed ALU, CPU, and memory and implemented an assembler, VM translator, compiler, and operating system
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
\textbf{Autonomous Vehicle Control – Chem-E-Car} \hfill \textbf{C++/Arduino}
|
||||||
\textbf{Autonomous Vehicle Control – Chem-E-Car Competition} \hfill \textbf{C++/Arduino}
|
|
||||||
\begin{itemize}[noitemsep,topsep=2pt]
|
\begin{itemize}[noitemsep,topsep=2pt]
|
||||||
\item Led 15-member team; implemented embedded control system with real-time sensor fusion achieving \textpm10cm precision at AIChE National Competition (2nd place, 2024)
|
\item Led a 15-member interdisciplinary team; implemented finite-state embedded control and real-time sensor integration achieving \textpm10cm distance precision in AIChE competition
|
||||||
\end{itemize}
|
\end{itemize}
|
||||||
|
|
||||||
% Technical Skills
|
|
||||||
\input{shared/sections/skills-resume}
|
\input{shared/sections/skills-resume}
|
||||||
|
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|||||||
@@ -10,4 +10,6 @@
|
|||||||
|
|
||||||
\textbf{Bachelor of Science in Computer Science and Engineering, Honors} \hfill \textbf{May 2026}
|
\textbf{Bachelor of Science in Computer Science and Engineering, Honors} \hfill \textbf{May 2026}
|
||||||
|
|
||||||
Engineering GPA: 3.92/4.0 \textbullet{} Overall GPA: 3.71/4.0 \textbullet{} Dean's List: Seven Semesters
|
Engineering GPA: 3.92/4.0 \textbullet{} Overall GPA: 3.71/4.0 \textbullet{} Magna Cum Laude \textbullet{} Dean's List: Seven Semesters
|
||||||
|
|
||||||
|
\textit{James M. Pommersheim Research \& Innovation in Engineering Award} --- awarded to the engineering student who has achieved through creative effort outstanding work of scholarship or invention
|
||||||
|
|||||||
Reference in New Issue
Block a user