From 651e95503d3bc9ec69dd59f00f9ff1df1b96e754 Mon Sep 17 00:00:00 2001 From: Kevin Mok Date: Fri, 1 Mar 2019 05:19:49 -0500 Subject: [PATCH 1/7] Setup blog formatting, started on resume --- assets/sass/main.scss | 85 +++++++++++++------ config.yaml | 6 +- content/posts/wallpaper-playlist.md | 40 ++++++++- content/resume/_index.md | 25 +++++- ideas.md | 6 ++ layouts/partials/article.html | 2 +- layouts/resume/section.html | 7 ++ layouts/shortcodes/md-div.html | 3 + layouts/shortcodes/project-header.html | 2 + ...s_f300667da4f5b5f84e1a9e0702b2fdde.content | 47 ++++++---- 10 files changed, 173 insertions(+), 50 deletions(-) create mode 100644 layouts/shortcodes/md-div.html create mode 100644 layouts/shortcodes/project-header.html diff --git a/assets/sass/main.scss b/assets/sass/main.scss index 4447d7d..a39fcc7 100644 --- a/assets/sass/main.scss +++ b/assets/sass/main.scss @@ -407,6 +407,31 @@ footer {// {{{ margin-right: 2em; } */// }}} +#resume { + a { + text-decoration: none; + &:hover { + text-decoration: underline; + } + } + + h1 { + color: $base-orange; + } + + h2 { + color: $base-yellow; + display: inline; + } + + p { + &.project-date { + float: right; + } + } + +} + // TODO: converted up to here // hero {{{ // @@ -517,23 +542,43 @@ h1.site-title {// {{{ // article.single {{{ // -article.single .meta { - font-size: 0.9em; - text-align: right; -} +article.single { + .meta { + font-size: 0.9em; + text-align: right; + margin-top: .5rem; + margin-bottom: .5rem; -article.single .meta .key { - color: #747369; -} + .key { + color: #747369; + } -article.single .meta .val, article.single .meta .val a { - color: #cc99cc; -} + .val { + color: #cc99cc; + + a { + color: #cc99cc; + } + } + + } + + .body { + padding-top: 1rem; + padding-bottom: 3rem; + } + + @media (max-width: $max-page-width) { + .meta { + padding-left: 2rem; + padding-right: 2rem; + } + + .body { + padding-top: .5rem; + padding-bottom: 1rem; + } -@media (max-width: $max-page-width) { - article.single .meta { - padding-left: 2rem; - padding-right: 2rem; } } @@ -550,18 +595,6 @@ article.single h1.headline { } } -article.single section.body { - padding-top: 4rem; - padding-bottom: 3rem; -} - -@media (max-width: $max-page-width) { - article.single section.body { - padding-top: 2rem; - padding-bottom: 1rem; - } -} - /* Highlight Colors */ article.single section.body h1 { color: #6699cc; } diff --git a/config.yaml b/config.yaml index 56e059d..ac418c9 100644 --- a/config.yaml +++ b/config.yaml @@ -13,9 +13,9 @@ params: menu: main: - - name: resume - url: /resume - weight: 5 + # - name: resume + # url: /resume + # weight: 5 - name: posts/ url: /posts weight: 6 diff --git a/content/posts/wallpaper-playlist.md b/content/posts/wallpaper-playlist.md index f8bec3d..41ae34a 100644 --- a/content/posts/wallpaper-playlist.md +++ b/content/posts/wallpaper-playlist.md @@ -3,7 +3,33 @@ title: Wallpaper Playlist for pywal date: 2019-02-16T11:42:33-05:00 draft: false --- +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At +vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, +no sea takimata sanctus est Lorem ipsum dolor sit amet. + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At +vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, +no sea takimata sanctus est Lorem ipsum dolor sit amet. + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At +vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, +no sea takimata sanctus est Lorem ipsum dolor sit amet. + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At +vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, +no sea takimata sanctus est Lorem ipsum dolor sit amet. + +Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod +tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At +vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, +no sea takimata sanctus est Lorem ipsum dolor sit amet. + {{< highlight sh >}} + #!/bin/bash shuffle_cache="shuffle.txt" @@ -18,6 +44,7 @@ function usage_msg() { EOF } +# parse for regen_flag{{{ while getopts ":r" opt; do case $opt in r) @@ -31,6 +58,9 @@ while getopts ":r" opt; do ;; esac done +#}}} + +# set dir {{{ # shift $((OPTIND-1)) # if no dir, use pwd @@ -43,12 +73,16 @@ else dir="$1" fi +# }}} set dir # + # rebuild shuffle cache if regen_flag, doesn't exist or file empty if [[ "$regen_flag" -eq 1 ]] || [[ ! -f "$dir"/"$shuffle_cache" ]] || \ - [[ $(wc -l "$dir"/"$shuffle_cache" | awk '{print $1}') -eq 0 ]]; then - find "$dir"/* ! -name "$shuffle_cache" -type f | shuf > \ - "$dir"/"$shuffle_cache" + [[ "$(head -n 1 "$dir"/"$shuffle_cache")" = "" ]]; then + find "$dir"/* ! -name "$shuffle_cache" -type f | shuf > "$dir"/"$shuffle_cache" fi head -n 1 "$dir"/"$shuffle_cache" printf '%s\n\n' "$(sed '1d' "$dir"/"$shuffle_cache")" > "$dir"/"$shuffle_cache" + +# vim: set tabstop=2 shiftwidth=2 expandtab: + {{< /highlight >}} diff --git a/content/resume/_index.md b/content/resume/_index.md index 582201a..bb548a4 100644 --- a/content/resume/_index.md +++ b/content/resume/_index.md @@ -3,4 +3,27 @@ title: "Resume" date: 2019-02-11T07:50:51-05:00 draft: true --- -Test +# Goal +To find a company and internship to fully dedicate myself to to push my limits, +gain valuable knowledge and experience and jumpstart my career with a solid +foundation. + +{{% md-div projects %}} + +# Projects +{{< project-header name="Spotify Visualizer" url="https://github.com/Kevin-Mok/spotify-lib-vis" date="Nov. 2018" >}} +- Web app + +{{< project-header name="ParsaFood" url="https://github.com/Kevin-Mok/ParsaFood" date="Feb. 2018" >}} +- Android app that reads ingredients labels and detects any dietary + restrictions/allergies. Came up with the idea based on + [personal experience](https://github.com/Kevin\-Mok/ParsaFood\#motivation). +- Made during the 24-hour [Platterz Hackathon] +(https://www.eventbrite.com/e/platterz-hackathon-tickets-42682237722) + in a group with two other members. Came in 2nd place and won an + [Oculus Rift](https://www.amazon.ca/dp/B00VF0IXEY/ref=cm_sw_r_tw_dp_U_x_I7kBCbX50DAB2). +- Was in-charge of the front-end of the app and designed all the layouts/pages. + +{{< project-header name="TrapBot" url="https://github.com/Kevin-Mok/TrapBot" date="Feb. 2018" >}} + +{{% /md-div %}} diff --git a/ideas.md b/ideas.md index c9c40e9..cef897a 100644 --- a/ideas.md +++ b/ideas.md @@ -1,5 +1,9 @@ # Large - resume + - upload screenshots for spv + - date on same line as project + - collapsible sections + - link to each section beside it - fix title - printable version - JS to change CSS @@ -38,6 +42,8 @@ - SEO - add/redirect aliases - be more specific with robots.txt when have content +- create different size images for SVG + - https://www.sitepoint.com/svg-good-for-website-performance/ Break> {{{ > }}} diff --git a/layouts/partials/article.html b/layouts/partials/article.html index aadd1a1..81eee4c 100644 --- a/layouts/partials/article.html +++ b/layouts/partials/article.html @@ -5,7 +5,7 @@ {{ if not .Page.Date.IsZero }} - + {{ end }} {{ with .Params.categories }} diff --git a/layouts/resume/section.html b/layouts/resume/section.html index b991c55..4d6439b 100644 --- a/layouts/resume/section.html +++ b/layouts/resume/section.html @@ -4,5 +4,12 @@ {{ partial "base16-logo.html" . }} +
+ {{ .Content }} +
+ + + + diff --git a/layouts/shortcodes/md-div.html b/layouts/shortcodes/md-div.html new file mode 100644 index 0000000..6b626f3 --- /dev/null +++ b/layouts/shortcodes/md-div.html @@ -0,0 +1,3 @@ +
+ {{ .Inner }} +
diff --git a/layouts/shortcodes/project-header.html b/layouts/shortcodes/project-header.html new file mode 100644 index 0000000..93bb41b --- /dev/null +++ b/layouts/shortcodes/project-header.html @@ -0,0 +1,2 @@ +

{{ .Get "name" }}

+

{{ .Get "date" }}

diff --git a/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content b/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content index dcbe91a..231cb2d 100644 --- a/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content +++ b/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content @@ -296,6 +296,21 @@ footer a { .homepage .tag { margin-right: 2em; } */ +#resume a { + text-decoration: none; } + #resume a:hover { + text-decoration: underline; } + +#resume h1 { + color: #f99157; } + +#resume h2 { + color: #ffcc66; + display: inline; } + +#resume p.project-date { + float: right; } + h1.site-title { text-align: center; /* font-size: 3.5em; */ @@ -373,18 +388,27 @@ h1.site-title { article.single .meta { font-size: 0.9em; - text-align: right; } - -article.single .meta .key { - color: #747369; } + text-align: right; + margin-top: .5rem; + margin-bottom: .5rem; } + article.single .meta .key { + color: #747369; } + article.single .meta .val { + color: #cc99cc; } + article.single .meta .val a { + color: #cc99cc; } -article.single .meta .val, article.single .meta .val a { - color: #cc99cc; } +article.single .body { + padding-top: 1rem; + padding-bottom: 3rem; } @media (max-width: 52em) { article.single .meta { padding-left: 2rem; - padding-right: 2rem; } } + padding-right: 2rem; } + article.single .body { + padding-top: .5rem; + padding-bottom: 1rem; } } article.single h1.headline { margin-top: 0; @@ -396,15 +420,6 @@ article.single h1.headline { padding-left: 2rem; padding-right: 2rem; } } -article.single section.body { - padding-top: 4rem; - padding-bottom: 3rem; } - -@media (max-width: 52em) { - article.single section.body { - padding-top: 2rem; - padding-bottom: 1rem; } } - /* Highlight Colors */ article.single section.body h1 { color: #6699cc; } From 990bce6252936d78e25eb5ea78fb1dc96fc974d2 Mon Sep 17 00:00:00 2001 From: Kevin Mok Date: Mon, 8 Jul 2019 04:56:08 -0400 Subject: [PATCH 2/7] Blog ideas --- ideas.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/ideas.md b/ideas.md index cef897a..6d19c7f 100644 --- a/ideas.md +++ b/ideas.md @@ -1,6 +1,14 @@ # Large - resume - - upload screenshots for spv + - make old proj's displayable + - spv + - screenshots + - setup instructions + - see if SoundCloud API still bad (TrapBot) + - ADA vid/pics + - lc setup + - image tagger? + - executable - date on same line as project - collapsible sections - link to each section beside it @@ -11,6 +19,8 @@ - add CSS grid layout - add tooltip saying responsive - articles (ideas) +- screenshots gallery + - infinite scroll - loop through URL sections - ask about most efficient way for custom layout for each section From 38ca0829f6d21ac7228949b91abc4fb9d079eabf Mon Sep 17 00:00:00 2001 From: Kevin Mok Date: Mon, 29 Jul 2019 23:58:14 -0400 Subject: [PATCH 3/7] Initial resume Organize partials. Outage night post notes. --- config.yaml | 9 +- content/posts/outage-night.md | 26 +++++ content/resume/_index.md | 94 ++++++++++++++----- ideas.md | 2 + layouts/404.html | 4 +- layouts/_default/list.html | 12 +-- layouts/_default/single.html | 12 +-- layouts/index.html | 12 +-- layouts/partials/{ => base}/article.html | 0 layouts/partials/{ => base}/base16-logo.html | 0 layouts/partials/{ => base}/footer.html | 0 layouts/partials/{ => base}/header.html | 1 + layouts/partials/{ => base}/nav-bar.html | 0 layouts/partials/{ => base}/site-title.html | 0 layouts/partials/{ => home}/about.html | 2 +- .../{ => home}/article-list-item.html | 0 layouts/partials/{ => home}/hero.html | 0 layouts/partials/{ => home}/homepage.html | 0 layouts/partials/{ => home}/me-equation.html | 0 layouts/partials/{ => home}/tagline.html | 0 layouts/resume/section.html | 6 +- layouts/shortcodes/md-div.html | 3 - layouts/shortcodes/md.html | 2 + .../shortcodes/resume/project-details.html | 4 + .../{ => resume}/project-header.html | 0 layouts/shortcodes/resume/section.html | 4 + 26 files changed, 140 insertions(+), 53 deletions(-) create mode 100644 content/posts/outage-night.md rename layouts/partials/{ => base}/article.html (100%) rename layouts/partials/{ => base}/base16-logo.html (100%) rename layouts/partials/{ => base}/footer.html (100%) rename layouts/partials/{ => base}/header.html (97%) rename layouts/partials/{ => base}/nav-bar.html (100%) rename layouts/partials/{ => base}/site-title.html (100%) rename layouts/partials/{ => home}/about.html (88%) rename layouts/partials/{ => home}/article-list-item.html (100%) rename layouts/partials/{ => home}/hero.html (100%) rename layouts/partials/{ => home}/homepage.html (100%) rename layouts/partials/{ => home}/me-equation.html (100%) rename layouts/partials/{ => home}/tagline.html (100%) delete mode 100644 layouts/shortcodes/md-div.html create mode 100644 layouts/shortcodes/md.html create mode 100644 layouts/shortcodes/resume/project-details.html rename layouts/shortcodes/{ => resume}/project-header.html (100%) create mode 100644 layouts/shortcodes/resume/section.html diff --git a/config.yaml b/config.yaml index ac418c9..089748c 100644 --- a/config.yaml +++ b/config.yaml @@ -2,7 +2,8 @@ baseURL: http://localhost:1313/ # baseURL: https://kevin-mok.com/ # baseURL: /home/kevin/coding/mf-site/public languageCode: en-us -title: Kevin Mok's Website +# title: Kevin Mok's Website +title: Kevin Mok # theme: base16 enableRobotsTXT: true pygmentsUseClassic: true @@ -13,9 +14,9 @@ params: menu: main: - # - name: resume - # url: /resume - # weight: 5 + - name: resume + url: /resume + weight: 5 - name: posts/ url: /posts weight: 6 diff --git a/content/posts/outage-night.md b/content/posts/outage-night.md new file mode 100644 index 0000000..e8f097f --- /dev/null +++ b/content/posts/outage-night.md @@ -0,0 +1,26 @@ +--- +--- +- procrastinating on assignment + - want to play Pokemon randomizer + - upgrade compiler packages + - randomizer doesn't work + - boot to Windows +- Arch broke + - backup HD not working + - laptop wifi stopped working + - copy to USB + - extract and works + - pacman upgrade + - conflicting files + - finally work +- power outage + - go to bed + - lamp turns back on +- PC doesn't start + - try unplugging/battery 3-4 times + - about to go to bed + - try unplugging one last time + - turns back on +- kernel issues + - accidentally overwrite backup on USB + - don't want to wait for copy on laptop diff --git a/content/resume/_index.md b/content/resume/_index.md index bb548a4..ff2edac 100644 --- a/content/resume/_index.md +++ b/content/resume/_index.md @@ -3,27 +3,77 @@ title: "Resume" date: 2019-02-11T07:50:51-05:00 draft: true --- -# Goal -To find a company and internship to fully dedicate myself to to push my limits, -gain valuable knowledge and experience and jumpstart my career with a solid -foundation. - -{{% md-div projects %}} - -# Projects -{{< project-header name="Spotify Visualizer" url="https://github.com/Kevin-Mok/spotify-lib-vis" date="Nov. 2018" >}} -- Web app - -{{< project-header name="ParsaFood" url="https://github.com/Kevin-Mok/ParsaFood" date="Feb. 2018" >}} -- Android app that reads ingredients labels and detects any dietary - restrictions/allergies. Came up with the idea based on - [personal experience](https://github.com/Kevin\-Mok/ParsaFood\#motivation). -- Made during the 24-hour [Platterz Hackathon] -(https://www.eventbrite.com/e/platterz-hackathon-tickets-42682237722) - in a group with two other members. Came in 2nd place and won an - [Oculus Rift](https://www.amazon.ca/dp/B00VF0IXEY/ref=cm_sw_r_tw_dp_U_x_I7kBCbX50DAB2). -- Was in-charge of the front-end of the app and designed all the layouts/pages. +{{% resume/section goal %}} + +To find an internship to fully dedicate myself that will test my limits, +provide the opportunity to gain valuable knowledge and experience and +jumpstart my career with a solid foundation. + + + +{{% resume/section projects %}} + + + +{{< resume/project-header name="Spotify Visualizer" url="https://github.com/Kevin-Mok/spotify-lib-vis" date="July 2018" >}} + +{{% resume/project-details %}} + +- Web app that scans your Spotify library using their API to produce [d3 + graphs][d3 graph examples] to visualize the artists, genres and features + of tracks in your library. +- Can also keep track of your listening history. Currently runs as a `cron` + job on my local machine to keep track of my own. +- Uses Django and PostgreSQL for back-end. + +[d3 graph examples]: https://github.com/d3/d3/wiki/Gallery + +{{% /resume/project-details %}} + + + + + +{{< resume/project-header name="ParsaFood" url="https://github.com/Kevin-Mok/ParsaFood" date="Feb. 2018" >}} + +{{% resume/project-details %}} +- Android app that reads ingredients labels and detects any dietary + restrictions/allergies. Came up with the idea based on + [personal experience][Parsafood motivation]. +- Made during the 24-hour [Platterz Hackathon][Platterz Hackathon event] in + a group with two other members. Came in 2nd place and won an + [Oculus Rift][Oculus Rift Amazon]. + +[Parsafood repo]: https://github.com/Kevin-Mok/ParsaFood +[Parsafood motivation]: https://github.com/Kevin-Mok/ParsaFood#motivation +[Platterz Hackathon event]: https://www.eventbrite.com/e/platterz-hackathon-tickets-42682237722 +[Oculus Rift Amazon]: https://www.amazon.ca/Oculus-Rift-Windows-VR-Headset/dp/B00VF0IXEY/ref=sr_1_1_sspa?ie=UTF8&qid=1520422949&sr=8-1-spons&keywords=oculus+rift&psc=1 +{{% /resume/project-details %}} + + -{{< project-header name="TrapBot" url="https://github.com/Kevin-Mok/TrapBot" date="Feb. 2018" >}} + + +{{< resume/project-header name="Grocery Finder" url="https://github.com/Kevin-Mok/grocery-finder" date="April 2019" >}} + +{{% resume/project-details %}} +- Proof of concept for a web app that finds the best supermarket for your needs. +- Took on role as project leader to prioritize and delegate tasks while + also implementing a majority of the core features. +- Responsive front-end using Bootstrap. Uses Node.js and MongoDB for back-end. +- Currently deployed on [Heroku][Grocery Finder Heroku]. + +[Grocery Finder Heroku]: http://www.grocery-finder.ml + +{{% /resume/project-details %}} + + + + +{{% /resume/section %}} + +{{% resume/section education %}} + +- **University of Toronto**: Computer Science Specialist
2017-2021
-{{% /md-div %}} +{{% /resume/section %}} diff --git a/ideas.md b/ideas.md index 6d19c7f..6128d07 100644 --- a/ideas.md +++ b/ideas.md @@ -13,6 +13,8 @@ - collapsible sections - link to each section beside it - fix title + - collapsible sections + - more - printable version - JS to change CSS - list of things done with diff. langs. diff --git a/layouts/404.html b/layouts/404.html index 2340809..9a94527 100644 --- a/layouts/404.html +++ b/layouts/404.html @@ -1,4 +1,4 @@ -{{ partial "header.html" . }} +{{ partial "base/header.html" . }}
@@ -13,4 +13,4 @@
-{{ partial "footer.html" . }} +{{ partial "base/footer.html" . }} diff --git a/layouts/_default/list.html b/layouts/_default/list.html index 844830f..db06e6a 100644 --- a/layouts/_default/list.html +++ b/layouts/_default/list.html @@ -1,17 +1,17 @@ -{{ partial "header.html" . }} +{{ partial "base/header.html" . }} -{{ partial "site-title.html" . }} +{{ partial "base/site-title.html" . }} -{{ partial "nav-bar.html" . }} +{{ partial "base/nav-bar.html" . }} -{{ partial "base16-logo.html" . }} +{{ partial "base/base16-logo.html" . }}

{{ .Title }}

{{ range .Data.Pages }} - {{ partial "article-list-item.html" . }} + {{ partial "home/article-list-item.html" . }} {{ end }}
-{{ partial "footer.html" . }} +{{ partial "base/footer.html" . }} diff --git a/layouts/_default/single.html b/layouts/_default/single.html index 3bca744..bbca299 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -1,13 +1,13 @@ -{{ partial "header.html" . }} +{{ partial "base/header.html" . }} -{{ partial "site-title.html" . }} +{{ partial "base/site-title.html" . }} -{{ partial "nav-bar.html" . }} +{{ partial "base/nav-bar.html" . }} -{{ partial "base16-logo.html" . }} +{{ partial "base/base16-logo.html" . }}
- {{ partial "article.html" . }} + {{ partial "base/article.html" . }}
-{{ partial "footer.html" . }} +{{ partial "base/footer.html" . }} diff --git a/layouts/index.html b/layouts/index.html index 025829d..8f27eb5 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -1,13 +1,13 @@ -{{ partial "header.html" . }} +{{ partial "base/header.html" . }} -{{ partial "site-title.html" . }} +{{ partial "base/site-title.html" . }} -{{ partial "nav-bar.html" . }} +{{ partial "base/nav-bar.html" . }} -{{ partial "base16-logo.html" . }} +{{ partial "base/base16-logo.html" . }}
- {{ partial "about.html" . }} + {{ partial "home/about.html" . }}
-{{ partial "footer.html" . }} +{{ partial "base/footer.html" . }} diff --git a/layouts/partials/article.html b/layouts/partials/base/article.html similarity index 100% rename from layouts/partials/article.html rename to layouts/partials/base/article.html diff --git a/layouts/partials/base16-logo.html b/layouts/partials/base/base16-logo.html similarity index 100% rename from layouts/partials/base16-logo.html rename to layouts/partials/base/base16-logo.html diff --git a/layouts/partials/footer.html b/layouts/partials/base/footer.html similarity index 100% rename from layouts/partials/footer.html rename to layouts/partials/base/footer.html diff --git a/layouts/partials/header.html b/layouts/partials/base/header.html similarity index 97% rename from layouts/partials/header.html rename to layouts/partials/base/header.html index c829b31..41374b4 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/base/header.html @@ -12,6 +12,7 @@ {{ .Hugo.Generator }} + diff --git a/layouts/partials/nav-bar.html b/layouts/partials/base/nav-bar.html similarity index 100% rename from layouts/partials/nav-bar.html rename to layouts/partials/base/nav-bar.html diff --git a/layouts/partials/site-title.html b/layouts/partials/base/site-title.html similarity index 100% rename from layouts/partials/site-title.html rename to layouts/partials/base/site-title.html diff --git a/layouts/partials/about.html b/layouts/partials/home/about.html similarity index 88% rename from layouts/partials/about.html rename to layouts/partials/home/about.html index 46a0055..870c10b 100644 --- a/layouts/partials/about.html +++ b/layouts/partials/home/about.html @@ -7,5 +7,5 @@ target="_blank">FOSS/FLOSS.

-{{ partial "me-equation.html" . }} +{{ partial "home/me-equation.html" . }} diff --git a/layouts/partials/article-list-item.html b/layouts/partials/home/article-list-item.html similarity index 100% rename from layouts/partials/article-list-item.html rename to layouts/partials/home/article-list-item.html diff --git a/layouts/partials/hero.html b/layouts/partials/home/hero.html similarity index 100% rename from layouts/partials/hero.html rename to layouts/partials/home/hero.html diff --git a/layouts/partials/homepage.html b/layouts/partials/home/homepage.html similarity index 100% rename from layouts/partials/homepage.html rename to layouts/partials/home/homepage.html diff --git a/layouts/partials/me-equation.html b/layouts/partials/home/me-equation.html similarity index 100% rename from layouts/partials/me-equation.html rename to layouts/partials/home/me-equation.html diff --git a/layouts/partials/tagline.html b/layouts/partials/home/tagline.html similarity index 100% rename from layouts/partials/tagline.html rename to layouts/partials/home/tagline.html diff --git a/layouts/resume/section.html b/layouts/resume/section.html index 4d6439b..a87c339 100644 --- a/layouts/resume/section.html +++ b/layouts/resume/section.html @@ -1,8 +1,8 @@ -{{ partial "header.html" . }} +{{ partial "base/header.html" . }} -{{ partial "site-title.html" . }} +{{ partial "base/site-title.html" . }} -{{ partial "base16-logo.html" . }} +{{ partial "base/base16-logo.html" . }}
diff --git a/layouts/shortcodes/md-div.html b/layouts/shortcodes/md-div.html deleted file mode 100644 index 6b626f3..0000000 --- a/layouts/shortcodes/md-div.html +++ /dev/null @@ -1,3 +0,0 @@ -
- {{ .Inner }} -
diff --git a/layouts/shortcodes/md.html b/layouts/shortcodes/md.html new file mode 100644 index 0000000..236077f --- /dev/null +++ b/layouts/shortcodes/md.html @@ -0,0 +1,2 @@ +{{ $_hugo_config := `{ "version": 1 }` }} +{{ .Inner }} diff --git a/layouts/shortcodes/resume/project-details.html b/layouts/shortcodes/resume/project-details.html new file mode 100644 index 0000000..f8cb378 --- /dev/null +++ b/layouts/shortcodes/resume/project-details.html @@ -0,0 +1,4 @@ +{{ $_hugo_config := `{ "version": 1 }` }} +
+ {{ .Inner | markdownify }} +
diff --git a/layouts/shortcodes/project-header.html b/layouts/shortcodes/resume/project-header.html similarity index 100% rename from layouts/shortcodes/project-header.html rename to layouts/shortcodes/resume/project-header.html diff --git a/layouts/shortcodes/resume/section.html b/layouts/shortcodes/resume/section.html new file mode 100644 index 0000000..77b3daf --- /dev/null +++ b/layouts/shortcodes/resume/section.html @@ -0,0 +1,4 @@ +
+

{{ .Get 0 | title }}

+ {{ .Inner }} +
From 3a6462c1d73bc798f410c9560bce74b37fc047a8 Mon Sep 17 00:00:00 2001 From: Kevin Mok Date: Tue, 30 Jul 2019 05:07:00 -0400 Subject: [PATCH 4/7] Resume: collapsable project sections --- .gitignore | 5 +- assets/sass/main.scss | 27 +++++-- content/resume/_index.md | 74 ++++++++++++------- ideas.md | 27 +++---- layouts/partials/base/header.html | 6 +- layouts/partials/home/about.html | 4 +- .../shortcodes/resume/project-details.html | 2 +- layouts/shortcodes/resume/project-header.html | 2 - layouts/shortcodes/resume/project.html | 14 ++++ layouts/shortcodes/resume/section.html | 2 +- ...s_f300667da4f5b5f84e1a9e0702b2fdde.content | 15 +++- 11 files changed, 113 insertions(+), 65 deletions(-) delete mode 100644 layouts/shortcodes/resume/project-header.html create mode 100644 layouts/shortcodes/resume/project.html diff --git a/.gitignore b/.gitignore index 59c74ce..f156bb0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ -public/* -/* resources/_gen/* */ +public/ +/* _gen files required by Netlify */ +/* resources/_gen/ */ themes/base16* commit-msg.txt diff --git a/assets/sass/main.scss b/assets/sass/main.scss index a39fcc7..2e47b13 100644 --- a/assets/sass/main.scss +++ b/assets/sass/main.scss @@ -2,6 +2,7 @@ // base colors {{{ // +$base03: #747369; $base04: #a09f93; $base05: #d3d0c8; $base-red: #f2777a; @@ -81,9 +82,11 @@ $phone-width: 800px; // general elements {{{ // +$background-color: #2d2d2d; + body { margin: 0; - background-color: #2d2d2d; + background-color: $background-color; color: #f2f0ec; line-height: 1.5; font-size: 100%; @@ -407,7 +410,7 @@ footer {// {{{ margin-right: 2em; } */// }}} -#resume { +#resume {// {{{ a { text-decoration: none; &:hover { @@ -420,17 +423,27 @@ footer {// {{{ } h2 { - color: $base-yellow; + color: $base-sky-blue; display: inline; } - p { - &.project-date { - float: right; + .btn { + display: inline; + background-color: transparent; + margin-bottom: 5px; + + &:focus, &:active { + outline: none !important; + box-shadow: none; } } -} + .date { + float: right; + color: $base03; + } + +}// }}} // TODO: converted up to here diff --git a/content/resume/_index.md b/content/resume/_index.md index ff2edac..e7d8f08 100644 --- a/content/resume/_index.md +++ b/content/resume/_index.md @@ -3,69 +3,87 @@ title: "Resume" date: 2019-02-11T07:50:51-05:00 draft: true --- -{{% resume/section goal %}} +{{% resume/section overview %}} -To find an internship to fully dedicate myself that will test my limits, -provide the opportunity to gain valuable knowledge and experience and -jumpstart my career with a solid foundation. +I am a 3rd year CS student and enthusiast of all things Linux +and FOSS. I am looking for an internship to fully dedicate myself to that +will test my abilities, provide the opportunity to gain valuable knowledge +and experience and jumpstart my career with a solid foundation. - +{{% /resume/section %}} {{% resume/section projects %}} -{{< resume/project-header name="Spotify Visualizer" url="https://github.com/Kevin-Mok/spotify-lib-vis" date="July 2018" >}} - -{{% resume/project-details %}} +{{% resume/project name="Spotify Visualizer" url="https://github.com/Kevin-Mok/spotify-lib-vis" date="July 2018" %}} -- Web app that scans your Spotify library using their API to produce [d3 - graphs][d3 graph examples] to visualize the artists, genres and features - of tracks in your library. +- Web app that scans your Spotify library using their API to produce + [**d3** graphs][d3 graph examples] to visualize the artists, genres and + features of tracks in your library. - Can also keep track of your listening history. Currently runs as a `cron` job on my local machine to keep track of my own. -- Uses Django and PostgreSQL for back-end. +- Uses __Django__ and __PostgreSQL__ for back-end. [d3 graph examples]: https://github.com/d3/d3/wiki/Gallery -{{% /resume/project-details %}} +{{% /resume/project %}} -{{< resume/project-header name="ParsaFood" url="https://github.com/Kevin-Mok/ParsaFood" date="Feb. 2018" >}} +{{% resume/project name="ParsaFood" url="https://github.com/Kevin-Mok/ParsaFood" date="Feb. 2018" %}} -{{% resume/project-details %}} -- Android app that reads ingredients labels and detects any dietary - restrictions/allergies. Came up with the idea based on - [personal experience][Parsafood motivation]. -- Made during the 24-hour [Platterz Hackathon][Platterz Hackathon event] in - a group with two other members. Came in 2nd place and won an - [Oculus Rift][Oculus Rift Amazon]. +- **Android** app that reads ingredient labels and detects any dietary + restrictions/allergies. +- Made during a 24-hour [food-themed hackathon][Platterz Hackathon event] + in a group with two other members. Came in 2nd place and won + an [Oculus Rift][Oculus Rift Amazon]. +- Came up with the idea based on [personal experience][Parsafood motivation]. [Parsafood repo]: https://github.com/Kevin-Mok/ParsaFood [Parsafood motivation]: https://github.com/Kevin-Mok/ParsaFood#motivation [Platterz Hackathon event]: https://www.eventbrite.com/e/platterz-hackathon-tickets-42682237722 [Oculus Rift Amazon]: https://www.amazon.ca/Oculus-Rift-Windows-VR-Headset/dp/B00VF0IXEY/ref=sr_1_1_sspa?ie=UTF8&qid=1520422949&sr=8-1-spons&keywords=oculus+rift&psc=1 -{{% /resume/project-details %}} + +{{% /resume/project %}} -{{< resume/project-header name="Grocery Finder" url="https://github.com/Kevin-Mok/grocery-finder" date="April 2019" >}} +{{% resume/project name="Grocery Finder" url="https://github.com/Kevin-Mok/grocery-finder" date="April 2019" %}} -{{% resume/project-details %}} - Proof of concept for a web app that finds the best supermarket for your needs. - Took on role as project leader to prioritize and delegate tasks while also implementing a majority of the core features. -- Responsive front-end using Bootstrap. Uses Node.js and MongoDB for back-end. -- Currently deployed on [Heroku][Grocery Finder Heroku]. +- Responsive front-end using **Bootstrap**. Uses **Node.js** and **MongoDB** for back-end. +- Currently deployed on [**Heroku**][Grocery Finder Heroku]. [Grocery Finder Heroku]: http://www.grocery-finder.ml -{{% /resume/project-details %}} +{{% /resume/project %}} + + + + + + +{{% resume/project name="Super ADA Bros" +url="https://github.com/Kevin-Mok/SuperADABros" date="May 2019" %}} + +- Clone of Super Mario Bros 1-1, but Mario is mobility-impaired and + uses ramps to get through the level. +- Able to played using only head movement by getting input from a + face-tracking script (**OpenCV**). +- Implemented in [**Godot**][Godot site], an open-source game engine. +- Made during a 24-hour [accessibility-themed hackathon][PC Hacks event]. + +[PC Hacks event]: https://pchacks19.devpost.com/ +[Godot site]: https://godotengine.org + +{{% /resume/project %}} @@ -74,6 +92,6 @@ jumpstart my career with a solid foundation. {{% resume/section education %}} -- **University of Toronto**: Computer Science Specialist
2017-2021
+- **University of Toronto**: Computer Science Specialist
2017-2021
{{% /resume/section %}} diff --git a/ideas.md b/ideas.md index 6128d07..10a6573 100644 --- a/ideas.md +++ b/ideas.md @@ -1,31 +1,25 @@ # Large - resume + - expand some projects by default + - repo link (GitHub icon) beside each section + - picture/video links? + - make links open in new tab + - printable white version + - upload PDF + - JS to change CSS? - make old proj's displayable - spv - screenshots - setup instructions - - see if SoundCloud API still bad (TrapBot) + - open SoundCloud issue about API - ADA vid/pics - - lc setup - - image tagger? + - image tagger - executable - - date on same line as project - - collapsible sections - - link to each section beside it - - fix title - - collapsible sections - - more - - printable version - - JS to change CSS - - list of things done with diff. langs. -- add CSS grid layout - - add tooltip saying responsive - articles (ideas) - screenshots gallery - infinite scroll - loop through URL sections -- ask about most efficient way for custom layout for each section - JS snippets? - rewrite CSS in Sass - push to base16 repo @@ -57,9 +51,6 @@ - create different size images for SVG - https://www.sitepoint.com/svg-good-for-website-performance/ -Break> {{{ -> }}} - ## Archived - about/homepage - typing animation diff --git a/layouts/partials/base/header.html b/layouts/partials/base/header.html index 41374b4..8f2b02c 100644 --- a/layouts/partials/base/header.html +++ b/layouts/partials/base/header.html @@ -13,10 +13,14 @@ + + + + - + {{ $main_sass := resources.Get "sass/main.scss" }} {{ $main_style := $main_sass | resources.ToCSS }} diff --git a/layouts/partials/home/about.html b/layouts/partials/home/about.html index 870c10b..f27a3cd 100644 --- a/layouts/partials/home/about.html +++ b/layouts/partials/home/about.html @@ -1,8 +1,8 @@

Welcome to my site!

- I'm Kevin Mok - a 2nd year Computer Science - student at the University of Toronto, and I'm greatly interested in all things Linux and + I'm Kevin Mok - a 3rd year Computer Science student at the + University of Toronto, and I'm greatly interested in all things Linux and FOSS/FLOSS.

diff --git a/layouts/shortcodes/resume/project-details.html b/layouts/shortcodes/resume/project-details.html index f8cb378..b9dfd54 100644 --- a/layouts/shortcodes/resume/project-details.html +++ b/layouts/shortcodes/resume/project-details.html @@ -1,4 +1,4 @@ {{ $_hugo_config := `{ "version": 1 }` }}
- {{ .Inner | markdownify }} + {{ .Inner }}
diff --git a/layouts/shortcodes/resume/project-header.html b/layouts/shortcodes/resume/project-header.html deleted file mode 100644 index 93bb41b..0000000 --- a/layouts/shortcodes/resume/project-header.html +++ /dev/null @@ -1,2 +0,0 @@ -

{{ .Get "name" }}

-

{{ .Get "date" }}

diff --git a/layouts/shortcodes/resume/project.html b/layouts/shortcodes/resume/project.html new file mode 100644 index 0000000..20183ef --- /dev/null +++ b/layouts/shortcodes/resume/project.html @@ -0,0 +1,14 @@ +
+ +
{{ .Get "date" }}
+
+
+ {{ .Inner }} +
+
+
diff --git a/layouts/shortcodes/resume/section.html b/layouts/shortcodes/resume/section.html index 77b3daf..406310a 100644 --- a/layouts/shortcodes/resume/section.html +++ b/layouts/shortcodes/resume/section.html @@ -1,4 +1,4 @@

{{ .Get 0 | title }}

- {{ .Inner }} + {{ .Inner | markdownify }}
diff --git a/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content b/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content index 231cb2d..df41a94 100644 --- a/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content +++ b/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content @@ -305,11 +305,20 @@ footer a { color: #f99157; } #resume h2 { - color: #ffcc66; + color: #66cccc; display: inline; } -#resume p.project-date { - float: right; } +#resume .btn { + display: inline; + background-color: transparent; + margin-bottom: 5px; } + #resume .btn:focus, #resume .btn:active { + outline: none !important; + box-shadow: none; } + +#resume .date { + float: right; + color: #747369; } h1.site-title { text-align: center; From 1c2ad9d029a198103a86e00e0f9874167c9a8d0a Mon Sep 17 00:00:00 2001 From: Kevin Mok Date: Tue, 10 Sep 2019 20:58:55 -0400 Subject: [PATCH 5/7] Resume: contact info section --- assets/sass/main.scss | 46 +++++++++++++++---- config.yaml | 6 +-- content/posts/outage-night.md | 3 ++ content/posts/server-apps.md | 14 ++++++ content/posts/wallpaper-playlist.md | 2 +- content/resume/_index.md | 27 +++++++++-- content/resume/archived.txt | 20 ++++++++ ideas.md | 4 +- layouts/partials/resume/contact-info.html | 16 +++++++ layouts/resume/section.html | 2 + layouts/shortcodes/resume/project.html | 11 +++-- ...s_f300667da4f5b5f84e1a9e0702b2fdde.content | 25 ++++++---- static/img/envelope.svg | 45 ++++++++++++++++++ static/img/link.svg | 46 +++++++++++++++++++ static/img/smartphone.svg | 1 + 15 files changed, 237 insertions(+), 31 deletions(-) create mode 100644 content/posts/server-apps.md create mode 100644 content/resume/archived.txt create mode 100644 layouts/partials/resume/contact-info.html create mode 100644 static/img/envelope.svg create mode 100644 static/img/link.svg create mode 100644 static/img/smartphone.svg diff --git a/assets/sass/main.scss b/assets/sass/main.scss index 2e47b13..b5b9609 100644 --- a/assets/sass/main.scss +++ b/assets/sass/main.scss @@ -82,12 +82,15 @@ $phone-width: 800px; // general elements {{{ // -$background-color: #2d2d2d; +// $background-color: #2d2d2d; +// $color: #f2f0ec; +$background-color: white; +$color: black; body { margin: 0; background-color: $background-color; - color: #f2f0ec; + color: $color; line-height: 1.5; font-size: 100%; /* font-family: 'Source Code Pro', monospace; */ @@ -410,6 +413,29 @@ footer {// {{{ margin-right: 2em; } */// }}} +#contact-info { + @include vert-padding-rem(0.5); + display: flex; + align-content: center; + + div { + flex-grow: 1; + color: $base05; + + img { + height: 1em; + } + } + + #email { + text-align: center; + } + + #website { + text-align: right; + } +} + #resume {// {{{ a { text-decoration: none; @@ -463,15 +489,15 @@ h1.site-title {// {{{ text-decoration: none; } - @media (max-width: $max-page-width) { - font-size: 3em; - } - - @media (max-width: $phone-width) { + // @media (max-width: $max-page-width) { // font-size: 3em; - // font-size: 2.5em; - font-size: 2em; - } + // } + + // @media (max-width: $phone-width) { + // // font-size: 3em; + // // font-size: 2.5em; + // font-size: 2em; + // } }// }}} .hero-logo img { diff --git a/config.yaml b/config.yaml index 089748c..42ff125 100644 --- a/config.yaml +++ b/config.yaml @@ -17,9 +17,9 @@ menu: - name: resume url: /resume weight: 5 - - name: posts/ - url: /posts - weight: 6 + # - name: posts/ + # url: /posts + # weight: 6 # - name: credits # url: /credits # weight: 10 diff --git a/content/posts/outage-night.md b/content/posts/outage-night.md index e8f097f..f9ec917 100644 --- a/content/posts/outage-night.md +++ b/content/posts/outage-night.md @@ -1,4 +1,7 @@ --- +title: "Outage Night" +date: 2019-02-11T07:50:51-05:00 +draft: true --- - procrastinating on assignment - want to play Pokemon randomizer diff --git a/content/posts/server-apps.md b/content/posts/server-apps.md new file mode 100644 index 0000000..a4bd1af --- /dev/null +++ b/content/posts/server-apps.md @@ -0,0 +1,14 @@ +--- +title: "Server Apps" +date: 2019-09-03T12:31:45-04:00 +draft: true +--- +- Baikal +- Gitea +- Synapse +- Taskserver +- haste-server +- liteshort +- personal site +- spv +- twem diff --git a/content/posts/wallpaper-playlist.md b/content/posts/wallpaper-playlist.md index 41ae34a..2bcb56d 100644 --- a/content/posts/wallpaper-playlist.md +++ b/content/posts/wallpaper-playlist.md @@ -1,7 +1,7 @@ --- title: Wallpaper Playlist for pywal date: 2019-02-16T11:42:33-05:00 -draft: false +draft: true --- Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At diff --git a/content/resume/_index.md b/content/resume/_index.md index e7d8f08..10487ee 100644 --- a/content/resume/_index.md +++ b/content/resume/_index.md @@ -1,7 +1,7 @@ --- title: "Resume" date: 2019-02-11T07:50:51-05:00 -draft: true +draft: false --- {{% resume/section overview %}} @@ -55,16 +55,33 @@ and experience and jumpstart my career with a solid foundation. {{% resume/project name="Grocery Finder" url="https://github.com/Kevin-Mok/grocery-finder" date="April 2019" %}} -- Proof of concept for a web app that finds the best supermarket for your needs. -- Took on role as project leader to prioritize and delegate tasks while - also implementing a majority of the core features. -- Responsive front-end using **Bootstrap**. Uses **Node.js** and **MongoDB** for back-end. +- Proof of concept for a web app that finds the best supermarket for + your needs based on the total price of your cart items and distance + form you. +- Responsive front-end using **Bootstrap**. Uses **Node.js** and + **MongoDB** for back-end. - Currently deployed on [**Heroku**][Grocery Finder Heroku]. +- Took on role as project leader to prioritize and delegate tasks + while + also implementing a majority of the core features. [Grocery Finder Heroku]: http://www.grocery-finder.ml {{% /resume/project %}} + + + + +{{% resume/project name="TrapBot" +url="https://github.com/Kevin-Mok/TrapBot" date="March 2018" %}} + +- reddit bot that looks for comments with song names and responds with + their respective SoundCloud links. +- Received positive feedback from users who saw the bot's posts. +- Uses __Python__ API wrappers for SoundCloud and reddit. + +{{% /resume/project %}} diff --git a/content/resume/archived.txt b/content/resume/archived.txt new file mode 100644 index 0000000..1e4a764 --- /dev/null +++ b/content/resume/archived.txt @@ -0,0 +1,20 @@ + + +{{% resume/project name="Super ADA Bros" +url="https://github.com/Kevin-Mok/SuperADABros" date="May 2019" %}} + +- Clone of Super Mario Bros 1-1, but Mario is mobility-impaired and + uses ramps to get through the level. +- Able to played using only head movement by getting input from a + face-tracking script (**OpenCV**). +- Implemented in [**Godot**][Godot site], an open-source game engine. +- Made during a 24-hour [accessibility-themed hackathon][PC Hacks event]. + +[PC Hacks event]: https://pchacks19.devpost.com/ +[Godot site]: https://godotengine.org + +{{% /resume/project %}} + + + + diff --git a/ideas.md b/ideas.md index 10a6573..0d5e383 100644 --- a/ideas.md +++ b/ideas.md @@ -2,8 +2,8 @@ - resume - expand some projects by default - repo link (GitHub icon) beside each section - - picture/video links? - make links open in new tab + - picture/video links? - printable white version - upload PDF - JS to change CSS? @@ -29,6 +29,8 @@ # Medium - socials in footer - icons + - GitHub + - Fosstodon - email - tooltip pop-up with email and clipboard button/link - [Pure CSS Tooltips](https://www.youtube.com/watch?v=hAeQ8CqrGDY) diff --git a/layouts/partials/resume/contact-info.html b/layouts/partials/resume/contact-info.html new file mode 100644 index 0000000..d77f5c1 --- /dev/null +++ b/layouts/partials/resume/contact-info.html @@ -0,0 +1,16 @@ + +
+
+ smartphone-icon: + 647-685-2500 +
+ +
+ link-icon: + kevin-mok.com +
+
diff --git a/layouts/resume/section.html b/layouts/resume/section.html index a87c339..deaba81 100644 --- a/layouts/resume/section.html +++ b/layouts/resume/section.html @@ -2,6 +2,8 @@ {{ partial "base/site-title.html" . }} +{{ partial "resume/contact-info.html" . }} + {{ partial "base/base16-logo.html" . }}
diff --git a/layouts/shortcodes/resume/project.html b/layouts/shortcodes/resume/project.html index 20183ef..25f78b6 100644 --- a/layouts/shortcodes/resume/project.html +++ b/layouts/shortcodes/resume/project.html @@ -1,12 +1,17 @@
+ + --> +
{{ .Get "date" }}
-
+
{{ .Inner }}
diff --git a/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content b/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content index df41a94..7cac5ce 100644 --- a/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content +++ b/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content @@ -32,8 +32,8 @@ body { margin: 0; - background-color: #2d2d2d; - color: #f2f0ec; + background-color: white; + color: black; line-height: 1.5; font-size: 100%; /* font-family: 'Source Code Pro', monospace; */ @@ -296,6 +296,21 @@ footer a { .homepage .tag { margin-right: 2em; } */ +#contact-info { + padding-top: 0.5rem; + padding-bottom: 0.5rem; + display: flex; + align-content: center; } + #contact-info div { + flex-grow: 1; + color: #d3d0c8; } + #contact-info div img { + height: 1em; } + #contact-info #email { + text-align: center; } + #contact-info #website { + text-align: right; } + #resume a { text-decoration: none; } #resume a:hover { @@ -335,12 +350,6 @@ h1.site-title { color: #66cccc; } h1.site-title a { text-decoration: none; } - @media (max-width: 52em) { - h1.site-title { - font-size: 3em; } } - @media (max-width: 800px) { - h1.site-title { - font-size: 2em; } } .hero-logo img { margin-top: 0.5rem; diff --git a/static/img/envelope.svg b/static/img/envelope.svg new file mode 100644 index 0000000..960f630 --- /dev/null +++ b/static/img/envelope.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/link.svg b/static/img/link.svg new file mode 100644 index 0000000..a3d2ddb --- /dev/null +++ b/static/img/link.svg @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/smartphone.svg b/static/img/smartphone.svg new file mode 100644 index 0000000..a5c0b4a --- /dev/null +++ b/static/img/smartphone.svg @@ -0,0 +1 @@ + \ No newline at end of file From ec1ecb7d98b99908349c43f8d62fd0dd34a46947 Mon Sep 17 00:00:00 2001 From: Kevin Mok Date: Tue, 10 Sep 2019 21:54:51 -0400 Subject: [PATCH 6/7] Resume: repository links beside each section --- .gitignore | 2 +- assets/sass/main.scss | 59 +- content/resume/printable.txt | 3 + layouts/shortcodes/resume/project-print.html | 13 + layouts/shortcodes/resume/project.html | 13 +- ...s_f300667da4f5b5f84e1a9e0702b2fdde.content | 808 ------------------ ...scss_f300667da4f5b5f84e1a9e0702b2fdde.json | 1 - 7 files changed, 61 insertions(+), 838 deletions(-) create mode 100644 content/resume/printable.txt create mode 100644 layouts/shortcodes/resume/project-print.html delete mode 100644 resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content delete mode 100644 resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.json diff --git a/.gitignore b/.gitignore index f156bb0..480bc72 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ public/ /* _gen files required by Netlify */ -/* resources/_gen/ */ +resources/_gen/ themes/base16* commit-msg.txt diff --git a/assets/sass/main.scss b/assets/sass/main.scss index b5b9609..b6c484b 100644 --- a/assets/sass/main.scss +++ b/assets/sass/main.scss @@ -82,10 +82,10 @@ $phone-width: 800px; // general elements {{{ // -// $background-color: #2d2d2d; -// $color: #f2f0ec; -$background-color: white; -$color: black; +$background-color: #2d2d2d; +$color: #f2f0ec; +// $background-color: white; +// $color: black; body { margin: 0; @@ -413,7 +413,7 @@ footer {// {{{ margin-right: 2em; } */// }}} -#contact-info { +#contact-info {// {{{ @include vert-padding-rem(0.5); display: flex; align-content: center; @@ -434,7 +434,7 @@ footer {// {{{ #website { text-align: right; } -} +}// }}} #resume {// {{{ a { @@ -448,25 +448,44 @@ footer {// {{{ color: $base-orange; } - h2 { - color: $base-sky-blue; - display: inline; + .date { + float: right; + color: $base03; } - .btn { - display: inline; - background-color: transparent; - margin-bottom: 5px; + .project { + @include vert-padding-rem(.2); - &:focus, &:active { - outline: none !important; - box-shadow: none; + h2 { + color: $base-sky-blue; + display: inline; } - } - .date { - float: right; - color: $base03; + img { + height: 1.2em; + } + + .project-link { + &:hover { + text-decoration: none; + } + } + + .btn { + display: inline; + background-color: transparent; + margin-bottom: 5px; + padding-left: 7px; + + &:focus, &:active { + outline: none !important; + box-shadow: none; + } + } + + // [id^="details-"] { + // margin-top: .5em; + // } } }// }}} diff --git a/content/resume/printable.txt b/content/resume/printable.txt new file mode 100644 index 0000000..96ed0be --- /dev/null +++ b/content/resume/printable.txt @@ -0,0 +1,3 @@ +- bg colors +- switch project shortcode +- rm details top margin diff --git a/layouts/shortcodes/resume/project-print.html b/layouts/shortcodes/resume/project-print.html new file mode 100644 index 0000000..c219a95 --- /dev/null +++ b/layouts/shortcodes/resume/project-print.html @@ -0,0 +1,13 @@ +
+

+ + {{ .Get "name" }} + +

+
{{ .Get "date" }}
+
+
+ {{ .Inner }} +
+
+
diff --git a/layouts/shortcodes/resume/project.html b/layouts/shortcodes/resume/project.html index 25f78b6..bb13fc9 100644 --- a/layouts/shortcodes/resume/project.html +++ b/layouts/shortcodes/resume/project.html @@ -1,17 +1,14 @@ -
- +
+ + link-icon +
{{ .Get "date" }}
-
+
{{ .Inner }}
diff --git a/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content b/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content deleted file mode 100644 index 7cac5ce..0000000 --- a/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.content +++ /dev/null @@ -1,808 +0,0 @@ -/* Base16 Eighties Colorscheme by Chris Kempson (http://chriskempson.com) */ -/* .base00 { color: #2d2d2d; } -.base01 { color: #393939; } -.base02 { color: #515151; } -.base03 { color: #747369; } -.base04 { color: #a09f93; } -.base06 { color: #e8e6df; } -.base07 { color: #f2f0ec; } */ -.base08 { - color: #f2777a; } - -.base09 { - color: #f99157; } - -.base0a { - color: #ffcc66; } - -.base0b { - color: #99cc99; } - -.base0c { - color: #66cccc; } - -.base0d { - color: #6699cc; } - -.base0e { - color: #cc99cc; } - -.base0f { - color: #d27b53; } - -body { - margin: 0; - background-color: white; - color: black; - line-height: 1.5; - font-size: 100%; - /* font-family: 'Source Code Pro', monospace; */ - font-family: 'Hack', monospace; - display: flex; - flex-direction: column; - min-height: 100vh; } - body a { - color: #66cccc; } - body a:visited { - color: #66cccc; } - body a:active { - color: #66cccc; } - -.container { - max-width: 52em; - margin-left: auto; - margin-right: auto; - flex: 1; } - .container .copyright a { - color: #747369; } - .container .copyright a:visited { - color: #747369; } - .container .copyright a:active { - color: #747369; } - @media (max-width: 52em) { - .container { - width: 100%; } } - -div .right { - float: right; } - -div .clearfix { - overflow: auto; } - -article .single section { - /* background-color: #e6e6fa; */ - background-color: #cbbeb5; - color: #2d2d2d; - padding-left: 8rem; - padding-right: 8rem; - padding-top: 1rem; - padding-bottom: 1rem; - /* min-height: 50%; */ - /* min-height: 30em; */ } - @media (max-width: 52em) { - article .single section { - padding-left: 2rem; - padding-right: 2rem; } } - -.article-list article { - /* background-color: #e6e6fa; */ - background-color: #cbbeb5; - color: #2d2d2d; - padding-left: 8rem; - padding-right: 8rem; - padding-top: 1rem; - padding-bottom: 1rem; - /* min-height: 50%; */ - /* min-height: 30em; */ } - @media (max-width: 52em) { - .article-list article { - padding-left: 2rem; - padding-right: 2rem; } } - -header { - margin-top: 1.5rem; - margin-bottom: 1rem; } - @media (max-width: 52em) { - header { - margin-top: 0; - padding-left: 2rem; - padding-right: 2rem; } } - -footer { - margin-top: 2rem; - margin-bottom: 1rem; - text-align: center; - font-size: 0.9em; - color: #747369; } - footer .container { - background-color: #393939; - max-width: 62em; - margin-left: auto; - margin-right: auto; - padding-top: 0.1rem; - padding-bottom: 0.1rem; } - @media (max-width: 52em) { - footer { - margin-top: 0; - margin-bottom: 0; } } - @media (max-width: 800px) { - footer { - font-size: 0.8em; } } - -/* Typography */ -h1 { - font-weight: bold; - line-height: 1.25; - margin-top: 1em; - margin-bottom: .5em; } - -h2 { - font-weight: bold; - line-height: 1.25; - margin-top: 1em; - margin-bottom: .5em; } - -h3 { - font-weight: bold; - line-height: 1.25; - margin-top: 1em; - margin-bottom: .5em; } - -h4 { - font-weight: bold; - line-height: 1.25; - margin-top: 1em; - margin-bottom: .5em; } - -h5 { - font-weight: bold; - line-height: 1.25; - margin-top: 1em; - margin-bottom: .5em; } - -p { - margin-top: 0; - margin-bottom: 1rem; } - -h1 { - font-size: 2rem; } - -h2 { - font-size: 1.5rem; } - -h3 { - font-size: 1.25rem; } - -h4 { - font-size: 1rem; } - -h5 { - font-size: .875rem; } - -h6 { - font-size: .75rem; } - -pre, code { - font-family: inherit; - font-size: inherit; } - -header a .path .path:visited { - color: #6699cc; } - -header span caret { - color: #f2f0ec; } - -footer a { - color: #747369; } - footer a:visited { - color: #747369; } - footer a:active { - color: #747369; } - -.page-not-found h1 { - text-align: center; - font-size: 5em; } - -.page-not-found h2 { - text-align: center; - font-size: 3em; - color: #a09f93; - margin-bottom: 4rem; } - -@media (max-width: 52em) { - .page-not-found h1 { - font-size: 3em; } - .page-not-found h2 { - font-size: 2em; } } - -#homepage #about { - font-size: 1.25rem; } - #homepage #about h2 { - margin-top: 1.25rem; - font-size: 2rem; - color: #ffcc66; - text-align: center; } - #homepage #about .me-equation { - margin-top: 3em; - text-align: center; - display: flex; - justify-content: center; - /* align horizontal */ - align-items: center; - /* align vertical */ } - #homepage #about .me-equation .equation-part { - display: flex; - flex: 1; - justify-content: center; - /* align horizontal */ - align-items: center; - /* align vertical */ } - #homepage #about .me-equation .equation-part a { - text-decoration: none; - width: 70%; } - #homepage #about .me-equation .equation-part img { - width: 70%; - height: 100%; - border-radius: 1.1em; - display: inline; } - #homepage #about .me-equation .equation-part img#gnu { - background-color: #a09f93; } - #homepage #about .me-equation .equation-part p { - font-size: 3vw; - display: inline-block; - padding-left: 0.2rem; - padding-right: 0.2rem; } - @media (max-width: 800px) { - #homepage #about .me-equation { - flex-wrap: wrap; - margin-top: 2em; - justify-content: space-around; - /* align horizontal */ } - #homepage #about .me-equation .equation-part { - min-width: 33%; } - #homepage #about .me-equation .equation-part img { - flex: 1.5; } - #homepage #about .me-equation .equation-part img#hexatar { - max-width: 20%; - margin-top: 1.75rem; } - #homepage #about .me-equation .equation-part p { - font-size: 6vw; - flex: 1; } - #homepage #about .me-equation .equation-part#uoft-part { - justify-content: flex-end; } } - @media (max-width: 800px) { - #homepage #about { - font-size: .9em; } - #homepage #about h1 { - font-size: 1.4rem; } } - -@media (max-width: 52em) { - #homepage { - margin-bottom: 2rem; } } - -/* .homepage section.categories, -.homepage section.tags { - padding-left: 2rem; - padding-right: 2rem; -} - -.homepage .category, -.homepage .category a, -.homepage .tag, -.homepage .tag a { - color: #cc99cc; -} - -.homepage .tag { - margin-right: 2em; -} */ -#contact-info { - padding-top: 0.5rem; - padding-bottom: 0.5rem; - display: flex; - align-content: center; } - #contact-info div { - flex-grow: 1; - color: #d3d0c8; } - #contact-info div img { - height: 1em; } - #contact-info #email { - text-align: center; } - #contact-info #website { - text-align: right; } - -#resume a { - text-decoration: none; } - #resume a:hover { - text-decoration: underline; } - -#resume h1 { - color: #f99157; } - -#resume h2 { - color: #66cccc; - display: inline; } - -#resume .btn { - display: inline; - background-color: transparent; - margin-bottom: 5px; } - #resume .btn:focus, #resume .btn:active { - outline: none !important; - box-shadow: none; } - -#resume .date { - float: right; - color: #747369; } - -h1.site-title { - text-align: center; - /* font-size: 3.5em; */ - font-size: 4.8em; - color: #d3d0c8; - margin-top: 1rem; - margin-bottom: 0.5rem; } - h1.site-title a { - color: #66cccc; } - h1.site-title a:visited { - color: #66cccc; } - h1.site-title a:active { - color: #66cccc; } - h1.site-title a { - text-decoration: none; } - -.hero-logo img { - margin-top: 0.5rem; - width: 100%; } - -.nav-bar { - margin-left: .5em; - padding-top: 0.5rem; - padding-bottom: 0.5rem; } - .nav-bar .caret { - color: #f2f0ec; - margin-right: .75rem; } - .nav-bar .nav-bar-links { - display: inline; } - .nav-bar .nav-bar-links .nav-bar-link { - padding-right: .5em; } - @media (max-width: 800px) { - .nav-bar { - font-size: .8em; } } - -.hero-tagline { - margin-top: .3em; - font-size: .8rem; - text-align: center; } - .hero-tagline .icon { - width: 1.25rem; } - -.article-list h1.list-title { - font-size: 3em; - color: #ffcc66; } - -.article-list article { - padding-top: 4rem; - padding-bottom: 4rem; - margin-bottom: 4rem; } - -.article-list article h2.headline, -.article-list article h2.headline a { - margin-top: 0; - color: #6699cc; } - -.article-list article .meta { - margin-bottom: 1rem; } - -.article-list article .meta .key { - color: #747369; } - -.article-list article .meta .val, -.article-list article .meta .val a { - color: #cc99cc; } - -.article-list article section.summary a { - color: #d27b53; } - -article.single .meta { - font-size: 0.9em; - text-align: right; - margin-top: .5rem; - margin-bottom: .5rem; } - article.single .meta .key { - color: #747369; } - article.single .meta .val { - color: #cc99cc; } - article.single .meta .val a { - color: #cc99cc; } - -article.single .body { - padding-top: 1rem; - padding-bottom: 3rem; } - -@media (max-width: 52em) { - article.single .meta { - padding-left: 2rem; - padding-right: 2rem; } - article.single .body { - padding-top: .5rem; - padding-bottom: 1rem; } } - -article.single h1.headline { - margin-top: 0; - font-size: 3em; - color: #ffcc66; } - -@media (max-width: 52em) { - article.single h1.headline { - padding-left: 2rem; - padding-right: 2rem; } } - -/* Highlight Colors */ -article.single section.body h1 { - color: #6699cc; } - -article.single section.body h2 { - color: #99cc99; } - -article.single section.body h3 { - color: #f99157; } - -article.single section.body h4 { - color: #f2777a; } - -article.single section.body h5 { - color: #515151; } - -article.single section.body h6 { - color: #747369; } - -article.single section.body a, a:visited { - color: #a06700; } - -/* Article Elements */ -article.single * { - max-width: 100%; } - -article.single pre { - margin-top: 0; - margin-bottom: 1rem; - border-radius: 3px; - padding: 2rem; } - -article.single p code { - padding: 0.2em 0.5em; - border-radius: 3px; - background: #747369; - color: #f2f0ec; } - -article.single figure, article.single div.highlight { - box-sizing: border-box; - max-width: 52rem; - width: 52rem; - margin-bottom: 1rem; - padding: 1em; - background-color: #393939; } - -@media (max-width: 52em) { - article.single figure, article.single div.highlight { - width: 100%; - margin-left: 0; - margin-right: 0; - border-radius: 3px; } } - -article.single figure img { - max-width: 100%; - width: 100%; - border-radius: 3px; } - -article.single figure figcaption { - margin-top: 1rem; } - -article.single figure figcaption h4 { - margin-top: 0; - text-align: center; - font-style: italic; - font-weight: normal; - color: #f2f0ec; } - -article.single table { - border-collapse: separate; - border-spacing: 0; - max-width: 100%; - width: 100%; } - -article.single th, -article.single td { - padding: .25rem 1rem; - line-height: inherit; - border-bottom-width: 1px; - border-bottom-style: solid; - border-bottom-color: #a09f93; } - -article.single tr:last-child td { - border-bottom: 0; } - -article.single th { - text-align: left; - font-weight: bold; - vertical-align: bottom; } - -article.single td { - vertical-align: top; } - -article.single blockquote { - margin-left: 2rem; - margin-right: 3rem; - padding-left: 1rem; - border-left: 5px solid #66cccc; } - -article.single hr { - border: 0; - border-bottom-style: solid; - border-bottom-width: 1px; - border-bottom-color: #a09f93; } - -pre { - background: #2d2d2d; - color: #f2f0ec; } - -.highlight .hll { - background-color: #515151; } - -.highlight .c { - color: #747369; } - -/* Comment */ -.highlight .err { - color: #f2777a; } - -/* Error */ -.highlight .k { - color: #cc99cc; } - -/* Keyword */ -.highlight .l { - color: #f99157; } - -/* Literal */ -.highlight .n { - color: #f2f0ec; } - -/* Name */ -.highlight .o { - color: #66cccc; } - -/* Operator */ -.highlight .p { - color: #f2f0ec; } - -/* Punctuation */ -.highlight .cm { - color: #747369; } - -/* Comment.Multiline */ -.highlight .cp { - color: #747369; } - -/* Comment.Preproc */ -.highlight .c1 { - color: #747369; } - -/* Comment.Single */ -.highlight .cs { - color: #747369; } - -/* Comment.Special */ -.highlight .gd { - color: #f2777a; } - -/* Generic.Deleted */ -.highlight .ge { - font-style: italic; } - -/* Generic.Emph */ -.highlight .gh { - color: #f2f0ec; - font-weight: bold; } - -/* Generic.Heading */ -.highlight .gi { - color: #99cc99; } - -/* Generic.Inserted */ -.highlight .gp { - color: #747369; - font-weight: bold; } - -/* Generic.Prompt */ -.highlight .gs { - font-weight: bold; } - -/* Generic.Strong */ -.highlight .gu { - color: #66cccc; - font-weight: bold; } - -/* Generic.Subheading */ -.highlight .kc { - color: #cc99cc; } - -/* Keyword.Constant */ -.highlight .kd { - color: #cc99cc; } - -/* Keyword.Declaration */ -.highlight .kn { - color: #66cccc; } - -/* Keyword.Namespace */ -.highlight .kp { - color: #cc99cc; } - -/* Keyword.Pseudo */ -.highlight .kr { - color: #cc99cc; } - -/* Keyword.Reserved */ -.highlight .kt { - color: #ffcc66; } - -/* Keyword.Type */ -.highlight .ld { - color: #99cc99; } - -/* Literal.Date */ -.highlight .m { - color: #f99157; } - -/* Literal.Number */ -.highlight .s { - color: #99cc99; } - -/* Literal.String */ -.highlight .na { - color: #6699cc; } - -/* Name.Attribute */ -.highlight .nb { - color: #f2f0ec; } - -/* Name.Builtin */ -.highlight .nc { - color: #ffcc66; } - -/* Name.Class */ -.highlight .no { - color: #f2777a; } - -/* Name.Constant */ -.highlight .nd { - color: #66cccc; } - -/* Name.Decorator */ -.highlight .ni { - color: #f2f0ec; } - -/* Name.Entity */ -.highlight .ne { - color: #f2777a; } - -/* Name.Exception */ -.highlight .nf { - color: #6699cc; } - -/* Name.Function */ -.highlight .nl { - color: #f2f0ec; } - -/* Name.Label */ -.highlight .nn { - color: #ffcc66; } - -/* Name.Namespace */ -.highlight .nx { - color: #6699cc; } - -/* Name.Other */ -.highlight .py { - color: #f2f0ec; } - -/* Name.Property */ -.highlight .nt { - color: #66cccc; } - -/* Name.Tag */ -.highlight .nv { - color: #f2777a; } - -/* Name.Variable */ -.highlight .ow { - color: #66cccc; } - -/* Operator.Word */ -.highlight .w { - color: #f2f0ec; } - -/* Text.Whitespace */ -.highlight .mf { - color: #f99157; } - -/* Literal.Number.Float */ -.highlight .mh { - color: #f99157; } - -/* Literal.Number.Hex */ -.highlight .mi { - color: #f99157; } - -/* Literal.Number.Integer */ -.highlight .mo { - color: #f99157; } - -/* Literal.Number.Oct */ -.highlight .sb { - color: #99cc99; } - -/* Literal.String.Backtick */ -.highlight .sc { - color: #f2f0ec; } - -/* Literal.String.Char */ -.highlight .sd { - color: #747369; } - -/* Literal.String.Doc */ -.highlight .s2 { - color: #99cc99; } - -/* Literal.String.Double */ -.highlight .se { - color: #f99157; } - -/* Literal.String.Escape */ -.highlight .sh { - color: #99cc99; } - -/* Literal.String.Heredoc */ -.highlight .si { - color: #f99157; } - -/* Literal.String.Interpol */ -.highlight .sx { - color: #99cc99; } - -/* Literal.String.Other */ -.highlight .sr { - color: #99cc99; } - -/* Literal.String.Regex */ -.highlight .s1 { - color: #99cc99; } - -/* Literal.String.Single */ -.highlight .ss { - color: #99cc99; } - -/* Literal.String.Symbol */ -.highlight .bp { - color: #f2f0ec; } - -/* Name.Builtin.Pseudo */ -.highlight .vc { - color: #f2777a; } - -/* Name.Variable.Class */ -.highlight .vg { - color: #f2777a; } - -/* Name.Variable.Global */ -.highlight .vi { - color: #f2777a; } - -/* Name.Variable.Instance */ -.highlight .il { - color: #f99157; } - -/* Literal.Number.Integer.Long */ -/*# sourceMappingURL=style.css.map */ diff --git a/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.json b/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.json deleted file mode 100644 index f010337..0000000 --- a/resources/_gen/assets/scss/sass/main.scss_f300667da4f5b5f84e1a9e0702b2fdde.json +++ /dev/null @@ -1 +0,0 @@ -{"Target":"sass/main.css","MediaType":"text/css","Data":{}} \ No newline at end of file From 58ef63cc6a47ec91b14123df537b92529624c7f2 Mon Sep 17 00:00:00 2001 From: Kevin Mok Date: Tue, 10 Sep 2019 22:24:37 -0400 Subject: [PATCH 7/7] Resume: expand top projects, print icon to PDF --- assets/sass/main.scss | 26 +++++++++---- content/resume/_index.md | 13 +++++-- content/resume/printable.txt | 1 + layouts/partials/resume/contact-info.html | 1 - layouts/partials/resume/print-icon.html | 5 +++ layouts/resume/section.html | 2 + layouts/shortcodes/resume/project.html | 2 +- static/img/printer.svg | 43 ++++++++++++++++++++++ static/resume.pdf | Bin 0 -> 30877 bytes 9 files changed, 79 insertions(+), 14 deletions(-) create mode 100644 layouts/partials/resume/print-icon.html create mode 100644 static/img/printer.svg create mode 100644 static/resume.pdf diff --git a/assets/sass/main.scss b/assets/sass/main.scss index b6c484b..dc5edf6 100644 --- a/assets/sass/main.scss +++ b/assets/sass/main.scss @@ -413,6 +413,16 @@ footer {// {{{ margin-right: 2em; } */// }}} +#print-icon {// {{{ + float: right; + + img { + height: 1.75em; + position: relative; + top: 1em; + } +}// }}} + #contact-info {// {{{ @include vert-padding-rem(0.5); display: flex; @@ -508,15 +518,15 @@ h1.site-title {// {{{ text-decoration: none; } - // @media (max-width: $max-page-width) { - // font-size: 3em; - // } + @media (max-width: $max-page-width) { + font-size: 3em; + } - // @media (max-width: $phone-width) { - // // font-size: 3em; - // // font-size: 2.5em; - // font-size: 2em; - // } + @media (max-width: $phone-width) { + // font-size: 3em; + // font-size: 2.5em; + font-size: 2em; + } }// }}} .hero-logo img { diff --git a/content/resume/_index.md b/content/resume/_index.md index 10487ee..d968bf1 100644 --- a/content/resume/_index.md +++ b/content/resume/_index.md @@ -16,7 +16,8 @@ and experience and jumpstart my career with a solid foundation. -{{% resume/project name="Spotify Visualizer" url="https://github.com/Kevin-Mok/spotify-lib-vis" date="July 2018" %}} +{{% resume/project name="Spotify Visualizer" +url="https://github.com/Kevin-Mok/spotify-lib-vis" date="July 2018" show="true" %}} - Web app that scans your Spotify library using their API to produce [**d3** graphs][d3 graph examples] to visualize the artists, genres and @@ -33,9 +34,11 @@ and experience and jumpstart my career with a solid foundation. -{{% resume/project name="ParsaFood" url="https://github.com/Kevin-Mok/ParsaFood" date="Feb. 2018" %}} +{{% resume/project name="ParsaFood" +url="https://github.com/Kevin-Mok/ParsaFood" date="Feb. 2018" +show="true" %}} -- **Android** app that reads ingredient labels and detects any dietary +- **Android** app that reads ingredient labels and detects any dietary restrictions/allergies. - Made during a 24-hour [food-themed hackathon][Platterz Hackathon event] in a group with two other members. Came in 2nd place and won @@ -53,7 +56,9 @@ and experience and jumpstart my career with a solid foundation. -{{% resume/project name="Grocery Finder" url="https://github.com/Kevin-Mok/grocery-finder" date="April 2019" %}} +{{% resume/project name="Grocery Finder" +url="https://github.com/Kevin-Mok/grocery-finder" date="April 2019" +show="true" %}} - Proof of concept for a web app that finds the best supermarket for your needs based on the total price of your cart items and distance diff --git a/content/resume/printable.txt b/content/resume/printable.txt index 96ed0be..fc6b784 100644 --- a/content/resume/printable.txt +++ b/content/resume/printable.txt @@ -1,3 +1,4 @@ - bg colors +- site title max width - switch project shortcode - rm details top margin diff --git a/layouts/partials/resume/contact-info.html b/layouts/partials/resume/contact-info.html index d77f5c1..2719103 100644 --- a/layouts/partials/resume/contact-info.html +++ b/layouts/partials/resume/contact-info.html @@ -1,4 +1,3 @@ -
diff --git a/layouts/resume/section.html b/layouts/resume/section.html index deaba81..3d69d6b 100644 --- a/layouts/resume/section.html +++ b/layouts/resume/section.html @@ -1,5 +1,7 @@ {{ partial "base/header.html" . }} +{{ partial "resume/print-icon.html" . }} + {{ partial "base/site-title.html" . }} {{ partial "resume/contact-info.html" . }} diff --git a/layouts/shortcodes/resume/project.html b/layouts/shortcodes/resume/project.html index bb13fc9..a094deb 100644 --- a/layouts/shortcodes/resume/project.html +++ b/layouts/shortcodes/resume/project.html @@ -8,7 +8,7 @@

{{ .Get "name" }} ⏷

{{ .Get "date" }}
-
+
{{ .Inner }}
diff --git a/static/img/printer.svg b/static/img/printer.svg new file mode 100644 index 0000000..91214c7 --- /dev/null +++ b/static/img/printer.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/resume.pdf b/static/resume.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a66d90d33db9988de0aaa383c74a0ebddc96f0bb GIT binary patch literal 30877 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 rWmK}UaR6r-{%JY-!y^PDcDaq literal 0 HcmV?d00001