diff --git a/README.md b/README.md
index 8ce588f..9d6c99f 100644
--- a/README.md
+++ b/README.md
@@ -10,6 +10,4 @@ This is the code for my personal website and resume. The main branch of this rep
## License
-I reserve all rights to the code in this repository except `resume.tex` and `resume.sty`. Please do not copy this code without my permission. If you would like permission, feel free to email me: mail@nsood.in.
-
-The license for `resume.tex` and `resume.sty` is in a comment header in those files.
+I reserve all rights to the code in this repository. Please do not copy this code without my permission. If you would like permission, feel free to email me: mail@nsood.in.
diff --git a/coverletter.pdf b/coverletter.pdf
deleted file mode 100644
index 3d3e26d..0000000
Binary files a/coverletter.pdf and /dev/null differ
diff --git a/coverletter.tex b/coverletter.tex
deleted file mode 100644
index 0f33a14..0000000
--- a/coverletter.tex
+++ /dev/null
@@ -1,44 +0,0 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% LaTeX Template: Curriculum Vitae
-%
-% Original template from: http://www.howtotex.com/
-% Modified for use by Naman Sood.
-%
-% Feel free to distribute this template, but please keep the
-% referral to HowToTeX.com.
-%
-% HowToTeX seems to be dead, but the unmodified template can
-% be found at:
-% https://www.overleaf.com/latex/templates/your-new-cv/xqzhcmqkqrtw
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\documentclass{article}
-\usepackage[margin=0.65in,top=0.3in,bottom=0.5in]{geometry}
-\usepackage{resume}
-\setlength\parindent{0pt}
-
-\begin{document}
-
-\MyName{Naman Sood}
-{\hfill \href{mailto:mail@nsood.in}{mail@nsood.in} |
- \href{https://www.nsood.in}{www.nsood.in} |
- \href{https://linkedin.com/in/namansood}{linkedin.com/in/namansood} |
- \href{https://github.com/namansood}{github.com/namansood}
-\hfill}
-
-\vspace{12pt}
-\rule{7.2in}{1pt}
-
-
-\setlength\parskip{12pt plus 4pt minus 4pt}
-
-\textbf{Company Name, Inc.} \hfill Octuary 42nd, 1984 \\ \emph{34 Example Way N \\ Dunnsburg, OFF 1A3 5B7}
-
-To the recruiting team at Company Name,
-
-Please hire me.
-
-Yours sincerely,\\
-Naman Sood.
-
-
-\end{document}
diff --git a/css/resume.css b/css/resume.css
new file mode 100644
index 0000000..828602e
--- /dev/null
+++ b/css/resume.css
@@ -0,0 +1,244 @@
+@charset "UTF-8";
+*, *:before, *:after {
+ box-sizing: border-box;
+}
+
+body {
+ margin: 0;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+}
+
+button#print {
+ margin: 2rem auto;
+ border: none;
+ font-size: 9pt;
+ font-family: "IBM Plex Sans";
+ background: #eee;
+ color: #425580;
+ padding: 0.5rem 1rem;
+ border-radius: 0.2rem;
+ box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.1), 0 0.1rem 0.2rem rgba(0, 0, 0, 0.1);
+}
+button#print:hover {
+ box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.1), 0 0.1rem 0.2rem rgba(0, 0, 0, 0.2);
+}
+button#print:active {
+ background: #e0e0e0;
+}
+button#print i {
+ font-size: 7pt;
+ margin-right: 3pt;
+}
+
+#page {
+ width: 8.5in;
+ height: 11in;
+ margin: 0 auto 4rem;
+ box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1), 0 0 0.5rem rgba(0, 0, 0, 0.2);
+ font-family: "IBM Plex Sans", sans-serif;
+ font-weight: 400;
+ font-size: 9pt;
+ line-height: 14pt;
+ background-size: 14pt 14pt;
+ background-repeat: repeat;
+ background-position: center top;
+}
+#page .page-contents {
+ padding: 14pt 42pt 28pt;
+}
+
+@media print {
+ #page {
+ box-shadow: none;
+ height: auto;
+ width: auto;
+ margin: 0;
+ }
+
+ button#print {
+ display: none;
+ }
+}
+@page {
+ margin: 0;
+}
+p {
+ margin: 0;
+}
+
+h1.name {
+ margin: 0;
+ text-align: center;
+ font-size: 24pt;
+ line-height: 21pt;
+ padding-top: 7pt;
+ height: 28pt;
+ font-weight: 600;
+}
+
+nav.links {
+ display: flex;
+ justify-content: center;
+ align-items: stretch;
+ padding-top: 7pt;
+ height: 21pt;
+}
+nav.links a {
+ display: block;
+ color: inherit;
+ display: block;
+ padding: 0 7pt;
+ height: 14pt;
+ line-height: 14pt;
+ text-decoration: none;
+ font-size: 9pt;
+}
+
+a {
+ color: inherit;
+ text-decoration: none;
+}
+a i.fa {
+ font-size: 6pt;
+ margin: 0 0.5pt -1.5pt;
+ line-height: 9.24pt;
+ position: relative;
+ width: 9.24pt;
+ height: 9.24pt;
+}
+a i.fa:before {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+
+h2 {
+ margin: 0;
+ position: relative;
+ padding-top: 7pt;
+ line-height: 14pt;
+ height: 21pt;
+ font-size: 13pt;
+ font-weight: 900;
+ display: block;
+ padding-right: 0;
+ align-self: flex-start;
+ width: 100%;
+}
+h2:before {
+ content: "";
+ position: absolute;
+ bottom: -2pt;
+ left: 0;
+ width: 100%;
+ box-sizing: content-box;
+ height: 0;
+ border-top: 1.5pt solid #8ecfd5;
+ z-index: -1;
+}
+
+h3 {
+ margin: 0;
+ font-size: 11pt;
+}
+h3 a i.fa {
+ font-size: 7pt;
+ margin: 0 0 -1.5pt 3pt;
+}
+
+h4 {
+ margin: 0;
+ font-style: italic;
+ font-weight: 400;
+ font-size: 9pt;
+ display: flex;
+ width: 100%;
+ justify-content: space-between;
+}
+
+strong {
+ font-weight: 600;
+}
+
+section {
+ display: flex;
+ flex-direction: column;
+}
+
+section.skills p {
+ height: 14pt;
+}
+section.skills p:first-of-type {
+ margin-top: 7pt;
+}
+section.skills strong {
+ display: inline-block;
+ width: 80pt;
+}
+
+ul {
+ margin: 0;
+ padding: 0 0 0 14pt;
+}
+ul li {
+ display: block;
+ position: relative;
+}
+ul li:before {
+ content: "·";
+ height: 14pt;
+ width: 14pt;
+ display: block;
+ position: absolute;
+ top: 0;
+ left: -14pt;
+ text-align: center;
+ line-height: 14pt;
+ font-weight: bold;
+ font-size: 12pt;
+}
+
+section.experience article.work-exp {
+ position: relative;
+ margin: 7pt 0 0;
+}
+
+aside.date {
+ position: absolute;
+ right: 0;
+ top: 0;
+ height: 14pt;
+ line-height: 14pt;
+}
+
+aside.languages {
+ color: #444;
+ font-style: italic;
+ font-weight: 400;
+}
+
+section.projects article.project {
+ height: 28pt;
+}
+section.projects article.project:first-of-type {
+ margin-top: 7pt;
+}
+section.projects div.project-title {
+ display: flex;
+ align-items: baseline;
+ height: 14pt;
+}
+section.projects div.project-title h3 {
+ padding-right: 3pt;
+}
+
+section.education article.institution {
+ position: relative;
+ margin-top: 7pt;
+}
+
+/*# sourceMappingURL=resume.css.map */
diff --git a/css/resume.scss b/css/resume.scss
new file mode 100644
index 0000000..30ad680
--- /dev/null
+++ b/css/resume.scss
@@ -0,0 +1,276 @@
+*, *:before, *:after {
+ box-sizing: border-box;
+}
+
+body {
+ margin: 0;
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+}
+
+$ls: 14pt;
+
+button#print {
+ margin: 2rem auto;
+ border: none;
+ font-size: 9pt;
+ font-family: 'IBM Plex Sans';
+ background: #eee;
+ color: #425580;
+ padding: 0.5rem 1rem;
+ border-radius: 0.2rem;
+ box-shadow: 0 0.2rem 0.5rem rgba(0,0,0,0.1), 0 0.1rem 0.2rem rgba(0,0,0,0.1);
+
+ &:hover {
+ box-shadow: 0 0.2rem 0.5rem rgba(0,0,0,0.1), 0 0.1rem 0.2rem rgba(0,0,0,0.2);
+ }
+
+ &:active {
+ background: #e0e0e0;
+ }
+
+ i {
+ font-size: 7pt;
+ margin-right: 3pt;
+ }
+}
+
+#page {
+ width: 8.5in;
+ height: 11in;
+ margin: 0 auto 4rem;
+ box-shadow: 0 0.25rem 0.75rem rgba(0,0,0,0.1), 0 0 0.5rem rgba(0,0,0,0.2);
+ font-family: 'IBM Plex Sans', sans-serif;
+ font-weight: 400;
+ font-size: 9pt;
+ line-height: $ls;
+ $fade: #ccc;
+ $main: #aaa;
+ //background-image: linear-gradient(white 45%, $fade 45%, $fade 50%, white 50%, white 95%, $main 95%);
+ background-size: $ls $ls;
+ background-repeat: repeat;
+ background-position: center top;
+
+ .page-contents {
+ padding: $ls 3*$ls 2*$ls;
+ }
+}
+
+@media print {
+ #page {
+ box-shadow: none;
+ height: auto;
+ width: auto;
+ margin: 0;
+ }
+
+ button#print {
+ display: none;
+ }
+}
+
+// print margins
+@page {
+ margin: 0;
+}
+
+p {
+ margin: 0;
+}
+
+h1.name {
+ margin: 0;
+ text-align: center;
+ font-size: 24pt;
+ line-height: 1.5*$ls;
+ padding-top: 0.5*$ls;
+ height: 2*$ls;
+ font-weight: 600;
+}
+
+nav.links {
+ display: flex;
+ justify-content: center;
+ align-items: stretch;
+ padding-top: 0.5*$ls;
+ height: 1.5*$ls;
+
+ a {
+ display: block;
+ color: inherit;
+ display: block;
+ padding: 0 0.5*$ls;
+ height: $ls;
+ line-height: $ls;
+ text-decoration: none;
+ font-size: 9pt;
+ }
+}
+
+a {
+ color: inherit;
+ text-decoration: none;
+
+ i.fa {
+ font-size: 6pt;
+ margin: 0 0.5pt -1.5pt;
+ line-height: 0.66*$ls;
+ position: relative;
+ width: 0.66*$ls;
+ height: 0.66*$ls;
+
+ &:before {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
+ }
+}
+
+h2 {
+ margin: 0;
+ position: relative;
+ padding-top: 0.5*$ls;
+ line-height: $ls;
+ height: 1.5*$ls;
+ font-size: 13pt;
+ font-weight: 900;
+ display: block;
+ padding-right: 0;
+ align-self: flex-start;
+ width: 100%;
+
+ &:before {
+ content: '';
+ position: absolute;
+ bottom: -2pt;
+ left: 0;
+ width: 100%;
+ box-sizing: content-box;
+ //height: 1.5pt;
+ height: 0;
+ border-top: 1.5pt solid #8ecfd5;
+ z-index: -1;
+ }
+}
+
+h3 {
+ margin: 0;
+ font-size: 11pt;
+
+ a i.fa {
+ font-size: 7pt;
+ margin: 0 0 -1.5pt 3pt;
+ }
+}
+
+h4 {
+ margin: 0;
+ font-style: italic;
+ font-weight: 400;
+ font-size: 9pt;
+ display: flex;
+ width: 100%;
+ justify-content: space-between;
+}
+
+strong {
+ font-weight: 600;
+}
+
+section {
+ display: flex;
+ flex-direction: column;
+}
+
+section.skills {
+ p {
+ height: $ls;
+ }
+ p:first-of-type {
+ margin-top: 0.5*$ls;
+ }
+ strong {
+ display: inline-block;
+ width: 80pt;
+ }
+}
+
+ul {
+ margin: 0;
+ padding: 0 0 0 $ls;
+
+ li {
+ display: block;
+ position: relative;
+ &:before {
+ content: '·';
+ height: $ls;
+ width: $ls;
+ display: block;
+ position: absolute;
+ top: 0;
+ left: -$ls;
+ text-align: center;
+ line-height: $ls;
+ font-weight: bold;
+ font-size: 12pt;
+ }
+ }
+}
+
+section.experience {
+ article.work-exp {
+ position: relative;
+ margin: 0.5*$ls 0 0;
+ }
+}
+
+aside.date {
+ position: absolute;
+ right: 0;
+ top: 0; //calc($ls / 2);
+ height: $ls;
+ line-height: $ls;
+ // $offset: $4pt;
+ // top: -$offset;
+ // background: black;
+ // color: white;
+ // padding: $offset 1.5*$offset;
+ // height: $ls + 2*$offset;
+}
+
+aside.languages {
+ color: #444;
+ font-style: italic;
+ font-weight: 400;
+}
+
+section.projects {
+ article.project {
+ &:first-of-type {
+ margin-top: 0.5*$ls;
+ }
+ height: 2*$ls;
+ }
+
+ div.project-title {
+ display: flex;
+ align-items: baseline;
+ height: $ls;
+
+ h3 {
+ padding-right: 3pt;
+ }
+ }
+}
+
+section.education {
+ article.institution {
+ position: relative;
+ margin-top: 0.5*$ls;
+ }
+}
diff --git a/js/resume.js b/js/resume.js
new file mode 100644
index 0000000..e7bcd18
--- /dev/null
+++ b/js/resume.js
@@ -0,0 +1,7 @@
+document.querySelectorAll('main a').forEach(el => {
+ const icon = document.createElement('i');
+ icon.classList.add('fa', 'fa-solid', 'fa-arrow-up-right-from-square');
+ el.appendChild(icon);
+});
+
+document.querySelector('#print').addEventListener('click', () => window.print());
\ No newline at end of file
diff --git a/resume.html b/resume.html
new file mode 100644
index 0000000..15db077
--- /dev/null
+++ b/resume.html
@@ -0,0 +1,132 @@
+
+
+
+
+
+
+
+
+
+ Naman Sood – Resume
+
+
+
+
+
+
+
+
+ Education
+
+ University of Waterloo
+ Bachelor of Computer Science – 3.91 GPA
+
+
+ - Relevant Coursework: Operating Systems, Concurrency, Networks, Security, Data Structures & Algorithms
+
+
+
+
+ Skills
+ LanguagesJavaScript, Go, Rust, C++, C, Python, Scala, HTML/CSS, Shell, Haskell
+ TechnologiesGit, Docker, Kubernetes, AWS EC2/S3, gRPC/Protobuf, React, SQL, MongoDB
+
+
+ Experience
+
+ data.world
+ Software Engineer Intern Austin, TX
+
+
+ - Spearheaded Databricks and Apache Spark support in Java-based data catalog service by integrating JDBC database drivers.
+ - Boosted user productivity in code editing workspace by generating autocompletions for RDF classes and properties.
+ - Delivered key usability improvements to code workspace in areas like error visibility and autogeneration of code snippets.
+ - Refined syntax highlighting for SPARQL queries by improving regular expressions used to parse language constructs.
+
+
+
+ Carta
+ Software Engineer Intern, Infrastructure Kitchener, ON
+
+
+ - Designed distributed gRPC logging system using Apache Fluent for scalable auditing and compliance across organization.
+ - Created proof-of-concept for logging system using Kubernetes DaemonSets, with ConfigMaps to deploy custom configurations.
+ - Enforced standardization of Protobuf definitions for over 300 microservices by designing static analysis tool in Go.
+ - Optimized build times by 10x for Docker images by simplifying package requirements to allow precompiled dependencies.
+ - Improved system availability by identifying and removing bottlenecks in Redis server connections in Python library.
+
+
+
+ Tailscale
+ Software Engineer Intern Toronto, ON
+
+
+ - Introduced cloud/serverless support by emulating TCP/IP stack in userspace for Docker containers, using Google gVisor.
+ - Enabled standardized communication using SOCKS5 protocol over Tailscale VPN by implementing proxy server in Go.
+ - Simplified deployments in cloud environments by creating single-session authentication keys with auto-cleanup.
+ - Developed a GitHub Action for end-users that allows plug-and-play security for CI/CD pipelines.
+ - Expanded outreach within the technical community by writing long-form content for corporate blog.
+
+
+
+ University of Waterloo
+ Research Associate Waterloo, ON
+
+
+ - Optimized Go consensus system to 3x throughput by increasing maximum transaction count sent in each message.
+ - Streamlined deployment of project by using Docker images to generate repeatable builds across diverse environments.
+ - Unified similar codebases by migrating duplicate components to a single C++ project.
+ - Assisted distributed systems research by conducting experiments on AWS EC2 and analyzing performance data in gnuplot.
+
+
+
+
+ The Girl Code
+ Volunteer Full Stack Developer New Delhi, India
+
+
+ - Developed online platform to interactively teach programming in 10+ workshops across 3 countries using NodeJS.
+
+
+
+
+ Projects
+
+
+ Emulator for CHIP-8 microprocessor. Simulated behavior of machine instructions with Rust, created graphics in framebuffer.
+
+
+
+ A minimal x86 operating system. Handled tasks like interrupts, timers, paging, while balancing performance and maintainability.
+
+
+
+ Node module to map CLI programs to a JSON API. Designed abstraction over standard library features for improved security.
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/resume.pdf b/resume.pdf
index 422a519..730d8f5 100644
Binary files a/resume.pdf and b/resume.pdf differ
diff --git a/resume.sty b/resume.sty
deleted file mode 100644
index 430b520..0000000
--- a/resume.sty
+++ /dev/null
@@ -1,106 +0,0 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% LaTeX Template: Curriculum Vitae
-%
-% Original template from: http://www.howtotex.com/
-% Modified for use by Naman Sood.
-%
-% Feel free to distribute this template, but please keep the
-% referal to HowToTeX.com.
-%
-% HowToTeX seems to be dead, but the unmodified template can
-% be found at:
-% https://www.overleaf.com/latex/templates/your-new-cv/xqzhcmqkqrtw
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-\usepackage[english]{babel}
-\usepackage[utf8]{inputenc}
-\usepackage[T1]{fontenc}
-\usepackage{lmodern}
-\usepackage[protrusion=true]{microtype}
-\usepackage[svgnames]{xcolor} % Colours by their 'svgnames'
-\usepackage{url}
-\usepackage{lmodern} % Allow arbitrary font sizes
-\usepackage{textcomp}
-\usepackage{hyperref}
-\usepackage{enumitem}
-\usepackage{sectsty}
-\usepackage{fontawesome}
-\usepackage{xcolor}
-
-% using arbitrary fonts requires XeLaTeX, but that is
-% incompatible with the ATS hack below. uncomment with
-% caution
-%\usepackage{fontspec}
-%\setsansfont{Roboto}
-
-% ATS hack: makes resumes easier to parse for machines
-\input{glyphtounicode}
-\pdfgentounicode=1
-
-% remove paragraph indents
-\setlength\parindent{0pt}
-
-\newcommand{\linkIcon}{{\footnotesize \faExternalLink}}
-
-\newcommand{\MyName}[1]{
- \begin{center}
- \Huge\usefont{OT1}{phv}{b}{n} #1
- \end{center}
- \par
-}
-
-\newcommand{\NewPart}[1]{
- \vspace{-5mm}
- \section*{\large \uppercase{#1}}
- \vspace{-1mm}
- \normalsize
-}
-
-\newcommand{\SkillsEntry}[2]{
- \baselineskip=14pt\hangindent=0em\hangafter=0
- \makebox[1.75cm][l]{
- \textbf{#1}
- }
- \hspace{2em} #2
- \par
-}
-
-\newcommand{\WorkEntry}[4]{
- \textbf{\large #1} \hfill #2 \par
- \vspace{0.5mm}
- \textit{#3} \par
- \hangindent=2em\hangafter=0 #4
- \par
-}
-
-\newcommand{\EducationEntry}[4]{
- \WorkEntry{#1}{#2}{#3}{#4}
-}
-
-\newcommand{\ProjectEntry}[4]{
- \href{#2}{{\large \textbf{#1}} \linkIcon}
- \textit{#3}
- \par
- \vspace{0.5mm}
- #4
- \par
-}
-
-% reduce large font size a bit
-\renewcommand\large{\@setfontsize\Large{11pt}{18}}
-
-% remove page numbers/headers/footers
-\pagestyle{empty}
-
-% remove link borders
-\hypersetup{pdfborder=0 0 0}
-
-\renewcommand{\familydefault}{\sfdefault}
-\setlist[itemize]{leftmargin=*}
-
-% Custom sectioning (sectsty package)
-\sectionfont{
- \vspace{-1mm}
- \usefont{OT1}{phv}{b}{n}
- \sectionrule{0pt}{0pt}{-5pt}{1pt}
-}