Compare commits
13 Commits
3e3c23d628
...
v5.0.0
Author | SHA1 | Date | |
---|---|---|---|
|
5b89a39e8e | ||
|
87aa95ad36 | ||
|
4c754d3c91 | ||
|
eb76d5b1a1 | ||
|
f5f6443b90 | ||
|
e01d37cb47 | ||
|
f9f754fc70 | ||
|
c02b90a6f1 | ||
|
ba5bd7050a | ||
|
2b78b26957 | ||
|
d667a4f8ae | ||
|
41fac708b6 | ||
|
b8d11e72f5 |
@@ -5,17 +5,14 @@
|
|||||||
#work_entry(
|
#work_entry(
|
||||||
"University of Waterloo",
|
"University of Waterloo",
|
||||||
"B.A.Sc. in Computer Engineering, Honours — 3.7/4.0 GPA",
|
"B.A.Sc. in Computer Engineering, Honours — 3.7/4.0 GPA",
|
||||||
start_date: "2022",
|
start_date: "Sep 2022",
|
||||||
end_date: "2026",
|
end_date: "Apr 2027",
|
||||||
location: "Waterloo, ON",
|
location: "Waterloo, ON",
|
||||||
tasks: (
|
tasks: (
|
||||||
// [Courses: Object-oriented programming, data structures & algorithms, concurrency,
|
[*Involvements*: UW Orbital Satellite Design Team, Intramurals (Beach
|
||||||
// operating systems],
|
Volleyball), Creative Writing Club (Founder)],
|
||||||
[*Courses*: Object-oriented programming, data structures & algorithms,
|
[*Hackathons*: #link("https://devpost.com/software/poof-3qshno")[TreeHacks 2025],
|
||||||
concurrency, operating systems],
|
StormHacks 2022 (#link("https://devpost.com/software/perdiem")[EdTech Winner]),
|
||||||
[*Involvements*: Hack the North (Organiser), UW Orbital Satellite Design Team,
|
|
||||||
Intramurals (Beach Volleyball)],
|
|
||||||
[*Awards*: StormHacks 2022 (#link("https://devpost.com/software/perdiem")[EdTech Winner]),
|
|
||||||
YRHacks 2022 (#link("https://devpost.com/software/resketch")[IBM Open Source Winner])],
|
YRHacks 2022 (#link("https://devpost.com/software/resketch")[IBM Open Source Winner])],
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
@@ -36,63 +33,111 @@
|
|||||||
|
|
||||||
#indent[
|
#indent[
|
||||||
#work_entry(
|
#work_entry(
|
||||||
|
"Rippling",
|
||||||
|
"Software Engineering Intern (Incoming Winter 2026)",
|
||||||
|
company_link: "https://rippling.com",
|
||||||
|
start_date: "Feb 2026",
|
||||||
|
end_date: "Apr 2026",
|
||||||
|
location: "New York, NY",
|
||||||
|
)
|
||||||
|
#work_entry(
|
||||||
|
"Squint",
|
||||||
|
"Software Engineering Intern",
|
||||||
|
company_link: "https://squint.ai",
|
||||||
|
start_date: "May 2025",
|
||||||
|
end_date: "Aug 2025",
|
||||||
|
location: "San Francisco, CA",
|
||||||
|
tools: "Python, TypeScript, React, Postgres, AWS",
|
||||||
|
tasks: (
|
||||||
|
[Architected *real-time pub/sub notifications framework & pipeline*, enabling
|
||||||
|
*SLA-compliant alerts* for enterprise clients by routing system events to create
|
||||||
|
*300+ daily* downstream notifications],
|
||||||
|
[Engineered *multi-language data models transformer* by parsing and editing
|
||||||
|
*TypeScript & Python ASTs*, enabling *unified type safety* across the entire
|
||||||
|
stack: web, mobile, and backend],
|
||||||
|
[Integrated notifications system with *roles and subscriptions* to deliver
|
||||||
|
targeted email, in-app, or SMS messages],
|
||||||
|
[Built dependency-aware deployment system that performs static analysis on import
|
||||||
|
graphs and code diffs to identify impacted services, *enabling automated partial
|
||||||
|
rollouts* and *cutting deployment latency by 90%*],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
#work_entry(
|
||||||
|
"Hack the North",
|
||||||
|
"Backend & Infrastructure Lead",
|
||||||
|
company_link: "https://hackthenorth.com",
|
||||||
|
start_date: "Mar 2023",
|
||||||
|
end_date: "Jan 2025",
|
||||||
|
location: "Waterloo, ON",
|
||||||
|
tools: "TypeScript, Express, Postgres, Kubernetes",
|
||||||
|
tasks: (
|
||||||
|
[*Led 6-person engineering team* to ship shift scheduling and hardware inventory
|
||||||
|
tools to *1500+ event attendees*],
|
||||||
|
[*Launched bus registration platform* to *1000+ hackers*, featuring live capacity
|
||||||
|
tracking and email confirmations],
|
||||||
|
[Overhauled CI/CD pipelines, *speeding up builds by 35%* by parallelising testing
|
||||||
|
and type checking with Buildkite],
|
||||||
|
[Profiled performance bottlenecks by adding *OpenTelemetry tracing* to Grafana
|
||||||
|
dashboards on *Kubernetes*],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
#work_entry(
|
||||||
|
"Magna (YC W22)",
|
||||||
"Software Engineering Intern",
|
"Software Engineering Intern",
|
||||||
"Magna",
|
|
||||||
company_link: "https://magna.so",
|
company_link: "https://magna.so",
|
||||||
start_date: "Sep 2024",
|
start_date: "Sep 2024",
|
||||||
end_date: "Dec 2024",
|
end_date: "Dec 2024",
|
||||||
location: "New York, NY",
|
location: "New York, NY",
|
||||||
tools: "Rust, TypeScript, Solidity, React, GraphQL",
|
tools: "Rust, TypeScript, Solidity, React, GraphQL",
|
||||||
tasks: (
|
tasks: (
|
||||||
[Shipped dashboard to enable one-click creation and deployment of
|
[Enabled *one-click creation and deployment* of
|
||||||
#link("https://claim.paramgaming.com/")[landing] #link("https://claim.moonray.game/")[pages]
|
#link("https://claim.paramgaming.com/")[claim] #link("https://claim.moonray.game/")[portals],
|
||||||
to distribute customer tokens],
|
scaling to distribute *1M+* digital asset allocations],
|
||||||
[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
|
[Investigated and *improved initial load times by >60%* for client sites by
|
||||||
caching blockchain reads in *Redis*],
|
caching blockchain reads in *Redis*],
|
||||||
[Spearheaded backend refactor to the mediator pattern to decouple business logic
|
[Migrated internal systems & libraries to an event-based architecture, reducing
|
||||||
from the database and server],
|
query boilerplate by *50%*],
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
#work_entry(
|
// #work_entry(
|
||||||
"Backend Lead",
|
// "Data Engineer",
|
||||||
"Hack the North",
|
// "Archive Of Our Own",
|
||||||
company_link: "https://hackthenorth.com",
|
// company_link: "https://www.transformativeworks.org/",
|
||||||
start_date: "Mar 2023",
|
// start_date: "Jan 2024",
|
||||||
end_date: "Oct 2024",
|
// end_date: "Sep 2024",
|
||||||
location: "Waterloo, ON",
|
// location: "Remote",
|
||||||
tools: "TypeScript, Express, Postgres, Kubernetes",
|
// tools: "Python, Ruby, Rails, Docker",
|
||||||
tasks: (
|
// tasks: (
|
||||||
[Led 6-person engineering team, shipping shift scheduling system and hardware
|
// [?? Imported #link(
|
||||||
inventory system to *6000+ users*],
|
// "https://archiveofourown.org/admin_posts/30949",
|
||||||
[Streamlined event check-in times for *1900+* guests by automatically generating
|
// )[*3* now-defunct sites']
|
||||||
Apple Wallet passes over Express],
|
// content databases for #link(
|
||||||
[Overhauled CI/CD pipelines, speeding up builds by *35%* by parallelising testing
|
// "https://archiveofourown.org/admin_posts/31009",
|
||||||
and type checking with *Buildkite*],
|
// )[*8+ million registered users*] by building ETL pipelines],
|
||||||
[Resolved slowdowns by *introducing OpenTelemetry tracing* onto *Grafana*
|
// [Introduced static typing to Python codebase with *mypy* to catch *10+*
|
||||||
dashboards managed in *Kubernetes*],
|
// production bugs and improve maintainability],
|
||||||
),
|
// ),
|
||||||
)
|
// )
|
||||||
|
|
||||||
#work_entry(
|
#work_entry(
|
||||||
|
"Dropbase (YC W20)",
|
||||||
"Software Engineering Intern",
|
"Software Engineering Intern",
|
||||||
"Dropbase",
|
|
||||||
company_link: "https://dropbase.io",
|
company_link: "https://dropbase.io",
|
||||||
start_date: "May 2023",
|
start_date: "May 2023",
|
||||||
end_date: "Aug 2023",
|
end_date: "Aug 2023",
|
||||||
location: "Remote",
|
location: "Remote",
|
||||||
tools: "TypeScript, Python, React, Postgres, AWS",
|
tools: "TypeScript, Python, React, Postgres, AWS",
|
||||||
tasks: (
|
tasks: (
|
||||||
[Shipped *static analysis tool* for platform's *custom SQL dialect* by
|
[*Shipped static analysis tool* for platform's *custom SQL dialect* by
|
||||||
recursively processing an abstract syntax tree],
|
recursively processing an abstract syntax tree],
|
||||||
[Architected platform to clone, sync, and visualise databases for *3000+
|
[Architected platform to clone, sync, and visualise databases for *3000+
|
||||||
enterprise users* in *Python* and *React*],
|
enterprise users* in *Python* and *React*],
|
||||||
[Designed *merge conflict resolution system* to handle data mismatches, reducing
|
[*Designed merge conflict resolution system* to handle data mismatches, reducing
|
||||||
user-reported errors by *35%*],
|
user-reported errors by *20%*],
|
||||||
[Built extensible classes and *abstractions* to unify interfacing with *8 data
|
[Built a unified API to seamlessly query and filter *8 data sources* such as
|
||||||
sources*, such as MySQL and Airtable],
|
MySQL, Airtable, and Stripe],
|
||||||
// [Developed a serverless microservice to asynchronously ingest email attachments
|
// [Developed a serverless microservice to asynchronously ingest email attachments
|
||||||
// directly into ETL pipelines],
|
// directly into ETL pipelines],
|
||||||
// [??? emphasise test driven development or remove line *Reduced request errors by 30%* by creating backend testing infrastructure with
|
// [??? emphasise test driven development or remove line *Reduced request errors by 30%* by creating backend testing infrastructure with
|
||||||
@@ -101,25 +146,25 @@
|
|||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
#work_entry(
|
// #work_entry(
|
||||||
"Software Developer",
|
// "Software Developer Intern",
|
||||||
"Immigr8",
|
// "Immigr8",
|
||||||
company_link: "https://immigr8now.com",
|
// company_link: "https://immigr8now.com",
|
||||||
start_date: "Jan 2024",
|
// start_date: "Jan 2024",
|
||||||
end_date: "Apr 2024",
|
// end_date: "Apr 2024",
|
||||||
location: "Remote",
|
// location: "Remote",
|
||||||
tools: "TypeScript, Spring Boot, React, Postgres, Terraform, AWS",
|
// tools: "TypeScript, Spring Boot, React, Postgres, Terraform, AWS",
|
||||||
tasks: (
|
// tasks: (
|
||||||
[Built and launched passport/private document storage platform for *200+ users*
|
// [Built and launched passport/private document storage platform for *200+ users*
|
||||||
using *Spring Boot* and *React*],
|
// using *Spring Boot* and *React*],
|
||||||
[Secured REST endpoints with *role-based permissions* and *JWTs*; monitored and
|
// [Secured REST endpoints with *role-based permissions* and *JWTs*; monitored and
|
||||||
logged alerts via CloudWatch],
|
// logged alerts via CloudWatch],
|
||||||
[Implemented document *OCR pipeline* with Lambda, Textract, and *S3* to
|
// [Implemented document *OCR pipeline* with Lambda, Textract, and *S3* to
|
||||||
automatically parse and tag uploads],
|
// automatically parse and tag uploads],
|
||||||
[Created parallel *CI/CD system from scratch* with *Terraform* and Jenkins to
|
// [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
|
// deploy *AWS Lambdas* on commit], // BE-infra only, FE ver is admin dashboard
|
||||||
),
|
// ),
|
||||||
)
|
// )
|
||||||
]
|
]
|
||||||
|
|
||||||
= Projects
|
= Projects
|
||||||
@@ -130,8 +175,8 @@
|
|||||||
"Python, Qt",
|
"Python, Qt",
|
||||||
repo_link: "https://github.com/potatoeggy/mandown",
|
repo_link: "https://github.com/potatoeggy/mandown",
|
||||||
tasks: (
|
tasks: (
|
||||||
[Created a CLI and GUI to convert webcomics into e-ink-optimised files with *50+
|
[Created a CLI and GUI to download and convert webcomics into e-ink-optimised
|
||||||
stars* and *7 forks* over *3 years*],
|
files open-source over *3 years*],
|
||||||
[Expanded support for new formats and features
|
[Expanded support for new formats and features
|
||||||
*#link("https://github.com/potatoeggy/mandown/issues/55")[based on]
|
*#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/89")[user]
|
||||||
@@ -168,18 +213,18 @@
|
|||||||
// ),
|
// ),
|
||||||
// )
|
// )
|
||||||
|
|
||||||
#project(
|
// #project(
|
||||||
"Jeopardy!",
|
// "Jeopardy!",
|
||||||
"Vue, TypeScript, WebSockets",
|
// "Vue, TypeScript, WebSockets",
|
||||||
repo_link: "https://github.com/potatoeggy/jeopardy",
|
// repo_link: "https://github.com/potatoeggy/jeopardy",
|
||||||
demo_link: "https://jeopardy.eggworld.me/host",
|
// demo_link: "https://jeopardy.eggworld.me/host",
|
||||||
tasks: (
|
// tasks: (
|
||||||
[Developed a beautiful and polished client/server game with *real-time
|
// [Developed a beautiful and polished client/server game with *real-time
|
||||||
multiplayer* in *Vue* and *WebSockets*],
|
// multiplayer* in *Vue* and *WebSockets*],
|
||||||
[Designed a *custom JSON protocol* over *WebSockets* to synchronise game state
|
// [Designed a *custom JSON protocol* over *WebSockets* to synchronise game state
|
||||||
and handle buzzer events],
|
// and handle buzzer events],
|
||||||
),
|
// ),
|
||||||
)
|
// )
|
||||||
|
|
||||||
// #project(
|
// #project(
|
||||||
// "RecipeReady",
|
// "RecipeReady",
|
||||||
|
@@ -263,7 +263,6 @@
|
|||||||
("dots", "\u{f4ad}"),
|
("dots", "\u{f4ad}"),
|
||||||
("medical", "\u{f7f5}"),
|
("medical", "\u{f7f5}"),
|
||||||
("slash", "\u{f4b3}"),
|
("slash", "\u{f4b3}"),
|
||||||
("plural.", "\u{f086}"),
|
|
||||||
("plural.dollar", "\u{f653}"),
|
("plural.dollar", "\u{f653}"),
|
||||||
)
|
)
|
||||||
#let compact-disc = symbol("\u{f51f}")
|
#let compact-disc = symbol("\u{f51f}")
|
||||||
|
28
lib/lib.typ
28
lib/lib.typ
@@ -25,7 +25,7 @@
|
|||||||
#let JOB_TITLE_FONT_SIZE = 1.05em
|
#let JOB_TITLE_FONT_SIZE = 1.05em
|
||||||
|
|
||||||
// rest = not top
|
// rest = not top
|
||||||
#let PAGE_MARGINS = (right: 0.5in, top: 0.3in, left: 0.4in, bottom: 0.4in)
|
#let PAGE_MARGINS = (right: 0.425in, top: 0.3in, left: 0.375in, bottom: 0.4in)
|
||||||
|
|
||||||
// Format locations.
|
// Format locations.
|
||||||
#let format_location(location) = {
|
#let format_location(location) = {
|
||||||
@@ -51,17 +51,19 @@
|
|||||||
right_content
|
right_content
|
||||||
}),
|
}),
|
||||||
{
|
{
|
||||||
set strong(delta: SMALL_STRONG)
|
block(inset: (right: 0.75em), {
|
||||||
show link: underline
|
set strong(delta: SMALL_STRONG)
|
||||||
list(..details)
|
show link: underline
|
||||||
|
list(..details)
|
||||||
|
})
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Entry for work.
|
// Entry for work.
|
||||||
#let work_entry(
|
#let work_entry(
|
||||||
role,
|
|
||||||
company,
|
company,
|
||||||
|
role,
|
||||||
tools: none,
|
tools: none,
|
||||||
tasks: none,
|
tasks: none,
|
||||||
start_date: none,
|
start_date: none,
|
||||||
@@ -70,7 +72,13 @@
|
|||||||
company_link: none,
|
company_link: none,
|
||||||
) = {
|
) = {
|
||||||
cv_entry(left_content: {
|
cv_entry(left_content: {
|
||||||
text(JOB_TITLE_FONT_SIZE)[*#role*]
|
let company_text = if company_link == none {
|
||||||
|
[#company]
|
||||||
|
} else {
|
||||||
|
[#link(company_link)[#company]]
|
||||||
|
}
|
||||||
|
|
||||||
|
text(JOB_TITLE_FONT_SIZE)[*#company_text*]
|
||||||
|
|
||||||
if tools != none {
|
if tools != none {
|
||||||
// text[ | _ #tools _ ]
|
// text[ | _ #tools _ ]
|
||||||
@@ -79,11 +87,7 @@
|
|||||||
"\n"
|
"\n"
|
||||||
set strong(delta: SMALL_STRONG)
|
set strong(delta: SMALL_STRONG)
|
||||||
|
|
||||||
if company_link == none {
|
[_#role _]
|
||||||
[_#company _]
|
|
||||||
} else {
|
|
||||||
[#link(company_link)[_#company _]]
|
|
||||||
}
|
|
||||||
}, right_content: {
|
}, right_content: {
|
||||||
text(style: "italic")[#start_date -- #end_date]
|
text(style: "italic")[#start_date -- #end_date]
|
||||||
|
|
||||||
@@ -126,7 +130,7 @@
|
|||||||
spacing: DETAILS_LIST_SPACING,
|
spacing: DETAILS_LIST_SPACING,
|
||||||
marker: [*•*],
|
marker: [*•*],
|
||||||
)
|
)
|
||||||
set text(font: (BODY_FONT), BODY_FONT_SIZE)
|
set text(font: (BODY_FONT), hyphenate: true, BODY_FONT_SIZE)
|
||||||
set par(justify: true, leading: BODY_LINE_HEIGHT)
|
set par(justify: true, leading: BODY_LINE_HEIGHT)
|
||||||
set underline(offset: 0.2em)
|
set underline(offset: 0.2em)
|
||||||
align(center)[
|
align(center)[
|
||||||
|
@@ -8,13 +8,13 @@
|
|||||||
#let name = "Daniel Chen"
|
#let name = "Daniel Chen"
|
||||||
|
|
||||||
#let contact_data = ((
|
#let contact_data = ((
|
||||||
service: fa[#envelope],
|
|
||||||
display: "d7chen@uwaterloo.ca",
|
|
||||||
link: "mailto://d7chen@uwaterloo.ca",
|
|
||||||
), (
|
|
||||||
service: fa[#github],
|
service: fa[#github],
|
||||||
display: "potatoeggy",
|
display: "potatoeggy",
|
||||||
link: "https://github.com/potatoeggy",
|
link: "https://github.com/potatoeggy",
|
||||||
|
), (
|
||||||
|
service: fa[#envelope],
|
||||||
|
display: "d7chen@uwaterloo.ca",
|
||||||
|
link: "mailto://d7chen@uwaterloo.ca",
|
||||||
), (
|
), (
|
||||||
service: fa[#linkedin],
|
service: fa[#linkedin],
|
||||||
display: "potatoeggy",
|
display: "potatoeggy",
|
||||||
|
Reference in New Issue
Block a user