From 5b0eca10720a3210ab55b147e787b846963793ce Mon Sep 17 00:00:00 2001 From: eggy Date: Sun, 12 Jan 2025 23:54:42 -0500 Subject: [PATCH] chore: stash --- backend_infra.typ | 15 ++- data_systems.typ | 196 ++++++++++++++++++++++++++++++++++++++++ lib/lib.typ | 19 ++-- lib/template_common.typ | 2 +- 4 files changed, 214 insertions(+), 18 deletions(-) create mode 100644 data_systems.typ diff --git a/backend_infra.typ b/backend_infra.typ index 740ac58..8583d8c 100644 --- a/backend_infra.typ +++ b/backend_infra.typ @@ -12,18 +12,17 @@ [Courses: Object-oriented programming, data structures & algorithms, digital logic & circuits, operating systems], [Extracurriculars: Hack the North Organising Team, UW Orbital Satellite Design - Team, Creative Writing Club Secretary], + Team, Creative Writing Club], ), ) ] #let skills = indent[ - *Languages:* TypeScript/JavaScript, HTML, CSS, SQL, Python, Java, C, C++, Rust \ + *Languages:* TypeScript/JavaScript, Rust, Python, Java, SQL, HTML/CSS \ // Dart - *Technologies:* React, Next.js, Spring Boot, Express, Prisma, Apollo, GraphQL \ - // Qt, Jest / Pytest, Apollo, Prisma, Rails + *Technologies:* Spring Boot, Express, Prisma, Apollo, Axum, GraphQL, React \ *Tools:* Linux, Git, Docker, Postgres, Pytest, Jest, AWS/GCP, Kubernetes, - Terraform, Figma // Jenkins, systemd, Jira + Terraform, Jenkins, nginx // Jenkins, systemd, Jira ] #show: doc => template_common(education, skills, doc) @@ -49,12 +48,12 @@ ) #work_entry( - "Software Engineering Intern", + "Software Developer", "Immigr8", company_link: "https://immigr8now.com", start_date: "Jan 2024", end_date: "Apr 2024", - location: "Tampa, FL (Remote)", + location: "Remote", tools: "TypeScript, Spring Boot, React, Postgres, Terraform, AWS", tasks: ( // [Owned the creation of an end-to-end document vault feature in React for users to @@ -77,7 +76,7 @@ company_link: "https://dropbase.io", start_date: "May 2023", end_date: "Aug 2023", - location: "San Francisco, CA (Remote)", + location: "Remote", tools: "TypeScript, Python, React, Postgres, AWS", tasks: ( [??? make it clearer what this is Engineered a new React data query builder and diff --git a/data_systems.typ b/data_systems.typ new file mode 100644 index 0000000..21e2d94 --- /dev/null +++ b/data_systems.typ @@ -0,0 +1,196 @@ + +#import "lib/template_common.typ": template_common, work_entry, project, indent, SMALL_STRONG + +#let education = indent[ + #work_entry( + "B.A.Sc. in Computer Engineering", + "University of Waterloo", + start_date: "Sep 2022", + end_date: "Apr 2027", + location: "Waterloo, ON", + tasks: ( + [Courses: Object-oriented programming, data structures & algorithms, digital + logic & circuits, operating systems], + [Extracurriculars: Hack the North Organising Team, UW Orbital Satellite Design + Team, Creative Writing Club Secretary], + ), + ) +] + +#let skills = indent[ + *Languages:* TypeScript/JavaScript, HTML, CSS, SQL, Python, Java, Rust \ + // Dart + *Technologies:* React, Next.js, Spring Boot, Express, Prisma, Apollo, GraphQL \ + // Qt, Jest / Pytest, Apollo, Prisma, Rails + *Tools:* Linux, Git, Docker, Postgres, Pytest, Jest, AWS/GCP, Kubernetes, + Terraform, Figma // Jenkins, systemd, Jira +] + +#show: doc => template_common(education, skills, doc) + += Experience + +#indent[ + #work_entry( + "Software Engineering Intern", + "Magna", + company_link: "https://magna.so", + start_date: "Sep 2024", + end_date: "Dec 2024", + location: "New York, NY", + tools: "Rust, TypeScript, Solidity, React, GraphQL", + tasks: ( + [?? Portal claim config (db, FE, BE, how lucrative it is) padding padding + padding, automated deployments], + [?? Solana claim fees Wrote a Rust smart contract to add a fee for claiming + tokens on Solana], + [?? perf and databasest], + ), + ) + + #work_entry( + "Software Engineering Intern", + "Immigr8", + company_link: "https://immigr8now.com", + start_date: "Jan 2024", + end_date: "Apr 2024", + location: "Tampa, FL (Remote)", + tools: "TypeScript, Spring Boot, React, Postgres, Terraform, AWS", + tasks: ( + // [Owned the creation of an end-to-end document vault feature in React for users to + // upload and verify identity documents with Textract, reducing support tickets by + // *25%*], + [Planned and executed a roadmap to *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], + [?? be specific Investigated and improved initial load time by *80%* for tool + using async data fetching and optimising relations], + [?? make it clear that you deployed the entire setup, atm makes it seem like you + clicked some buttons Created CI/CD pipelines to automatically deploy AWS Lambdas + with Terraform and Jenkins], + // doc vault as an ETL pipeline + ), + ) + + #work_entry( + "Software Engineering Intern", + "Dropbase", + company_link: "https://dropbase.io", + start_date: "May 2023", + end_date: "Aug 2023", + location: "San Francisco, CA (Remote)", + tools: "TypeScript, Python, React, Postgres, AWS", + tasks: ( + [??? make it clearer what this is 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], + [?? what is it Shipped a new database sync tool for *46000+* users by abstracting + data sources behind an adapter-based architecture and AWS Lambdas], + [?? data focus, 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 + // *Pytest* to catch regressions and test new features across database engines with + // *90% code coverage*], + ), + ) + + #work_entry( + "Backend Developer", + "Hack the North", + company_link: "https://hackthenorth.com", + start_date: "Mar 2023", + end_date: "Oct 2024", + location: "Waterloo, ON", + tools: "TypeScript, Express, Postgres, Kubernetes", + tasks: ( + [Built a new travel registration application leveraging GraphQL to track bus + capacity for *500+* attendees in real time], + [Diagnosed and recovered from crashes due to load spikes up to *800k* updates per + hour at the world's largest student-run hackathon by maintaining and autoscaling + Redis and Postgres on Kubernetes], + [??? CI/infra focus, deploying otel and traces], + [??? ad-hoc data requests], + // [Upgraded the event statistics dashboard to update in real time with GraphQL + // *subscriptions with Redis PubSub*], + ), + ) +] + += Projects +#set strong(delta: SMALL_STRONG) + +#indent[ + #project( + "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%*], + ), + ) + + // #project( + // "Kobo Sync Server", + // "Rust, Axum", + // repo_link: "https://github.com/potatoeggy/kobink", + // tasks: ( + // [Developed a *Rust* backend to sync custom ebook 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", + // "Vue, TypeScript", + // repo_link: "https://github.com/potatoeggy/primoprod", + // demo_link: "https://primoprod.vercel.app", + // tasks: ( + // [Built a realistic and beautiful *loot box simulator* with CSS animations based + // off a popular game], + // [Reduced action latency by *90%* by lazily loading art assets at opportune times, + // such as during cutscenes], + // ), + // ) + + // #project( + // "Jeopardy!", + // "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*], + // ), + // ) + + // #project( + // "RecipeReady", + // "https://github.com/vincentjguo/recipeready-server", + // "Flutter, Selenium, FastAPI, Android", + // ) + // - Developed a *Flutter app* to generate recipes based on ingredients and filters + // through a FastAPI server + // - Scraped thousands of websites for recipes to build a database with a robust + // *many-to-many tag system* + // - Aggregated common ingredients heuristically to build a shopping list and a meal + // plan for each week + + #project( + "Arch Linux Server", + "Linux, Docker, nginx, systemd", + demo_link: "https://eggworld.me", + ) + - Created a *self-hosted CI/CD pipeline* with *Gitea* to automatically deploy + personal projects behind *nginx* + - Containerised services with *Docker* and *systemd* to simplify deployment and + management +] \ No newline at end of file diff --git a/lib/lib.typ b/lib/lib.typ index fdd6422..41df60f 100644 --- a/lib/lib.typ +++ b/lib/lib.typ @@ -7,20 +7,20 @@ #let HEADING_FONT = TITLE_FONT #let BODY_FONT = "Open Sans" -#let BODY_FONT_SIZE = 10pt +#let BODY_FONT_SIZE = 9.5pt #let HEADING_FONT_SIZE = 0.95em #let TITLE_FONT_SIZE = 2em #let HEADING_LINE_GAP = 3mm #let BODY_LINE_HEIGHT = 0.75em -#let HEADING_DETAILS_LIST_SPACING = 0.8em +#let HEADING_DETAILS_LIST_SPACING = 0.9em #let DETAILS_TITLE_FONT_SIZE = 1.075em #let DETAILS_LIST_SPACING = 0.8em // rest = not top -#let PAGE_MARGINS = (rest: 0.4in, top: 0.3in, left: 0.3in, bottom: 0.4in) +#let PAGE_MARGINS = (right: 0.5in, top: 0.3in, left: 0.4in, bottom: 0.4in) // Format locations. #let format_location(location) = { @@ -66,11 +66,7 @@ cv_entry(left_content: { set par(leading: 0.75em) - if company_link == none { - text(1.1em)[*#company*] - } else { - text(1.1em)[#link(company_link)[*#company*]] - } + text(1.1em)[*#role*] if tools != none { text[ | _ #tools _ ] @@ -78,7 +74,12 @@ "\n" set strong(delta: SMALL_STRONG) - [*#role*] + + if company_link == none { + [*#company*] + } else { + [#link(company_link)[*#company*]] + } }, right_content: { [*#start_date -- #end_date*] diff --git a/lib/template_common.typ b/lib/template_common.typ index ad0a3d2..273946b 100644 --- a/lib/template_common.typ +++ b/lib/template_common.typ @@ -36,7 +36,7 @@ = Education #education ] else if section == "skills" [ - = Skills + = Technical Skills #skills ] else if section == "content" [ #doc