diff --git a/backend_infra.typ b/backend_infra.typ index cb0f024..dd59b5a 100644 --- a/backend_infra.typ +++ b/backend_infra.typ @@ -11,19 +11,20 @@ tasks: ( // [Courses: Object-oriented programming, data structures & algorithms, concurrency, // operating systems], - [Extracurriculars: Hack the North Organising Team, UW Orbital Satellite Design - Team, Creative Writing Club], + [*Involvements*: Hack the North (Organiser), UW Orbital Satellite Design Team, + Creative Writing Club (Secretary)], + [*Awards*: StormHacks 2022 (#link("https://devpost.com/software/perdiem")[EdTech Winner]), + YRHacks 2022 (#link("https://devpost.com/software/resketch")[IBM Open Source Winner])], ), ) ] #let skills = indent[ - *Languages:* TypeScript/JavaScript, Rust, Python, Java, C++, SQL, HTML/CSS \ + *Languages:* Python, TypeScript/JavaScript, Rust, Java, C++, SQL, HTML/CSS \ // Dart - *Technologies:* Postgres, Spring Boot, Express, Redis, Terraform, Prisma, - Apollo, Axum, GraphQL, React \ - *Developer Tools:* Linux, Git, Docker, Pytest, Jest, AWS, GCP, Kubernetes, - Jenkins, nginx // Jenkins, systemd, Jira + *Frameworks:* Node, React, Vue, GraphQL, Spring Boot, Express, Redis, Terraform, + Prisma, Apollo, Axum \ + *Tools:* Linux, Postgres, Git, Docker, AWS, GCP, Kubernetes, Jenkins, nginx // Jenkins, systemd, Jira ] #show: doc => template_common(education, skills, doc) @@ -40,12 +41,14 @@ location: "New York, NY", tools: "Rust, TypeScript, Solidity, React, GraphQL", tasks: ( - [Created tooling to construct and deploy new customer landing portals based off - of Figma designs with Vercel's API], - [Developed a new external REST API for customers who wanted to access their token - data programmatically], // termination display (FE), external API for customers not using our platform (BE) - [Wrote and audited smart contracts on the Solana blockchain to add claim fees to - our token vesting platform], + [Shipped internal dashboard to *automate website creation and deployment* for + *50+ clients* using *Node*, *React*], + [Created and refactored data models, controllers, and *GraphQL APIs* to store and + deploy site configurations], + [Investigated and *improved initial load times by >60%* for client sites by + caching blockchain reads in *Redis*], + [Led collaboration with engineers, partner teams, designers to identify needs and + scope technical requirements], ), ) @@ -58,15 +61,14 @@ location: "Remote", tools: "TypeScript, Spring Boot, React, Postgres, Terraform, AWS", tasks: ( - [Owned end-to-end development of a secure document vault for users to upload ID - documents with S3 and Textract], - [Championed and shipped features for *SOC 2 security compliance*, including - *role-based permissions with JWTs* in Spring Boot, alert logging with - CloudWatch, and strong privacy controls for user data], - [Fully implemented the Calendly Auth Code OAuth2 flow with automated refresh of - expired access tokens], - [Created a parallel *CI/CD system from scratch* with Terraform and Jenkins to - automatically deploy AWS Lambdas], // BE-infra only, FE ver is admin dashboard + [Built and launched passport/private document storage platform for *200+ users* + using *Spring Boot* and *React*], + [Secured REST endpoints with *role-based permissions* and *JWTs*; monitored and + logged alerts via CloudWatch], + [Implemented document *OCR pipeline* with Lambda, Textract, and *S3* to + automatically parse and tag uploads], + [Created parallel *CI/CD system from scratch* with *Terraform* and Jenkins to + deploy *AWS Lambdas* on commit], // BE-infra only, FE ver is admin dashboard ), ) @@ -79,13 +81,16 @@ location: "Remote", tools: "TypeScript, Python, React, Postgres, AWS", tasks: ( - [Architected a data query builder and executor engine for customers to visualise - their data warehouses by custom-tailoring forms on-the-fly, supporting complex - nested logic for 3000+ enterprise users across 8 database types], // - [Shipped an *LSP server for our custom query language*, including user-specific - autocomplete and syntax highlighting], - [Developed a serverless microservice to asynchronously ingest email attachments - directly into ETL pipelines], + [Architected platform to clone, sync, and visualise databases for *3000+ + enterprise users* in *Python* and *React*], + [Designed *merge conflict resolution system* to handle data mismatches, reducing + user-reported errors by *35%*], + [Shipped *static analysis tool* for platform's *custom SQL dialect* by + recursively processing an abstract syntax tree], + [Conceptualised and implemented extensible *classes and abstractions* to easily + onboard *8 new database types*], + // [Developed a serverless microservice to asynchronously ingest 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*], @@ -93,7 +98,7 @@ ) #work_entry( - "Backend / Infrastructure Developer", + "Backend Lead", "Hack the North", company_link: "https://hackthenorth.com", start_date: "Mar 2023", @@ -101,32 +106,18 @@ location: "Waterloo, ON", tools: "TypeScript, Express, Postgres, Kubernetes", tasks: ( - [Streamlined event check-in times for *1900+* guests by generating scannable - mobile wallet passes over Express], + [Streamlined event check-in times for *1900+* guests by automatically generating + Apple Wallet passes over *Express*], [Overhauled CI/CD pipelines, speeding up builds by *35%* by parallelising testing - and type checking], - [*Introduced backend tracing* with OpenTelemetry and Grafana to profile - performance issues in production], - [*Resolved load spike crashes* in prod by caching queries via Redis and - horizontally scaling services on Kubernetes], + and type checking with *Buildkite*], + [Investigated backend slowdowns in production by *introducing OpenTelemetry + tracing* onto *Grafana* dashboards], + [Resolved load spike crashes by caching queries via *Redis* and horizontally + scaling services on *Kubernetes*], ), ) ] -= Awards - -#indent[ - #set strong(delta: SMALL_STRONG) - #show link: underline - - - #link("https://devpost.com/software/perdiem")[Winner of the EdTech category] at - Simon Fraser University's StormHacks 2022 from 388 participants - - #link( - "https://devpost.com/software/resketch", - )[Winner of the IBM Open Source category] - at YRHacks 2022 for building Resketch -] - = Projects #indent[ @@ -135,8 +126,8 @@ "Python, Qt", repo_link: "https://github.com/potatoeggy/mandown", tasks: ( - [Created a CLI and GUI to scrape and convert webcomics into e-ink-optimised files - with a *plugin-based architecture*], + [Created a CLI and GUI to convert webcomics into e-ink-optimised files with a + *plugin-based architecture*], [Expanded support for new formats and features #link("https://github.com/potatoeggy/mandown/issues/55")[based on] #link("https://github.com/potatoeggy/mandown/issues/89")[user] #link("https://github.com/potatoeggy/mandown/issues/63")[demand], minimising regressions with #link( "https://github.com/potatoeggy/mandown/blob/master/tests/test_source_batoto.py", @@ -176,10 +167,10 @@ repo_link: "https://github.com/potatoeggy/jeopardy", demo_link: "https://jeopardy.eggworld.me/host", tasks: ( - [Developed a beautiful and polished client/server 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*], + [Developed a beautiful and polished client/server game with *real-time + multiplayer* in *Vue* and *WebSockets*], + [Designed a *custom JSON protocol* over *WebSockets* to synchronise game state + and handle buzzer events], ), ) diff --git a/lib/lib.typ b/lib/lib.typ index 225caca..06baefb 100644 --- a/lib/lib.typ +++ b/lib/lib.typ @@ -25,7 +25,7 @@ #let JOB_TITLE_FONT_SIZE = 1.05em // rest = not top -#let PAGE_MARGINS = (right: 0.5in, top: 0.4in, left: 0.4in, bottom: 0.5in) +#let PAGE_MARGINS = (right: 0.5in, top: 0.3in, left: 0.4in, bottom: 0.4in) // Format locations. #let format_location(location) = {