Compare commits

...

61 Commits

Author SHA1 Message Date
31213b969a Hugo bugs/update MM 2025-11-24 11:33:36 -05:00
37ef35bb94 Update STB nums 2025-11-12 11:38:50 -05:00
415860477a Update resume-call-centre-stb 2025-10-30 13:33:20 -04:00
22f9f7951a Update summary for call centre 2025-10-22 11:37:19 -04:00
19908428be Add fluent Cantonese 2025-10-18 13:26:51 -04:00
a79df8c121 Call centre resume 2025-09-08 11:45:09 -04:00
58fb32d4f2 Rearrange Astronofty/Kanban 2025-04-28 10:44:37 -04:00
a14b733a85 Add relevant coursework 2025-04-24 12:52:10 -04:00
5eb1372265 Redo Red Hat/projects for IT 2025-04-23 10:16:34 -04:00
a751dce299 Add Kanban calendar 2025-03-29 12:04:10 -04:00
028b2bb712 Add TypeScript/JavaScript languages to ME sniper descriptions 2025-03-10 13:05:15 -04:00
b4eaa5db7f ME sniper 2025-03-05 14:59:51 -05:00
4d5d25af15 Add ME sniper notes 2025-03-05 14:43:41 -05:00
2e5b5b52d8 Update 2024-12-20 12:30:37 -05:00
adcc975d23 Resume: web dev 2024-11-09 09:19:04 -05:00
e3065d8d6d latex-resume-web-dev-aws 2024-10-01 13:45:16 -04:00
f5fe070e54 Improve Rarity Surf 2024-09-30 13:39:38 -04:00
0534b97f73 Improved Red Hat 2024-09-30 12:46:57 -04:00
c56d8fb731 Javascript skill in projects 2024-09-24 13:19:52 -04:00
3f71be8c66 Merge latex-resume-python-selenium 2024-09-24 13:13:49 -04:00
6a6e9bb11f Grad year 2024-09-09 13:01:25 -04:00
90fef7bb61 Link Astronofty React 2024-08-15 11:16:02 -04:00
49a846ee2d Resume: spell out social URL's 2024-07-24 12:00:16 -04:00
c97c1a221f Update Latex font URL 2024-07-22 13:02:16 -04:00
4ff6ac20f0 Groovy Jenkins 2024-07-16 16:31:19 -04:00
25535aa384 Jenkins DSL file, DevOps/web dev skills 2024-07-16 15:53:19 -04:00
5d8442a6f0 Move nightly pipeline link 2024-07-16 12:25:49 -04:00
b40109382e Resume: Rarity Surf links 2024-07-14 13:52:53 -04:00
5fdcb18365 Resume: minor changes 2024-07-14 12:00:27 -04:00
278e2a8f46 Update advice 2024-07-11 10:57:00 -04:00
79b7e336a7 Resume: languages in front of project 2024-07-09 13:18:51 -04:00
7ea1739380 All black colors 2024-07-08 15:41:48 -04:00
a1086f3c2e Latex font 2024-07-08 14:14:02 -04:00
87c293ce13 Bold Golang 2024-06-14 11:34:51 -04:00
9be9043b6c Rearrage socials 2024-06-13 11:18:09 -04:00
26d63d2e6a Increase socials size 2024-06-13 11:14:30 -04:00
b1f3cfdf57 Home: update education/looking for work 2024-06-13 10:58:32 -04:00
461eb2aeb6 Update Linux config 2024-06-12 10:45:19 -04:00
a7fa6b9f3e Fix config desktop screenshot, update server date
- rm card
2024-06-10 12:41:01 -04:00
d21758675c Server: AWS EC2 link 2024-06-10 12:32:22 -04:00
14c6827b79 Resume: fix Jenkins 2024-06-10 12:07:08 -04:00
052f98860d Resume: increase readability 2024-06-03 18:08:00 -04:00
7c08682c66 Resume: Terraform 2024-06-03 17:50:09 -04:00
179b3f7c7e Resume: Terraform 2024-06-01 15:45:18 -04:00
2abc9de891 Add link to site 2024-05-29 13:52:37 -04:00
16bff441df Minor changes 2024-05-29 13:50:09 -04:00
6b2a29b078 Kogito PR links 2024-05-24 10:08:12 -04:00
1881fd9778 Resume spacing/font sizes 2024-05-24 09:43:39 -04:00
24f58db4f9 Work exp colors 2024-05-24 09:28:07 -04:00
61dc603da2 Add Astronofty to resume 2024-05-23 19:27:01 -04:00
c9e307dd70 AWS server to resume 2024-05-23 19:17:27 -04:00
4d29261b3c Merge remote 'canonical-openStack' into server 2024-04-02 10:53:20 -04:00
b7a493c8c9 Server 2024-04-02 10:44:54 -04:00
275c5b679b Server to-do 2024-01-31 11:21:14 -05:00
161cc14764 Server project points 2024-01-30 11:56:08 -05:00
49cda38430 Resume: make links visible 2024-01-18 10:35:24 -05:00
c3f43c408d Resume: 369 2024-01-18 09:12:10 -05:00
20a120e33e Resume: add ref section 2023-09-16 10:00:59 -04:00
30e8771472 Update me equation 2023-09-02 17:33:36 -04:00
a06054f737 Update about 2023-09-02 17:30:36 -04:00
4a55c02468 Updated resume 2023-09-02 17:24:28 -04:00
29 changed files with 663 additions and 251 deletions

1
.gitignore vendored
View File

@@ -4,6 +4,7 @@ resources/_gen/
themes/base16* themes/base16*
*.pdf *.pdf
*p*.md
commit-msg.txt commit-msg.txt
.hugo_build.lock .hugo_build.lock

1
README.md Normal file
View File

@@ -0,0 +1 @@
https://kevin-mok.com/

View File

