From c6365b5c03de2daf704facaaf9c2e9383100d437 Mon Sep 17 00:00:00 2001 From: eggy Date: Tue, 18 Jun 2024 00:02:00 -0400 Subject: [PATCH] feat: emma version content changes are required --- Daniel Chen.typ | 107 ++++++++++++++++++++++++++---------------------- lib.typ | 51 ++++++++++++----------- 2 files changed, 87 insertions(+), 71 deletions(-) diff --git a/Daniel Chen.typ b/Daniel Chen.typ index 3ec76f5..7ab8df3 100644 --- a/Daniel Chen.typ +++ b/Daniel Chen.typ @@ -44,18 +44,6 @@ = Experience #indent[ - // #work_entry( - // "Technical Volunteer", - // "Organization for Transformative Works", - // start_date: "Feb 2024", - // end_date: "present", - // location: "Remote", - // tools: "Python, Ruby on Rails, React, MySQL", - // tasks: ( - // [Upgrading archive import pipelines to migrate 4000+ user works to be accessible - // to *7 million registered users*], - // ), - // ) #work_entry( "Software Engineering Intern", @@ -66,17 +54,17 @@ tools: "Next.js, Spring Boot, PostgreSQL, AWS, Terraform", tasks: ( // [Improved client responsiveness by *80* by employing stale-while-revalidate hooks for caching and ?? SWR performance, caching, error handling], - [Optimised dashboard performance by *80%* by employing *stale-while-revalidate* - hooks in *React* and lazily loading backend models with Hibernate, improving - user retention by *30%*], + [Optimised dashboard performance by *80%* by employing stale-while-revalidate + hooks in React and lazily loading backend models with Hibernate, improving user + retention by *30%*], [Achieved SOC 2 security compliance by implementing *role-based permissions with - JWTs* in *Spring Boot*, logging alerts to CloudWatch, and introducing new - privacy controls for user data], + JWTs* in Spring Boot, logging alerts to CloudWatch, and introducing new privacy + controls for user data], [Owned the creation of an end-to-end document vault feature for users to upload - and verify supplementary identity documents with *Textract*, *reducing support - tickets by 25%*], - [Created CI/CD pipelines to automatically deploy AWS Lambdas with *Terraform* and - *Jenkins*], + and verify supplementary identity documents with Textract, reducing support + tickets by *25%*], + [Created CI/CD pipelines to automatically deploy AWS Lambdas with Terraform and + Jenkins], ), ) @@ -88,14 +76,14 @@ location: "Remote", tools: "React, Python, PostgreSQL, AWS", tasks: ( - [Owned the creation of a new feature to sync *46000+ enterprise users'* + [Owned the creation of a new feature to sync *46000+* enterprise users' HubSpot/Airtable data to Google Sheets and emailed CSVs to databases with AWS - Lambda and *Python*], - [Engineered a new *React* data query builder and *FastAPI* backend for our - business intelligence visualisation service to *33000+ users*, eliminating the - need for clients to manually write API calls], + Lambda and Python], + [Engineered a new React data query builder and FastAPI backend for our business + intelligence visualisation service to *33000+* users, eliminating the need for + clients to manually write API calls], [Designed a conflict resolution algorithm to merge databases, reducing - *unrecoverable errors by 75%*], + unrecoverable errors by *75%*], // [?? new tool dDeveloped a *serverless microservice* that asynchronously ingests // email attachments directly into ETL pipelines], // [??? emphasise test driven development or remove line *Reduced request errors by 30%* by creating backend testing infrastructure with @@ -112,17 +100,34 @@ location: "Waterloo, ON", tools: "Express, Redis, GraphQL, Docker, Kubernetes", tasks: ( - [Built a new travel tool application leveraging *GraphQL* and *Apollo Server* to - track bus capacity for *500+ attendees* through real-time registration processes], - [Streamlined event check-in times by *80%* for *1900+ guests* by generating - Apple/Google Wallet passes over *Express* and *Node.js*], - [Diagnosed and recovered from crashes due to load spikes up to *800k updates per - hour* at the world's largest student-run hackathon by autoscaling *Redis* and - *Postgres* on *Kubernetes*], + [Built a new travel tool application leveraging GraphQL and Apollo Server to + track bus capacity for *500+* attendees through real-time registration processes], + [Streamlined event check-in times by *80%* for *1900+* guests by generating + Apple/Google Wallet passes over Express], + [Diagnosed and recovered from crashes due to load spikes up to 800k updates per + hour at the world's largest student-run hackathon by autoscaling Redis and + Postgres on Kubernetes], + [Slashed dev server reload time from *130 → 9 s* by introducing threading, + profiling, and pre-transpiling generated code], // [Upgraded the event statistics dashboard to update in real time with GraphQL // *subscriptions with Redis PubSub*], ), ) + + #work_entry( + "Technical Volunteer", + "Organization for Transformative Works", + start_date: "Feb 2024", + end_date: "present", + location: "Remote", + tools: "Python, Ruby, React, MySQL", + tasks: ( + [Upgraded archive import pipelines in Python to make *4000+* user works + accessible to *7000000+* registered users], + [Developed a new React frontend for users to browse and search works with *Ruby + on Rails*], + ), + ) ] = Projects @@ -133,23 +138,27 @@ "Mandown Comic Downloader", "Python, Qt", repo_link: "https://github.com/potatoeggy/mandown", + tasks: ( + [Created a CLI and GUI to scrape, download, and convert webcomics into + e-ink-optimised PDF/EPUBs], + [Designed a scalable ebook converter with a *plugin-based architecture* to + improve compatibility], + [Implemented *image caching and multithreading* to increase download and update + speeds by *300%*], + ), ) - - Created a CLI and GUI to scrape, download, and convert webcomics into - e-ink-optimised PDF/EPUBs - - Designed a scalable ebook converter with a *plugin-based architecture* to - improve compatibility - - Implemented *image caching and multithreading* to increase download and update - speeds by *300%* #project( "Kobo Sync Server", "Rust, Axum", repo_link: "https://github.com/potatoeggy/kobink", + tasks: ( + [Developed a *Rust* backend to sync custom files to Kobos by reimplementing the + Kobo Sync API], + [Deployed the service behind an nginx reverse proxy and Cloudflare DNS to sync + over the internet], + ), ) - - Created an *Axum* backend to send custom files to Kobos by *reimplementing the - Kobo Sync API* - - Deployed the service behind an nginx reverse proxy and Cloudflare DNS to sync - over the internet // #project( // "Genshin Rewards Simulator", @@ -167,11 +176,13 @@ "Vue, TypeScript, WebSockets", repo_link: "https://github.com/potatoeggy/jeopardy", demo_link: "https://jeopardy.eggworld.me/host", + tasks: ( + [Developed a beautiful and polished game where participants buzz in on their + devices over *WebSockets*], + [Synchronised game state between clients and the host with shared types and the + *observer pattern*], + ), ) - - Created a beautiful and polished game where participants buzz in on their - devices over *WebSockets* - - Synchronised game state between clients and the host with shared types and the - *observer pattern* // #project( // "RecipeReady", diff --git a/lib.typ b/lib.typ index c1be0be..84e9196 100644 --- a/lib.typ +++ b/lib.typ @@ -5,22 +5,22 @@ #let TITLE_FONT = "Bitter" #let HEADING_FONT = TITLE_FONT -#let BODY_FONT = "Open Sans" +#let BODY_FONT = "Calibri" -#let BODY_FONT_SIZE = 10pt -#let HEADING_FONT_SIZE = 0.9em +#let BODY_FONT_SIZE = 11pt +#let HEADING_FONT_SIZE = 0.8em #let TITLE_FONT_SIZE = 1.8em #let HEADING_LINE_GAP = 3mm -#let BODY_LINE_HEIGHT = 0.75em +#let BODY_LINE_HEIGHT = 0.65em -#let HEADING_DETAILS_LIST_SPACING = 1em +#let HEADING_DETAILS_LIST_SPACING = 0.8em #let DETAILS_TITLE_FONT_SIZE = 1em -#let DETAILS_LIST_SPACING = 0.9em +#let DETAILS_LIST_SPACING = 0.75em // rest = not top -#let PAGE_MARGINS = (right: 0.4in, rest: 0.3in) +#let PAGE_MARGINS = (right: 0.4in, left: 0.3in, rest: 0.4in) // Format locations. #let format_location(location) = { @@ -36,7 +36,7 @@ stack( dir: ttb, spacing: HEADING_DETAILS_LIST_SPACING, - grid(columns: (11fr, 3fr), column-gutter: 1cm, { + grid(columns: (13fr, 3fr), column-gutter: 0.5cm, { set strong(delta: DEFAULT_STRONG) set align(left) left_content @@ -46,7 +46,7 @@ right_content }), { - set strong(delta: SMALL_STRONG) + set strong(delta: DEFAULT_STRONG) list(tight: false, spacing: DETAILS_LIST_SPACING, marker: [•], ..details) }, ) @@ -77,23 +77,28 @@ }, details: tasks) } -#let project(title, tools, repo_link: none, demo_link: none) = { +#let project(title, tools, repo_link: none, demo_link: none, tasks: none) = { set strong(delta: DEFAULT_STRONG) let text_link = if demo_link != none { demo_link } else { repo_link } - if text_link != none { - link(text_link)[#text[*#title*]] - } else { - text[*#title*] + + let content_title = { + if text_link != none { + link(text_link)[#text[*#title*]] + } else { + text[*#title*] + } + + if demo_link != none { + link(demo_link)[ #fa(link-icon) ] + } + + if repo_link != none { + link(repo_link)[ #fa(github) ] + } + [ | _ #tools _ ] } - if demo_link != none { - link(demo_link)[ #fa(link-icon) ] - } - - if repo_link != none { - link(repo_link)[ #fa(github) ] - } - [ | _ #tools _ ] + cv_entry(left_content: content_title, right_content: none, details: tasks) } #let render_contact_data(data) = { @@ -108,7 +113,7 @@ // Set name and contact data and format headings #let template(name, color, doc) = { set page(margin: PAGE_MARGINS, paper: "us-letter") - set list(indent: 0.65em, marker: [•]) + set list(indent: 0.75em, marker: [•]) set text(font: (BODY_FONT), BODY_FONT_SIZE) set par(leading: BODY_LINE_HEIGHT) align(center)[