diff --git a/Daniel Chen.typ b/Daniel Chen.typ index 5faa97d..2bea141 100644 --- a/Daniel Chen.typ +++ b/Daniel Chen.typ @@ -30,7 +30,7 @@ = Skills #indent[ - *Languages:* Python, TypeScript, JavaScript, Rust, Java, HTML, CSS, SQL \ + *Languages:* Python, TypeScript, JavaScript, Rust, C++, Java, HTML, CSS, SQL \ // MATLAB, Dart, Ruby *Frameworks:* Node.js, Express, Axum, Spring Boot, React, Next.js, Vue, Flutter, Prisma \ @@ -42,6 +42,19 @@ = Experience #indent[ + #work_entry( + "Technical Volunteer", + "Organization for Transformative Works", + start_date: "Feb 2024", + end_date: "present", + location: "Remote", + tools: "Ruby on Rails, React, MySQL", + tasks: ( + [Upgraded ETL pipelines to import 4 000+ user works to be accessible to *7+ + million registered users*], + ), + ) + #work_entry( "Backend Lead & Event Organiser", "Hack the North", @@ -50,16 +63,16 @@ location: "Waterloo, ON", tools: "Express, GraphQL, Docker, Kubernetes", tasks: ( - [??? leadership], + [*Led and mentored a team of 7* to clean technical debt and deliver *3 more + features* than the previous year], [Streamlined event check-in times by *80%* for *1900+ attendees* by generating - digital wallet passes over *Express*], - [Integrated backend *tracing* to monitor performance and trigger alerts with - *OpenTelemetry* and *Grafana*], - [Diagnosed system scaling issues during load spikes and *recovered from a system - crash* by asking the frontend team to debounce their queries, implementing rate - limiting as a temporary stopgap measure], + digital wallet passes over Express], + [Integrated backend tracing to monitor performance and trigger alerts with + OpenTelemetry and Grafana], + [Diagnosed and *recovered from load spike crashes* by debouncing queries, using + rate limiting as a stopgap], [Shipped a new *bus registration tool* for attendees by creating new database - tables and *GraphQL* resolvers], + tables and GraphQL resolvers], ), ) @@ -68,18 +81,19 @@ "Immigr8", start_date: "Jan 2024", end_date: "Apr 2024", - location: "Clearwater, FL", + location: "Remote", tools: "Next.js, Spring Boot, PostgreSQL, AWS, Terraform", tasks: ( - [??? deduplicated user form inputs by implementing aws textract w/s3 + lambda], + [Reduced manual user inputs by *40%* by extracting data from users' uploaded + documents in S3 with *Textract*], // [Improved client responsiveness by *80* by employing stale-while-revalidate hooks for caching and ?? SWR performance, caching, error handling], - [Set up CI/CD for AWS infrastructure by *codifying it in Terraform* for + [Introduced CI/CD for AWS Lambdas by *codifying them in Terraform* for reproducible and automatic deployments], - [Reduced CI/CD pipeline build times by *70%* by setting up a staging environment - with *EC2* and *Jenkins*, parallelising builds, and caching dependencies], + [Set up a staging environment via EC2 and Jenkins with parallel builds to *reduce + production errors by 90%*], [Planned and executed a roadmap to SOC 2 security compliance by *implementing role-based permissions with JWTs*, sending backend logs and alerts to - *CloudWatch*, and introducing new privacy controls for user data], + CloudWatch, and introducing new privacy controls for user data], ), ) @@ -88,38 +102,24 @@ "Dropbase", start_date: "May 2023", end_date: "Aug 2023", - location: "Toronto, ON", + location: "Toronto", tools: "React, FastAPI, PostgreSQL, AWS", tasks: ( [Designed a conflict resolution algorithm for merging databases, *reducing unrecoverable errors by 75%*], [Owned and launched a HubSpot/Airtable to Google Sheets sync feature to *46000+ - enterprise users* by writing *AWS Lambda* functions in Python, abstracting + enterprise users* by writing AWS Lambda functions in Python, abstracting interfaces to easily support future sources], - [Wrote and deployed a new *React* data query builder for our business - intelligence visualisation service to *33000+ users*, eliminating the need for - clients to manually write API calls or Python code], - [Developed a scalable microservice that asynchronously ingests email attachments - directly into ETL pipelines], + [Wrote and deployed a new React data query builder for our business intelligence + visualisation service to *33000+ users*, eliminating the need for clients to + manually write API calls or Python code], + [Developed 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( - "Technical Volunteer", - "Organization for Transformative Works", - start_date: "Feb 2024", - end_date: "present", - location: "Remote", - tools: "Ruby on Rails, React, MySQL", - tasks: ( - [??? Automated importing NUMBER of fics by scraping it into a database then - import to AO3, largest fanfic archive], - [?? Increased reliability probably (how?)], - ), - ) ] = Projects @@ -128,35 +128,38 @@ // joycond-cemuhook? #indent[ - // #project("Comic Downloader", "Python, Qt", - // repo_link: "https://github.com/potatoeggy/mandown") - // - Created a CLI and GUI to scrape, download, and convert webcomics into - // e-ink-optimised ebooks (EPUB, PDF) - // - Designed an *intermediate representation* to store metadata and images as a - // standardised conversion target - // - Implemented *image caching and multiprocessing* to increase download and update - // speeds by *300%* - #project( - "Genshin Simulator", - "Vue, TypeScript", - repo_link: "https://github.com/potatoeggy/primoprod", - demo_link: "https://primoprod.vercel.app", + "Mandown Comic Downloader", + "Python, Qt", + repo_link: "https://github.com/potatoeggy/mandown", ) - - Built a realistic and beautiful *loot box simulator* with fluid animations based - off a popular game - - Reduced action latency by *90%* by lazily loading art assets at opportune times, - such as during cutscenes + - Created a CLI and GUI to scrape, download, and convert webcomics into + e-ink-optimised ebooks (EPUB, PDF) + - Designed a scalable data conversion system via a *canonical format*, allowing + any format to convert to any other + - Implemented *image caching and multithreading* to increase download and update + speeds by *300%* + + // #project( + // "Genshin Simulator", + // "Vue, TypeScript", + // repo_link: "https://github.com/potatoeggy/primoprod", + // demo_link: "https://primoprod.vercel.app", + // ) + // - 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( "Kobo Sync Server", "Rust, Axum", repo_link: "https://github.com/potatoeggy/kobink", ) - - Developed an Axum backend to *automatically convert and sync* ebooks to a Kobo - eReader over the network - - *Reverse-engineered* the Kobo eReader Sync API to support updating ebook - metadata and covers + - Reimplemented the Kobo Store Sync protocol in an Axum backend to *instead sync + personal ebook files* + - Deployed the service behind an *nginx reverse proxy* and *Cloudflare DNS* to + allow syncing over the internet // #project( // "RecipeReady", diff --git a/lib.typ b/lib.typ index dc7d417..59bbc6c 100644 --- a/lib.typ +++ b/lib.typ @@ -12,10 +12,10 @@ #let TITLE_FONT_SIZE = 2em #let HEADING_LINE_GAP = 3mm -#let BODY_LINE_HEIGHT = 0.85em +#let BODY_LINE_HEIGHT = 0.8em // rest = not top -#let PAGE_MARGINS = (rest: 0.5in, top: 0.4in, left: 0.4in) +#let PAGE_MARGINS = (rest: 0.5in, top: 0.4in, left: 0.4in, bottom: 0.4in) // Format locations. #let format_location(location) = { @@ -72,13 +72,12 @@ text(1.1em)[*#role*] if tools != none { - text[ | _ #tools _] + text[ | _ #tools _ ] } "\n" set strong(delta: SMALL_STRONG) text[*#company*] - }, right_content: { [*#start_date -- #end_date*] @@ -98,11 +97,11 @@ } if demo_link != none { - link(demo_link)[#text(1.1em)[ #fa(link-icon)]] + link(demo_link)[#text(1.1em)[ #fa(link-icon) ]] } if repo_link != none { - link(repo_link)[#text(1.1em)[ #fa(github)]] + link(repo_link)[#text(1.1em)[ #fa(github) ]] } [ | _ #tools _ ] }