Compare commits

...

24 Commits

  1. 74
      assets/sass/main.scss
  2. 2
      content/letter
  3. 151
      content/resume/_index.md
  4. 39
      content/resume/notes.md
  5. 293
      content/resume/old.md
  6. 98
      content/resume/old.txt
  7. 23
      content/resume/points-plain-text.md
  8. 8
      content/resume/skills.md
  9. 1
      layouts/partials/base/footer.html
  10. 3
      layouts/partials/base/header.html
  11. 7
      layouts/partials/base/site-title.html
  12. 8
      layouts/partials/resume/contact-info.html
  13. 2
      layouts/shortcodes/resume/project.html
  14. 3
      layouts/shortcodes/resume/work-experience.html
  15. 2
      static/pdf

74
assets/sass/main.scss

@ -106,11 +106,16 @@ body {
// line-height: 1.5;
line-height: 1.57;
// font-size: 100%;
font-size: 15px;
// font-size: 15px;
font-size: 17px;
// font-size: 20px;
// font-size: 22px;
/* 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;
flex-direction: column;
min-height: 100vh;
@ -495,7 +500,7 @@ header {// {{{
#contact-info {// {{{
@include side-margin-em(0);
// @include vert-padding-rem(0.5);
@include a-color($base-sky-blue);
// @include a-color($base-sky-blue);
// min-width: $max-page-width;
@media (min-width: 1200px) {
.container{
@ -503,6 +508,7 @@ header {// {{{
}
}
a {// {{{
color: #4287cd;
text-decoration: none;
&:hover {
text-decoration: none;
@ -514,7 +520,8 @@ header {// {{{
.row {
// flex-grow: 1;
color: $base05;
// color: $base05;
color: #4287cd;
img {
height: 1em;
@ -534,6 +541,7 @@ header {// {{{
.url-info {
font-size: 1em;
margin-left: 5px;
// text-decoration: underline;
// position: relative;
// left: -8px;
// @media (max-width: $phone-width) {
@ -558,7 +566,8 @@ header {// {{{
}// }}}
h1 {// {{{
color: $base-orange;
// color: $base-orange;
color: black;
// margin-top: 1.3rem;
margin-top: 1rem;
// font-size: 1.2em;
@ -569,7 +578,7 @@ header {// {{{
// }
}// }}}
h2 {// {{{
color: $base-orange;
//color: $base-orange;
margin-top: .5rem;
font-size: 1em;
@ -599,7 +608,7 @@ header {// {{{
}// }}}
.section-header {
margin-top: 1em;
margin-top: .7em;
margin-bottom: 0.4em;
}
@ -630,13 +639,25 @@ header {// {{{
}
.project-header {
// margin-bottom: .6em;
// margin-bottom: .1em;
display: flex;
align-items: baseline;
justify-content: space-between;
margin-bottom: 5px;
}
.project-date {
margin-left: 1em;
}
.project-title {
color: $base-blue;
display: inline;
margin-right: 0.5em;
}
.project-title span {
display: inline;
margin-left: 0.5em;
font-weight: normal;
}
.project-link {
@ -677,7 +698,8 @@ header {// {{{
}// }}}
.company {
color: #fe4646;
// color: #fe4646;
color: black;
font-weight: bold;
font-size: 1.2em;
margin-bottom: 5px;
@ -686,18 +708,28 @@ header {// {{{
.position {
// color: black;
// color: $base-sky-blue;
color: $base-blue;
// color: $base-blue;
color: black;
font-weight: bold;
// font-style: italic;
font-size: 1.1em;
// 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 {
// color: $base-yellow;
// color: $base-dark-orange;
color: $base-blue;
// color: $base-blue;
color: black;
font-weight: bold;
font-size: 1.1em;
margin-bottom: 5px;
@ -803,16 +835,21 @@ header {// {{{
h1.site-title {// {{{
text-align: center;
// font-size: 4.2em;
font-size: 3.2em;
// font-size: 3.2em;
font-size: 2.5em;
// color: #66cccc;
color: $base05;
// margin-top: 1rem;
// margin-bottom: 0.75rem;
@include vert-margin-rem(.75);
@include a-color($base-sky-blue);
// @include a-color($base-sky-blue);
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) {
@ -978,7 +1015,8 @@ article.single section.body h5 { color: #515151; }
article.single section.body h6 { color: #747369; }
// 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 */

2
content/letter

@ -1 +1 @@
Subproject commit 654fe2678f10c18da2673e86aeaf1a9b55c54218
Subproject commit f07869796d6289112a4d88373b7440bf62314ff9

151
content/resume/_index.md

@ -3,108 +3,119 @@ title: "Resume"
date: 2019-02-11T07:50:51-05:00
draft: false
---
{{% resume/section "Work Experience" %}}<!--- {{{ -->
{{% resume/work-experience name="Red Hat"
title="Cloud/Software Engineer Intern" date="May 2020 — Aug 2021" %}}
- 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 (**GoLang** used for this and below).
- 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](https://github.com/apache/incubator-kie-kogito-operator/commit/af4977af228ec8648be28779259d4552246b656f) assigned based on
deployed YAML while also fixing reconciliation issues.
- Rewrote the **Jenkins** nightly pipeline to run [in a GitHub
PR](https://github.com/apache/incubator-kie-kogito-pipelines/commit/4c83f1aecdea2c1ba2796b79839a90d4083dce88)
using a trigger keyword.
- Wrote [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.
{{% /resume/section %}}<!--- }}} -->
{{% resume/section projects %}}<!--- {{{ -->
{{% resume/section "Web Dev Projects" %}}<!--- {{{ -->
<!--- AWS {{{ -->
{{% resume/project name="AWS/Kubernetes/Terraform"
url="https://kevin-mok.com/server/" 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.
- Used AWS security groups to allow inbound HTTPS traffic.
- Used Amazon EBS snapshots to regularly back up server.
- Wrote a **JavaScript** [server script] and [systemd service][systemd service]/[timer]
to display the uptime of my pages every hour.
<!--- Rarity Surf {{{ -->
[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 name="Rarity Surf"
languages="TypeScript, JavaScript, Node.js, React"
date="March 2025" show="true" %}}
- **Developed a full-stack web application
(TypeScript/JavaScript)** to generate
rarity rankings for NFT's, integrating with **leading
marketplace's 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](https://github.com/Rarity-Surf/ME-sniper-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 using **PostgreSQL** , ensuring low-latency
access to NFT data.
- **Built a dynamic [React frontend](https://github.com/Rarity-Surf/ME-sniper-frontend) (TypeScript/JavaScript)** to load and display NFTs in real-time with user-defined filters. Styled
using a mobile-responsive library, **reducing load times by 50%**.
- **Developed a [Discord bot](https://github.com/Rarity-Surf/ME-sniper-discord-bot) (TypeScript/JavaScript/Node.js)** 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.
{{% /resume/project %}}
<!--- AWS }}} -->
<!--- Rarity Surf }}} -->
<!--- Rarity Surf {{{ -->
<!--- {{{ Kanban -->
{{% resume/project name="Rarity Surf"
date="Oct 2021" show="true" %}}
{{% resume/project name="Kanban Calendar"
url="https://github.com/Kevin-Mok/astronofty"
languages="TypeScript, JavaScript, React, Next.js" date="Jan 2023"
show="true" %}}
- 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 (Python)** 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.
- **Developed a [responsive calendar Kanban
board](https://kanban-calendar-lake.vercel.app/)
using Next.js, TypeScript, and Tailwind CSS**,
featuring draggable events, smooth card-to-detail
transitions week/day views optimized for both desktop
and mobile.
- **Engineered intuitive navigation and cross-device
interactivity**, implementing swipe gestures,
infinite horizontal scrolling (mobile), and arrow
controls (desktop) while resolving challenges like
drag-and-drop consistency and responsive layout
transitions.
{{% /resume/project %}}
<!--- Rarity Surf }}} -->
<!--- }}} Kanban -->
<!--- Astronofty {{{ -->
{{% resume/project name="Astronofty"
url="https://github.com/Kevin-Mok/astronofty" date="Jan 2023"
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
using MetaMask.
- Wrote a **React** hook to fetch and show listed NFT's, NFT details and owned NFT's.
- Used API to synchronously upload images and metadata to IPFS.
- **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 80%** during the demo.
{{% /resume/project %}}
<!--- Astronofty }}} -->
{{% /resume/section %}}<!--- }}} -->
{{% resume/section "Work Experience" %}}<!--- {{{ -->
{{% resume/section skills %}}<!--- {{{ -->
{{% resume/work-experience name="Red Hat"
title="Cloud/Software Engineer Intern" languages="Kubernetes, GoLang, Jenkins" date="May 2022 — Aug 2023" %}}
- **Eliminated 80% of manual configuration errors** by enabling
the Kubernetes operator to automatically fetch data from
deployed services and update configurations, **deprecating
legacy startup scripts and reducing overall startup time
by 40%** (**Kubernetes/GoLang** used for this and three below).
- **Reduced deployment time by 66%** by implementing a
[solution](https://github.com/apache/incubator-kie-kogito-operator/commit/175a6356c5474f2360ccb8ae835e0b9b2d653cf1) for deploying locally-compiled binaries onto
Kubernetes/OpenShift via command-line, **cutting average
deployment times from 45 minutes to 15 minutes**.
- **Improved application stability** by introducing startup
probes for legacy applications with longer boot times,
**resulting in a 50% reduction in startup-related failures
and downtime during production launches**.
- **Improved system reliability** by refactoring probes to dynamically assign default values based on YAML files, **increasing probe accuracy by 30%** and preventing misconfigurations.
- **Increased CI pipeline efficiency** by rewriting the
**Jenkins (Groovy)** [nightly pipeline](https://github.com/apache/incubator-kie-kogito-pipelines/commit/4c83f1aecdea2c1ba2796b79839a90d4083dce88) to run in a GitHub PR
environment, allowing for automated testing of all
team-submitted PRs prior to merging, **reducing manual
intervention by 60%**.
AWS, Kubernetes, Terraform, Docker (Compose), **JavaScript**, **React**, **Python**, Go(Lang), Bash, Solidity, C, **Django**, Node.js, Jenkins, PostgreSQL,
MongoDB, **Linux**, **Git**, **Command Line**
{{% /resume/section %}}<!--- }}} -->
{{% /resume/section %}}<!--- }}} -->
{{% resume/section education %}}<!--- {{{ -->
{{% resume/section skills %}}<!--- {{{ -->
{{% resume/education name="University of Toronto"
title="Computer Science Specialist — 3.84 GPA (CS). Graduated with High Distinction." date="2018 — 2023" %}}
**TypeScript**, **JavaScript**, **React**, **Node.js**, **Python**, **Django**, PostgreSQL, MongoDB, Bash, **Git**, **Linux**, **Command Line**, Go(Lang), AWS, Kubernetes, Terraform, Docker (Compose), Jenkins, Groovy, Solidity, C
{{% /resume/section %}}<!--- }}} -->
{{% resume/section "References" %}}<!--- {{{ -->
{{% resume/section education %}}<!--- {{{ -->
{{% resume/references %}}
{{% resume/education name="University of Toronto (St. George)"
title="Computer Science Specialist — 3.84 GPA (CS). Graduated with High Distinction." date="2019 — 2024" %}}
{{% /resume/section %}}<!--- }}} -->

39
content/resume/notes.md

@ -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 NFT’s integrated with leading NFT marketplace’s (Magic
Eden) API, enabling users to quickly identify rare NFT’s 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

@ -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 site’s 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
marketplace’s 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 53’s 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 }}} -->

98
content/resume/old.txt

@ -1,98 +0,0 @@
<!--- 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 }}} -->
<!--- 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 }}} -->

23
content/resume/points-plain-text.md

@ -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 team’s submitted PR’s 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 NFT’s and check which are listed on the OpenSea marketplace using their API.
2. Reverse engineered the ranking algorithm to match the leading rarity ranking site’s rankings (scraped using Selenium) with a discrepancy of <0.25%.
3. Used app to frontrun purchases of top 0.5% rarity NFT’s 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 53’s 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.

8
content/resume/skills.md

@ -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

1
layouts/partials/base/footer.html

@ -6,7 +6,6 @@
<footer>
<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">
<span id="footer-content" class="name">
<span id="copyright" class="col-xs-6">

3
layouts/partials/base/header.html

@ -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='//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" /> -->
<!-- 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">
{{ $main_sass := resources.Get "sass/main.scss" }}
{{ $main_style := $main_sass | resources.ToCSS }}

7
layouts/partials/base/site-title.html

@ -1,7 +1,4 @@
<h1 class="site-title">
<span class="surrounding">[</span><a href="{{ .Site.BaseURL }}"><span class="base08">K</span><span
class="base0f">e</span><span class="base09">v</span><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>
<span class="surrounding"></span><a href="{{ .Site.BaseURL }}">
<span>Kevin Mok</span>
</h1>

8
layouts/partials/resume/contact-info.html

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

2
layouts/shortcodes/resume/project.html

@ -2,7 +2,7 @@
<div class="row project-header">
<div class="col-8 text-left">
<h2 class="project-title">
{{ .Get "name" }}
{{ .Get "name" }} <span class="languages">&lt;{{ .Get "languages" }}&gt;</span>
</h2>
</div>
<div class="col-4 text-right date">{{ .Get "date" }}</div>

3
layouts/shortcodes/resume/work-experience.html

@ -11,4 +11,7 @@
<span class="position">
{{ .Get "title" }}
</span>
<span class="languages">
<{{ .Get "languages" }}>
</span>
</div>

2
static/pdf

@ -1 +1 @@
Subproject commit f96e4a7485601fe51a4171a83063f28e79a5a06a
Subproject commit b86b7df80e0470fd5b64fa6f88207af62c1406c8
Loading…
Cancel
Save