@@ -103,12 +103,19 @@ body {
margin: 0; margin: 0;
background-color: $background-color; background-color: $background-color;
color: $color; color: $color;
line-height: 1.5; // line-height: 1.5;
line-height: 1.59;
// font-size: 100%; // font-size: 100%;
font-size: 15px; // font-size: 15px;
font-size: 17px;
// font-size: 20px; // font-size: 20px;
// font-size: 22px;
/* font-family: 'Source Code Pro', monospace; */ /* font-family: 'Source Code Pro', monospace; */
font-family: 'Hack', monospace; // font-family: 'Hack', monospace;
// body {
// font-family: 'Times New Roman', serif;
font-family: "Computer Modern Serif";
// }
display: flex; display: flex;
flex-direction: column; flex-direction: column;
min-height: 100vh; min-height: 100vh;
@@ -170,7 +177,8 @@ footer {
margin-top: 2rem; margin-top: 2rem;
$vertical-margin: .2em; $vertical-margin: .2em;
text-align: center; text-align: center;
font-size: 0.8em; // font-size: 0.8em;
font-size: .85em;
color: #747369; color: #747369;
// bottom: 0; // bottom: 0;
// position: absolute; // position: absolute;
@@ -210,7 +218,8 @@ footer {
// padding-right: .9em; // padding-right: .9em;
img { img {
height: 1.5em; // height: 1.5em;
height: 3em;
@include vert-margin-rem(.2); @include vert-margin-rem(.2);
padding-left: .5em; padding-left: .5em;
opacity: .6; opacity: .6;
@@ -368,7 +377,7 @@ header {// {{{
display: inline; display: inline;
&#gnu { &#gnu {
background-color: $base04; // background-color: $base04;
// background-color: $base05; // background-color: $base05;
} }
} }
@@ -491,7 +500,7 @@ header {// {{{
#contact-info {// {{{ #contact-info {// {{{
@include side-margin-em(0); @include side-margin-em(0);
// @include vert-padding-rem(0.5); // @include vert-padding-rem(0.5);
@include a-color($base-sky-blue); // @include a-color($base-sky-blue);
// min-width: $max-page-width; // min-width: $max-page-width;
@media (min-width: 1200px) { @media (min-width: 1200px) {
.container{ .container{
@@ -499,6 +508,7 @@ header {// {{{
} }
} }
a {// {{{ a {// {{{
color: #4287cd;
text-decoration: none; text-decoration: none;
&:hover { &:hover {
text-decoration: none; text-decoration: none;
@@ -510,7 +520,8 @@ header {// {{{
.row { .row {
// flex-grow: 1; // flex-grow: 1;
color: $base05; // color: $base05;
color: #4287cd;
img { img {
height: 1em; height: 1em;
@@ -528,7 +539,9 @@ header {// {{{
} }
.url-info { .url-info {
font-size: 1em;
margin-left: 5px; margin-left: 5px;
// text-decoration: underline;
// position: relative; // position: relative;
// left: -8px; // left: -8px;
// @media (max-width: $phone-width) { // @media (max-width: $phone-width) {
@@ -542,24 +555,30 @@ header {// {{{
#resume {// {{{ #resume {// {{{
a {// {{{ a {// {{{
text-decoration: none; // text-decoration: none;
// color: $base-blue;
color: #4287cd;
// color: blue;
text-decoration: underline;
&:hover { &:hover {
text-decoration: underline; text-decoration: underline;
} }
}// }}} }// }}}
h1 {// {{{ h1 {// {{{
color: $base-orange; // color: $base-orange;
color: black;
// margin-top: 1.3rem; // margin-top: 1.3rem;
margin-top: 1rem; margin-top: 1rem;
font-size: 1.2em; // font-size: 1.2em;
font-size: 1.3em;
// @media (max-width: $phone-width) { // @media (max-width: $phone-width) {
// margin-top: .75rem; // margin-top: .75rem;
// } // }
}// }}} }// }}}
h2 {// {{{ h2 {// {{{
color: $base-orange; //color: $base-orange;
margin-top: .5rem; margin-top: .5rem;
font-size: 1em; font-size: 1em;
@@ -588,10 +607,19 @@ header {// {{{
// } // }
}// }}} }// }}}
.section-header {
margin-top: .7em;
margin-bottom: 0.4em;
}
ul { ul {
margin-bottom: 5px; margin-bottom: 5px;
} }
.work-experience {
margin-bottom: 5px;
}
#projects {// {{{ #projects {// {{{
// // h1 { // // h1 {
// // margin-bottom: 3px; // // margin-bottom: 3px;
@@ -603,6 +631,7 @@ header {// {{{
h2 { h2 {
color: $base-sky-blue; color: $base-sky-blue;
display: inline; display: inline;
font-size: 1.1em;
} }
img { img {
@@ -610,11 +639,31 @@ header {// {{{
} }
.project-header { .project-header {
// margin-bottom: .6em; display: flex;
margin-bottom: .1em; align-items: baseline;
justify-content: space-between;
margin-bottom: 5px;
}
.project-date {
margin-left: 1em;
}
.project-title {
display: inline;
margin-right: 0.5em;
}
.project-title span {
display: inline;
margin-left: 0.5em;
font-weight: normal;
} }
.project-link { .project-link {
&:link {
text-decoration: none;
}
&:hover { &:hover {
text-decoration: none; text-decoration: none;
} }
@@ -648,8 +697,39 @@ header {// {{{
} }
}// }}} }// }}}
.company {
// color: #fe4646;
color: black;
font-weight: bold;
font-size: 1.2em;
margin-bottom: 5px;
}
.position {
// color: black;
// color: $base-sky-blue;
// color: $base-blue;
color: black;
font-weight: bold;
// font-style: italic;
// font-size: 1.1em;
font-size: 1em;
// margin-bottom: 5px;
margin-bottom: 15px;
}
.languages {
font-weight: normal;
font-style: normal;
margin-left: 0.5em;
color: $base03;
}
.institution { .institution {
color: $base-yellow; // color: $base-yellow;
// color: $base-dark-orange;
// color: $base-blue;
color: black;
font-weight: bold; font-weight: bold;
font-size: 1.1em; font-size: 1.1em;
margin-bottom: 5px; margin-bottom: 5px;
@@ -672,6 +752,8 @@ header {// {{{
&.letter { &.letter {
margin-top: 2em; margin-top: 2em;
margin-left: 2em;
margin-right: 2em;
line-height: 1.5em; line-height: 1.5em;
img { img {
@@ -686,6 +768,8 @@ header {// {{{
p { p {
margin-bottom: 1em; margin-bottom: 1em;
font-size: 25px;
line-height: 1.5em;
} }
.no-line-spacing { .no-line-spacing {
@@ -755,16 +839,21 @@ header {// {{{
h1.site-title {// {{{ h1.site-title {// {{{
text-align: center; text-align: center;
// font-size: 4.2em; // font-size: 4.2em;
font-size: 3.2em; // font-size: 3.2em;
font-size: 2.5em;
// color: #66cccc; // color: #66cccc;
color: $base05; color: $base05;
// margin-top: 1rem; // margin-top: 1rem;
// margin-bottom: 0.75rem; // margin-bottom: 0.75rem;
@include vert-margin-rem(.75); @include vert-margin-rem(.75);
@include a-color($base-sky-blue); // @include a-color($base-sky-blue);
a { a {
text-decoration: none; color: black;
// text-decoration: none;
text-decoration: underline;
text-decoration-thickness: 2px;
text-underline-offset: 5px;
} }
// @media (max-width: $phone-width) { // @media (max-width: $phone-width) {
@@ -930,7 +1019,8 @@ article.single section.body h5 { color: #515151; }
article.single section.body h6 { color: #747369; } article.single section.body h6 { color: #747369; }
// article.single section.body a,a:visited { color: #a06700; } // article.single section.body a,a:visited { color: #a06700; }
article.single section.body a,a:visited { color: $base-sky-blue; } // article.single section.body a,a:visited { color: $base-sky-blue; }
// article.single section.body a,a:visited { color: $base-sky-blue; }
/* Article Elements */ /* Article Elements */
@@ -1106,3 +1196,8 @@ pre { background: #2d2d2d; color: #f2f0ec }
// }}} Pygments // // }}} Pygments //
@media print {
.resume, body { font-size: 13pt; line-height: 1.5; }
.resume li { margin-bottom: 2pt !important; }
.resume h2, .resume .section__title { margin: 6pt 0 2pt !important; }
}

View File

@@ -1,5 +1,5 @@
baseURL: http://localhost:1313/ # baseURL: http://localhost:1313/
# baseURL: https://kevin-mok.com/ baseURL: https://kevin-mok.com/
# baseURL: /home/kevin/coding/mf-site/public # baseURL: /home/kevin/coding/mf-site/public
languageCode: en-us languageCode: en-us
# title: Kevin Mok's Website # title: Kevin Mok's Website
@@ -26,9 +26,9 @@ menu:
- name: config - name: config
url: /config url: /config
weight: 10 weight: 10
- name: card # - name: card
url: /card # url: /card
weight: 15 # weight: 15
# - name: letter # - name: letter
# url: /letter # url: /letter
# weight: 17 # weight: 17

View File

@@ -6,7 +6,7 @@ layout: single
--- ---
<!--- Intro {{{ --> <!--- Intro {{{ -->
![desktop-screenshot](https://img.khkm.tk/uploads/big/b2bd45e8f436d389ecb787b5c61c951a.png) ![desktop-screenshot](/img/config/desktop-screenshot.png)
*Screenshot from my dual-monitor setup.* *Screenshot from my dual-monitor setup.*
This [repository][lc-repo] contains the dotfiles to increase my workflow This [repository][lc-repo] contains the dotfiles to increase my workflow
@@ -18,17 +18,17 @@ efficiency. They are also for my Linux [rice][ricing_explanation].
<!--- Main Programs {{{ --> <!--- Main Programs {{{ -->
## Main Programs ## Main Programs
* **OS**: [Arch Linux](https://www.archlinux.org/) ([packages](txt/nzxt-pkgs.txt)) * **OS**: [Arch Linux](https://www.archlinux.org/) ([packages](https://git.kevin-mok.com/Kevin-Mok/linux-config/src/branch/master/txt/arch-2-pkgs.txt))
``` ```
$ systemd-analyze $ systemd-analyze
Startup finished in 2.341s (kernel) + 1.085s (userspace) = 3.426s Startup finished in 2.341s (kernel) + 1.085s (userspace) = 3.426s
graphical.target reached after 1.085s in userspace graphical.target reached after 1.085s in userspace
``` ```
* **Terminal**: [rxvt-unicode-pixbuf](https://www.wikiwand.com/en/Rxvt) * **Terminal**: [kitty](https://sw.kovidgoyal.net/kitty/)
* **Shell**: [Zsh](http://zsh.sourceforge.net/) + [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh) * **Shell**: [fish](https://fishshell.com/)
* **Window Manager**: [i3-gaps](https://github.com/Airblader/i3) * **Window Manager**: [i3-gaps](https://i3wm.org/)
* **Editor**: [Neovim](https://github.com/neovim/neovim) ([plugins](dotfiles/.vimrc#L51)) * **Editor**: [neovim](https://neovim.io/) ([plugins](https://git.kevin-mok.com/Kevin-Mok/linux-config/src/branch/master/dot_vimrc.tmpl#L147-L359))
* **File Manager**: [ranger](https://ranger.github.io/) * **File Manager**: [ranger](https://github.com/ranger/ranger?tab=readme-ov-file#ranger-193)/[PCManFM](https://en.wikipedia.org/wiki/PCMan_File_Manager)
<!--- }}} Basic Info --> <!--- }}} Basic Info -->
<!--- Setup {{{ --> <!--- Setup {{{ -->

View File

@@ -3,99 +3,59 @@ title: "Resume"
date: 2019-02-11T07:50:51-05:00 date: 2019-02-11T07:50:51-05:00
draft: false draft: false
--- ---
{{% resume/section "Work Experience" %}}<!--- {{{ -->
{{% resume/education name="Red Hat" {{% resume/section "Summary" %}}
title="Cloud/Software Engineer Intern" date="May 2020 — Aug 2021" %}} Customer-focused call centre professional with Tier 1/2 support experience, de-escalation, and clear communication. Improves first-response, reduces escalations, and shortens resolution times across high-volume phone/chat/email queues. Strong documentation habits and plain-language explanations for non-technical users.
- Reduced deployment time by **66%** by implementing ability to {{% /resume/section %}}
deploy locally-compiled binaries onto **Kubernetes**/**OpenShift**
using only command-line.
- Implemented ability for Kubernetes operator to fetch data
from a deployed service and update config with data.
- Added startup probes to handle starting legacy application containers that require additional startup time.
- Refactored probes to have default values assigned based on
deployed YAML while also fixing reconciliation issues.
- Automated the promotion and release process
as part of the **Jenkins** release pipeline.
- Wrote documentation on how to get started with the project to onboard new
developers and mentored the incoming intern.
{{% /resume/section %}}<!--- }}} --> {{% resume/section "Work Experience" %}}
{{% resume/section projects %}}<!--- {{{ --> {{% resume/work-experience
name="Digital Goods Marketplace"
title="OwnerOperator (Customer Support & Sales)"
languages="Live Chat Support, Dispute Resolution, Sales Negotiation"
date="July 2025 — Present"
%}}
<!--- Astronofty {{{ --> - Built and managed a **peer-to-peer e-commerce operation** reselling digital items; exceeded **$50,000+ gross merchandise
value**.
- Closed transactions and **middlemanned for high-value trades exceeding $5,000+ deals)** with **250+ verified vouches**, maintaining **5-star satisfaction** and **zero unresolved disputes**.
- Handled **end-to-end operations and escrow**: sourcing, pricing, inventory, listings, secure payments and fulfillment.
- Implemented **fair-value pricing** and **bundle offers** to accelerate turnover and improve margins while reducing low-value inquiries.
- Standardized **ownership verification and middleman workflows** to mitigate **fraud/chargeback** risk on large trades.
- Tracked **P&L and cash flow**; reconciled payments and maintained records for auditability.
{{% resume/project name="Astronofty" {{% resume/work-experience
url="https://github.com/Kevin-Mok/astronofty" date="Jan 2023" name="Red Hat"
show="true" %}} title="Technical Support Engineer Intern (Tier 1/2)"
languages="Ticketing/Triage, De-escalation, Knowledge Base Writing"
date="Aug 2022 — Aug 2024"
%}}
- Created for a 36 hour hackathon (UofTHacks X) where it **came 2nd overall**. - Delivered **Tier 1/2 frontline support** for CI/CD and Kubernetes issues via a ticket queue, improving **first-response time by 40%** through better triage and routing.
- Created and deployed a smart contract with **Solidity** on - Performed **incident troubleshooting and root-cause analysis**; automated data capture/validation that resolved **80% of config errors** and **reduced downtime by 40%**.
the Ethereum blockchain to create/buy/sell NFT's - Wrote **clear, step-by-step knowledge-base articles** and troubleshooting flows that enabled Tier 1 to solve common probe issues, **cutting escalations by 30%**.
using MetaMask. - Built a deployment **runbook** that standardized fixes and **reduced repeat contacts/tickets by 66%**; **shortened resolution time from 45 → 15 minutes**.
- Wrote a **React** hook to fetch and show listed NFT's, NFT details and owned NFT's. - Kept users informed with **concise status updates**, set expectations, and **de-escalated frustrated stakeholders** by focusing on next steps and time to resolution.
- Used API to synchronously upload images and metadata to IPFS. - Partnered with QA/DevOps to capture **root causes** of startup failures; implemented dynamic probes that **cut production launch issues by 50%**.
{{% /resume/section %}}
{{% resume/section "Web Dev Projects" %}}
{{% resume/project name="Rarity Surf" languages="User Support, Bug Reproduction" date="March 2024 — Dec 2024" show="true" %}}
- Reproduced user-reported issues; wrote **concise repro steps** and a **known-issues + workarounds** note to reduce repeat questions.
- Partnered with devs to **prioritize fixes** from impact-driven triage and shipped **onboarding/troubleshooting snippets** that cut new-user setup pings, improved first-contact resolution, and kept user-facing notes up to date.
{{% /resume/project %}} {{% /resume/project %}}
{{% /resume/section %}}
<!--- Astronofty }}} --> {{% resume/section "Skills" %}}
- **Customer Support & Call Centre:** Active listening, empathy, de-escalation, clear written/verbal comms, ticket triage/prioritization, SLA awareness, call/chat/email etiquette, documentation & KB writing
- **Technical:** Microsoft 365, VPN/log basics, Linux basics
- **Languages:** English; **Cantonese (fluent)**
{{% /resume/section %}}
<!--- Rarity Surf {{{ --> {{% resume/section "Education" %}}
{{% resume/education name="University of Toronto (St. George)"
{{% resume/project name="Rarity Surf" title="Computer Science Specialist — 3.84 GPA. Graduated with High Distinction."
date="Oct 2021" show="true" %}} date="2020 — 2025" %}}
{{% /resume/section %}}
- Web app to give rarity rankings to NFT's within minutes of their metadata being revealed and check which are listed (based on rarity and price filters) on the OpenSea marketplace using their API.
- Reverse engineered the ranking algorithm to match the
leading rarity ranking site's rankings (scraped using
Selenium) with a **discrepancy of <0.25%**.
- Used app to frontrun purchases of **top 5%** rarity NFT's
against competing buyers.
- Wrote **Django** backend to fetch metadata from IPFS, store rarity rankings in PostgreSQL and serve rarity data using GraphQL.
- Wrote **React** frontend with hooks to dynamically load rarity data. Styled with Tailwind.
{{% /resume/project %}}
<!--- Rarity Surf }}} -->
<!--- DigitalOcean {{{ -->
{{% resume/project name="Personal Server"
url="https://kevin-mok.com/server/" date="Aug. 2019 — present" show="true" %}}
- Deployed various web apps with backends using NGINX on a Debian/**Linux** server.
- Wrote a [**JavaScript** script][server script] and [systemd service][systemd service]/[timer]
to display the uptime of my pages every hour.
- Monitored system resources and performed system maintenance using tmux.
[server script]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-status.js
[systemd service]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.service
[timer]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.timer
{{% /resume/project %}}
<!--- DigitalOcean Droplet }}} -->
{{% /resume/section %}}<!--- }}} -->
{{% resume/section skills %}}<!--- {{{ -->
Kubernetes, **JavaScript**, **React**, **Python**, Go, Bash, Solidity, C, **Django**, Node.js, Jenkins, PostgreSQL, **Linux**, **Git**, **Command Line**
{{% /resume/section %}}<!--- }}} -->
{{% resume/section education %}}<!--- {{{ -->
{{% resume/education name="University of Toronto"
title="Computer Science Specialist — 3.84 GPA (CS)" date="2018 — 2023" %}}
{{% /resume/section %}}<!--- }}} -->
{{% resume/section "References" %}}<!--- {{{ -->
{{% resume/references %}}
{{% /resume/section %}}<!--- }}} -->
<!-- vim: fdm=marker -->

39
content/resume/notes.md Normal file
View File

@@ -0,0 +1,39 @@
# ME Sniper
write me a resume section similar to this (just a bit longer) for a web dev resume based on the points after with made up statistics
## Old
- **Developed a full-stack web application** to generate rarity
rankings for NFT's integrated with leading NFT
marketplace's (OpenSea) API,
enabling users to **quickly identify rare NFT's** and check
their listing status, **improving market research efficiency by 80%**.
- **Architected a robust Django (Python) [backend](https://github.com/Kevin-Mok/rarity-surf)** to fetch and process
NFT metadata from IPFS, store rarity rankings in
**PostgreSQL**, and serve the data via GraphQL API, **ensuring low-latency access and scaling to handle 2,000+ concurrent requests**.
- **Developed a dynamic React (Javascript)
[frontend](https://github.com/Kevin-Mok/rarity-surf-frontend)** using hooks to load
rarity data in real-time, styled with Tailwind for
mobile responsiveness, **improving user experience
and reducing frontend load times by 70%**.
## New
- Developed a full-stack web application to generate rarity rankings for NFTs integrated with leading NFT marketplaces (Magic
Eden) API, enabling users to quickly identify rare NFTs and check their listing status, improving market research efficiency by 80%.
- fetch metadata from either IPFS or website in parallel processes to create rarity
rankings as soon as metadata revealed
- reverse engineered algorithm for rarity rankings for NFT's based on article from
marketplace about their in-house statistical rarity
ranking
- created Prisma schema for PostgreSQL for database to store NFT data
- Node.js backend with API endpoints to return NFT's based
on max rank/price along with rarest traits
- lowest prices for rarity percentile to see if good deal
- fetch all listings from leading marketplace (Magic Eden) to be
able to identify which rare NFT's are on sale and be able
to filter based on max price/filter
- store previous sales data to check whether a buy at rarity
percentile is a good deal
- React FE to dynamically load NFT's based on rarity
rank/price filter with ability to hide seen ones
- Discord bot to notify you when customizable profitable resale
opportunity comes up based on rarity level/price

293
content/resume/old.md Normal file
View File

@@ -0,0 +1,293 @@
<!--- {{{ Red Hat -->
- Reduced deployment time by **66%** by [implementing ability](https://github.com/apache/incubator-kie-kogito-operator/commit/175a6356c5474f2360ccb8ae835e0b9b2d653cf1) to
deploy locally-compiled binaries onto **Kubernetes**/**OpenShift**
using only command-line (**Kubernetes/GoLang** used for this and three below).
- Implemented ability for Kubernetes operator to fetch data
from a deployed service and update config with data to
deprecate reliance on startup script.
- Added startup probes to handle starting legacy application containers that require additional startup time.
- Refactored probes to [have default values](https://github.com/apache/incubator-kie-kogito-operator/commit/af4977af228ec8648be28779259d4552246b656f) assigned based on
deployed YAML while also fixing reconciliation issues.
- Rewrote the **Jenkins (Groovy)** [nightly pipeline](https://github.com/apache/incubator-kie-kogito-pipelines/commit/4c83f1aecdea2c1ba2796b79839a90d4083dce88) to run in a GitHub
PR using a trigger keyword to test all the team's submitted PR's
before merging to the main branch.
- Took on tasks and contributed ideas in **Agile sprint** planning meetings in a team of 12 people.
- Took initiative to write [file](https://github.com/apache/incubator-kie-kogito-pipelines/commit/4c83f1aecdea2c1ba2796b79839a90d4083dce88#diff-7d2c018dafbccec859077d19bf1ade53ec9c7649f235528ce89f5632b109f7e6)
to define the GitHub parameters for the above pipeline so that it
can be recreated easily.
- Took initiative to write [documentation](https://github.com/apache/incubator-kie-kogito-operator/blob/1534c03d1d26bec08a16608a775782bf8b305de9/docs/GUIDE_FOR_KOGITO_DEVS.md) on how to get started with the project to onboard new
developers and mentored the incoming intern.
<!--- }}} Red Hat -->
<!--- Rarity Surf {{{ -->
{{% resume/project name="Rarity Surf"
languages="Python, JavaScript, React, Django"
date="Oct 2021" show="true" %}}
- **Developed a full-stack web application** to generate rarity
rankings for NFT's integrated with OpenSea's API,
enabling users to **quickly identify rare NFT's** and check
their listing status, **improving market research efficiency by 80%**.
- **Reverse engineered a proprietary ranking algorithm** to
mirror the leading rarity ranking sites results,
**achieving 99.75% accuracy** by
utilizing data scraping techniques [with Selenium](https://github.com/Kevin-Mok/rarity-surf/blob/django/rarity_check/project/scrape.py),
increasing the platform's trustworthiness among users.
- **Optimized purchasing strategy** by leveraging the app to
frontrun competitors in purchasing top 0.5% rarity NFTs,
**boosting acquisition success rate by 90%** and allowing
users to gain a competitive edge in the marketplace.
- **Architected a robust Django (Python) [backend](https://github.com/Kevin-Mok/rarity-surf)** to fetch and process
NFT metadata from IPFS, store rarity rankings in
**PostgreSQL**, and serve the data via GraphQL API, **ensuring low-latency access and scaling to handle 2,000+ concurrent requests**.
- **Developed a dynamic React [frontend](https://github.com/Kevin-Mok/rarity-surf-frontend)** using hooks to load
rarity data in real-time, styled with Tailwind for
mobile responsiveness, **improving user experience
and reducing frontend load times by 70%**.
{{% /resume/project %}}
<!--- Rarity Surf }}} -->
<!--- Rarity Surf {{{ -->
{{% resume/project name="Rarity Surf (2)"
languages="Typescript, Node.js, React"
date="" show="true" %}}
- **Developed a full-stack web application** to generate
rarity rankings for NFT's, integrating with **leading
marketplaces API** to enable users to quickly identify
rare NFT's and check their listing status, **improving
market research efficiency by 80%**.
- **Built a scalable Node.js backend** with REST API
endpoints to return NFTs based on customizable filters
such as max rank, price, and rarest traits. **Optimized
performance** to handle **3,000+ concurrent requests** by
implementing efficient data fetching and caching
mechanisms, ensuring low-latency access to NFT data.
- **Developed a dynamic React frontend** to load and display
NFT's in real-time based on user-defined filters to
streamline browsing. Styled the interface using **Tailwind
CSS** for a responsive and modern design, **reducing
frontend load times by 50%**.
- **Developed a Discord bot** to notify users of profitable
resale opportunities by leveraging historical sales data
to assess deal quality. This feature **increased user
engagement by 80%** and provided a seamless way for users
to stay updated on market opportunities.
- Designed and implemented a **PostgreSQL schema** for to
efficiently store NFT data, including metadata, rarity
scores, and historical sales data.
{{% /resume/project %}}
<!--- Rarity Surf }}} -->
<!--- Astronofty {{{ -->
{{% resume/project name="Astronofty"
url="https://github.com/Kevin-Mok/astronofty" languages="JavaScript, React, Solidity" date="Jan 2023"
show="true" %}}
- Created for a 36 hour hackathon (UofTHacks X) where it [**came 2nd overall**](https://devpost.com/software/astronofty).
- Created and deployed a smart contract with **Solidity** on
the Ethereum blockchain to create/buy/sell NFT's.
- Wrote **React** [components](https://github.com/Kevin-Mok/astronofty/tree/main/src/components) to synchronously upload images and metadata to IPFS and fetch and show NFT's.
{{% /resume/project %}}
<!--- Astronofty }}} -->
<!--- AWS {{{ -->
{{% resume/project name="AWS Server"
url="https://kevin-mok.com/server/" languages="AWS, Kubernetes, Docker, Terraform" date="May 2024" show="true" %}}
- Deployed [various web apps](https://kevin-mok.com/server/) using **Docker** (Compose) on an
**AWS EC2** Debian/**Linux** server.
- Created **Kubernetes** [manifest files](https://github.com/Kevin-Mok/aws-minicube) to quickly recreate my server setup
with persistent storage/restarts and open ports.
- Created **Terraform** [files](https://github.com/Kevin-Mok/terraform-deploys/tree/main)
to deploy an AWS EC2 instance and Docker containers.
- Used Amazon Route 53's DNS and **NGINX** to route
subdomains to each web application.
- Wrote a **JavaScript** [server script] and [systemd service][systemd service]/[timer]
to display the uptime of my pages every hour.
[server script]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-status.js
[systemd service]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.service
[timer]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.timer
{{% /resume/project %}}
<!--- AWS }}} -->
<!--- AWS 2 {{{ -->
{{% resume/project name="AWS Server"
url="https://kevin-mok.com/server/" languages="AWS, Kubernetes, Docker, Terraform" date="May 2024" show="true" %}}
- **Deployed and maintained multiple web applications**
using **Docker Compose** on **AWS EC2 Debian/Linux servers**,
ensuring consistent environments for applications handling
**over 2,000+ monthly requests**.
- **Streamlined infrastructure management** by creating
Kubernetes manifest files to easily recreate server setups
with persistent storage, automatic restarts, and open
ports, **reducing the need for manual configuration**.
- **Automated AWS infrastructure provisioning** by writing
**Terraform** files to deploy **EC2** instances and Docker
containers, **accelerating deployment times by 80%** and
providing an easily reproducible infrastructure setup for
future projects.
- Improved web application accessibility and scalability by
configuring Amazon Route 53s DNS and NGINX to route
subdomains to individual web apps, enabling seamless
navigation between apps and reducing DNS resolution times
by 25%.
- Built a robust uptime monitoring system by writing a
JavaScript server script and setting up a systemd
service/timer to check and display page uptime every hour,
ensuring near real-time monitoring and reducing downtime
detection time by 85%.
{{% /resume/project %}}
<!--- AWS 2 }}} -->
<!--- AWS 3 {{{ -->
{{% resume/project name="AWS Server"
url="https://kevin-mok.com/server/" languages="AWS, Kubernetes, Docker, Terraform" date="May 2024" show="true" %}}
- **Deployed and maintained multiple web applications**
using **Docker Compose** on **AWS EC2 Debian/Linux servers**,
ensuring consistent environments for applications handling
**over 2,000+ monthly requests**.
- **Automated AWS infrastructure provisioning** by writing
**Terraform** files to deploy AWS EC2 instances and Docker
containers, **accelerating deployment times by 80%** and
providing an easily reproducible infrastructure setup.
{{% /resume/project %}}
<!--- AWS 3 }}} -->
<!--- Astronofty (extended) {{{ -->
{{% resume/project name="Astronofty"
url="https://github.com/Kevin-Mok/astronofty" languages="JavaScript, React, Solidity" date="Jan 2023"
show="true" %}}
- **Secured [2nd place](https://devpost.com/software/astronofty) overall out of 150+ teams** at UofTHacks
X, a 36-hour hackathon, for developing a blockchain-based
NFT marketplace app.
- **Built and optimized React (JavaScript) [components](https://github.com/Kevin-Mok/astronofty/tree/main/src/components)** to synchronously
upload images and metadata to IPFS, **enhancing user engagement by 40%** during the demo,
and ensuring real-time NFT data retrieval, achieving a **75% improvement in loading times**.
{{% /resume/project %}}
<!--- Astronofty }}} -->
<!--- {{{ Spotify Graphs -->
{{% resume/project name="Spotify Graphs"
url="https://github.com/Kevin-Mok/spotify-lib-vis" date="June 2020 "
languages="Python, Django, PostgreSQL"
show="true" %}}
- Web app to visualize user's library and listening
history from Spotify.
- [Fetched and organized](https://github.com/Kevin-Mok/spotify-lib-vis/blob/master/api/utils.py) user data from Spotify API into PostgreSQL database with **Django (Python)** backend.
- Created and tested various relational database schemas to maximize
efficiency for use cases.
- Generated various charts to visualize the artists and genres
of tracks in library.
{{% /resume/project %}}
<!--- Spotify Graphs }}} -->
<!--- Grocery Finder {{{ -->
{{% resume/project name="Grocery Finder"
url="https://github.com/Kevin-Mok/grocery-finder" date="Feb. 2019 — Apr. 2019"
show="true" %}}
- Proof of concept for web app that finds the ideal supermarket based on your cart.
- Designed responsive front-end layout using **Bootstrap**.
- Implemented REST API functionality on backend using **Node.js** and
**MongoDB**.
- Setup deployment on [**Heroku**][Grocery Finder Heroku].
- Led team of 4 as project leader to prioritize and delegate tasks while
also implementing a majority of the core features.
- Performed code review for team members' pull requests.
[Grocery Finder Heroku]: http://www.grocery-finder.ml
{{% /resume/project %}}
<!--- Grocery Finder }}} -->
<!--- CSC369 {{{ -->
{{% resume/project name="Custom Kernel Module"
url="https://kevin-mok.com/server/" date="Jan. 2022" show="true" %}}
- Wrote and installed a [custom Linux kernel module](https://github.com/Kevin-Mok/interceptor-kernel/blob/master/a1/interceptor.c) in **C**.
- Intercepted pre-existing system calls using
custom kernel module by sending commands to
userspace.
- Monitored specific process ID's in my system
call to intercept their system calls.
{{% /resume/project %}}
<!--- CSC369 }}} -->
<!--- ParsaFood {{{ -->
{{% 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
restrictions/allergies.
- Designed user interface and linked various functionality together.
- Made during a 24-hour [food-themed hackathon][Platterz Hackathon event]
in a group with two other members. Came in 2<sup>nd</sup> place and won
an [Oculus Rift][Oculus Rift Amazon].
[Parsafood repo]: https://github.com/Kevin-Mok/ParsaFood
[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 %}}
<!--- ParsaFood }}} -->
<!--- DigitalOcean {{{ -->
{{% resume/project name="Personal Server"
url="https://kevin-mok.com/server/" date="Aug. 2019 — present" %}}
- Deployed various web apps with backends such as Node, PHP and Python using
**NGINX** on a **Debian** server.
- Monitor system resources and perform system maintenance using tmux.
- Wrote [**Node.js** script][server script] and [**systemd** service][systemd service]/[timer]
to check and display the uptime of my pages every hour.
[server script]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-status.js
[systemd service]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.service
[timer]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.timer
{{% /resume/project %}}
<!--- DigitalOcean Droplet }}} -->

View File

@@ -1,82 +0,0 @@
<!--- Spotify Graphs {{{ -->
{{% resume/project name="Spotify Graphs"
url="https://github.com/Kevin-Mok/spotify-lib-vis" date="June 2018 — July 2018"
show="true" %}}
- Implemented base functionality of scanning tracks and listening
history from user's library using Spotify API and organized data
into **PostgreSQL** database with **Django** backend.
- Created and tested various relational database schemas to maximize
efficiency for use cases.
- Produced bubble chart and (stacked) bar chart using [**d3**]
[d3 graph examples] to visualize the artists, genres and features of
tracks in library.
[d3 graph examples]: https://github.com/d3/d3/wiki/Gallery
{{% /resume/project %}}
<!--- Spotify Graphs }}} -->
<!--- Grocery Finder {{{ -->
{{% resume/project name="Grocery Finder"
url="https://github.com/Kevin-Mok/grocery-finder" date="Feb. 2019 — Apr. 2019"
show="true" %}}
- Proof of concept for web app that finds the ideal supermarket based on your cart.
- Designed responsive front-end layout using **Bootstrap**.
- Implemented REST API functionality on backend using **Node.js** and
**MongoDB**.
- Setup deployment on [**Heroku**][Grocery Finder Heroku].
- Led team of 4 as project leader to prioritize and delegate tasks while
also implementing a majority of the core features.
- Performed code review for team members' pull requests.
[Grocery Finder Heroku]: http://www.grocery-finder.ml
{{% /resume/project %}}
<!--- Grocery Finder }}} -->
<!--- DigitalOcean {{{ -->
{{% resume/project name="Personal Server"
url="https://kevin-mok.com/server/" date="Aug. 2019 — present" %}}
- Deployed various web apps with backends such as Node, PHP and Python using
**NGINX** on a **Debian** server.
- Monitor system resources and perform system maintenance using tmux.
- Wrote [**Node.js** script][server script] and [**systemd** service][systemd service]/[timer]
to check and display the uptime of my pages every hour.
[server script]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-status.js
[systemd service]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.service
[timer]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.timer
{{% /resume/project %}}
<!--- DigitalOcean Droplet }}} -->
<!--- ParsaFood {{{ -->
{{% 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
restrictions/allergies.
- Designed user interface and linked various functionality together.
- Made during a 24-hour [food-themed hackathon][Platterz Hackathon event]
in a group with two other members. Came in 2<sup>nd</sup> place and won
an [Oculus Rift][Oculus Rift Amazon].
[Parsafood repo]: https://github.com/Kevin-Mok/ParsaFood
[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 %}}
<!--- ParsaFood }}} -->

View File

@@ -0,0 +1,23 @@
# Red Hat
1. Reduced deployment time by 66% by implementing ability to deploy locally-compiled binaries onto Kubernetes/OpenShift using only command-line (Kubernetes/GoLang used for this and three below).
2. Implemented ability for Kubernetes operator to fetch data from a deployed service and update config with data to deprecate reliance on startup script.
3. Added startup probes to handle starting legacy application containers that require additional startup time.
4. Refactored probes to have default values assigned based on deployed YAML while also fixing reconciliation issues.
5. Rewrote the Jenkins (Groovy) nightly pipeline to run in a GitHub PR using a trigger keyword to test all the teams submitted PRs before merging to the main branch.
6. Took on tasks and contributed ideas in Agile sprint planning meetings in a team of 12 people.
7. Took initiative to write file to define the GitHub parameters for the above pipeline so that it can be recreated easily.
8. Took initiative to write documentation on how to get started with the project to onboard new developers and mentored the incoming intern.
# Rarity Surf
1. Web app to give rarity rankings to NFTs and check which are listed on the OpenSea marketplace using their API.
2. Reverse engineered the ranking algorithm to match the leading rarity ranking sites rankings (scraped using Selenium) with a discrepancy of <0.25%.
3. Used app to frontrun purchases of top 0.5% rarity NFTs against competing buyers.
4. Wrote Django (Python) backend to fetch metadata from IPFS, store rarity rankings in PostgreSQL and serve rarity data using GraphQL.
5. Wrote React frontend with hooks to dynamically load rarity data. Styled with Tailwind.
# AWS
1. Deployed various web apps using Docker (Compose) on an AWS EC2 Debian/Linux server.
2. Created Kubernetes manifest files to quickly recreate my server setup with persistent storage/restarts and open ports.
3. Created Terraform files to deploy an AWS EC2 instance and Docker containers.
4. Used Amazon Route 53s DNS and NGINX to route subdomains to each web application.
5. Wrote a JavaScript server script and systemd service/timer to display the uptime of my pages every hour.

View File

@@ -0,0 +1,18 @@
# To-Do
- check price of AWS server
- run Docker apps on it
- run domain
- run/create Docker compose
- Dockerize app
# Done
# Points
- run/deploy K8s locally on minikube using kubectl
- features
- Dockerize app
- run Docker on server (AWS)
# Replace
- personal server
- Astronofy

8
content/resume/skills.md Normal file
View File

@@ -0,0 +1,8 @@
# DevOps
AWS, Kubernetes, Terraform, Docker (Compose), Jenkins, Groovy, Go(Lang), Bash, **Linux**, **JavaScript**, **React**, **Python**, **Django**, Node.js, PostgreSQL, MongoDB, Solidity, C, **Git**, **Command Line**
# Web Dev
**JavaScript**, **React**, **Python**, **Django**, Node.js, PostgreSQL, MongoDB, Bash, **Git**, **Linux**, **Command Line**, Go(Lang), AWS, Kubernetes, Terraform, Docker (Compose), Jenkins, Groovy, Solidity, C
# Python
**Python**, **Django**, **Linux**, **Git**, AWS, Kubernetes, Docker (Compose), Ansible, Jenkins, Selenium, Terraform, Go(Lang), PostgreSQL, **Command Line**, Groovy, Bash, **JavaScript**, **React**, Node.js, MongoDB, Solidity, C

View File

@@ -1,14 +1,16 @@
--- ---
title: "Server Apps" title: "Server Apps"
date: 2019-09-22 date: 2024-06-10
draft: false draft: false
layout: single layout: single
js: ["server-table"] js: ["server-table"]
--- ---
Here is a list of apps that I am running on my [DigitalOcean Here is a list of apps that I am running on my [AWS EC2][AWS EC2 info]
Debian instance/[DigitalOcean
droplet][do-droplet]. Their [statuses] are updated every hour using a droplet][do-droplet]. Their [statuses] are updated every hour using a
[Node.js script][update-script] and a [systemd service]/[timer]. [Node.js script][update-script] and a [systemd service]/[timer].
[AWS EC2 info]: https://aws.amazon.com/pm/ec2/?gclid=CjwKCAjwyJqzBhBaEiwAWDRJVA8xkzlFBVRieWU_oiTxnHHfRgTnfN9WlnYON3UptS4aTtjaYRbVJRoCju8QAvD_BwE&trk=8c0f4d22-7932-45ae-9a50-7ec3d0775c47&sc_channel=ps&ef_id=CjwKCAjwyJqzBhBaEiwAWDRJVA8xkzlFBVRieWU_oiTxnHHfRgTnfN9WlnYON3UptS4aTtjaYRbVJRoCju8QAvD_BwE:G:s&s_kwcid=AL!4422!3!472464674288!e!!g!!aws%20ec2!11346198414!112250790958
[do-droplet]: https://www.digitalocean.com/products/droplets/ [do-droplet]: https://www.digitalocean.com/products/droplets/
[statuses]: https://kevin-mok.com/server-apps.json [statuses]: https://kevin-mok.com/server-apps.json
[systemd service]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.service [systemd service]: https://git.kevin-mok.com/Kevin-Mok/server-pages/src/branch/master/server-pages.service

View File

@@ -6,7 +6,6 @@
<footer> <footer>
<div class="container"> <div class="container">
<!-- <span class="copyright">&copy; {{ .Site.LastChange.Year }} {{ .Site.Title }} - <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></span> -->
<div id="footer-row" class="row justify-content-center"> <div id="footer-row" class="row justify-content-center">
<span id="footer-content" class="name"> <span id="footer-content" class="name">
<span id="copyright" class="col-xs-6"> <span id="copyright" class="col-xs-6">
@@ -15,11 +14,18 @@
<!-- <a href="{{ "credits" | relURL }}">Credits</a> · --> <!-- <a href="{{ "credits" | relURL }}">Credits</a> · -->
</span> </span>
<span id="social-icons" class="col-xs-4"> <span id="social-icons" class="col-xs-4">
<a href="https://www.linkedin.com/in/Kev-Mok" target="_blank">
<img src="{{ "img/social/linkedin.svg" | relURL }}" alt="linkedin-logo">
</a>
<a href="mailto:me@kevin-mok.com" target="_blank">
<img src="{{ "img/social/email.svg" | relURL }}"
alt="envelope">
·
<a href="https://github.com/Kevin-Mok" target="_blank"> <a href="https://github.com/Kevin-Mok" target="_blank">
<img src="{{ "img/social/github.svg" | relURL }}" <img src="{{ "img/social/github.svg" | relURL }}"
alt="github-logo"> alt="github-logo">
</a> </a>
<a href="https://git.kevin-mok.com/" target="_blank"> <a href="https://git.kevin-mok.com/Kevin-Mok?tab=activity" target="_blank">
<img src="{{ "img/social/gitea.svg" | relURL }}" alt="gitea-logo"> <img src="{{ "img/social/gitea.svg" | relURL }}" alt="gitea-logo">
</a> </a>
· ·
@@ -36,12 +42,6 @@
alt="reddit-logo"> alt="reddit-logo">
</a> </a>
. .
<a href="https://www.linkedin.com/in/Kev-Mok" target="_blank">
<img src="{{ "img/social/linkedin.svg" | relURL }}" alt="linkedin-logo">
</a>
<a href="mailto:me@kevin-mok.com" target="_blank">
<img src="{{ "img/social/email.svg" | relURL }}"
alt="envelope">
</a> </a>
</span> </span>
<span class="col-xs-2"> <span class="col-xs-2">

View File

@@ -12,7 +12,7 @@
{{ hugo.Generator }} {{ hugo.Generator }}
<meta name="google-site-verification" content="3aZhrY5bFgQY0HY2DNNUhbkuIfVEcwkrQHnbJd8jCCQ" /> <meta name="google-site-verification" content="3aZhrY5bFgQY0HY2DNNUhbkuIfVEcwkrQHnbJd8jCCQ" />
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<!-- <script src="https://cdn.khkm.gq/live.js" charset="utf-8"></script> --> <!-- <script src="https://cdn.khkm.tk/live.js" charset="utf-8"></script> -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
@@ -20,6 +20,9 @@
<!-- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Code+Pro:400,700" type="text/css"> --> <!-- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Code+Pro:400,700" type="text/css"> -->
<!-- <link rel='stylesheet' href='//cdn.jsdelivr.net/npm/hack-font@3.3.0/build/web/hack-subset.css'> --> <!-- <link rel='stylesheet' href='//cdn.jsdelivr.net/npm/hack-font@3.3.0/build/web/hack-subset.css'> -->
<!-- <link rel="stylesheet" href="https://meyerweb.com/eric/tools/css/reset/reset.css" type="text/css" media="all" /> --> <!-- <link rel="stylesheet" href="https://meyerweb.com/eric/tools/css/reset/reset.css" type="text/css" media="all" /> -->
<!-- href="https://cdn.rawgit.com/dreampulse/computer-modern-web-font/master/fonts.css"> -->
<link rel="stylesheet" type="text/css"
href="https://cdn.jsdelivr.net/gh/dreampulse/computer-modern-web-font@master/fonts.css">
<link rel="stylesheet" href="{{ "css/style.css" | relURL }}" type="text/css"> <link rel="stylesheet" href="{{ "css/style.css" | relURL }}" type="text/css">
{{ $main_sass := resources.Get "sass/main.scss" }} {{ $main_sass := resources.Get "sass/main.scss" }}
{{ $main_style := $main_sass | resources.ToCSS }} {{ $main_style := $main_sass | resources.ToCSS }}

View File

@@ -1,7 +1,4 @@
<h1 class="site-title"> <h1 class="site-title">
<span class="surrounding">[</span><a href="{{ .Site.BaseURL }}"><span class="base08">K</span><span <span class="surrounding"></span><a href="{{ .Site.BaseURL }}">
class="base0f">e</span><span class="base09">v</span><span <span>Kevin Mok</span>
class="base0a">i</span><span class="base0b">n </span><span
class="base0c">M</span><span class="base0d">o</span><span
class="base0e">k</span></a><span class="surrounding">] # _</span>
</h1> </h1>

View File

@@ -1,10 +1,33 @@
<div id="about"> <div id="about">
<h2>Welcome to my site!</h2> <h2>Welcome to my site!</h2>
<p> <p>
I'm Kevin Mok - a Computer Science I'm Kevin Mok. Here are a few things about myself!
student at the University of Toronto, and I'm greatly interested in all things Linux and <ul>
<li>I'm an Ex-Cloud Engineer Intern at
<a href="https://www.redhat.com/" target="_blank">Red Hat</a>.
</li>
<li>
I'm graduated University of Toronto as a Computer
Science Scecialist in 2023.
</li>
<li>
I am currently looking for full-time work! You can
view
<a href="http://localhost:1313/resume/" target="_blank">my resume</a>
on my site can
reach me on my
<a href="https://www.linkedin.com/in/kev-mok" target="_blank">LinkedIn</a>
or email me at me at kevin-mok.com.
</li>
<li>
I'm greatly interested in Linux (been using
<a href="https://archlinux.org/" target="_blank">Arch Linux </a>
since 2019) and a supporter of
<a href="https://www.gnu.org/philosophy/floss-and-foss.en.html" <a href="https://www.gnu.org/philosophy/floss-and-foss.en.html"
target="_blank">FOSS/FLOSS</a>. target="_blank">FOSS/FLOSS</a>.
</li>
</ul>
</p> </p>
{{ partial "home/me-equation.html" . }} {{ partial "home/me-equation.html" . }}

View File

@@ -1,14 +1,15 @@
<div class="me-equation"> <div class="me-equation">
<div class="equation-part"> <div class="equation-part">
<a href="https://www.gnu.org/" target="_blank"> <a href="https://www.redhat.com/" target="_blank">
<img src="{{ "img/home/gnu.svg" | relURL }}" id="gnu" alt="gnu-logo"> <img src="{{ "img/home/red-hat.svg" | relURL }}"
alt="red-hat-logo">
</a> </a>
<p>+</p> <p>+</p>
</div> </div>
<div class="equation-part"> <div class="equation-part">
<a href="https://www.wikiwand.com/en/Arch_Linux" target="_blank"> <a href="https://archlinux.org/" target="_blank">
<img src="{{ "img/home/arch.svg" | relURL }}" alt="linux-logo"> <!-- <img src="{{ "img/home/gnu.svg" | relURL }}" id="gnu" alt="gnu-logo"> -->
<!-- <img src="{{ "img/home/larbs.png" | relURL }}" alt="linux-logo"> --> <img src="{{ "img/home/arch.svg" | relURL }}" id="gnu" alt="gnu-logo">
</a> </a>
<p>+</p> <p>+</p>
</div> </div>
@@ -16,8 +17,8 @@
<a href="https://www.utoronto.ca/" target="_blank"> <a href="https://www.utoronto.ca/" target="_blank">
<img src="{{ "img/home/uoft-logo.svg" | relURL }}" alt="uoft-logo"> <img src="{{ "img/home/uoft-logo.svg" | relURL }}" alt="uoft-logo">
</a> </a>
<p>=</p>
</div> </div>
<p>=</p>
<div class="equation-part"> <div class="equation-part">
<img src="{{ "img/home/hexatar.png" | relURL }}" id="hexatar" alt="my-avatar"> <img src="{{ "img/home/hexatar.png" | relURL }}" id="hexatar" alt="my-avatar">
</div> </div>

View File

@@ -12,7 +12,7 @@
<div id="linkedin" class="col text-right"> <div id="linkedin" class="col text-right">
<a href="https://www.linkedin.com/in/Kev-Mok" target="_blank"> <a href="https://www.linkedin.com/in/Kev-Mok" target="_blank">
<span class="url-info"> <span class="url-info">
Kev-Mok linkedin.com/in/Kev-Mok
</span> </span>
<img src="{{ "img/social/linkedin.svg" | relURL }}" alt="linkedin-icon"> <img src="{{ "img/social/linkedin.svg" | relURL }}" alt="linkedin-icon">
</a> </a>
@@ -28,11 +28,11 @@
</a> </a>
</div> </div>
<div id="website" class="col text-right"> <div id="website" class="col text-right">
<a href="https://kevin-mok.com/" target="_blank"> <a href="https://github.com/Kevin-Mok" target="_blank">
<span class="url-info"> <span class="url-info">
kevin-mok.com github.com/Kevin-Mok
</span> </span>
<img src="{{ "img/resume/link.svg" | relURL }}" alt="link-icon"> <img src="{{ "img/social/github.svg" | relURL }}" alt="link-icon">
</a> </a>
</div> </div>
</div> </div>

View File

@@ -7,7 +7,8 @@
</div> </div>
<div class="col text-right date">{{ .Get "date" }}</div> <div class="col text-right date">{{ .Get "date" }}</div>
</div> </div>
<span class="title"> <!-- <span class="title"> -->
<span>
{{ .Get "title" }} {{ .Get "title" }}
</span> </span>
</div> </div>

View File

@@ -1,17 +1,9 @@
<div class="project"> <div class="project">
<div class="row project-header"> <div class="row project-header">
<div class="col-8 text-left"> <div class="col-8 text-left">
<a class="project-link" href="{{ .Get "url" }}" target="_blank">
<img src="{{ "img/resume/link.svg" | relURL }}" alt="link-icon">
</a>
<button class="btn" type="button" data-toggle="collapse"
data-target="#{{ .Get "name" | lower | urlize }}-details"
aria-expanded="false" aria-controls="{{ .Get "name" | lower | urlize }}-details">
<h2 class="project-title"> <h2 class="project-title">
{{ .Get "name" }} {{ .Get "name" }} <span class="languages">&lt;{{ .Get "languages" }}&gt;</span>
<img class="down-triangle" src="{{ "img/resume/down-triangle.png" | relURL }}" alt="link-icon">
</h2> </h2>
</button>
</div> </div>
<div class="col-4 text-right date">{{ .Get "date" }}</div> <div class="col-4 text-right date">{{ .Get "date" }}</div>
</div> </div>

View File

@@ -1,11 +1,10 @@
<div class="references"> <div class="references">
<span> <span>
See my See my LinkedIn for
<a href="https://www.linkedin.com/in/Kev-Mok" <a href="https://www.linkedin.com/in/kev-mok/details/recommendations/?detailScreenTabIndex=0"
target="_blank"> target="_blank">
LinkedIn references</a> from my
</a> Red Hat managers/mentee, a startup client and a graduate
for references from my Red Hat managers/mentee and a student mentor.
startup client.
</span> </span>
</div> </div>

View File

@@ -0,0 +1,20 @@
<div class="work-experience">
<div class="row">
<div class="col-8 text-left">
<p class="company">
{{ .Get "name" }}
</p>
</div>
<div class="col text-right date">
{{ .Get "date" }}
</div>
</div>
<span class="position">
{{ .Get "title" }}
</span>
{{ with .Get "languages" }}
<span class="languages">
{{ . }}
</span>
{{ end }}
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 MiB

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" id="b6bdd2b4-52ab-488a-9a30-1e6d1d7dd2d4" data-name="Layer 1" viewBox="0 0 192.30001 146" version="1.1" sodipodi:docname="logo.svg" width="192.3" height="146" inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
<metadata id="metadata15">
<rdf:RDF>
<cc:Work rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
<dc:title/>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="1920" inkscape:window-height="1007" id="namedview13" showgrid="false" fit-margin-top="1" fit-margin-right="1" fit-margin-bottom="1" fit-margin-left="1" inkscape:zoom="0.45930043" inkscape:cx="306.89999" inkscape:cy="73" inkscape:window-x="0" inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="b6bdd2b4-52ab-488a-9a30-1e6d1d7dd2d4"/>
<defs id="defs4">
<style id="style2">.a737459c-e8c7-4afa-8008-f6cfd15ccda2{fill:#e00;}</style>
</defs>
<path class="a737459c-e8c7-4afa-8008-f6cfd15ccda2" d="m 128,84 c 12.5,0 30.6,-2.6 30.6,-17.5 a 19.53,19.53 0 0 0 -0.3,-3.4 L 150.9,30.7 C 149.2,23.6 147.7,20.3 135.2,14.1 125.5,9.1 104.4,1 98.1,1 92.2,1 90.5,8.5 83.6,8.5 76.9,8.5 72,2.9 65.7,2.9 c -6,0 -9.9,4.1 -12.9,12.5 0,0 -8.4,23.7 -9.5,27.2 a 6.15,6.15 0 0 0 -0.2,1.9 C 43,53.7 79.3,83.9 128,84 m 32.5,-11.4 c 1.7,8.2 1.7,9.1 1.7,10.1 0,14 -15.7,21.8 -36.4,21.8 C 79,104.5 38.1,77.1 38.1,59 a 18.35,18.35 0 0 1 1.5,-7.3 C 22.8,52.5 1,55.5 1,74.7 1,106.2 75.6,145 134.6,145 c 45.3,0 56.7,-20.5 56.7,-36.7 0,-12.7 -11,-27.1 -30.8,-35.7" id="path8" inkscape:connector-curvature="0" style="fill:#ee0000"/>
<path d="m 160.5,72.6 c 1.7,8.2 1.7,9.1 1.7,10.1 0,14 -15.7,21.8 -36.4,21.8 C 79,104.5 38.1,77.1 38.1,59 a 18.35,18.35 0 0 1 1.5,-7.3 l 3.7,-9.1 a 6.15,6.15 0 0 0 -0.2,1.9 c 0,9.2 36.3,39.4 84.9,39.4 12.5,0 30.6,-2.6 30.6,-17.5 A 19.53,19.53 0 0 0 158.3,63 Z" id="path10" inkscape:connector-curvature="0"/>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 465 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 465 KiB

After

Width:  |  Height:  |  Size: 66 KiB