@jaimanm/resumake 1.0.0 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/npm-publish.yml +0 -2
- package/CONTRIBUTING.md +14 -1
- package/package.json +5 -1
- package/src/commands/config.js +5 -2
- package/src/commands/setup.js +6 -4
- package/src/index.js +4 -2
- package/templates/awesome-cv/.github/workflows/build-resume.yml +65 -0
- package/templates/awesome-cv/README.md +1 -0
- package/templates/awesome-cv/awesome-cv.cls +885 -0
- package/templates/awesome-cv/build_all.sh +12 -0
- package/templates/awesome-cv/cv/certificates.tex +111 -0
- package/templates/awesome-cv/cv/committees.tex +48 -0
- package/templates/awesome-cv/cv/education.tex +25 -0
- package/templates/awesome-cv/cv/experience.tex +186 -0
- package/templates/awesome-cv/cv/extracurricular.tex +81 -0
- package/templates/awesome-cv/cv/honors.tex +181 -0
- package/templates/awesome-cv/cv/presentation.tex +50 -0
- package/templates/awesome-cv/cv/skills.tex +38 -0
- package/templates/awesome-cv/cv/writing.tex +37 -0
- package/templates/awesome-cv/cv.tex +114 -0
- package/templates/jakes-cv/.github/workflows/build-resume.yml +65 -0
- package/templates/jakes-cv/README.md +29 -0
- package/templates/jakes-cv/build_all.sh +22 -0
- package/templates/jakes-cv/cv-sections/certificates.tex +8 -0
- package/templates/jakes-cv/cv-sections/committees.tex +19 -0
- package/templates/jakes-cv/cv-sections/education.tex +10 -0
- package/templates/jakes-cv/cv-sections/experience.tex +22 -0
- package/templates/jakes-cv/cv-sections/extracurricular.tex +20 -0
- package/templates/jakes-cv/cv-sections/honors.tex +10 -0
- package/templates/jakes-cv/cv-sections/presentation.tex +19 -0
- package/templates/jakes-cv/cv-sections/projects.tex +15 -0
- package/templates/jakes-cv/cv-sections/skills.tex +10 -0
- package/templates/jakes-cv/cv-sections/writing.tex +19 -0
- package/templates/jakes-cv/cv.tex +174 -0
- package/templates/jakes-cv/fonts/Roboto-Bold.ttf +0 -0
- package/templates/jakes-cv/fonts/Roboto-BoldItalic.ttf +0 -0
- package/templates/jakes-cv/fonts/Roboto-Italic.ttf +0 -0
- package/templates/jakes-cv/fonts/Roboto-Light.ttf +0 -0
- package/templates/jakes-cv/fonts/Roboto-LightItalic.ttf +0 -0
- package/templates/jakes-cv/fonts/Roboto-Medium.ttf +0 -0
- package/templates/jakes-cv/fonts/Roboto-MediumItalic.ttf +0 -0
- package/templates/jakes-cv/fonts/Roboto-Regular.ttf +0 -0
- package/templates/jakes-cv/fonts/Roboto-Thin.ttf +0 -0
- package/templates/jakes-cv/fonts/Roboto-ThinItalic.ttf +0 -0
- package/templates/jakes-resume/.github/workflows/build-resume.yml +65 -0
- package/templates/jakes-resume/README.md +1 -0
- package/templates/jakes-resume/build_all.sh +7 -0
- package/templates/jakes-resume/resume.tex +218 -0
- package/templates/modular-multi/.github/workflows/build-resume.yml +65 -0
- package/templates/modular-multi/README.md +1 -0
- package/templates/modular-multi/build_all.sh +23 -0
- package/templates/modular-multi/resume_aiml.tex +5 -0
- package/templates/modular-multi/resume_backend.tex +5 -0
- package/templates/modular-multi/resume_content.tex +136 -0
- package/templates/modular-multi/resume_preamble.tex +87 -0
- package/templates/modular-multi/resume_quantum.tex +5 -0
- package/templates/modular-multi/test.txt +80 -0
- package/tests/index.test.js +22 -90
- package/tests/setup.test.js +8 -4
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
\begin{center}
|
|
2
|
+
\textbf{\Huge \scshape Jaiman Munshi} \\ \vspace{1pt}
|
|
3
|
+
\small \href{mailto:jaimanmunshi@gmail.com}{\underline{jaimanmunshi@gmail.com}} $|$
|
|
4
|
+
\href{https://linkedin.com/in/jaimanmunshi}{\underline{linkedin.com/in/jaimanmunshi}} $|$
|
|
5
|
+
\href{https://jaimanm.github.io}{\underline{jaimanm.github.io}}
|
|
6
|
+
\end{center}
|
|
7
|
+
|
|
8
|
+
%-----------EDUCATION-----------
|
|
9
|
+
\section{Education}
|
|
10
|
+
\resumeSubHeadingListStart
|
|
11
|
+
\resumeSubheading
|
|
12
|
+
{University of Maryland}{College Park, MD}
|
|
13
|
+
{B.S. in Computer Science - Machine Learning $|$ GPA: 3.94}{Graduation: May 2027}
|
|
14
|
+
\resumeItemListStart
|
|
15
|
+
\resumeItem{\textbf{Minors}: Quantum Science \& Engineering, Statistics}
|
|
16
|
+
\resumeItem{\textbf{Relevant Coursework}: Quantum Computing, Artificial Intelligence, Algorithms, Data Structures, Computer Systems, Data Science}
|
|
17
|
+
\resumeItemListEnd
|
|
18
|
+
|
|
19
|
+
\resumeProjectHeading
|
|
20
|
+
{\textbf{Certifications}}{}
|
|
21
|
+
\resumeItemListStart
|
|
22
|
+
\resumeItem{\textbf{Microsoft Certified: Machine Learning Operations Engineer Associate} $|$ \emph{MLOps, Azure ML, Automated Pipelines}}
|
|
23
|
+
\resumeItem{\textbf{IBM Certified V2.X Qiskit Developer - Associate} $|$ \emph{Qiskit, Sampler/Estimator, Hardware Transpilation}}
|
|
24
|
+
\resumeItemListEnd
|
|
25
|
+
\resumeSubHeadingListEnd
|
|
26
|
+
|
|
27
|
+
%-----------EXPERIENCE-----------
|
|
28
|
+
\section{Experience}
|
|
29
|
+
\resumeSubHeadingListStart
|
|
30
|
+
|
|
31
|
+
\resumeProjectHeading
|
|
32
|
+
{\textbf{Bank of America} $|$ \emph{Software Engineering Intern}}{Jun 2026 -- Aug 2026}
|
|
33
|
+
\resumeItemListStart
|
|
34
|
+
\iftoggle{aiml}{
|
|
35
|
+
\resumeItem{Engineered a custom AI agent integrated with database and spreadsheet tools to automate manual dividend processing, delivering a conversational chat interface to operations and support teams.}
|
|
36
|
+
\resumeItem{Architected the migration of a legacy enterprise fund database application to a modern React and Spring Boot stack, developing REST APIs and integrating Ping OIDC for secure authentication.}
|
|
37
|
+
\resumeItem{Optimized backend SQL to improve response time by 3x, wrote comprehensive unit tests for both frontend and backend, and accelerated feature delivery using custom Github Copilot workflows and MCP servers.}
|
|
38
|
+
}{
|
|
39
|
+
\resumeItem{Architected the migration of a legacy enterprise fund database application to a modern React and Spring Boot stack, developing REST APIs and integrating Ping OIDC for secure authentication.}
|
|
40
|
+
\resumeItem{Optimized backend SQL to improve response time by 3x, wrote comprehensive unit tests for both frontend and backend, and accelerated feature delivery using custom Github Copilot workflows and MCP servers.}
|
|
41
|
+
\resumeItem{Engineered a custom AI agent integrated with database and spreadsheet tools to automate manual dividend processing, delivering a conversational chat interface to operations and support teams.}
|
|
42
|
+
}
|
|
43
|
+
\resumeItemListEnd
|
|
44
|
+
|
|
45
|
+
\resumeProjectHeading
|
|
46
|
+
{\textbf{Axcellion.ai} $|$ \emph{Software Engineer}}{Jan 2026 -- May 2026}
|
|
47
|
+
\resumeItemListStart
|
|
48
|
+
\iftoggle{aiml}{
|
|
49
|
+
\resumeItem{Engineered a RAG intelligence engine mapping over 100k nodes and relationships in a Neo4j knowledge graph, by utilizing AWS Lambda and EventBridge to automate daily data source synchronization and 768-dim vectorization in under 9 seconds of runtime.}
|
|
50
|
+
\resumeItem{Architected a multithreaded ingestion pipeline to process over 108,000 regulatory filings totaling 80+ GB at 9.1 docs/sec with 0 failures, utilizing AWS EC2 to bypass remote server rate-limits.}
|
|
51
|
+
}{
|
|
52
|
+
\resumeItem{Architected a multithreaded ingestion pipeline to process over 108,000 regulatory filings totaling 80+ GB at 9.1 docs/sec with 0 failures, utilizing AWS EC2 to bypass remote server rate-limits and maximize bandwidth during high-speed bulk transfers.}
|
|
53
|
+
\resumeItem{Engineered a RAG intelligence engine mapping over 100k nodes and relationships in a Neo4j knowledge graph, by utilizing AWS Lambda and EventBridge to automate daily data source synchronization.}
|
|
54
|
+
}
|
|
55
|
+
\resumeItemListEnd
|
|
56
|
+
|
|
57
|
+
\resumeProjectHeading
|
|
58
|
+
{\textbf{IonQ} $|$ \emph{Project Lead}}{Aug 2025 -- Present}
|
|
59
|
+
\resumeItemListStart
|
|
60
|
+
\iftoggle{backend}{
|
|
61
|
+
\resumeItem{Managing SLURM-scheduled parallelization on the Zaratan HPC cluster, optimizing data loading routines to reduce epoch training cycles from 72 hours to 10 minutes.}
|
|
62
|
+
\resumeItem{Directing a 12-engineer team to scale distributed computing workflows into a published arXiv paper, establishing standardized code review, Agile workflows, and documentation protocols.}
|
|
63
|
+
}{
|
|
64
|
+
\iftoggle{quantum}{
|
|
65
|
+
\resumeItem{Directing a 12-engineer team to scale a hybrid quantum-classical model into a published arXiv paper, emphasizing variational quantum circuits and algorithmic abstractions over PennyLane.}
|
|
66
|
+
\resumeItem{Managing SLURM-scheduled parallelization on the Zaratan HPC cluster, optimizing data loading routines to reduce epoch training cycles from 72 hours to 10 minutes.}
|
|
67
|
+
}{
|
|
68
|
+
\resumeItem{Directing a 12-engineer team to scale a hybrid quantum-classical model into a published arXiv paper, establishing standardized code review, Agile workflows, and documentation protocols to maintain development velocity.}
|
|
69
|
+
\resumeItem{Managing SLURM-scheduled parallelization on the Zaratan HPC cluster, optimizing data loading routines to reduce epoch training cycles from 72 hours to 10 minutes.}
|
|
70
|
+
}}
|
|
71
|
+
\resumeItemListEnd
|
|
72
|
+
|
|
73
|
+
\resumeProjectHeading
|
|
74
|
+
{\textbf{National Quantum Laboratory} $|$ \emph{Quantum Computing Research Intern}}{Jul 2025 -- Aug 2025}
|
|
75
|
+
\resumeItemListStart
|
|
76
|
+
\iftoggle{aiml}{
|
|
77
|
+
\resumeItem{Achieved \textgreater 99\% accuracy on MNIST using a hybrid machine learning approach matching published benchmarks, leveraging PyTorch to validate the model architecture.}
|
|
78
|
+
\resumeItem{Established the foundational ML architecture for the QFireNet wildfire segmentation model, executing the first GPU-accelerated training cycles to validate model feasibility.}
|
|
79
|
+
}{
|
|
80
|
+
\iftoggle{quantum}{
|
|
81
|
+
\resumeItem{Achieved \textgreater 99\% accuracy on MNIST using a hybrid quantum approach matching published benchmarks, and validated the hand-built model on both IonQ quantum processors and the PennyLane Lightning simulator.}
|
|
82
|
+
\resumeItem{Established the foundational architecture for the QFireNet wildfire segmentation model, executing the first GPU-accelerated training cycles to validate the feasibility of a hybrid quantum approach to wildfire detection.}
|
|
83
|
+
}{
|
|
84
|
+
\resumeItem{Established the foundational architecture for the QFireNet wildfire segmentation model, executing the first GPU-accelerated training cycles to validate the feasibility of a hybrid quantum approach to wildfire detection.}
|
|
85
|
+
\resumeItem{Achieved \textgreater 99\% accuracy on MNIST using a hybrid quantum approach matching published benchmarks, and validated the hand-built model on both IonQ quantum processors and the Pennylane Lightning simulator.}
|
|
86
|
+
}}
|
|
87
|
+
\resumeItemListEnd
|
|
88
|
+
|
|
89
|
+
\resumeProjectHeading
|
|
90
|
+
{\textbf{General Dynamics IT} $|$ \emph{Backend Engineer}}{Feb 2025 -- May 2025}
|
|
91
|
+
\resumeItemListStart
|
|
92
|
+
\resumeItem{Built an agentic RAG pipeline processing a dataset of 500,000 emails between 150 accounts, developing Qdrant embeddings and a Neo4j knowledge graph to enable Ai-powered insights and summaries in under 6 seconds per query.}
|
|
93
|
+
\resumeItem{Developed an end-to-end React and Flask full-stack application to deliver real-time summarization of the Enron corpus, handling large-scale unstructured email data through custom parsing and preprocessing techniques.}
|
|
94
|
+
\resumeItemListEnd
|
|
95
|
+
|
|
96
|
+
\resumeSubHeadingListEnd
|
|
97
|
+
|
|
98
|
+
%-----------PROJECTS-----------
|
|
99
|
+
\section{Projects}
|
|
100
|
+
\resumeSubHeadingListStart
|
|
101
|
+
\resumeProjectHeading
|
|
102
|
+
{\textbf{QFireNet: Quantum-Enhanced Wildfire Segmentation} $|$ \emph{PyTorch, PennyLane, Jupyter}}{Aug 2025 -- Present}
|
|
103
|
+
\resumeItemListStart
|
|
104
|
+
\iftoggle{aiml}{
|
|
105
|
+
\resumeItem{Improved test F1 score by 11\% over 16 experiments, using angle embedding to prevent NaN gradient collapse during the machine learning training loop.}
|
|
106
|
+
\resumeItem{Published a hybrid U-Net model for multispectral satellite wildfire detection, improving feature extraction in the Sen2Fire dataset.}
|
|
107
|
+
}{
|
|
108
|
+
\iftoggle{quantum}{
|
|
109
|
+
\resumeItem{Published a hybrid quantum-classical U-Net model for multispectral satellite wildfire detection, replacing the classical bottleneck with QuFeX and QB-Net variational quantum circuits to improve feature extraction in the Sen2Fire dataset.}
|
|
110
|
+
\resumeItem{Improved test F1 score by 11\% over 16 experiments, using angle embedding to prevent NaN gradient collapse during training.}
|
|
111
|
+
}{
|
|
112
|
+
\resumeItem{Published a hybrid quantum-classical U-Net model for multispectral satellite wildfire detection, replacing the classical bottleneck with QuFeX and QB-Net variational quantum circuits to improve feature extraction in the Sen2Fire dataset.}
|
|
113
|
+
\resumeItem{Improved test F1 score by 11\% over 16 experiments, using angle embedding to prevent NaN gradient collapse during training.}
|
|
114
|
+
}}
|
|
115
|
+
\resumeItemListEnd
|
|
116
|
+
\resumeProjectHeading
|
|
117
|
+
{\textbf{Trace} $|$ \emph{React, Next.js, Flask, Supabase, OpenCV, XGBoost}}{}
|
|
118
|
+
\resumeItemListStart
|
|
119
|
+
\resumeItem{Trained a custom XGBoost classifier on 1,056 samples to achieve 91\% Parkinson's severity classification accuracy across 5 motor skill metrics, integrating into a web patient monitoring platform processing tracing assessments in under 2 seconds.}
|
|
120
|
+
\resumeItemListEnd
|
|
121
|
+
\resumeSubHeadingListEnd
|
|
122
|
+
|
|
123
|
+
%-----------PROGRAMMING SKILLS-----------
|
|
124
|
+
\section{Technical Skills}
|
|
125
|
+
\begin{itemize}[leftmargin=0.15in, label={}]
|
|
126
|
+
\small{\item{
|
|
127
|
+
\iftoggle{aiml}{
|
|
128
|
+
\textbf{ML \& Quantum}{: PyTorch, Tensorflow, Scikit-learn, Pandas, MLflow, Pennylane, Qiskit, OpenCV, NumPy, Matplotlib} \\
|
|
129
|
+
\textbf{Languages}{: Python, Java, C, Typescript, HTML/CSS, OCaml, C\#, Assembly (x86-64), UML, SQL, SAS} \\
|
|
130
|
+
}{
|
|
131
|
+
\textbf{Languages}{: Python, Java, C, Typescript, HTML/CSS, OCaml, C\#, Assembly (x86-64), UML, SQL, SAS} \\
|
|
132
|
+
\textbf{ML \& Quantum}{: PyTorch, Tensorflow, Pennylane, Qiskit, Scikit-learn, Pandas, MLflow, OpenCV, NumPy, Matplotlib} \\
|
|
133
|
+
}
|
|
134
|
+
\textbf{Frameworks \& Tools}{: React, Git, Jupyter, Spring Boot, Next.js, Flask, AWS, Azure, MLOps, Neo4j, HPC, SQL Server, Oracle}
|
|
135
|
+
}}
|
|
136
|
+
\end{itemize}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
\documentclass[letterpaper,10pt]{article}
|
|
2
|
+
|
|
3
|
+
\usepackage{latexsym}
|
|
4
|
+
\usepackage[empty]{fullpage}
|
|
5
|
+
\usepackage{titlesec}
|
|
6
|
+
\usepackage{marvosym}
|
|
7
|
+
\usepackage[usenames,dvipsnames]{color}
|
|
8
|
+
\usepackage{verbatim}
|
|
9
|
+
\usepackage{enumitem}
|
|
10
|
+
\usepackage[hidelinks]{hyperref}
|
|
11
|
+
\usepackage{fancyhdr}
|
|
12
|
+
\usepackage[english]{babel}
|
|
13
|
+
\usepackage{tabularx}
|
|
14
|
+
\usepackage{etoolbox}
|
|
15
|
+
\input{glyphtounicode}
|
|
16
|
+
|
|
17
|
+
\pagestyle{fancy}
|
|
18
|
+
\fancyhf{} % clear all header and footer fields
|
|
19
|
+
\fancyfoot{}
|
|
20
|
+
\setlength{\footskip}{4pt}
|
|
21
|
+
\renewcommand{\headrulewidth}{0pt}
|
|
22
|
+
\renewcommand{\footrulewidth}{0pt}
|
|
23
|
+
|
|
24
|
+
% Adjust margins
|
|
25
|
+
\addtolength{\oddsidemargin}{-0.5in}
|
|
26
|
+
\addtolength{\evensidemargin}{-0.5in}
|
|
27
|
+
\addtolength{\textwidth}{1in}
|
|
28
|
+
\addtolength{\topmargin}{-.5in}
|
|
29
|
+
\addtolength{\textheight}{1.0in}
|
|
30
|
+
|
|
31
|
+
\urlstyle{same}
|
|
32
|
+
|
|
33
|
+
\raggedbottom
|
|
34
|
+
\raggedright
|
|
35
|
+
\setlength{\tabcolsep}{0in}
|
|
36
|
+
|
|
37
|
+
% Sections formatting
|
|
38
|
+
\titleformat{\section}{
|
|
39
|
+
\vspace{-4pt}\scshape\raggedright\large
|
|
40
|
+
}{}{0em}{}[\color{black}\titlerule \vspace{-5pt}]
|
|
41
|
+
|
|
42
|
+
% Ensure that generate pdf is machine readable/ATS parsable
|
|
43
|
+
\pdfgentounicode=1
|
|
44
|
+
|
|
45
|
+
%-------------------------
|
|
46
|
+
% Custom commands
|
|
47
|
+
\newcommand{\resumeItem}[1]{
|
|
48
|
+
\item\small{
|
|
49
|
+
{#1 \vspace{-2pt}}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
\newcommand{\resumeSubheading}[4]{
|
|
54
|
+
\vspace{-2pt}\item
|
|
55
|
+
\begin{tabular*}{0.97\textwidth}[t]{l@{\extracolsep{\fill}}r}
|
|
56
|
+
\textbf{#1} & #2 \\
|
|
57
|
+
\textit{\small#3} & \textit{\small #4} \\
|
|
58
|
+
\end{tabular*}\vspace{-7pt}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
\newcommand{\resumeSubSubheading}[2]{
|
|
62
|
+
\item
|
|
63
|
+
\begin{tabular*}{0.97\textwidth}{l@{\extracolsep{\fill}}r}
|
|
64
|
+
\textit{\small#1} & \textit{\small #2} \\
|
|
65
|
+
\end{tabular*}\vspace{-7pt}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
\newcommand{\resumeProjectHeading}[2]{
|
|
69
|
+
\vspace{-2pt}\item
|
|
70
|
+
\begin{tabular*}{0.97\textwidth}[t]{l@{\extracolsep{\fill}}r}
|
|
71
|
+
\small#1 & #2 \\
|
|
72
|
+
\end{tabular*}\vspace{-7pt}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
\newcommand{\resumeSubItem}[1]{\resumeItem{#1}\vspace{-4pt}}
|
|
76
|
+
|
|
77
|
+
\renewcommand\labelitemii{$\vcenter{\hbox{\tiny$\bullet$}}$}
|
|
78
|
+
|
|
79
|
+
\newcommand{\resumeSubHeadingListStart}{\begin{itemize}[leftmargin=0.15in, label={}]}
|
|
80
|
+
\newcommand{\resumeSubHeadingListEnd}{\end{itemize}}
|
|
81
|
+
\newcommand{\resumeItemListStart}{\begin{itemize}}
|
|
82
|
+
\newcommand{\resumeItemListEnd}{\end{itemize}\vspace{-5pt}}
|
|
83
|
+
|
|
84
|
+
% Toggles for tailoring
|
|
85
|
+
\newtoggle{backend}
|
|
86
|
+
\newtoggle{aiml}
|
|
87
|
+
\newtoggle{quantum}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
Jaiman Munshi
|
|
2
|
+
jaimanmunshi@gmail.com | linkedin.com/in/jaimanmunshi | jaimanm.github.io
|
|
3
|
+
|
|
4
|
+
Education
|
|
5
|
+
University of Maryland College Park, MD
|
|
6
|
+
B.S. in Computer Science - Machine Learning | GPA: 3.94 Graduation: May 2027
|
|
7
|
+
• Minors: Quantum Science & Engineering, Statistics
|
|
8
|
+
|
|
9
|
+
• Relevant Coursework: Quantum Computing, Artificial Intelligence, Algorithms, Data Structures, Computer Systems,
|
|
10
|
+
|
|
11
|
+
Data Science
|
|
12
|
+
IBM Certified V2.X Qiskit Developer - Associate
|
|
13
|
+
• Proficient in Qiskit patterns, Sampler/Estimator primitives, error correction & mitigation techniques, and optimized
|
|
14
|
+
|
|
15
|
+
hardware transpilation
|
|
16
|
+
|
|
17
|
+
Experience
|
|
18
|
+
Bank of America
|
|
19
|
+
Software Engineering Intern Jun 2026 – Aug 2026
|
|
20
|
+
• Architected the migration of a legacy enterprise fund database application to a modern React and Spring Boot stack,
|
|
21
|
+
|
|
22
|
+
developing REST APIs and integrating Ping OIDC for secure authentication.
|
|
23
|
+
• Optimized backend SQL to improve response time by 3x, wrote comprehensive unit tests for both frontend and backend, and
|
|
24
|
+
|
|
25
|
+
accelerated feature delivery using custom Github Copilot workflows and MCP servers.
|
|
26
|
+
• Engineered a custom AI agent integrated with database and spreadsheet tools to automate manual dividend processing,
|
|
27
|
+
|
|
28
|
+
delivering a conversational chat interface to operations and support teams.
|
|
29
|
+
Axcellion.ai
|
|
30
|
+
Software Engineer Jan 2026 – May 2026
|
|
31
|
+
• Architected a multithreaded ingestion pipeline to process over 108,000 regulatory filings totaling 80+ GB at 9.1 docs/sec with
|
|
32
|
+
|
|
33
|
+
0 failures, utilizing AWS EC2 to bypass remote server rate-limits and maximize bandwidth during high-speed bulk transfers.
|
|
34
|
+
• Engineered a RAG intelligence engine mapping over 100k nodes and relationships in a Neo4j knowledge graph, by utilizing
|
|
35
|
+
|
|
36
|
+
AWS Lambda and EventBridge to automate daily data source synchronization.
|
|
37
|
+
IonQ
|
|
38
|
+
Project Lead Aug 2025 – Present
|
|
39
|
+
• Managing SLURM-scheduled parallelization on the Zaratan HPC cluster, optimizing data loading routines to reduce epoch
|
|
40
|
+
|
|
41
|
+
training cycles from 72 hours to 10 minutes.
|
|
42
|
+
• Directing a 12-engineer team to scale distributed computing workflows into a published arXiv paper, establishing
|
|
43
|
+
|
|
44
|
+
standardized code review, Agile workflows, and documentation protocols.
|
|
45
|
+
National Quantum Laboratory
|
|
46
|
+
Quantum Computing Research Intern Jul 2025 – Aug 2025
|
|
47
|
+
• Established the foundational architecture for the QFireNet wildfire segmentation model, executing the first GPU-accelerated
|
|
48
|
+
|
|
49
|
+
training cycles to validate the feasibility of a hybrid quantum approach to wildfire detection.
|
|
50
|
+
• Achieved >99% accuracy on MNIST using a hybrid quantum approach matching published benchmarks, and validated the
|
|
51
|
+
|
|
52
|
+
hand-built model on both IonQ quantum processors and the Pennylane Lightning simulator.
|
|
53
|
+
General Dynamics IT
|
|
54
|
+
Backend Engineer Feb 2025 – May 2025
|
|
55
|
+
• Built an agentic RAG pipeline processing a dataset of 500,000 emails between 150 accounts, developing Qdrant embeddings
|
|
56
|
+
|
|
57
|
+
and a Neo4j knowledge graph to enable Ai-powered insights and summaries in under 6 seconds per query.
|
|
58
|
+
• Developed an end-to-end React and Flask full-stack application to deliver real-time summarization of the Enron corpus,
|
|
59
|
+
|
|
60
|
+
handling large-scale unstructured email data through custom parsing and preprocessing techniques.
|
|
61
|
+
|
|
62
|
+
Projects
|
|
63
|
+
QFireNet: Quantum-Enhanced Wildfire Segmentation | PyTorch, PennyLane, Jupyter Aug 2025 – Present
|
|
64
|
+
• Published a hybrid quantum-classical U-Net model for multispectral satellite wildfire detection, replacing the classical
|
|
65
|
+
|
|
66
|
+
bottleneck with QuFeX and QB-Net variational quantum circuits to improve feature extraction in the Sen2Fire dataset.
|
|
67
|
+
• Improved test F1 score by 11% over 16 experiments, using angle embedding to prevent NaN gradient collapse during training.
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
Trace | React, Next.js, Flask, Supabase, OpenCV, XGBoost
|
|
72
|
+
• Trained a custom XGBoost classifier on 1,056 samples to achieve 91% Parkinson’s severity classification accuracy across 5
|
|
73
|
+
|
|
74
|
+
motor skill metrics, integrating into a web patient monitoring platform processing tracing assessments in under 2 seconds.
|
|
75
|
+
|
|
76
|
+
Technical Skills
|
|
77
|
+
Languages: Python, Java, C, Typescript, HTML/CSS, OCaml, C#, Assembly (x86-64), UML, SQL, SAS
|
|
78
|
+
ML & Quantum: PyTorch, Tensorflow, Pennylane, Qiskit, Scikit-learn, OpenCV, Pandas, NumPy, Matplotlib
|
|
79
|
+
Frameworks & Tools: React, Git, Jupyter, Spring Boot, Next.js, Flask, Sveltekit, Vitest, AWS, Neo4j, HPC, SQL Server, Oracle
|
|
80
|
+
|
package/tests/index.test.js
CHANGED
|
@@ -20,7 +20,11 @@ describe('CLI Commands', () => {
|
|
|
20
20
|
chdirMock = jest.spyOn(process, 'chdir').mockImplementation(() => {});
|
|
21
21
|
logMock = jest.spyOn(console, 'log').mockImplementation(() => {});
|
|
22
22
|
errorMock = jest.spyOn(console, 'error').mockImplementation(() => {});
|
|
23
|
-
|
|
23
|
+
fs.cpSync = jest.fn();
|
|
24
|
+
fs.existsSync.mockReturnValue(true);
|
|
25
|
+
fs.readFileSync.mockReturnValue('gdrive:Resumes/');
|
|
26
|
+
fs.writeFileSync.mockReturnValue(true);
|
|
27
|
+
|
|
24
28
|
jest.clearAllMocks();
|
|
25
29
|
});
|
|
26
30
|
|
|
@@ -30,9 +34,11 @@ describe('CLI Commands', () => {
|
|
|
30
34
|
|
|
31
35
|
describe('setup.js', () => {
|
|
32
36
|
it('Happy Path: Successfully scaffolds repo, updates action file, and sets Google Drive token', async () => {
|
|
33
|
-
execa.
|
|
34
|
-
|
|
35
|
-
|
|
37
|
+
execa.mockImplementation((cmd, args) => {
|
|
38
|
+
if (cmd === 'rclone' && args[0] === 'authorize') return Promise.resolve({ stdout: '{"access_token":"super-secret-token","token_type":"Bearer"}', stderr: '' });
|
|
39
|
+
if (cmd === 'git' && args[0] === 'config') return Promise.resolve({ stdout: 'https://github.com/test/repo.git\n' });
|
|
40
|
+
return Promise.resolve({ stdout: '' });
|
|
41
|
+
});
|
|
36
42
|
|
|
37
43
|
inquirer.prompt.mockResolvedValueOnce({
|
|
38
44
|
targetDir: '..',
|
|
@@ -42,28 +48,6 @@ describe('CLI Commands', () => {
|
|
|
42
48
|
});
|
|
43
49
|
inquirer.prompt.mockResolvedValueOnce({ ready: true });
|
|
44
50
|
|
|
45
|
-
execa.mockResolvedValueOnce({ stdout: 'Logged in' }); // gh auth status
|
|
46
|
-
execa.mockResolvedValueOnce({}); // gh repo create
|
|
47
|
-
execa.mockResolvedValueOnce({ stdout: 'https://github.com/test/repo.git\n' }); // git config --get remote.origin.url
|
|
48
|
-
execa.mockResolvedValueOnce({}); // git remote add
|
|
49
|
-
execa.mockResolvedValueOnce({}); // git fetch
|
|
50
|
-
execa.mockResolvedValueOnce({}); // git reset
|
|
51
|
-
|
|
52
|
-
fs.existsSync.mockImplementation((pathStr) => pathStr.includes('build-resume.yml') ? true : false);
|
|
53
|
-
fs.readFileSync.mockReturnValueOnce('... rclone sync PDF_Exports/ gdrive:Resumes/ ...');
|
|
54
|
-
|
|
55
|
-
execa.mockResolvedValueOnce({}); // git add
|
|
56
|
-
execa.mockResolvedValueOnce({}); // git commit
|
|
57
|
-
|
|
58
|
-
const fakeToken = `{"access_token":"super-secret-token","token_type":"Bearer"}`;
|
|
59
|
-
execa.mockResolvedValueOnce({
|
|
60
|
-
stdout: `Paste the following into your remote machine --->\n${fakeToken}\n<---End paste`,
|
|
61
|
-
stderr: ''
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
execa.mockResolvedValueOnce({}); // gh secret set
|
|
65
|
-
execa.mockResolvedValueOnce({}); // git push
|
|
66
|
-
|
|
67
51
|
await setupCommand();
|
|
68
52
|
|
|
69
53
|
expect(fs.writeFileSync).toHaveBeenCalledWith(
|
|
@@ -74,81 +58,29 @@ describe('CLI Commands', () => {
|
|
|
74
58
|
expect(exitMock).not.toHaveBeenCalled();
|
|
75
59
|
});
|
|
76
60
|
|
|
77
|
-
it('Error Path: Logs warning but continues to push if Google Drive sync fails', async () => {
|
|
78
|
-
execa.mockResolvedValueOnce({ stdout: 'git version' });
|
|
79
|
-
execa.mockResolvedValueOnce({ stdout: 'gh version' });
|
|
80
|
-
execa.mockResolvedValueOnce({ stdout: 'rclone v1' });
|
|
81
|
-
|
|
82
|
-
inquirer.prompt.mockResolvedValueOnce({
|
|
83
|
-
targetDir: '..',
|
|
84
|
-
repoName: 'my-test-resume',
|
|
85
|
-
template: 'modular-multi',
|
|
86
|
-
driveFolder: 'Resumes'
|
|
87
|
-
});
|
|
88
|
-
inquirer.prompt.mockResolvedValueOnce({ ready: true });
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
execa.mockResolvedValueOnce({ stdout: 'Logged in' }); // gh auth status
|
|
92
|
-
execa.mockResolvedValueOnce({}); // gh repo create
|
|
93
|
-
execa.mockResolvedValueOnce({ stdout: 'https://github.com/test/repo.git\n' }); // git config --get remote.origin.url
|
|
94
|
-
execa.mockResolvedValueOnce({}); // git remote add
|
|
95
|
-
execa.mockResolvedValueOnce({}); // git fetch
|
|
96
|
-
execa.mockResolvedValueOnce({}); // git reset
|
|
97
|
-
fs.existsSync.mockReturnValue(false);
|
|
98
|
-
execa.mockResolvedValueOnce({}); // git add
|
|
99
|
-
execa.mockResolvedValueOnce({}); // git commit
|
|
100
|
-
|
|
101
|
-
// Simulate rclone failure
|
|
102
|
-
execa.mockRejectedValueOnce(new Error('rclone crashed'));
|
|
103
|
-
|
|
104
|
-
execa.mockResolvedValueOnce({}); // git push
|
|
105
|
-
|
|
106
|
-
await setupCommand();
|
|
107
|
-
expect(exitMock).not.toHaveBeenCalled();
|
|
108
|
-
});
|
|
109
|
-
|
|
110
61
|
it('Error Path: Triggers Homebrew installer if dependencies are missing', async () => {
|
|
111
|
-
execa.
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
62
|
+
execa.mockImplementation((cmd, args) => {
|
|
63
|
+
if (['git', 'gh', 'rclone'].includes(cmd) && args[0] === '--version') return Promise.reject(new Error('command not found'));
|
|
64
|
+
return Promise.resolve({ stdout: '' });
|
|
65
|
+
});
|
|
115
66
|
inquirer.prompt.mockResolvedValueOnce({ install: true });
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
inquirer.prompt.mockResolvedValueOnce({ targetDir: '..', repoName: 'test', template: 'standard', driveFolder: 'Resumes' });
|
|
120
|
-
|
|
121
|
-
execa.mockResolvedValue({ stdout: 'fake-url' }); // Default for all remaining calls
|
|
122
|
-
fs.existsSync.mockReturnValue(false);
|
|
123
|
-
inquirer.prompt.mockResolvedValueOnce({ ready: false }); // Skip drive auth
|
|
67
|
+
inquirer.prompt.mockResolvedValueOnce({ targetDir: '..', repoName: 'test', template: 'modular-multi', driveFolder: 'Resumes' });
|
|
68
|
+
inquirer.prompt.mockResolvedValueOnce({ ready: false });
|
|
124
69
|
|
|
125
70
|
await setupCommand();
|
|
126
71
|
|
|
127
72
|
expect(execa).toHaveBeenCalledWith('brew', ['install', 'git', 'gh', 'rclone']);
|
|
128
73
|
});
|
|
129
74
|
|
|
130
|
-
it('Error Path: Exits if dependencies are missing and user declines install', async () => {
|
|
131
|
-
execa.mockRejectedValueOnce(new Error('command not found')); // git
|
|
132
|
-
execa.mockResolvedValueOnce({ stdout: 'gh version' });
|
|
133
|
-
execa.mockResolvedValueOnce({ stdout: 'rclone v1' });
|
|
134
|
-
|
|
135
|
-
inquirer.prompt.mockResolvedValueOnce({ install: false });
|
|
136
|
-
|
|
137
|
-
await expect(setupCommand()).rejects.toThrow('process.exit(1) called');
|
|
138
|
-
expect(exitMock).toHaveBeenCalledWith(1);
|
|
139
|
-
});
|
|
140
|
-
|
|
141
75
|
it('Error Path: Suggests "gh auth login" if GitHub auth fails', async () => {
|
|
142
|
-
execa.
|
|
143
|
-
|
|
144
|
-
|
|
76
|
+
execa.mockImplementation((cmd, args) => {
|
|
77
|
+
if (cmd === 'gh' && args[0] === 'auth') return Promise.reject(new Error('auth failed'));
|
|
78
|
+
return Promise.resolve({ stdout: '' });
|
|
79
|
+
});
|
|
145
80
|
|
|
146
|
-
inquirer.prompt.mockResolvedValueOnce({ targetDir: '..', repoName: 'test', template: '
|
|
81
|
+
inquirer.prompt.mockResolvedValueOnce({ targetDir: '..', repoName: 'test', template: 'modular-multi', driveFolder: 'Resumes' });
|
|
147
82
|
inquirer.prompt.mockResolvedValueOnce({ ready: true });
|
|
148
83
|
|
|
149
|
-
// Fail GitHub auth
|
|
150
|
-
execa.mockRejectedValueOnce(new Error('auth failed'));
|
|
151
|
-
|
|
152
84
|
await expect(setupCommand()).rejects.toThrow('process.exit(1) called');
|
|
153
85
|
expect(exitMock).toHaveBeenCalledWith(1);
|
|
154
86
|
expect(logMock).toHaveBeenCalledWith(expect.stringContaining('gh auth login'));
|
|
@@ -170,7 +102,7 @@ describe('CLI Commands', () => {
|
|
|
170
102
|
|
|
171
103
|
expect(chokidar.watch).toHaveBeenCalledWith('**/*.tex', expect.any(Object));
|
|
172
104
|
|
|
173
|
-
execa.mockResolvedValueOnce({});
|
|
105
|
+
execa.mockResolvedValueOnce({});
|
|
174
106
|
await changeCallback('resume.tex');
|
|
175
107
|
|
|
176
108
|
expect(execa).toHaveBeenCalledWith('./build_all.sh');
|
package/tests/setup.test.js
CHANGED
|
@@ -33,7 +33,7 @@ describe('resumake setup command', () => {
|
|
|
33
33
|
return Promise.resolve({
|
|
34
34
|
targetDir: '/mock/path',
|
|
35
35
|
repoName: 'my-resume',
|
|
36
|
-
template: '
|
|
36
|
+
template: 'awesome-cv',
|
|
37
37
|
driveFolder: 'Resumes'
|
|
38
38
|
});
|
|
39
39
|
}
|
|
@@ -47,6 +47,7 @@ describe('resumake setup command', () => {
|
|
|
47
47
|
fs.existsSync.mockReturnValue(true);
|
|
48
48
|
fs.readFileSync.mockReturnValue('gdrive:Resumes/');
|
|
49
49
|
fs.writeFileSync.mockReturnValue(true);
|
|
50
|
+
fs.cpSync = jest.fn();
|
|
50
51
|
|
|
51
52
|
// Spy on process.chdir to avoid changing test runner directory
|
|
52
53
|
jest.spyOn(process, 'chdir').mockImplementation(() => {});
|
|
@@ -65,9 +66,12 @@ describe('resumake setup command', () => {
|
|
|
65
66
|
// Verify gh repo create was called
|
|
66
67
|
expect(execa).toHaveBeenCalledWith('gh', ['repo', 'create', 'my-resume', '--private', '--clone']);
|
|
67
68
|
|
|
68
|
-
// Verify template was
|
|
69
|
-
expect(
|
|
70
|
-
|
|
69
|
+
// Verify template was copied locally
|
|
70
|
+
expect(fs.cpSync).toHaveBeenCalledWith(
|
|
71
|
+
expect.stringContaining('templates/awesome-cv'),
|
|
72
|
+
expect.any(String),
|
|
73
|
+
{ recursive: true }
|
|
74
|
+
);
|
|
71
75
|
|
|
72
76
|
// Verify rclone was executed
|
|
73
77
|
expect(execa).toHaveBeenCalledWith('rclone', ['authorize', 'drive']);
|