Updated file management
24
.gitignore
vendored
@@ -1 +1,23 @@
|
||||
node_modules
|
||||
site
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
37356
package-lock.json
generated
39
package.json
@@ -1,11 +1,48 @@
|
||||
{
|
||||
"name": "portfolio",
|
||||
"version": "0.1.0",
|
||||
"homepage": "https://asimonson1125.github.io/",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@testing-library/jest-dom": "^5.11.4",
|
||||
"@testing-library/react": "^11.1.0",
|
||||
"@testing-library/user-event": "^12.1.10",
|
||||
"node": "^16.9.1",
|
||||
"node-dom": "^0.1.0",
|
||||
"aos": "^2.3.4",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2",
|
||||
"react-router-dom": "^5.3.0",
|
||||
"yarn": "^1.22.11"
|
||||
"react-scripts": "4.0.3",
|
||||
"web-vitals": "^1.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"gh-pages": "^3.2.3"
|
||||
},
|
||||
"scripts": {
|
||||
"predeploy": "npm run build",
|
||||
"deploy": "gh-pages -d build",
|
||||
"start": "react-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"test": "react-scripts test",
|
||||
"eject": "react-scripts eject"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": [
|
||||
"react-app",
|
||||
"react-app/jest"
|
||||
]
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
BIN
public/favicon.ico
Normal file
|
After Width: | Height: | Size: 97 KiB |
32
public/index.html
Normal file
@@ -0,0 +1,32 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta
|
||||
name="Simonson - Portfolio"
|
||||
content="Digital portfolio of Andrew Simonson"
|
||||
/>
|
||||
<!--
|
||||
manifest.json provides metadata used when your web app is installed on a
|
||||
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||
-->
|
||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||
<!--
|
||||
Notice the use of %PUBLIC_URL% in the tags above.
|
||||
It will be replaced with the URL of the `public` folder during the build.
|
||||
Only files inside the `public` folder can be referenced from the HTML.
|
||||
|
||||
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
||||
work correctly both with client-side routing and a non-root public URL.
|
||||
Learn how to configure a non-root public URL by running `npm run build`.
|
||||
-->
|
||||
<title>Simonson - Portfolio</title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
</body>
|
||||
</html>
|
||||
25
public/manifest.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"short_name": "React App",
|
||||
"name": "Create React App Sample",
|
||||
"icons": [
|
||||
{
|
||||
"src": "favicon.ico",
|
||||
"sizes": "64x64 32x32 24x24 16x16",
|
||||
"type": "image/x-icon"
|
||||
},
|
||||
{
|
||||
"src": "logo192.png",
|
||||
"type": "image/png",
|
||||
"sizes": "192x192"
|
||||
},
|
||||
{
|
||||
"src": "logo512.png",
|
||||
"type": "image/png",
|
||||
"sizes": "512x512"
|
||||
}
|
||||
],
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"theme_color": "#000000",
|
||||
"background_color": "#ffffff"
|
||||
}
|
||||
3
public/robots.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
# https://www.robotstxt.org/robotstxt.html
|
||||
User-agent: *
|
||||
Disallow:
|
||||
173
resume/README.md
@@ -1,173 +0,0 @@
|
||||
# AltaCV, yet another LaTeX CV/Résumé class
|
||||
|
||||
v1.6.2 (28 Aug 2021), by LianTze Lim (liantze@gmail.com)
|
||||
|
||||
* Starred `\NewInfoField*` command to handle Mastodon; Icons, `\cvskills`, `\wheelchart` have "copyable" text values; `\cvskill` supports numerical values {0.5, 1, ..., 4.5, 5} on 21 May 2021
|
||||
* Moved `biblatex`-related code to `*.cfg` files for easier edit on 8 May 2021
|
||||
* Removed dependency on `academicons` on 12 Apr 2021
|
||||
* Clickable hyperlinked info fields added on 10 May 2020
|
||||
* Sample file with new `paracol` layout added on 2 February 2020
|
||||
|
||||
(Thanks to [Nur](https://github.com/nurh) for the name.)
|
||||
|
||||
It all started with this:
|
||||
|
||||
[<img src="tweet-that-started-this.png" width="500px">](https://twitter.com/Leonduck/status/764281546408923136)
|
||||
|
||||
Leonardo was talking about a [résumé of Marissa Mayer that Business Insider put together](http://www.businessinsider.my/a-sample-resume-for-marissa-mayer-2016-7/) using [enhancv.com](https://enhancv.com).
|
||||
I _knew_ I had to do something about it. And so AltaCV was born.
|
||||
|
||||
## Samples
|
||||
|
||||
This is how the re-created résumé looks like ([view/open on Overleaf](https://www.overleaf.com/latex/examples/recreating-business-insiders-cv-of-marissa-mayer-using-altacv/gtqfpbwncfvp)):
|
||||
|
||||
<img src="mmayer.png" alt="Marissa Mayer's résumé, re-created with AltaCV" width="600px">
|
||||
|
||||
Though if you're creating your own CV/résumé, you'd probably prefer using the basic template ([view/open on Overleaf](https://www.overleaf.com/latex/templates/altacv-template/trgqjpwnmtgv)):
|
||||
|
||||
<img src="sample.png" alt="sample barebones AltaCV template" width="600px">
|
||||
|
||||
|
||||
## Requirements and Compilation
|
||||
|
||||
* pdflatex + biber + pdflatex
|
||||
* AltaCV uses [`fontawesome5`](http://www.ctan.org/pkg/fontawesome5).
|
||||
* Use the `normalphoto` option to get normal (i.e. non-circular) photos.
|
||||
* As of v1.2 you can add multiple photos on the left or right: `\photoL{2cm}{logo1}` and `\photoR{2.5cm}{logo2,photo}`. (`\photo` will work like `\photoR`.) Separate your image filenames with commas _without_ spaces.
|
||||
* Use the `ragged2e` option to activate hyphenations while keeping text left-justified; line endings will thus be less jagged and more aesthetically pleasing.
|
||||
* As of v1.3 the `withhyper` document class option will make the "personal info" fields into clickable hyperlinks (where it makes sense). See below for more details.
|
||||
* Can now be compiled with pdflatex, XeLaTeX and LuaLaTeX!
|
||||
* Note that to compile with XeLaTeX, you should use a command line as follows, per [the `pdfx` documentation](http://mirrors.ctan.org/macros/latex/contrib/pdfx/pdfx.pdf): `xelatex -shell-escape -output-driver="xdvipdfmx -z 0" sample.tex`
|
||||
* The samples here use the [Lato](http://www.latofonts.com/lato-free-fonts/) and [Roboto Slab fonts](https://github.com/googlefonts/robotoslab). Feel free to use a different typeface package instead—often a different typeface will change the entire CV's feel.
|
||||
|
||||
## `sample.tex` [WAS `sample-alt.tex` 2 FEBRUARY 2020, DEFAULT SINCE 10 MAY 2020] ##
|
||||
Many users have overlooked the optional argument of `\cvsection` to insert the right sidebar contents, and often confused that the right sidebar doesn't automatically break across pages. This new layout uses the `paracol` package for typesetting the left and right columns that _can_ break across pages. It also makes changing the column widths easier:
|
||||
|
||||
```latex
|
||||
%% Set the left/right column width ratio to 6:4.
|
||||
\columnratio{0.6}
|
||||
|
||||
% Start a 2-column paracol. Both the left and right columns will automatically
|
||||
% break across pages if things get too long.
|
||||
\begin{paracol}{2}
|
||||
\cvsection{Experience}
|
||||
...
|
||||
... END OF LEFT COLUMN CONTENTS ...
|
||||
|
||||
% Now switch to the right column.
|
||||
\switchcolumn
|
||||
\cvsection{Education}
|
||||
...
|
||||
...END OF RIGHT COLUMN CONTENTS ...
|
||||
\end{paracol}
|
||||
```
|
||||
You can also use `\swithcolumn*` for "synchronising" the columns, as well as other commands from the `paracol` package. See the [`paracol` package documentation](http://texdoc.net/pkg/paracol) for further details.
|
||||
|
||||
**You do not need use the `fullwidth` environment nor use optional arguments with `\cvsection` with this new template.**
|
||||
|
||||
## Clickable Info fields
|
||||
|
||||
As of v1.3, the `withhyper` document class option will load the `hyperref` package, and make fields in the personal detail fields into clickable hyperlinks (where it makes sense anyway).
|
||||
|
||||
*BIG CAVEAT:* Remember that not all readers may want to click on hyperlinks in PDFs. You may therefore sometimes want to _remove_ `withhyper`, and spell out the field URL details a bit more completely, e.g. `\github{github.com/your-id}`.
|
||||
|
||||
Anyway assuming that you _do_ keep `withhyper` enabled: For each field e.g. `\homepage{foobar.com}`, a `\homepagesymbol` has been defined, and the clickable hyperlink is generated by prepending the `\homepagehyperprefix` to `foobar.com`. The `\homepgehyperprefix` is defined to be `\https://`, so this generates the hyperlink `https://foobar.com`.
|
||||
|
||||
If your homepage doesn't use HTTPS yet, or if you want to use a different symbol, you can re-define them with
|
||||
```latex
|
||||
\renewcommand{\homepagehyperprefix}{http://}
|
||||
\renewcommand{\homepagesymbol}{\faLink}
|
||||
```
|
||||
|
||||
|
||||
## New Information Fields ####
|
||||
|
||||
I've decided against adding definitions for too many fields and symbols in the `.cls` itself; otherwise we'll have all possible platforms in the world (and more services are born everyday!) within `altacv.cls` before we know it.
|
||||
|
||||
You can actually just typeset your own arbitrary information fields using the `\printinfo{symbol}{detail}[optional hyperlink prefix]` command within `\personalinfo`:
|
||||
|
||||
````latex
|
||||
\printinfo{\faPaw}{Hey ho!}
|
||||
\printinfo{\faGitLab}{your-handle}[https://gitlab.com/]
|
||||
````
|
||||
|
||||
Or if you really prefer, you can define a new field yourself with `\NewInfoFiled{fieldname}{symbol}[optional hyperlink prefix]` before using it:
|
||||
|
||||
````latex
|
||||
\NewInfoField{gitlab}{\faGitlab}[https://gitlab.com/]
|
||||
\gitlab{your_id}
|
||||
````
|
||||
|
||||
For services and platforms like Mastodon where there isn't a straightforward relation between the more popular user ID or nickname and the hyperlink, you can use `\printinfo` directly e.g.
|
||||
|
||||
```latex
|
||||
\printinfo{\faMastodon}{@username@instace}[https://instance.url/@username]
|
||||
```
|
||||
|
||||
But if you absolutely want to create new dedicated info fields for such platforms, then use `\NewInfoField*` with a star:
|
||||
|
||||
```latex
|
||||
\NewInfoField*{mastodon}{\faMastodon}
|
||||
```
|
||||
|
||||
then you can use `\mastodon` with TWO arguments where the 2nd argument is the full hyperlink.
|
||||
|
||||
```latex
|
||||
\mastodon{@username@instance}{https://instance.url/@username}
|
||||
```
|
||||
|
||||
|
||||
## Configurable colours
|
||||
|
||||
Use `\colorlet` or `\definecolor` to change these.
|
||||
* `accent`
|
||||
* `emphasis`
|
||||
* `heading`
|
||||
* `headingrule`
|
||||
* `subheading`
|
||||
* `body`
|
||||
* `name`
|
||||
* `tagline`
|
||||
|
||||
## Configurable fonts
|
||||
|
||||
Use `\renewcommand` to change these.
|
||||
* `\namefont`
|
||||
* `\taglinefont`
|
||||
* `\personalinfofont`
|
||||
* `\cvsectionfont`
|
||||
* `\cvsubsectionfont`
|
||||
|
||||
---
|
||||
|
||||
## `legacy/sample-old.tex`
|
||||
|
||||
This is the original sample template file until 5 May 2020. The right sidebar is actually a _`marginpar`_, so it doesn't support footnote and cannot automatically break across pages if it's too long. You would need to split your right sidebar contents into separate files e.g. `p1sidebar.tex` and `p2sidebar.tex`, and insert them as the optional argument of the `\cvsection{...}` that you want to align them with:
|
||||
|
||||
```latex
|
||||
\cvsection[p1sidebar]{Experience}
|
||||
...
|
||||
... END OF FIRST PAGE OF YOUR CV ...
|
||||
\cvsection[page2sidebar]{Publications}
|
||||
...
|
||||
```
|
||||
|
||||
This assumes that the next page's main column would start immediately with a `\cvsection`, so that the top of your right sidebar contents also appear at the top of the page. Now if the _next_ page doesn't start with a `\cvsection` but you'd still like to add a sidebar, then use this command on the _current_ page to add it. The optional argument lets you pull up the sidebar a bit so that it looks aligned with the top of the main column:
|
||||
|
||||
```latex
|
||||
\addnextpagesidebar[-1ex]{page3sidebar}
|
||||
```
|
||||
|
||||
If you want to change the left and right columns' widths, you'll need to tinker with the `right` (distance from paper's right edge until the main column's right edge) and `marginparwidth` (width of the right sidebar) options in the `\geometry` line. For example, to make the right sidebar wider by 2cm, you could use
|
||||
|
||||
```latex
|
||||
%% original was right=9cm, marginparwidth=6.8cm
|
||||
\geometry{left=1cm,right=11cm,marginparwidth=8.8cm,marginparsep=1.2cm,top=1cm,bottom=1cm}
|
||||
```
|
||||
as well as doing a bit of arithmetic when you're making the header to get it full-width, i.e. reducing the sidebar by 2cm and extending the main column by 2cm.
|
||||
|
||||
```latex
|
||||
\begin{adjustwidth}{}{-10cm} %% original was -8cm
|
||||
\makecvheader
|
||||
\end{adjustwidth}
|
||||
```
|
||||
@@ -1,441 +0,0 @@
|
||||
%%%%%%%%%%%%%%%%%
|
||||
% This is altacv.cls (v1.6.1, 22 Aug 2021) written by
|
||||
% LianTze Lim (liantze@gmail.com).
|
||||
%
|
||||
%% It may be distributed and/or modified under the
|
||||
%% conditions of the LaTeX Project Public License, either version 1.3
|
||||
%% of this license or (at your option) any later version.
|
||||
%% The latest version of this license is in
|
||||
%% http://www.latex-project.org/lppl.txt
|
||||
%% and version 1.3 or later is part of all distributions of LaTeX
|
||||
%% version 2003/12/01 or later.
|
||||
%%
|
||||
%%
|
||||
% Contributions:
|
||||
% - https://github.com/akreuzer Added ragged2e option (5 Nov 2018)
|
||||
% - https://github.com/stefanogermano Fixed bad boxes and undefined font shape (July 2018)
|
||||
% - https://github.com/foohyfooh Fixed blank spaces in \cvevent and bad link in README.md (June 2018)
|
||||
% - https://github.com/logological Remove redundant hyperref and typos (Apr 2021)
|
||||
|
||||
%%%%%%%%%%%%%%%%
|
||||
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
|
||||
\ProvidesClass{altacv}[2021/08/28 AltaCV v1.6.2, yet another alternative class for a resume/curriculum vitae.]
|
||||
|
||||
%% v1.1: Optionally load academicons
|
||||
%% v1.4: Nope, academicons is unnecessary; fontawesome5 has \faOrcid.
|
||||
\DeclareOption{academicons}{\ClassWarning{altacv}{academicons option is now obsolete and unnecessary.}}
|
||||
%% v1.1.3: Choice of round/square photo
|
||||
\newif\if@normalphoto
|
||||
\DeclareOption{normalphoto}{\@normalphototrue}
|
||||
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{extarticle}}
|
||||
\newif\if@raggedtwoe
|
||||
\DeclareOption{ragged2e}{\@raggedtwoetrue}
|
||||
%% v1.3: load hyperref for clickable hyperlinks
|
||||
\newif\if@withhyper
|
||||
\DeclareOption{withhyper}{\@withhypertrue}
|
||||
\ProcessOptions\relax
|
||||
|
||||
\LoadClass{article}
|
||||
%% v1.3.2 Hopefully this helps make the PDF
|
||||
%% file more 'friendly' with copy-paste etc
|
||||
%% v 1.6.1 Temporary fix for pdfx incompatibility; see https://tex.stackexchange.com/a/610445
|
||||
\RequirePackage{etoolbox}
|
||||
\@ifl@t@r\fmtversion{2021-06-01}%
|
||||
{\AddToHook{package/after/xmpincl}
|
||||
{\patchcmd\mcs@xmpincl@patchFile{\if\par}{\ifx\par}{}{\fail}}}{}
|
||||
\RequirePackage[a-1b]{pdfx}
|
||||
%% v1.3.3 Temporary fix for pdfx and biblatex incompatibility
|
||||
%% (Thanks to @badetitou for highlighting this issue)
|
||||
%% https://github.com/plk/biblatex/issues/1044
|
||||
%% Will be removed when fix is released in biblatex 3.16
|
||||
% \catcode30=12
|
||||
\RequirePackage{accsupp}
|
||||
\RequirePackage[margin=2cm]{geometry}
|
||||
\RequirePackage[fixed]{fontawesome5}
|
||||
\RequirePackage{ifxetex,ifluatex}
|
||||
\RequirePackage{scrlfile}
|
||||
\RequirePackage{xparse}
|
||||
|
||||
%% v1.1.5: added for convenience
|
||||
\newif\ifxetexorluatex
|
||||
\ifxetex
|
||||
\xetexorluatextrue
|
||||
\else
|
||||
\ifluatex
|
||||
\xetexorluatextrue
|
||||
\else
|
||||
\xetexorluatexfalse
|
||||
\fi
|
||||
\fi
|
||||
|
||||
\ifxetexorluatex
|
||||
\RequirePackage{fontspec}
|
||||
\else
|
||||
%% v1.3.2 attempts to make ligatures
|
||||
%% copy-paste as normal characters
|
||||
\RequirePackage{cmap}
|
||||
\RequirePackage[utf8]{inputenc}
|
||||
\RequirePackage[T1]{fontenc}
|
||||
\input{glyphtounicode}
|
||||
\pdfglyphtounicode{f_f}{FB00}
|
||||
\pdfglyphtounicode{f_f_i}{FB03}
|
||||
\pdfglyphtounicode{f_f_l}{FB04}
|
||||
\pdfglyphtounicode{f_i}{FB01}
|
||||
\pdfgentounicode=1
|
||||
\fi
|
||||
|
||||
\if@raggedtwoe
|
||||
\RequirePackage[newcommands]{ragged2e}
|
||||
\fi
|
||||
|
||||
\if@withhyper
|
||||
\AtBeginDocument{%
|
||||
\hypersetup{hidelinks}
|
||||
\urlstyle{same}
|
||||
}
|
||||
\fi
|
||||
|
||||
\RequirePackage{xcolor}
|
||||
|
||||
\colorlet{accent}{blue!70!black}
|
||||
\colorlet{emphasis}{black}
|
||||
\colorlet{heading}{black}
|
||||
\colorlet{headingrule}{black}
|
||||
\colorlet{subheading}{emphasis}
|
||||
\colorlet{body}{black!80!white}
|
||||
\colorlet{name}{heading}
|
||||
\colorlet{tagline}{accent}
|
||||
\newcommand{\itemmarker}{{\small\textbullet}}
|
||||
\newcommand{\ratingmarker}{\faCircle}
|
||||
|
||||
\RequirePackage{tikz}
|
||||
\usetikzlibrary{arrows}
|
||||
\RequirePackage[skins]{tcolorbox}
|
||||
\RequirePackage[inline]{enumitem}
|
||||
\setlist{leftmargin=*,labelsep=0.5em,nosep,itemsep=0.25\baselineskip,after=\vspace{0.25\baselineskip}}
|
||||
\setlist[itemize]{label=\itemmarker}
|
||||
\RequirePackage{graphicx}
|
||||
\RequirePackage{trimclip}
|
||||
\RequirePackage{dashrule}
|
||||
\RequirePackage{multirow,tabularx}
|
||||
\RequirePackage{changepage}
|
||||
% \RequirePackage{marginfix}
|
||||
|
||||
\setlength{\parindent}{0pt}
|
||||
\newcommand{\divider}{\textcolor{body!30}{\hdashrule{\linewidth}{0.6pt}{0.5ex}}\medskip}
|
||||
|
||||
\newenvironment{fullwidth}{%
|
||||
\begin{adjustwidth}{}{\dimexpr-\marginparwidth-\marginparsep\relax}}
|
||||
{\end{adjustwidth}}
|
||||
|
||||
%% v1.3.1 \detokenize will break UTF-8 in pdflatex
|
||||
%% Using alternative from https://tex.stackexchange.com/a/530911/226
|
||||
\newcommand{\utffriendlydetokenize}[1]{%
|
||||
\scantokens{%
|
||||
\catcode`\_=12%
|
||||
% \catcode`\^=12%
|
||||
% \catcode`\{=12%
|
||||
% \catcode`\}=12%
|
||||
\catcode`\&=12%
|
||||
\catcode`\$=12%
|
||||
\catcode`\#=12%
|
||||
\catcode`\~=12%
|
||||
% \catcode`\\=12%
|
||||
{#1}%
|
||||
}%
|
||||
}
|
||||
%% v1.3: Incorporating hyperlinks
|
||||
%% v1.3.1: using \unfriendlydetokenize to avoid breaking unicode
|
||||
%% v1.6: Use accsupp so that when copying/pasting the icon from PDF to a text
|
||||
%% file, the icon name is pasted
|
||||
\ExplSyntaxOn
|
||||
\NewDocumentCommand{\printinfo}{m m o}{%
|
||||
\BeginAccSupp{method=escape,ActualText={#1:~#2}}
|
||||
\IfNoValueTF{#3}{%
|
||||
\mbox{\textcolor{accent}{\normalfont #1}~\utffriendlydetokenize{#2}\hspace{2em}}%
|
||||
}{%
|
||||
\if@withhyper%
|
||||
\mbox{\textcolor{accent}{\normalfont #1}~
|
||||
\href{#3}{\utffriendlydetokenize{#2}}\hspace{2em}}
|
||||
\else%
|
||||
\ClassWarning{Please specify [withhyper] option to enable hyperlinks. Printing out full hyperlink prefix #1 for now.}%
|
||||
\mbox{\textcolor{accent}{\normalfont #1}~{\utffriendlydetokenize{#3#2}}\hspace{2em}}%
|
||||
\fi%
|
||||
}%
|
||||
\EndAccSupp{}
|
||||
}%
|
||||
|
||||
|
||||
%% v1.3: Exploring convenient creation of fields
|
||||
%% v1.6: Add starred mode to create \printinfo with full URL
|
||||
\NewDocumentCommand{\NewInfoField}{s m m o}{%
|
||||
\IfBooleanF{#1}{
|
||||
\IfNoValueF{#4}{\csdef{#2 hyperprefix}{#4}}%
|
||||
}
|
||||
\csdef{#2 symbol}{#3}%
|
||||
\IfBooleanTF{#1}
|
||||
{ \csdef{#2}##1##2{%
|
||||
\if@withhyper
|
||||
\IfNoValueTF {##2}
|
||||
{\printinfo{\csuse{#2 symbol}}{##1}}%
|
||||
{\printinfo{\csuse{#2 symbol}}{##1}[##2]}%
|
||||
\else
|
||||
\printinfo{\csuse{#2 symbol}}{##1}%
|
||||
\fi%
|
||||
}%
|
||||
}
|
||||
{ \csdef{#2}##1{%
|
||||
\if@withhyper
|
||||
\IfNoValueTF {#4}
|
||||
{\printinfo{\csuse{#2 symbol}}{##1}}%
|
||||
{\printinfo{\csuse{#2 symbol}}{##1}[\csuse{#2 hyperprefix}##1]}%
|
||||
\else
|
||||
\printinfo{\csuse{#2 symbol}}{##1}%
|
||||
\fi%
|
||||
}%
|
||||
}
|
||||
}
|
||||
\ExplSyntaxOff
|
||||
|
||||
\newcommand{\name}[1]{\def\@name{#1}}
|
||||
\newcommand{\tagline}[1]{\def\@tagline{#1}}
|
||||
\newcommand{\personalinfo}[1]{\def\@personalinfo{#1}}
|
||||
\NewInfoField{email}{\faAt}[mailto:]
|
||||
\NewInfoField{mailaddress}{\faEnvelope}
|
||||
\NewInfoField{phone}{\faPhone}[tel:]
|
||||
\NewInfoField{homepage}{\faGlobe}[https://]
|
||||
\NewInfoField{twitter}{\faTwitter}[https://twitter.com/]
|
||||
\NewInfoField{linkedin}{\faLinkedin}[https://linkedin.com/in/]
|
||||
\NewInfoField{github}{\faGithub}[https://github.com/]
|
||||
\NewInfoField{githubProject}{\faGithub}[https://github.com/asimonson1125/]
|
||||
% v1.?? Use fontawesome5 for Orcid symbol
|
||||
\NewInfoField{orcid}{\faOrcid}[https://orcid.org/]
|
||||
\NewInfoField{location}{\faMapMarker}
|
||||
|
||||
% v1.2: Support for multiple photos
|
||||
\newlength{\altacv@photos@width}
|
||||
\newlength{\altacv@photo@diam@left}
|
||||
\newlength{\altacv@photo@diam@right}
|
||||
\def\altacv@left@photos{}
|
||||
\def\altacv@right@photos{}
|
||||
|
||||
\newcommand{\@makeaphoto}[2]{%
|
||||
\begin{minipage}{#1}%
|
||||
\if@normalphoto
|
||||
\includegraphics[width=\linewidth]{#2}
|
||||
\else
|
||||
\tikz\path[fill overzoom image={#2}]circle[radius=0.5\linewidth];
|
||||
\fi%
|
||||
\end{minipage}%
|
||||
}
|
||||
|
||||
\newcommand{\altacv@add@photo@left}[1]{%
|
||||
\appto{\altacv@left@photos}{%
|
||||
\@makeaphoto{\altacv@photo@diam@left}{#1}\hspace{1ex}%
|
||||
}%
|
||||
\addtolength{\altacv@photos@width}{\altacv@photo@diam@left}%
|
||||
\addtolength{\altacv@photos@width}{1ex}%
|
||||
}
|
||||
\newcommand{\altacv@add@photo@right}[1]{%
|
||||
\appto{\altacv@right@photos}{%
|
||||
\@makeaphoto{\altacv@photo@diam@right}{#1}\hspace{1ex}%
|
||||
}%
|
||||
\addtolength{\altacv@photos@width}{\altacv@photo@diam@right}%
|
||||
\addtolength{\altacv@photos@width}{1ex}%
|
||||
}
|
||||
\newcommand{\photoL}[2]{%
|
||||
\setlength{\altacv@photo@diam@left}{#1}%
|
||||
\forcsvlist{\altacv@add@photo@left}{#2}%
|
||||
}
|
||||
\newcommand{\photoR}[2]{%
|
||||
\setlength{\altacv@photo@diam@right}{#1}%
|
||||
\forcsvlist{\altacv@add@photo@right}{#2}%
|
||||
}
|
||||
\let\photo\photoR
|
||||
|
||||
\newcommand{\namefont}{\Huge\bfseries}
|
||||
\newcommand{\taglinefont}{\large\bfseries}
|
||||
\newcommand{\personalinfofont}{\footnotesize\bfseries}
|
||||
\newcommand{\cvsectionfont}{\LARGE\bfseries}
|
||||
\newcommand{\cvsubsectionfont}{\large\bfseries}
|
||||
|
||||
\newcommand{\makecvheader}{%
|
||||
\begingroup
|
||||
\altacv@left@photos\hfill%
|
||||
\begin{minipage}{\dimexpr\linewidth-\altacv@photos@width}%
|
||||
\raggedright%
|
||||
{\namefont\color{name}\MakeUppercase{\@name}\par}
|
||||
\medskip
|
||||
{\taglinefont\color{tagline}\@tagline\par}
|
||||
\medskip
|
||||
{\personalinfofont\@personalinfo\par}
|
||||
\end{minipage}\hfill%
|
||||
\altacv@right@photos\par%
|
||||
\endgroup\medskip
|
||||
}
|
||||
|
||||
\renewenvironment{quote}{\color{accent}\itshape\large}{\par}
|
||||
|
||||
\newcommand{\cvsection}[2][]{%
|
||||
\nointerlineskip\bigskip% %% bugfix in v1.6.2
|
||||
\ifstrequal{#1}{}{}{\marginpar{\vspace*{\dimexpr1pt-\baselineskip}\raggedright\input{#1}}}%
|
||||
{\color{heading}\cvsectionfont\MakeUppercase{#2}}\\[-1ex]%
|
||||
{\color{headingrule}\rule{\linewidth}{2pt}\par}\medskip
|
||||
}
|
||||
|
||||
\newcommand{\cvsubsection}[1]{%
|
||||
\smallskip%
|
||||
{\color{subheading}\cvsubsectionfont{#1}\par}\medskip
|
||||
}
|
||||
|
||||
% v1.1.4: fixes inconsistent font size
|
||||
\newcommand{\cvevent}[4]{%
|
||||
{\large\color{emphasis}#1\par}
|
||||
\smallskip\normalsize
|
||||
\ifstrequal{#2}{}{}{
|
||||
\textbf{\color{accent}#2}\par
|
||||
\smallskip}
|
||||
\ifstrequal{#3}{}{}{{\small\makebox[0.5\linewidth][l]{\faCalendar~#3}}}%
|
||||
\ifstrequal{#4}{}{}{{\small\makebox[0.5\linewidth][l]{\faMapMarker~#4}}}\par
|
||||
\medskip\normalsize
|
||||
}
|
||||
|
||||
\newcommand{\cvproject}[2]{%
|
||||
{\large\color{emphasis}#1}
|
||||
\medskip\normalsize
|
||||
{\color{accent}\hspace{.1in}$|$\hspace{.05in}#2}\par
|
||||
\normalsize
|
||||
}
|
||||
|
||||
\newcommand{\cvactivity}[6]{%
|
||||
{\large\color{emphasis}#1}
|
||||
\medskip\normalsize
|
||||
{\color{accent}\hspace{.1in}#2\hspace{.05in}#3}\par
|
||||
{\color{accent}#4}\par
|
||||
\smallskip
|
||||
\ifstrequal{#5}{}{}{{\small\makebox[0.5\linewidth][l]{\faCalendar~#5}}}
|
||||
\ifstrequal{#6}{}{}{{\small\makebox[0.5\linewidth][l]{\faMapMarker~#6}}}\par
|
||||
\medskip\normalsize
|
||||
}
|
||||
|
||||
\newcommand{\cvachievement}[3]{%
|
||||
\begin{tabularx}{\linewidth}{@{}p{2em} @{\hspace{1ex}} >{\raggedright\arraybackslash}X@{}}
|
||||
\multirow{2}{*}{\Large\color{accent}#1} & \bfseries\textcolor{emphasis}{#2}\\
|
||||
& #3
|
||||
\end{tabularx}%
|
||||
\smallskip
|
||||
}
|
||||
|
||||
\newcommand{\cveventShort}[4]{%
|
||||
{\large\color{emphasis}#1\par}
|
||||
\smallskip\normalsize
|
||||
\ifstrequal{#2}{}{}{
|
||||
\textbf{\color{accent}#2}\par
|
||||
\smallskip}
|
||||
\ifstrequal{#3}{}{}{{\small\makebox[0.5\linewidth][l]{\faCalendar~#3}}}\\
|
||||
\ifstrequal{#4}{}{}{{\small\makebox[0.5\linewidth][l]{\faMapMarker~#4}}}\par
|
||||
\medskip\normalsize
|
||||
}
|
||||
|
||||
\newcommand{\cvtag}[1]{%
|
||||
\tikz[baseline]\node[anchor=base,draw=body!30,rounded corners,inner xsep=1ex,inner ysep =0.75ex,text height=1.5ex,text depth=.25ex]{#1};
|
||||
}
|
||||
|
||||
% v1.6: Use accsupp so that the actual numeric value is copied/pasted
|
||||
% and also support 0.5, 1.5, 2.5, 3.5, 4.5
|
||||
\newcommand{\cvskill}[2]{%
|
||||
\textcolor{emphasis}{\textbf{#1}}\hfill
|
||||
\BeginAccSupp{method=plain,ActualText={#2}}
|
||||
\foreach \x in {1,...,5}{%
|
||||
\ifdimequal{\x pt - #2 pt}{0.5pt}%
|
||||
{\clipbox*{0pt -0.25ex {.5\width} {\totalheight}}{\color{accent}\ratingmarker}%
|
||||
\clipbox*{{.5\width} -0.25ex {\width} {\totalheight}}{\color{body!30}\ratingmarker}}
|
||||
{\ifdimgreater{\x bp}{#2 bp}{\color{body!30}}{\color{accent}}\ratingmarker}%
|
||||
}\EndAccSupp{}\par%
|
||||
}
|
||||
|
||||
% Adapted from @Jake's answer at http://tex.stackexchange.com/a/82729/226
|
||||
\newcommand{\wheelchart}[4][0]{%
|
||||
\begingroup\centering
|
||||
\def\innerradius{#3}%
|
||||
\def\outerradius{#2}%
|
||||
% Calculate total
|
||||
\pgfmathsetmacro{\totalnum}{0}%
|
||||
\foreach \value/\colour/\name in {#4} {%
|
||||
\pgfmathparse{\value+\totalnum}%
|
||||
\global\let\totalnum=\pgfmathresult%
|
||||
}%
|
||||
\begin{tikzpicture}
|
||||
|
||||
% Calculate the thickness and the middle line of the wheel
|
||||
\pgfmathsetmacro{\wheelwidth}{\outerradius-\innerradius}
|
||||
\pgfmathsetmacro{\midradius}{(\outerradius+\innerradius)/2}
|
||||
\pgfmathsetmacro{\totalrot}{-90 + #1}
|
||||
|
||||
% Rotate so we start from the top
|
||||
\begin{scope}[rotate=\totalrot]
|
||||
|
||||
% Loop through each value set. \cumnum keeps track of where we are in the wheel
|
||||
\pgfmathsetmacro{\cumnum}{0}
|
||||
\foreach \value/\width/\colour/\name in {#4} {
|
||||
\pgfmathsetmacro{\newcumnum}{\cumnum + \value/\totalnum*360}
|
||||
|
||||
% Calculate the percent value
|
||||
\pgfmathsetmacro{\percentage}{\value/\totalnum*100}
|
||||
% Calculate the mid angle of the colour segments to place the labels
|
||||
\pgfmathsetmacro{\midangle}{-(\cumnum+\newcumnum)/2}
|
||||
|
||||
% This is necessary for the labels to align nicely
|
||||
\pgfmathparse{
|
||||
(-\midangle>180?"west":"east")
|
||||
} \edef\textanchor{\pgfmathresult}
|
||||
\pgfmathparse{
|
||||
(-\midangle>180?"flush left":"flush right")
|
||||
} \edef\textalign{\pgfmathresult}
|
||||
\pgfmathsetmacro\labelshiftdir{1-2*(-\midangle<180)}
|
||||
|
||||
% Draw the color segments. Somehow, the \midrow units got lost, so we add 'pt' at the end. Not nice...
|
||||
\filldraw[draw=white,fill=\colour] (-\cumnum:\outerradius) arc (-\cumnum:-(\newcumnum):\outerradius) --
|
||||
(-\newcumnum:\innerradius) arc (-\newcumnum:-(\cumnum):\innerradius) -- cycle;
|
||||
|
||||
% Draw the data labels
|
||||
% v1.6: Use accsupp so that the numeric number is copied/pasted too
|
||||
\draw [*-,thin,emphasis] node [append after command={(\midangle:\midradius pt) -- (\midangle:\outerradius + 1ex) -- (\tikzlastnode)}] at (\midangle:\outerradius + 1ex) [xshift=\labelshiftdir*0.5cm,inner sep=1ex, outer sep=0pt, text width=\width,anchor=\textanchor,align=\textalign,font=\small,text=body]{\BeginAccSupp{method=pdfstringdef,ActualText={\name: \value}}\name\EndAccSupp{}};
|
||||
% Set the old cumulated angle to the new value
|
||||
\global\let\cumnum=\newcumnum
|
||||
}
|
||||
\end{scope}
|
||||
% \draw[gray] (0,0) circle (\outerradius) circle (\innerradius);
|
||||
\end{tikzpicture}\par
|
||||
\endgroup
|
||||
}
|
||||
|
||||
\newcommand{\cvref}[3]{%
|
||||
\smallskip
|
||||
\textcolor{emphasis}{\textbf{#1}}\par
|
||||
\begin{description}[font=\color{accent},style=multiline,leftmargin=1.35em,align=left]
|
||||
\item[\small\normalfont\emailsymbol] #2
|
||||
\item[\small\normalfont\mailaddresssymbol] #3
|
||||
\end{description}
|
||||
% \medskip
|
||||
}
|
||||
|
||||
\newenvironment{cvcolumn}[1]{\begin{minipage}[t]{#1}\raggedright}{\end{minipage}}
|
||||
|
||||
% v1.5 Move biblatex-related code to separate .cfg file
|
||||
% so that it's easier to change and customise the style for
|
||||
% publication lists
|
||||
|
||||
% v1.1.2: make it easier to add a sidebar aligned with top of next page
|
||||
\RequirePackage{afterpage}
|
||||
\newcommand{\addsidebar}[2][]{\marginpar{%
|
||||
\ifstrequal{#1}{}{}{\vspace*{#1}}%
|
||||
\input{#2}}%
|
||||
}
|
||||
\newcommand{\addnextpagesidebar}[2][]{\afterpage{\addsidebar[#1]{#2}}}
|
||||
|
||||
\AtBeginDocument{%
|
||||
\pagestyle{empty}
|
||||
\color{body}
|
||||
\raggedright
|
||||
}
|
||||
224
resume/main.tex
@@ -1,224 +0,0 @@
|
||||
%%%%%%%%%%%%%%%%%
|
||||
% This is an sample CV template created using altacv.cls
|
||||
% (v1.6, 21 May 2021) written by LianTze Lim (liantze@gmail.com). Now compiles with pdfLaTeX, XeLaTeX and LuaLaTeX.
|
||||
%
|
||||
%% It may be distributed and/or modified under the
|
||||
%% conditions of the LaTeX Project Public License, either version 1.3
|
||||
%% of this license or (at your option) any later version.
|
||||
%% The latest version of this license is in
|
||||
%% http://www.latex-project.org/lppl.txt
|
||||
%% and version 1.3 or later is part of all distributions of LaTeX
|
||||
%% version 2003/12/01 or later.
|
||||
%%%%%%%%%%%%%%%%
|
||||
|
||||
%% Use the "normalphoto" option if you want a normal photo instead of cropped to a circle
|
||||
% \documentclass[10pt,a4paper,normalphoto]{altacv}
|
||||
|
||||
\documentclass[10pt,a4paper,ragged2e,withhyper]{altacv}
|
||||
%% AltaCV uses the fontawesome5 and packages.
|
||||
%% See http://texdoc.net/pkg/fontawesome5 for full list of symbols.
|
||||
|
||||
% Change the page layout if you need to
|
||||
\geometry{left=1.25cm,right=1.25cm,top=1.5cm,bottom=1.5cm,columnsep=1.2cm}
|
||||
|
||||
% The paracol package lets you typeset columns of text in parallel
|
||||
\usepackage{paracol}
|
||||
|
||||
% Change the font if you want to, depending on whether
|
||||
% you're using pdflatex or xelatex/lualatex
|
||||
\ifxetexorluatex
|
||||
% If using xelatex or lualatex:
|
||||
\setmainfont{Roboto Slab}
|
||||
\setsansfont{Lato}
|
||||
\renewcommand{\familydefault}{\sfdefault}
|
||||
\else
|
||||
% If using pdflatex:
|
||||
\usepackage[rm]{roboto}
|
||||
\usepackage[defaultsans]{lato}
|
||||
% \usepackage{sourcesanspro}
|
||||
\renewcommand{\familydefault}{\sfdefault}
|
||||
\fi
|
||||
|
||||
% Change the colours if you want to
|
||||
\definecolor{SlateGrey}{HTML}{2E2E2E}
|
||||
\definecolor{LightGrey}{HTML}{666666}
|
||||
\definecolor{DarkPastelRed}{HTML}{450808}
|
||||
\definecolor{PastelRed}{HTML}{8F0D0D}
|
||||
\definecolor{GoldenEarth}{HTML}{E7D192}
|
||||
\colorlet{name}{black}
|
||||
\colorlet{tagline}{PastelRed}
|
||||
\colorlet{heading}{DarkPastelRed}
|
||||
\colorlet{headingrule}{GoldenEarth}
|
||||
\colorlet{subheading}{PastelRed}
|
||||
\colorlet{accent}{PastelRed}
|
||||
\colorlet{emphasis}{SlateGrey}
|
||||
\colorlet{body}{LightGrey}
|
||||
|
||||
% Change some fonts, if necessary
|
||||
\renewcommand{\namefont}{\Huge\rmfamily\bfseries}
|
||||
\renewcommand{\personalinfofont}{\footnotesize}
|
||||
\renewcommand{\cvsectionfont}{\LARGE\rmfamily\bfseries}
|
||||
\renewcommand{\cvsubsectionfont}{\large\bfseries}
|
||||
|
||||
% Change the bullets for itemize and rating marker
|
||||
% for \cvskill if you want to
|
||||
\renewcommand{\itemmarker}{{\small\textbullet}}
|
||||
\renewcommand{\ratingmarker}{\faCircle}
|
||||
%% Use (and optionally edit if necessary) this .tex if you
|
||||
%% want to use an author-year reference style like APA(6)
|
||||
%% for your publication list
|
||||
\input{pubs-authoryear}
|
||||
|
||||
%% Use (and optionally edit if necessary) this .tex if you
|
||||
%% want an originally numerical reference style like IEEE
|
||||
%% for your publication list
|
||||
% \input{pubs-num}
|
||||
|
||||
%% sample.bib contains your publications
|
||||
\addbibresource{sample.bib}
|
||||
\begin{document}
|
||||
\name{Andrew Simonson}
|
||||
\tagline{Seeking co-op or internship in data science or similar field for the summer of 2022}
|
||||
%% You can add multiple photos on the left or right
|
||||
% \photoL{2.5cm}{Yacht_High,Suitcase_High}
|
||||
|
||||
\personalinfo{%
|
||||
% Not all of these are required!
|
||||
\email{asimonson1125@gmail.com}
|
||||
\phone{(240)-707-1486}
|
||||
\homepage{asimonson1125.github.io}
|
||||
\linkedin{simonsonandrew}
|
||||
\github{asimonson1125}
|
||||
%% You can add your own arbitrary detail with
|
||||
%% \printinfo{symbol}{detail}[optional hyperlink prefix]
|
||||
% \printinfo{\faPaw}{Hey ho!}[https://example.com/]
|
||||
%% Or you can declare your own field with
|
||||
%% \NewInfoFiled{fieldname}{symbol}[optional hyperlink prefix] and use it:
|
||||
% \NewInfoField{gitlab}{\faGitlab}[https://gitlab.com/]
|
||||
% \gitlab{your_id}
|
||||
%%
|
||||
%% For services and platforms like Mastodon where there isn't a
|
||||
%% straightforward relation between the user ID/nickname and the hyperlink,
|
||||
%% you can use \printinfo directly e.g.
|
||||
% \printinfo{\faMastodon}{@username@instace}[https://instance.url/@username]
|
||||
%% But if you absolutely want to create new dedicated info fields for
|
||||
%% such platforms, then use \NewInfoField* with a star:
|
||||
% \NewInfoField*{mastodon}{\faMastodon}
|
||||
%% then you can use \mastodon, with TWO arguments where the 2nd argument is
|
||||
%% the full hyperlink.
|
||||
% \mastodon{@username@instance}{https://instance.url/@username}
|
||||
}
|
||||
|
||||
\makecvheader
|
||||
%% Depending on your tastes, you may want to make fonts of itemize environments slightly smaller
|
||||
% \AtBeginEnvironment{itemize}{\small}
|
||||
|
||||
%% Set the left/right column width ratio to 6:4.
|
||||
\columnratio{0.6}
|
||||
|
||||
% Start a 2-column paracol. Both the left and right columns will automatically
|
||||
% break across pages if things get too long.
|
||||
\begin{paracol}{2}
|
||||
|
||||
\cvsection{Projects}
|
||||
|
||||
\cvproject{Slate}{\githubProject{Slate}}
|
||||
A web app for RIT Computer Science House to help event coordinators schedule events by congregating participant calendar data\\
|
||||
\cvtag{Python}
|
||||
\cvtag{APIs}
|
||||
\cvtag{SQL}
|
||||
\cvtag{OAuth2}
|
||||
|
||||
\divider
|
||||
|
||||
\cvproject{Humans vs. Zombies Bot}{\githubProject{HvZ-bot}}
|
||||
A Discord bot to handle role management and statistics for RIT's Humans vs Zombies games\\
|
||||
\cvtag{JavaScript}
|
||||
\cvtag{NodeJS}
|
||||
\cvtag{APIs}
|
||||
\cvtag{SQL}
|
||||
|
||||
|
||||
\divider
|
||||
|
||||
\cvproject{NationsGame Rolls Simulator}{\githubProject{NG-Rolls-Simulator}}
|
||||
A NationsGame competition simulator for division predictions and statistical analysis, originally written in Python, ported to JavaScript for use in Discord bots.\\
|
||||
\cvtag{Python}
|
||||
\cvtag{JavaScript}
|
||||
\cvtag{NodeJS}
|
||||
\cvtag{APIs}
|
||||
|
||||
|
||||
\medskip
|
||||
|
||||
\cvsection{Activities}
|
||||
|
||||
\cvactivity{Computer Science House}{|}{\homepage{csh.rit.edu}}{Active Member}{May 2021 - Present}{Rochester Institute of Technology}
|
||||
A living and learning community with an emphasis on hands-on learning and a strong social atmosphere. CSH helps its members grow as professionals with the organization's focus on learning from each other through seminars and the yearly major project requirement.
|
||||
|
||||
\divider
|
||||
|
||||
\cvevent{FinTech}{Member/Dev}{September 2021 - Present}{Rochester Institute of Technology}
|
||||
A group derived from the RIT Financial Management Association dedicated to learning about financial management of equities using modern programmatic applications developed by students.
|
||||
|
||||
\divider
|
||||
|
||||
\cvevent{National Honor Society}{Member and Volunteer}{2019 - 2021}{Boonsboro High School}
|
||||
A nationwide organization promoting scholarship, leadership, service, and character
|
||||
|
||||
\divider
|
||||
|
||||
\cvevent{BHS VEX Robotics}{President and Team Lead}{2015-2021}{Boonsboro High School}
|
||||
An organization to design, build, and program robots to compete in the
|
||||
annual VEX Robotics Competition
|
||||
%% Switch to the right column. This will now automatically move to the second
|
||||
%% page if the content is too long.
|
||||
\switchcolumn
|
||||
|
||||
\cvsection{Skills}
|
||||
|
||||
\cvtag{Python}
|
||||
\cvtag{JavaScript}
|
||||
\cvtag{Java}
|
||||
\cvtag{C++}\par
|
||||
\cvtag{SQL}
|
||||
\cvtag{Object-Oriented Programming}
|
||||
|
||||
\divider\smallskip
|
||||
|
||||
\cvtag{Git}
|
||||
\cvtag{Linux}
|
||||
\cvtag{Raspberry Pi}
|
||||
\cvtag{LaTeX}
|
||||
\cvtag{NodeJS}
|
||||
\cvtag{Flask}
|
||||
\cvtag{Statistical Analysis}
|
||||
\cvtag{DOM Scraping}
|
||||
\cvtag{APIs}
|
||||
|
||||
\medskip
|
||||
|
||||
\cvsection{Experience}
|
||||
|
||||
\cveventShort{Kitchen Staff}{\href{https://www.pretzelandpizzacreations.com/}{Pretzel and Pizza Creations}}{April 2021 -- August 2021}{Hagerstown, MD}
|
||||
Worked part-time as a chef with a team to manage and fulfill orders and manage active ingredient supply
|
||||
|
||||
\divider
|
||||
|
||||
\cveventShort{Election Official}{\href{https://www.washco-mdelections.org/}{Washington County Board of Elections}}{August 2020 -- December 2020}{Hagerstown, MD}
|
||||
Trained in voter registry operations and provisional voting for the 2020 US Presidential Election
|
||||
|
||||
\cvsection{Education}
|
||||
|
||||
\cvevent{Rochester Institute of Technology}{Computer Science B.S.}{August 2021 -- May 2026}{}
|
||||
Sophomore Standing
|
||||
|
||||
\divider
|
||||
|
||||
\cvevent{Boonsboro High School}{}{Sept 2016 -- June 2021}{}
|
||||
\textbf{GPA:} 4.2\\
|
||||
\textbf{SAT:} 1500
|
||||
|
||||
\end{paracol}
|
||||
|
||||
\end{document}
|
||||
@@ -1,8 +0,0 @@
|
||||
% When using APA6 if you need more author names to be listed
|
||||
% because you're e.g. the 12th author, add apamaxprtauth=12
|
||||
\usepackage[backend=biber,style=apa6,sorting=ydnt]{biblatex}
|
||||
\defbibheading{pubtype}{\cvsubsection{#1}}
|
||||
\renewcommand{\bibsetup}{\vspace*{-\baselineskip}}
|
||||
\AtEveryBibitem{\makebox[\bibhang][l]{\itemmarker}}
|
||||
\setlength{\bibitemsep}{0.25\baselineskip}
|
||||
\setlength{\bibhang}{1.25em}
|
||||
@@ -1,7 +0,0 @@
|
||||
\usepackage[backend=biber,style=ieee,sorting=ydnt]{biblatex}
|
||||
%% For removing numbering entirely when using a numeric style
|
||||
\setlength{\bibhang}{1.25em}
|
||||
\DeclareFieldFormat{labelnumberwidth}{\makebox[\bibhang][l]{\itemmarker}}
|
||||
\setlength{\biblabelsep}{0pt}
|
||||
\defbibheading{pubtype}{\cvsubsection{#1}}
|
||||
\renewcommand{\bibsetup}{\vspace*{-\baselineskip}}
|
||||
@@ -1,70 +0,0 @@
|
||||
# Getting Started with Create React App
|
||||
|
||||
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
|
||||
|
||||
## Available Scripts
|
||||
|
||||
In the project directory, you can run:
|
||||
|
||||
### `yarn start`
|
||||
|
||||
Runs the app in the development mode.\
|
||||
Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
|
||||
|
||||
The page will reload if you make edits.\
|
||||
You will also see any lint errors in the console.
|
||||
|
||||
### `yarn test`
|
||||
|
||||
Launches the test runner in the interactive watch mode.\
|
||||
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
|
||||
|
||||
### `yarn build`
|
||||
|
||||
Builds the app for production to the `build` folder.\
|
||||
It correctly bundles React in production mode and optimizes the build for the best performance.
|
||||
|
||||
The build is minified and the filenames include the hashes.\
|
||||
Your app is ready to be deployed!
|
||||
|
||||
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
|
||||
|
||||
### `yarn eject`
|
||||
|
||||
**Note: this is a one-way operation. Once you `eject`, you can’t go back!**
|
||||
|
||||
If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
|
||||
|
||||
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own.
|
||||
|
||||
You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it.
|
||||
|
||||
## Learn More
|
||||
|
||||
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
|
||||
|
||||
To learn React, check out the [React documentation](https://reactjs.org/).
|
||||
|
||||
### Code Splitting
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
|
||||
|
||||
### Analyzing the Bundle Size
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
|
||||
|
||||
### Making a Progressive Web App
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
|
||||
|
||||
### Advanced Configuration
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
|
||||
|
||||
### Deployment
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
|
||||
|
||||
### `yarn build` fails to minify
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
|
||||
@@ -1,43 +0,0 @@
|
||||
{
|
||||
"name": "portfolio",
|
||||
"version": "0.1.0",
|
||||
"homepage": "https://asimonson1125.github.io/",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@testing-library/jest-dom": "^5.11.4",
|
||||
"@testing-library/react": "^11.1.0",
|
||||
"@testing-library/user-event": "^12.1.10",
|
||||
"aos": "^2.3.4",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2",
|
||||
"react-router-dom": "^5.3.0",
|
||||
"react-scripts": "4.0.3",
|
||||
"web-vitals": "^1.0.1"
|
||||
},
|
||||
"scripts": {
|
||||
"predeploy": "npm run build",
|
||||
"deploy": "gh-pages -d build",
|
||||
"start": "react-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"test": "react-scripts test",
|
||||
"eject": "react-scripts eject"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": [
|
||||
"react-app",
|
||||
"react-app/jest"
|
||||
]
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -94,17 +94,18 @@ a {
|
||||
display: block;
|
||||
margin-left:auto;
|
||||
margin-right:auto;
|
||||
width: 85rem;
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
border: solid rgba(156,49,45,.2) .3rem;
|
||||
width: 75rem;
|
||||
background-color: rgba(0, 0, 0, 0.3);
|
||||
border: solid rgba(156,49,45, .8) .3rem;
|
||||
text-align: center;
|
||||
}
|
||||
.project{
|
||||
display: inline-block;
|
||||
text-align: left;
|
||||
margin: 1rem;
|
||||
width: 25rem;
|
||||
width: 20rem;
|
||||
height: 15rem;
|
||||
border: .3rem black solid;
|
||||
border: .3rem rgba(156,49,45, .8) solid;
|
||||
background-color: rgba(22,22,22,.8);
|
||||
}
|
||||
.tab{
|
||||
@@ -137,8 +138,10 @@ a {
|
||||
}
|
||||
.project a img, .project a p{
|
||||
padding: .5rem;
|
||||
filter: invert(18%) sepia(6%) saturate(5428%) hue-rotate(314deg) brightness(95%) contrast(97%);
|
||||
|
||||
filter: invert(100%) sepia(0%) saturate(1%) hue-rotate(52deg) brightness(106%) contrast(101%);
|
||||
}
|
||||
.project a img:hover, .project a p:hover{
|
||||
filter: invert(66%) sepia(0%) saturate(3964%) hue-rotate(99deg) brightness(100%) contrast(105%);
|
||||
}
|
||||
.incomplete{
|
||||
color:red;
|
||||
@@ -166,7 +169,7 @@ a {
|
||||
margin-right: 2rem;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 1500px){
|
||||
@media screen and (max-width: 1200px){
|
||||
.socials{
|
||||
margin-left: auto;
|
||||
}
|
||||
@@ -18,7 +18,7 @@ function App() {
|
||||
<h1>Andrew Simonson</h1>
|
||||
<Nav>
|
||||
<Link to='/'>Home</Link>
|
||||
<a href='resume.pdf'>Resume</a>
|
||||
<a href='resume.pdf' target='_blank'>Resume</a>
|
||||
<Link to='/projects'>Projects</Link>
|
||||
</Nav>
|
||||
</div>
|
||||
8
src/App.test.js
Normal file
@@ -0,0 +1,8 @@
|
||||
import { render, screen } from '@testing-library/react';
|
||||
import App from './App';
|
||||
|
||||
test('renders learn react link', () => {
|
||||
render(<App />);
|
||||
const linkElement = screen.getByText(/learn react/i);
|
||||
expect(linkElement).toBeInTheDocument();
|
||||
});
|
||||
36
src/Projects.js
Normal file
@@ -0,0 +1,36 @@
|
||||
import ProjectList from './componets/ProjectList'
|
||||
import Project from './componets/Project'
|
||||
import github from './assets/github.svg'
|
||||
|
||||
export default function Projects(){
|
||||
return(
|
||||
<>
|
||||
<h2>Projects</h2>
|
||||
<p>Project status is indicated by the color of the project card:<br /><span className='complete'>⬤</span> - Complete<br />
|
||||
<span className='WIP'>⬤</span> - Work In Progress<br /><span className='incomplete'>⬤</span> - incomplete</p>
|
||||
<ProjectList>
|
||||
<Project status='complete' title='Digital Portfolio' link='https://github.com/asimonson1125/asimonson1125.github.io' linkText={<img alt='github' src={github} />}>
|
||||
A personal portfolio site made with React.js
|
||||
</Project>
|
||||
<Project status='WIP' title='Slate' link='https://github.com/asimonson1125/Slate' linkText={<img alt='github' src={github} />}>
|
||||
Slate is a thing
|
||||
</Project>
|
||||
<Project status='WIP' title='Querist' link='https://github.com/asimonson1125/Querist' linkText={<img alt='github' src={github} />}>
|
||||
A modular discord bot to manage class discord servers.
|
||||
</Project>
|
||||
<Project status='complete' title='NationsGame Rolls Simulator' link='https://github.com/asimonson1125/NG-Rolls-Simulator' linkText={<img alt='github' src={github} />}>
|
||||
A simulator for the browser game, NationsGame, to analyze unit composition and predict in-game victors and unit statistics.
|
||||
</Project>
|
||||
<Project status='complete' title='Humans vs. Zombies Bot' link='https://github.com/asimonson1125/HvZ-bot' linkText={<img alt='github' src={github} />}>
|
||||
A Discord bot to handle role management and statistics for RIT's Humans vs. Zombies games.
|
||||
</Project>
|
||||
<Project status='incomplete' title='WallCycle' link='https://github.com/asimonson1125/WallCycle' linkText={<img alt='github' src={github} />}>
|
||||
A GNOME extension that cycles through a folder of wallpapers
|
||||
</Project>
|
||||
<Project status='complete' title='WinKeylogger' link='https://github.com/asimonson1125/WinKeylogger' linkText={<img alt='github' src={github} />}>
|
||||
A C++ keylogger for windows based off a udemy course with my custom modifications and powershell script.
|
||||
</Project>
|
||||
</ProjectList>
|
||||
</>
|
||||
)
|
||||
}
|
||||
10
src/assets/email.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="256" height="256" viewBox="0 0 256 256" xml:space="preserve">
|
||||
<desc>Created with Fabric.js 1.7.22</desc>
|
||||
<defs>
|
||||
</defs>
|
||||
<g transform="translate(128 128) scale(0.72 0.72)" style="">
|
||||
<g style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1;" transform="translate(-175.05 -175.05) scale(3.89 3.89)" >
|
||||
<path d="M 0 11.755 v 66.489 h 90 V 11.755 H 0 z M 45 50.49 L 7.138 15.755 h 75.724 L 45 50.49 z M 33.099 45 L 4 71.695 V 18.304 L 33.099 45 z M 36.058 47.714 L 45 55.918 l 8.943 -8.204 l 28.919 26.53 H 7.138 L 36.058 47.714 z M 56.901 45 L 86 18.304 v 53.392 L 56.901 45 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
BIN
src/assets/ezgif.gif
Normal file
|
After Width: | Height: | Size: 689 KiB |
1
src/assets/github.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0"?><svg fill="#000000" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="48px" height="48px"> <path d="M10.9,2.1c-4.6,0.5-8.3,4.2-8.8,8.7c-0.5,4.7,2.2,8.9,6.3,10.5C8.7,21.4,9,21.2,9,20.8v-1.6c0,0-0.4,0.1-0.9,0.1 c-1.4,0-2-1.2-2.1-1.9c-0.1-0.4-0.3-0.7-0.6-1C5.1,16.3,5,16.3,5,16.2C5,16,5.3,16,5.4,16c0.6,0,1.1,0.7,1.3,1c0.5,0.8,1.1,1,1.4,1 c0.4,0,0.7-0.1,0.9-0.2c0.1-0.7,0.4-1.4,1-1.8c-2.3-0.5-4-1.8-4-4c0-1.1,0.5-2.2,1.2-3C7.1,8.8,7,8.3,7,7.6C7,7.2,7,6.6,7.3,6 c0,0,1.4,0,2.8,1.3C10.6,7.1,11.3,7,12,7s1.4,0.1,2,0.3C15.3,6,16.8,6,16.8,6C17,6.6,17,7.2,17,7.6c0,0.8-0.1,1.2-0.2,1.4 c0.7,0.8,1.2,1.8,1.2,3c0,2.2-1.7,3.5-4,4c0.6,0.5,1,1.4,1,2.3v2.6c0,0.3,0.3,0.6,0.7,0.5c3.7-1.5,6.3-5.1,6.3-9.3 C22,6.1,16.9,1.4,10.9,2.1z"/></svg>
|
||||
|
After Width: | Height: | Size: 759 B |
1
src/assets/instagram.svg
Normal file
@@ -0,0 +1 @@
|
||||
<?xml version="1.0"?><svg fill="#000000" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 30" width="60px" height="60px"> <path d="M 9.9980469 3 C 6.1390469 3 3 6.1419531 3 10.001953 L 3 20.001953 C 3 23.860953 6.1419531 27 10.001953 27 L 20.001953 27 C 23.860953 27 27 23.858047 27 19.998047 L 27 9.9980469 C 27 6.1390469 23.858047 3 19.998047 3 L 9.9980469 3 z M 22 7 C 22.552 7 23 7.448 23 8 C 23 8.552 22.552 9 22 9 C 21.448 9 21 8.552 21 8 C 21 7.448 21.448 7 22 7 z M 15 9 C 18.309 9 21 11.691 21 15 C 21 18.309 18.309 21 15 21 C 11.691 21 9 18.309 9 15 C 9 11.691 11.691 9 15 9 z M 15 11 A 4 4 0 0 0 11 15 A 4 4 0 0 0 15 19 A 4 4 0 0 0 19 15 A 4 4 0 0 0 15 11 z"/></svg>
|
||||
|
After Width: | Height: | Size: 683 B |
BIN
src/assets/itsa_me.JPG
Normal file
|
After Width: | Height: | Size: 4.5 MiB |
10
src/assets/linkedin.svg
Normal file
@@ -0,0 +1,10 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="256" height="256" viewBox="0 0 256 256" xml:space="preserve">
|
||||
<desc>Created with Fabric.js 1.7.22</desc>
|
||||
<defs>
|
||||
</defs>
|
||||
<g transform="translate(128 128) scale(0.72 0.72)" style="">
|
||||
<g style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1;" transform="translate(-175.05 -175.05) scale(3.89 3.89)" >
|
||||
<path d="M 45 0 C 20.147 0 0 20.147 0 45 c 0 24.853 20.147 45 45 45 c 24.853 0 45 -20.147 45 -45 C 90 20.147 69.853 0 45 0 z M 31.187 69.956 H 20.822 V 36.617 h 10.365 V 69.956 z M 26.005 32.062 c -3.32 0 -6.005 -2.692 -6.005 -6.007 c 0 -3.318 2.685 -6.011 6.005 -6.011 c 3.313 0 6.005 2.692 6.005 6.011 C 32.01 29.37 29.317 32.062 26.005 32.062 z M 70 69.956 H 59.643 V 53.743 c 0 -3.867 -0.067 -8.84 -5.385 -8.84 c -5.392 0 -6.215 4.215 -6.215 8.562 v 16.491 H 37.686 V 36.617 h 9.939 v 4.559 h 0.141 c 1.383 -2.622 4.764 -5.385 9.804 -5.385 C 68.063 35.791 70 42.694 70 51.671 V 69.956 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(0,0,0); fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
26
src/componets/About.js
Normal file
@@ -0,0 +1,26 @@
|
||||
import React from 'react';
|
||||
import picture from '../assets/itsa_me.JPG'
|
||||
import AOS from 'aos'
|
||||
|
||||
export default function About(){
|
||||
return(
|
||||
<>
|
||||
<div data-aos="fade-in">
|
||||
<h2>A biography</h2>
|
||||
<p>Ahoy, I'm Andrew Simonson</p>
|
||||
<p>I'm primarily an <strong>extremely</strong> forgetful person
|
||||
who, when productive, rewrites fate in favor of my own
|
||||
short-term interests, or rather, whatever half-assed mistake
|
||||
results from the attempt.</p>
|
||||
<p>When I'm not <del>losing my mind</del>wasting time,
|
||||
you can find me building discord bots, playing chess,
|
||||
or actually exercising, doing things like, idk, playing
|
||||
racquetball or soccer.</p>
|
||||
<p>I'm a first year student at <strong>Rochester Institute of Technology </strong>
|
||||
in the <b>Computing Exploration</b> program. I'm from Hagerstown,
|
||||
Maryland.</p>
|
||||
</div>
|
||||
<img alt='me' src={picture} className='sideimg' data-aos='fade-up' />
|
||||
</>
|
||||
)
|
||||
}
|
||||
18
src/componets/Nav.js
Normal file
@@ -0,0 +1,18 @@
|
||||
import React from 'react';
|
||||
|
||||
export default function Nav(props){
|
||||
let items;
|
||||
for(let i = 0; i < props.children.length; i++){
|
||||
items = (
|
||||
<>
|
||||
{items}
|
||||
<li>{props.children[i]}</li>
|
||||
</>
|
||||
)
|
||||
}
|
||||
return(
|
||||
<ul className='navBar'>
|
||||
{items}
|
||||
</ul>
|
||||
)
|
||||
}
|
||||
22
src/componets/Project.js
Normal file
@@ -0,0 +1,22 @@
|
||||
import React from 'react'
|
||||
|
||||
export default class Project extends React.Component {
|
||||
constructor(props){
|
||||
super(props)
|
||||
}
|
||||
|
||||
render(){
|
||||
return (
|
||||
<li className={'project'} data-aos='fade-in' data-aos-offset={0}>
|
||||
<div className='topBox'>
|
||||
<h3>{this.props.title}</h3>
|
||||
<p className={this.props.status + " tab"}>⬤</p>
|
||||
<p className='body'>{this.props.children}</p>
|
||||
</div>
|
||||
<div className='bottomBox'>
|
||||
<a href={this.props.link}>{this.props.linkText}</a>
|
||||
</div>
|
||||
</li>
|
||||
)
|
||||
}
|
||||
}
|
||||
20
src/componets/ProjectList.js
Normal file
@@ -0,0 +1,20 @@
|
||||
import React from 'react'
|
||||
|
||||
export default function ProjectList(props){
|
||||
let projects;
|
||||
props.children.forEach(function(x){
|
||||
projects = (
|
||||
<>
|
||||
{projects}
|
||||
{x}
|
||||
</>
|
||||
);
|
||||
});
|
||||
return(
|
||||
<>
|
||||
<ul className='projectList'>
|
||||
{projects}
|
||||
</ul>
|
||||
</>
|
||||
);
|
||||
}
|
||||
19
src/componets/Socials.js
Normal file
@@ -0,0 +1,19 @@
|
||||
import React from 'react';
|
||||
|
||||
import github from '../assets/github.svg'
|
||||
import instagram from '../assets/instagram.svg'
|
||||
import linkedin from '../assets/linkedin.svg'
|
||||
import email from '../assets/email.svg'
|
||||
|
||||
export default function Socials(){
|
||||
return(
|
||||
<table class='socials'>
|
||||
<tr>
|
||||
<td><a href='https://github.com/asimonson1125'><img alt='Github' src={github} /></a></td>
|
||||
<td><a href='https://www.instagram.com/an_a.simonson/'><img alt='Instagram' src={instagram} /></a></td>
|
||||
<td><a href='https://www.linkedin.com/in/simonsonandrew/'><img alt='LinkedIn' src={linkedin} /></a></td>
|
||||
<td><a href='mailto:asimonson1125@gmail.com'><img alt='E-mail' src={email} /></a></td>
|
||||
</tr>
|
||||
</table>
|
||||
)
|
||||
}
|
||||
16
src/index.js
Normal file
@@ -0,0 +1,16 @@
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import App from './App';
|
||||
import reportWebVitals from './reportWebVitals';
|
||||
|
||||
ReactDOM.render(
|
||||
<React.StrictMode>
|
||||
<App />
|
||||
</React.StrictMode>,
|
||||
document.getElementById('root')
|
||||
);
|
||||
|
||||
// If you want to start measuring performance in your app, pass a function
|
||||
// to log results (for example: reportWebVitals(console.log))
|
||||
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
|
||||
reportWebVitals();
|
||||
1
src/logo.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
13
src/reportWebVitals.js
Normal file
@@ -0,0 +1,13 @@
|
||||
const reportWebVitals = onPerfEntry => {
|
||||
if (onPerfEntry && onPerfEntry instanceof Function) {
|
||||
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
|
||||
getCLS(onPerfEntry);
|
||||
getFID(onPerfEntry);
|
||||
getFCP(onPerfEntry);
|
||||
getLCP(onPerfEntry);
|
||||
getTTFB(onPerfEntry);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export default reportWebVitals;
|
||||
5
src/setupTests.js
Normal file
@@ -0,0 +1,5 @@
|
||||
// jest-dom adds custom jest matchers for asserting on DOM nodes.
|
||||
// allows you to do things like:
|
||||
// expect(element).toHaveTextContent(/react/i)
|
||||
// learn more: https://github.com/testing-library/jest-dom
|
||||
import '@testing-library/jest-dom';
|
||||