@dytsou/resume-converter 2.0.2
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/.env.example +6 -0
- package/.github/dependabot.yml +44 -0
- package/.github/workflows/ci.yml +73 -0
- package/.github/workflows/deploy.yml +56 -0
- package/.github/workflows/publish.yml +241 -0
- package/LICENSE +21 -0
- package/README.md +186 -0
- package/eslint.config.js +28 -0
- package/index.html +15 -0
- package/latex/resume.tex +273 -0
- package/package.json +39 -0
- package/scripts/convert-latex.mjs +774 -0
- package/src/App.tsx +47 -0
- package/src/components/DownloadFromDriveButton.tsx +104 -0
- package/src/index.css +122 -0
- package/src/main.tsx +10 -0
- package/src/utils/googleDriveUtils.ts +64 -0
- package/src/utils/resumeUtils.ts +26 -0
- package/src/vite-env.d.ts +1 -0
- package/tsconfig.app.json +24 -0
- package/tsconfig.json +7 -0
- package/tsconfig.node.json +22 -0
- package/vite.config.ts +10 -0
package/latex/resume.tex
ADDED
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
%-------------------------
|
|
2
|
+
% Author : Tsou, Dong-You
|
|
3
|
+
%-------------------------
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
%------------PACKAGES----------------
|
|
8
|
+
\documentclass[a4paper,10.5pt]{article}
|
|
9
|
+
|
|
10
|
+
\usepackage{verbatim} % reimplements the "verbatim" and "verbatim*" environments
|
|
11
|
+
|
|
12
|
+
\usepackage{titlesec} % provides an interface to sectioning commands i.e. custom elements
|
|
13
|
+
|
|
14
|
+
\usepackage{color} % provides both foreground and background color management
|
|
15
|
+
|
|
16
|
+
\usepackage{enumitem} % provides control over enumerate, itemize and description
|
|
17
|
+
|
|
18
|
+
\usepackage{fancyhdr} % provides extensive facilities for constructing headers, footers and also controlling their use
|
|
19
|
+
|
|
20
|
+
\usepackage{tabularx} % defines an environment tabularx, extension of "tabular" with an extra designator x, paragraph like column whose width automatically expands to fill the width of the environment
|
|
21
|
+
|
|
22
|
+
\usepackage{latexsym} % provides mathematical symbols
|
|
23
|
+
|
|
24
|
+
\usepackage{marvosym} % provides martin vogel's symbol font which contains various symbols
|
|
25
|
+
|
|
26
|
+
\usepackage[empty]{fullpage} % sets margins to one inch and removes headers, footers etc..
|
|
27
|
+
|
|
28
|
+
\usepackage[hidelinks]{hyperref} % removes color and shadow of hyperlinks
|
|
29
|
+
|
|
30
|
+
\usepackage{fontawesome5}
|
|
31
|
+
|
|
32
|
+
\usepackage[normalem]{ulem} % provides "\ul" (uline) command which will break at line breaks
|
|
33
|
+
|
|
34
|
+
\usepackage[english]{babel} % provides culturally determined typographical rules for wide range of languages
|
|
35
|
+
%-----------------------------------------
|
|
36
|
+
|
|
37
|
+
\input glyphtounicode % converts glyph names to unicode
|
|
38
|
+
\pdfgentounicode=1 % ensures pdfs generated are ats readable
|
|
39
|
+
|
|
40
|
+
%----------FONT OPTIONS-------------------
|
|
41
|
+
\usepackage[default]{sourcesanspro} % uses the font source sans pro
|
|
42
|
+
\urlstyle{same} % changes url font from default urlfont to font being used by the document
|
|
43
|
+
%-----------------------------------------
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
%----------MARGIN OPTIONS-----------------
|
|
47
|
+
\pagestyle{fancy} % set page style to one configured by fancyhdr
|
|
48
|
+
\fancyhf{} % clear all header and footer fields
|
|
49
|
+
|
|
50
|
+
\renewcommand{\headrulewidth}{0in} % sets thickness of linerule under header to zero
|
|
51
|
+
\renewcommand{\footrulewidth}{0in} % sets thickness of linerule over footer to zero
|
|
52
|
+
|
|
53
|
+
\setlength{\tabcolsep}{0in} % sets thickness of column separator in tables to zero
|
|
54
|
+
|
|
55
|
+
% origin of the document is one inch from the top and from and the left
|
|
56
|
+
% oddsidemargin and evensidemargin both refer to the left margin
|
|
57
|
+
% right margin is indirectly set using oddsidemargin
|
|
58
|
+
\addtolength{\oddsidemargin}{-0.7in}
|
|
59
|
+
\addtolength{\topmargin}{-0.5in}
|
|
60
|
+
|
|
61
|
+
\addtolength{\textwidth}{1in} % sets width of text area in the page to 1.3 inch
|
|
62
|
+
\addtolength{\textheight}{2in} % sets height of text area in the page to 0.5 inch
|
|
63
|
+
|
|
64
|
+
\raggedbottom{} % makes all pages the height of current page, no extra vertical space added
|
|
65
|
+
\raggedright{} % makes all pages the width of current page, no extra horizontal space added
|
|
66
|
+
%------------------------------------------
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
%--------SECTIONING COMMANDS---------
|
|
70
|
+
% \titleformat{<command>}
|
|
71
|
+
% [<shape>]{<format>}{<label>}{<sep>}
|
|
72
|
+
% {<before-code>}[<after-code>]
|
|
73
|
+
|
|
74
|
+
% command is the sectioning command to be redefined
|
|
75
|
+
% shape is the style of the font; scshape stands for small caps style
|
|
76
|
+
% format is the format to be applied to whole title- label and text; absent here
|
|
77
|
+
% label defines the label
|
|
78
|
+
% sep is the horizontal separation between label and title body
|
|
79
|
+
% before-code is the code to be executed before
|
|
80
|
+
% after-code is the code to be executed after
|
|
81
|
+
|
|
82
|
+
\titleformat{\section}
|
|
83
|
+
{\scshape\large}{}
|
|
84
|
+
{0em}{\color{blue}}[\color{black}\titlerule\vspace{-2pt}]
|
|
85
|
+
%-------------------------------------
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
%--------REDEFINITIONS----------------
|
|
89
|
+
% redefines the style of the bullet point
|
|
90
|
+
\renewcommand\labelitemii{$\vcenter{\hbox{\tiny$\bullet$}}$}
|
|
91
|
+
|
|
92
|
+
% redefines the underline depth to 1pt
|
|
93
|
+
\renewcommand{\ULdepth}{1pt}
|
|
94
|
+
%-------------------------------------
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
%--------CUSTOM COMMANDS--------------
|
|
98
|
+
%\vspace{} defines a vertical space of given size, modifying this in custom commands can help stretch or shrink resume to remove or add content
|
|
99
|
+
|
|
100
|
+
% resumeItem renders a bullet point
|
|
101
|
+
\newcommand{\resumeItem}[1]{
|
|
102
|
+
\item\small{#1}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
% commands to start and end itemization of resumeItem, rightmargin set to 0.11in to avoid the overflow of resumetItem beyond whatever resumeItemHeading is being used
|
|
106
|
+
\newcommand{\resumeItemListStart}{\begin{itemize}[rightmargin=0.1in]}
|
|
107
|
+
\newcommand{\resumeItemListEnd}{\end{itemize}}
|
|
108
|
+
|
|
109
|
+
% resumeSectionType renders a bolded type to be used under a section, used as skill type here, middle element is used to keep ":"s in the same vertical line
|
|
110
|
+
\newcommand{\resumeSectionType}[3]{
|
|
111
|
+
\item\begin{tabular*}{0.95\textwidth}[t]{
|
|
112
|
+
p{0.23\linewidth}p{0.01\linewidth}p{0.74\linewidth}
|
|
113
|
+
}
|
|
114
|
+
\textbf{#1} & #2 & #3
|
|
115
|
+
\end{tabular*}\vspace{-3pt}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
% resumeTrioHeading renders three elements in three columns with second element being italicized and first element bolded, can be used for projects with three elements
|
|
119
|
+
\newcommand{\resumeTrioHeading}[3]{%
|
|
120
|
+
\item\small{%
|
|
121
|
+
\makebox[\linewidth]{%
|
|
122
|
+
\makebox[0.33\linewidth][l]{\textbf{#1} }%
|
|
123
|
+
\makebox[0.34\linewidth][c]{\textit{#2} }%
|
|
124
|
+
\makebox[0.33\linewidth][r]{#3 }%
|
|
125
|
+
}%
|
|
126
|
+
}%
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
% resumeQuadHeading renders four elements in a two columns with the second row being italicized and first element of first row bolded, can be used for experience and projects with four elements
|
|
131
|
+
\newcommand{\resumeQuadHeading}[4]{
|
|
132
|
+
\item
|
|
133
|
+
\begin{tabular*}{0.96\textwidth}[t]{l@{\extracolsep{\fill}}r}
|
|
134
|
+
\textbf{#1} & #2 \\
|
|
135
|
+
\textit{\small#3} & \textit{\small #4} \\
|
|
136
|
+
\end{tabular*}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
% resumeQuadHeadingDetails renders three elements in a two columns with the second row being italicized and first element of first row bolded, can be used for experience and projects.
|
|
140
|
+
\newcommand{\resumeQuadHeadingDetails}[3]{%
|
|
141
|
+
\item
|
|
142
|
+
\begin{tabular*}{0.96\textwidth}[t]{l@{\extracolsep{\fill}}r}
|
|
143
|
+
\textbf{#1} & #2 \\
|
|
144
|
+
\textit{\small #3} & \\
|
|
145
|
+
\end{tabular*}
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
% resumeQuadHeadingChild renders the second row of resumeQuadHeading, can be used for experience if different roles in the same company need to added
|
|
149
|
+
\newcommand{\resumeQuadHeadingChild}[2]{
|
|
150
|
+
\item
|
|
151
|
+
\begin{tabular*}{0.96\textwidth}[t]{l@{\extracolsep{\fill}}r}
|
|
152
|
+
\textbf{\small#1} & {\small#2} \\
|
|
153
|
+
\end{tabular*}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
% commands to start and end itemization of resumeQuadHeading, lefmargin for left indent of 0.15in for resumeItems
|
|
157
|
+
\newcommand{\resumeHeadingListStart}{
|
|
158
|
+
\begin{itemize}[leftmargin=0.15in, label={}]
|
|
159
|
+
}
|
|
160
|
+
\newcommand{\resumeHeadingListEnd}{\end{itemize}}
|
|
161
|
+
%-------------------------------------------
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
%__________________RESUME____________________
|
|
165
|
+
% You can rearrange sections in any order you may prefer
|
|
166
|
+
\begin{document}
|
|
167
|
+
|
|
168
|
+
%-----------CONTACT DETAILS------------------
|
|
169
|
+
% Make sure all the details are correct, you can add more links in the first row of second column if needed
|
|
170
|
+
|
|
171
|
+
\begin{tabularx}{\textwidth}{>{\centering\arraybackslash}X >{\centering\arraybackslash}X}
|
|
172
|
+
\textbf{\Huge Tsou, Dong-You} \\[10pt]
|
|
173
|
+
\href{https://www.linkedin.com/in/dytsou/}{\faLinkedin~ \uline{linkedin.com/in/dytsou}}
|
|
174
|
+
\hspace{8pt}
|
|
175
|
+
\href{https://github.com/dytsou/}{\faGithub~ \uline{github.com/dytsou}}
|
|
176
|
+
\hspace{8pt}
|
|
177
|
+
\href{mailto:contact@dy.tsou.me}{\faEnvelope~ \uline{contact@dy.tsou.me}}
|
|
178
|
+
\hspace{8pt}
|
|
179
|
+
\faMobile~ +886-971-618-820 \\
|
|
180
|
+
\end{tabularx}
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
%--------------------------------------------
|
|
184
|
+
|
|
185
|
+
%-----------EDUCATION-------------------------
|
|
186
|
+
% Mention your CGPA, if its good, in the first row of second column
|
|
187
|
+
|
|
188
|
+
\section{Education}
|
|
189
|
+
\resumeHeadingListStart{}
|
|
190
|
+
\resumeQuadHeading{National Yang Ming Chiao Tung University}{Hsinchu, Taiwan}
|
|
191
|
+
{Bachelor of Science in Computer Science}{Sept. 2022 -- Jun. 2026}
|
|
192
|
+
\resumeHeadingListEnd{}
|
|
193
|
+
%---------------------------------------------
|
|
194
|
+
|
|
195
|
+
%--------------SKILLS------------------------
|
|
196
|
+
% Add or remove resumeSectionTypes according to your needs
|
|
197
|
+
|
|
198
|
+
\section{Technical Skills}
|
|
199
|
+
\resumeHeadingListStart{}
|
|
200
|
+
\resumeSectionType{Languages}{}{ Python, C++, Go, HTML, CSS, JavaScript, Dart, PHP, Verilog, LabVIEW}
|
|
201
|
+
\resumeSectionType{Frameworks \& Libraries}{}{React.js, Node.js, Flutter, Flask, FastAPI, OpenGL}
|
|
202
|
+
\resumeSectionType{Tools \& Technologies}{}{Git, PostgreSQL, Arduino, Docker, Linux, API Development, RESTful Services}
|
|
203
|
+
\resumeSectionType{Specialized Skills}{}{Web Development: Full-stack development with React frontend and backend APIs}
|
|
204
|
+
\resumeSectionType{}{}{Game Development: OpenGL-based 3D graphics and LabVIEW multiplayer systems}
|
|
205
|
+
% \resumeSectionType{}{}{Bot Development: LINE bot applications with Python}
|
|
206
|
+
\resumeSectionType{}{}{Computer Vision: Real-time 3D object classification in ground (AV) and aerial (UAV) scenarios}
|
|
207
|
+
\resumeHeadingListEnd{}
|
|
208
|
+
%--------------------------------------------
|
|
209
|
+
|
|
210
|
+
% -----------LABORATORY EXPERIENCES-----------------------
|
|
211
|
+
|
|
212
|
+
\section{Laboratory Experiences}
|
|
213
|
+
\resumeHeadingListStart{}
|
|
214
|
+
\resumeQuadHeadingDetails{\href{https://sqlab.web.nycu.edu.tw}{Software Quality Lab}}{Sept. 2025 -- Present}
|
|
215
|
+
{The Influence of AI-Generated Testing on Developer Productivity}
|
|
216
|
+
\resumeItemListStart{}
|
|
217
|
+
\resumeItem{Integrated \textbf{AI-assisted test generation into development workflows} to achieve measurable gains in efficiency and coverage.}
|
|
218
|
+
\resumeItem{\textbf{Researched the impact of AI-generated testing} on developer productivity and software quality, with a focus on quantitative results.}
|
|
219
|
+
\resumeItemListEnd{}
|
|
220
|
+
|
|
221
|
+
\resumeQuadHeadingDetails{\href{http://acm.cs.nycu.edu.tw/}{Applied Computing and Multimedia Lab}}{Sept. 2024 -- Aug. 2025}
|
|
222
|
+
{Video-based 3D Object Detection with Vision Foundation Models}
|
|
223
|
+
\resumeItemListStart{}
|
|
224
|
+
\resumeItem{Built a \textbf{monocular video 3D detector with \href{https://ai.meta.com/sam2/}{SAM 2}} for temporally consistent segmentation and depth-aware boxes}
|
|
225
|
+
\resumeItem{Applied \textbf{LoRA} and \textbf{BEVDepth-style depth-context fusion} for efficient training and temporal box refinement}
|
|
226
|
+
\resumeItemListEnd{}
|
|
227
|
+
\resumeHeadingListEnd{}
|
|
228
|
+
% ---------------------------------------------
|
|
229
|
+
|
|
230
|
+
%-----------PROJECTS--------------------------
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
\section{Projects}
|
|
234
|
+
\resumeHeadingListStart{}
|
|
235
|
+
|
|
236
|
+
\resumeTrioHeading{SDC Core System}{Go, RESTful API, Docker, PostgerSQL}{\href{https://github.com/NYCU-SDC/core-system-backend}{\uline{Source Code}}}
|
|
237
|
+
\resumeItemListStart{}
|
|
238
|
+
\resumeItem{Designed and implemented a robust backend infrastructure for NYCU Software Development Club, facilitating cross-unit operations and continuous service availability}
|
|
239
|
+
\resumeItem{Designed modular \textbf{RESTful APIs} and robust authentication, with \textbf{over 500 code commits}}
|
|
240
|
+
\resumeItem{Streamlined CI/CD pipeline using \textbf{Docker}, reducing deployment time}
|
|
241
|
+
\resumeItem{Integrated PostgreSQL databases and multi-environment configs for scalable, maintainable infrastructure}
|
|
242
|
+
\resumeItemListEnd{}
|
|
243
|
+
|
|
244
|
+
\resumeTrioHeading{CAIender}{React.js, Vite, GraphQL, DynamoDB, LLM}{\href{https://github.com/orgs/MCHackathon2025/repositories}{\uline{Source Code}}}
|
|
245
|
+
\resumeItemListStart{}
|
|
246
|
+
\resumeItem{Independently designed and developed a prototype for an AI calendar platform based on \textbf{React} architecture}
|
|
247
|
+
\resumeItem{Integrated \textbf{GraphQL} and \textbf{DynamoDB}, leveraging LLM to enable \textbf{context-aware recommendations and AI scheduling}}
|
|
248
|
+
\resumeItem{Implemented Google Map redirection and GPS-based location search to improve user activity discovery}
|
|
249
|
+
\resumeItem{Adopted Vite for build optimization, resulting in faster frontend compilation and enhanced modular scalability}
|
|
250
|
+
\resumeItemListEnd{}
|
|
251
|
+
|
|
252
|
+
\resumeHeadingListEnd{}
|
|
253
|
+
%--------------------------------------------
|
|
254
|
+
|
|
255
|
+
%----------------Extracurricular Experiences----------------------
|
|
256
|
+
|
|
257
|
+
\section{Extracurricular Experiences}
|
|
258
|
+
\resumeHeadingListStart{}
|
|
259
|
+
\resumeQuadHeadingDetails{\href{https://sdc.nycu.club}{NYCU Software Development Club}}{Oct. 2023 -- Present}
|
|
260
|
+
{Vice President}
|
|
261
|
+
\resumeItemListStart{}
|
|
262
|
+
\resumeItem{Coordinated 18 programs across two semesters, \textbf{supporting a community of 163 members from 42 academic departments} and enhancing event quality.}
|
|
263
|
+
\resumeItem{\textbf{Developed and maintained SDC \href{https://github.com/NYCU-SDC/core-system-backend}{Core System} for program and event management}, support of member tracking, team matching, form workflows and data analytics to streamline operations and improve user experience.}
|
|
264
|
+
\resumeItemListEnd{}
|
|
265
|
+
\resumeQuadHeadingDetails{\href{https://sitcon.org/2025/}{SITCON, Students' Information Technology Conference}}{Oct. 2024 -- Mar. 2025}
|
|
266
|
+
{Agenda Committee}
|
|
267
|
+
\resumeItemListStart{}
|
|
268
|
+
\resumeItem{Organizing 28 sessions and coordinating over 2,180 minutes of student rehearsals for \textbf{1,400+ participants at Taiwan’s leading student tech conference}.}
|
|
269
|
+
\resumeItemListEnd{}
|
|
270
|
+
\resumeHeadingListEnd{}
|
|
271
|
+
%--------------------------------------------
|
|
272
|
+
|
|
273
|
+
\end{document}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dytsou/resume-converter",
|
|
3
|
+
"version": "2.0.2",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"dependencies": {
|
|
6
|
+
"@unified-latex/unified-latex-to-hast": "^1.8.3",
|
|
7
|
+
"@unified-latex/unified-latex-util-parse": "^1.8.3",
|
|
8
|
+
"hast-util-to-html": "^9.0.5",
|
|
9
|
+
"mathjax-full": "^3.2.2",
|
|
10
|
+
"react": "^19.2.0",
|
|
11
|
+
"react-dom": "^19.2.0",
|
|
12
|
+
"rehype-stringify": "^10.0.1",
|
|
13
|
+
"unified": "^11.0.5"
|
|
14
|
+
},
|
|
15
|
+
"devDependencies": {
|
|
16
|
+
"@eslint/js": "^9.39.1",
|
|
17
|
+
"@types/react": "^19.2.6",
|
|
18
|
+
"@types/react-dom": "^19.2.3",
|
|
19
|
+
"@vitejs/plugin-react": "^5.1.1",
|
|
20
|
+
"eslint": "^9.39.1",
|
|
21
|
+
"eslint-plugin-react-hooks": "^7.0.1",
|
|
22
|
+
"eslint-plugin-react-refresh": "^0.4.11",
|
|
23
|
+
"globals": "^16.5.0",
|
|
24
|
+
"typescript": "^5.5.3",
|
|
25
|
+
"typescript-eslint": "^8.47.0",
|
|
26
|
+
"vite": "^7.2.4"
|
|
27
|
+
},
|
|
28
|
+
"publishConfig": {
|
|
29
|
+
"access": "public"
|
|
30
|
+
},
|
|
31
|
+
"scripts": {
|
|
32
|
+
"dev": "vite",
|
|
33
|
+
"build": "pnpm run convert && vite build",
|
|
34
|
+
"convert": "node scripts/convert-latex.mjs",
|
|
35
|
+
"lint": "eslint .",
|
|
36
|
+
"preview": "vite preview",
|
|
37
|
+
"typecheck": "tsc --noEmit -p tsconfig.app.json"
|
|
38
|
+
}
|
|
39
|
+
}
|