Compare commits

...

71 Commits

Author SHA1 Message Date
eggy
33f4f2520c feat: content overhaul 2024-06-17 21:28:48 -04:00
eggy
1984d47151 chore: twitch points 2024-06-14 15:47:16 -04:00
eggy
bfca633917 consistent font size 2024-06-13 23:37:18 -04:00
eggy
af0f13008a feat: increase spacing 2024-06-13 23:25:27 -04:00
eggy
d69e958304 feat: shrink spacing 2024-06-13 23:23:34 -04:00
eggy
509bd8963d feat: update style 2024-06-13 23:20:49 -04:00
eggy
3e5be4cf8f feat: eugene style 3 2024-06-13 23:05:13 -04:00
eggy
dd4006d03d feat: eugene style 2 2024-06-13 22:55:40 -04:00
eggy
b92ddd66b2 feat: switch to eugene style 2024-06-13 22:54:05 -04:00
eggy
ec13a4a5b3 feat: bring back extra point 2024-05-26 15:54:26 -04:00
eggy
a150d5de6d chore: move contact out of template 2024-05-26 15:53:40 -04:00
eggy
23fc909827 feat: eugene advice
eugene is the best
2024-05-20 10:54:33 -04:00
eggy
fd0398a22c feat: copy daniel's redis
sorry daniel i need a redis
2024-05-14 02:31:01 -04:00
eggy
bbe961ee20 feat: add ruby/rails 2024-05-14 02:22:51 -04:00
eggy
eabed81b45 fix: consistency with number spacing 2024-05-14 02:20:16 -04:00
eggy
3b70ac13fe feat: finalise web 2 2024-05-14 02:14:35 -04:00
eggy
1fdfe05eea feat: finalise web 2024-05-14 00:58:41 -04:00
eggy
4d7215700a feat: store for now 2024-05-13 20:05:38 -04:00
eggy
b6f14ed712 patch: add prisma skill 2024-04-12 17:30:57 -04:00
eggy
4648e83c55 chore: update release guidelines 2024-04-12 10:47:11 -04:00
f827c87f64 feat: version 3 changes (#2)
- Upgrade new skills
- Add Immigr8
- Remove awards
- Add but hide GBARR
- Shrink old internships

Co-authored-by: eggy <d7chen@uwaterloo.ca>
Reviewed-on: #2
2024-04-12 10:39:19 -04:00
eggy
508307cc43 feat: prep for v3
add immigr8, remove mandown and asvyn, add gbarr
2024-01-08 15:30:44 -05:00
eggy
858d6c9758 feat: unfortunately we now know spring 2023-12-21 14:28:09 -05:00
eggy
23e9324077 feat: andrew and james review 2023-12-13 21:58:12 -05:00
eggy
00659263f9 feat: better margins 2023-12-13 16:24:54 -05:00
eggy
197699e63b feat: orange again 2023-12-13 16:21:23 -05:00
eggy
b8e5b47b0b feat: better points 2023-12-13 16:17:08 -05:00
eggy
45b4a6b7e6 chore: make variables work 2023-12-12 23:19:27 -05:00
eggy
4705415045 feat: make lines include outcomes
I HATE THIS SO MUCH
2023-12-12 23:12:43 -05:00
eggy
c09d0bdc1a Revert "feat: remove awards"
This reverts commit 18ebf61e9b.
2023-12-05 15:11:51 -05:00
eggy
18ebf61e9b feat: remove awards 2023-12-05 12:23:49 -05:00
eggy
8b5a085447 feat: move education to top 2023-12-04 21:53:07 -05:00
eggy
f078060477 feat: better points 2023-12-04 21:10:10 -05:00
eggy
5eadcfe0ba feat: add android 2023-12-04 16:51:43 -05:00
eggy
10889dba25 feat: stronger points 2023-12-04 15:59:17 -05:00
eggy
6bfc3273c0 feat: stronger points 2023-12-04 15:58:57 -05:00
eggy
f0e9e96fe4 feat: add more tools 2023-12-04 14:22:55 -05:00
eggy
baa386a39e feat: better form line 2023-12-04 01:02:06 -05:00
eggy
f9b8dd6b0e feat: add more languages 2023-11-29 23:14:59 -05:00
eggy
d165a1b259 feat: make primoprod sound better 2023-11-28 16:20:35 -05:00
eggy
2cddfcbf6e feat: better dropbase wording 2023-11-28 15:56:37 -05:00
eggy
de8fb56d48 chore: better syntax 2023-11-28 03:06:22 -05:00
eggy
0f0ff6ba1f feat: add kobink
such a scuffed project
2023-11-28 03:05:41 -05:00
eggy
1591bdaba5 chore: move edu to bottom 2023-11-07 12:41:33 -05:00
eggy
7d289c8757 fix: remove (expected) 2023-11-07 12:41:19 -05:00
eggy
2d4d0dd6d4 chore: remove comment 2023-11-07 12:40:54 -05:00
eggy
6e8763b88d feat: add arch server 2023-11-07 12:39:21 -05:00
eggy
08201c3406 feat: adjust text styling 2023-11-06 21:10:59 -05:00
eggy
dd3d479a92 feat: move education to top 2023-10-28 23:11:05 -04:00
eggy
2694b2e9eb feat: fix underline 2023-10-25 21:07:12 -04:00
eggy
d0d224ba04 fix: reorder techyon 2023-10-25 21:01:38 -04:00
eggy
1ab736b2d5 chore: run fmt 2023-10-25 21:00:11 -04:00
eggy
e26e2cbeb2 feat: update mandown text 2023-10-24 12:04:46 -04:00
eggy
250150f9a1 fix: typo 2023-10-24 10:51:47 -04:00
eggy
d380bd6724 fix: bold colons 2023-10-23 23:55:09 -04:00
eggy
987f255a87 chore: refactor 2 2023-10-21 22:36:52 -04:00
eggy
19a5af8798 chore: refactor 2023-10-21 22:27:41 -04:00
eggy
7be19f3b9b feat: make lines more impactful 2023-10-21 22:18:50 -04:00
eggy
dce7a94677 feat: leave location remote for db 2023-10-21 15:12:00 -04:00
eggy
04a01d80bb fix: use basc instead of candidate 2023-10-21 15:07:26 -04:00
247eeb945e Make it orange (#1)
And make it much much prettier!

Co-authored-by: eggy <danielchen04@hotmail.ca>
Reviewed-on: #1
2023-10-21 15:06:08 -04:00
eggy
2bc466a29a feat: more advertising 2023-10-08 13:50:04 -04:00
eggy
37b543affe feat: advertise yourself more 2023-10-08 13:41:40 -04:00
eggy
b1b80349cb feat: add readme 2023-09-21 09:14:29 -04:00
eggy
f900fca1c0 chore: add back js 2023-09-18 14:06:03 -04:00
eggy
6ccf2d2fad chore: improve judging desc 2023-09-18 14:05:18 -04:00
eggy
39c736e9db feat: add judging script 2023-09-18 14:04:18 -04:00
eggy
9b031313b6 feat: mention what hack the borf is 2023-08-09 10:10:38 -04:00
eggy
1134628f06 feat: show uni end date 2023-09-05 14:11:20 -04:00
eggy
575b97fa0c feat: remove redis 2023-08-05 18:43:50 -04:00
eggy
1b0ac8d324 fix: remove mock to not imply non-interactive 2023-07-20 16:12:55 -04:00
4 changed files with 467 additions and 827 deletions

View File

@@ -1,122 +1,220 @@
#import "fontawesome.typ": *
#import "lib.typ": template, education_entry, work_entry, project, indent
#import "fontawesome.typ": fa, globe, github, linkedin, envelope
#import "lib.typ": template, work_entry, project, indent, SMALL_STRONG, DEFAULT_STRONG, render_contact_data
#set page(margin: 1.75in)
#set par(leading: 0.5em, first-line-indent: 1.8em, justify: true)
#show raw: set text(font: "New Computer Modern Mono")
#show par: set block(spacing: 0.55em)
#show heading: set block(above: 2em, below: 1em)
#set list(indent: 1em)
// Change the theme color of the cv.
#let color = black
// orange!!
#let color = blue // rgb("#ff983e")
#let name = "Daniel Chen"
#let contact_data = (
(
service: fa[#globe],
display: "eggworld.me",
link: "https://eggworld.me"
),
(
service: fa[#github],
display: "potatoeggy",
link: "https://github.com/potatoeggy"
),
(
service: fa[#linkedin],
display: "potatoeggy",
link: "https://www.linkedin.com/in/potatoeggy/"
),
(
service: fa[#envelope],
display: "daniel.chen1@uwaterloo.ca",
link: "mailto://daniel.chen1@uwaterloo.ca"
),
)
#let contact_data = ((
service: fa[#globe],
display: "eggworld.me",
link: "https://eggworld.me",
), (
service: fa[#github],
display: "github.com/potatoeggy",
link: "https://github.com/potatoeggy",
), (
service: fa[#linkedin],
display: "linkedin.com/in/potatoeggy",
link: "https://www.linkedin.com/in/potatoeggy/",
), (
service: fa[#envelope],
display: "d7chen@uwaterloo.ca",
link: "mailto://d7chen@uwaterloo.ca",
),)
#show: doc => template(name, contact_data, color, doc)
#show: doc => template(name, color, doc)
#render_contact_data(contact_data)
// MAIN CONTENT STARTS here
= Skills
#indent[
*Languages*: Python, TypeScript/JavaScript, Rust, SQL, C++, Dart, Bash, Java, HTML, CSS \
*Frameworks*: Node.js, Express, React, Next.js, Vue, Flutter, Qt, Prisma, Apollo, Axum, Diesel \
*Tools*: Linux, Git, Docker, PostgreSQL, Redis, Kubernetes, AWS, GCP, OpenTelemetry, GraphQL
*Languages:* Python, TypeScript, JavaScript, SQL, Rust, C++, Java, HTML/CSS \
// Dart, Ruby
*Technologies:* Node.js, React, Vue, Next.js, Spring Boot, Express, Prisma, Axum
\
// Qt, Jest / Pytest, Apollo, Prisma, Rails
*Tools:* Linux, Git, Docker, PostgreSQL, Pytest, Jest, AWS/GCP, Kubernetes,
Terraform // Jenkins, systemd, Jira
]
= Experience
#indent[
#work_entry(
"Software Engineering Intern",
"Dropbase",
start_date: "May 2023", end_date: "Aug 2023",
location: "Remote",
tasks: (
"Designed a type-safe ORM-style query builder to dynamically generate JSON forms based on external data",
"Integrated Airtable and HubSpot APIs with the core product via AWS Lambda to automate data migration",
"Refactored the frontend to use react-hook-form to aggregate and validate user input, improving DX",
"Created a Pytest testing framework to verify core functionality across many different databases"
)
)
// #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(
"Backend Developer",
"Hack the North",
start_date: "Mar 2023", end_date: "present",
location: "Waterloo, ON",
tasks: (
"Integrated OpenTelemetry and Grafana into a Kubernetes cluster to collect traces and improve observability",
"Dynamically generated Apple Wallet URLs over Apollo Server and GraphQL for a registration ticket",
"Increased API reliability with Redis Sentinel to automatically failover to backup Redis instances",
"Slashed dev server reload time by 1500% by pre-transpiling GraphQL resolvers and offloading type-checking"
#work_entry(
"Software Engineering Intern",
"Immigr8",
start_date: "Jan 2024",
end_date: "Apr 2024",
location: "Remote",
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%*],
[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],
[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*],
),
)
#work_entry(
"Software Engineering Intern",
"Dropbase",
start_date: "May 2023",
end_date: "Aug 2023",
location: "Remote",
tools: "React, Python, PostgreSQL, AWS",
tasks: (
[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],
[Designed a conflict resolution algorithm to merge databases, reducing
*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
// *Pytest* to catch regressions and test new features across database engines with
// *90% code coverage*],
),
)
#work_entry(
"Backend Developer",
"Hack the North",
start_date: "Mar 2023",
end_date: "present",
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*],
// [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", "https://github.com/potatoeggy/mandown", "Python, Qt")
- Created a real-time site scraper for metadata and images to automatically download comics
- Abstracted 4 ebook creation libraries into a common comic conversion API for e-ink devices
- Implemented image caching and multiprocessing to increase download and update speeds by 300%
- Minimised regressions between release cycles by writing unit and integration tests with 55% code coverage
#project(
"Mandown 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 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("Kobink", "https://github.com/potatoeggy/kobink", "Rust, Axum, Postgres")
// - ??? something here (reverse engineering)
// - ??? something here (synchronisation and DB, HTTP headers)
#project(
"Kobo Sync Server",
"Rust, Axum",
repo_link: "https://github.com/potatoeggy/kobink",
)
- 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("RecipeReady", "https://github.com/vincentjguo/recipeready-server", "Flutter, Selenium, FastAPI, Android")
- Scraped thousands of websites for recipes to build a database with a robust many-to-many tag system
- Designed a REST API to filter and query recipes along with ingredient pricing from Walmart
// #project(
// "Genshin Rewards 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("\"Pillow\" Water Quality Sensor", "https://github.com/potatoeggy/ece198", "Rust, STM32")
- Created a water quality statistics aggregator and visualiser on an embedded platform in safe Rust
- Engineered an embedded system with an STM32 microcontroller, matrix keypad, and an LCD display
#project(
"Jeopardy!",
"Vue, TypeScript, WebSockets",
repo_link: "https://github.com/potatoeggy/jeopardy",
demo_link: "https://jeopardy.eggworld.me/host",
)
- 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("Primoprod", "https://github.com/potatoeggy/primoprod", "Vue, TypeScript")
- Mocked a video game UI using CSS to create a hyper-realistic, cross-platform game simulator
- Constructed an extensible JSON data schema to concisely simplify adding new game content
// #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
// #project(
// "Game Boy Advance Emulator",
// "Rust, SDL2, Vulkan",
// repo_link: "https://github.com/potatoeggy/gbarr",
// )
// - Implemented a *ARMv7 emulator* for old games to run on modern x86_64 platforms
// with *SDL2* and *Vulkan*
// - WebGPU and WASM for portability, typestate to guarantee everything is always
// valid
]
= Awards
#show link: underline
- Winner of the #link("https://github.com/anyuan-chen/resketch")[EdTech category] at StormHacks 2022 from 350+ participants
- Winner of the #link("https://github.com/anyuan-chen/perdiem")[IBM Open Source category] at YRHacks 2022 from 90+ participants
- 2nd place in the Industry 4.0 2021 engineering analytics competition from 200+ participants
= Education
#indent[
#education_entry("University of Waterloo", "Candidate for B.A.Sc. in Computer Engineering", start_date: "Sep 2022", end_date: "present",
location: "Waterloo, ON", details: (
[Secretary, Creative Writing Club],
))
#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],
// [Extracurriculars: Creative Writing Club, Hack the North, UW Orbital Design Team],
),
)
]

11
README.md Normal file
View File

@@ -0,0 +1,11 @@
# resume
Release guidelines:
- Increment the major version for every work term, e.g., post-2A (WT2) and post-2B (WT3) would be v2.x.x and v3.x.x, respectively.
- Increment the minor version for every major change. These can include:
- Adding a new section
- Adding a new skill
- Adding/removing a new experience or project
- Substantially rewriting lines across multiple experiences or projects
- Increment the patch version for formatting changes or simple tweaks.

File diff suppressed because it is too large Load Diff

197
lib.typ
View File

@@ -1,25 +1,22 @@
#import "fontawesome.typ": github, fa
// Reduce space between paragraphs.
#let par_space = 0.75em
// Reduce space between headings and descriptions.
#let sep_space = par_space + 0.1em
#import "fontawesome.typ": github, fa, link-icon
#let subtitle_space = par_space - 0.2em
#let DEFAULT_STRONG = 300;
#let SMALL_STRONG = 200;
// Format start and end dates.
#let format_date(start_date: none, end_date: none) = {
let date = {
if end_date == none {
start_date
} else if start_date == none {
end_date
} else {
[#start_date -- #end_date]
}
}
#let TITLE_FONT = "New Computer Modern"
#let HEADING_FONT = TITLE_FONT
#let BODY_FONT = "New Computer Modern"
[*#date*]
}
#let BODY_FONT_SIZE = 11.5pt
#let HEADING_FONT_SIZE = 0.95em
#let TITLE_FONT_SIZE = 2em
#let HEADING_LINE_GAP = 3mm
#let BODY_LINE_HEIGHT = 0.65em
#let BODY_LINE_SPACING = 0.75em
// rest = not top
#let PAGE_MARGINS = (right: 0.5in, rest: 0.4in)
// Format locations.
#let format_location(location) = {
@@ -27,10 +24,7 @@
}
#let indent(content) = {
block(
inset: (left: 1em, right: 0.5em),
content
)
block(inset: (left: 0em, right: 0em), content)
}
// General entry that is split into a left and right half (for experience and education).
@@ -38,53 +32,33 @@
stack(
dir: ttb,
spacing: 0.75em,
grid(
columns: (11fr, 6fr),
column-gutter: 1cm,
{
grid(columns: (9fr, 5fr), column-gutter: 1cm, {
set strong(delta: DEFAULT_STRONG)
set align(left)
left_content
},
{
}, {
set strong(delta: SMALL_STRONG)
set align(right)
right_content
}
),
{
set align(left)
details
}
)
}
// Entry for education.
#let education_entry(university, degree, start_date: none, end_date: none, location: none, details: none) = {
let details_list = if details != none {
let list = []
for detail in details {
list += [- #detail]
}
list
} else {
none
}
cv_entry(
left_content: {
text(1.2em)[*#university*] + "\n" + emph[#degree]
}),
{
set align(left)
set strong(delta: SMALL_STRONG)
details
},
right_content: {
format_date(start_date: start_date, end_date: end_date)
if location != none {
"\n" + format_location(location)
}
},
details: details_list
)
}
// Entry for work.
#let work_entry(role, company, tasks: none, start_date: none, end_date: none, location: none) = {
#let work_entry(
role,
company,
tools: none,
tasks: none,
start_date: none,
end_date: none,
location: none,
) = {
let task_list = if tasks != none {
let list = []
for task in tasks {
@@ -94,57 +68,82 @@
} else {
none
}
cv_entry(
left_content: {
text(1.1em)[*#role*] + "\n" + text[#emph[#company]]
},
right_content: {
format_date(start_date: start_date, end_date: end_date)
if location != none {
"\n" + format_location(location)
}
},
details: task_list
)
cv_entry(left_content: {
set par(justify: true)
text[*#company* | _#role _]
}, right_content: {
[#start_date -- #end_date]
// if location != none {
// format_location(location)
// }
}, details: task_list)
}
#let project(title, repo_link, tools) = {
link(repo_link)[#text(1.1em)[*#title* #fa(github)]] + [ | _ #tools _]
#let project(title, tools, repo_link: none, demo_link: 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*]
}
if demo_link != none {
link(demo_link)[ #fa(link-icon) ]
}
if repo_link != none {
link(repo_link)[ #fa(github) ]
}
[ | _ #tools _ ]
}
#let render_contact_data(data) = {
align(center)[
#let elements = for el in data {
(link(el.link)[#{ el.service + " " + el.display }],)
}
#text(1em)[#elements.join(" | ")]
]
}
// Set name and contact data and format headings
#let template(name, contact_data, color, doc) = {
set page(margin: (rest: 0.5in, top: 0.4in), paper: "us-letter")
set list(indent: 1.25em, marker: [])
set text(font: "Latin Modern Sans", 11pt)
set par(justify: true, leading: 0.65em)
#let template(name, color, doc) = {
set page(margin: PAGE_MARGINS, paper: "us-letter")
set list(indent: 0.65em, marker: [])
set text(font: (BODY_FONT), BODY_FONT_SIZE)
set par(leading: BODY_LINE_HEIGHT)
align(center)[
#text(size: 2em)[*#name*]
#text(
size: TITLE_FONT_SIZE,
font: TITLE_FONT,
fill: color,
)[#smallcaps[*#name*]]
#block(above: 0em, below: 1em)
#{
if contact_data != none and contact_data.len() > 0 {
let elements = for el in contact_data {
(link(el.link)[#{el.service + " " + el.display}],)
}
text(1.1em)[#elements.join(" | ")]
}
}
]
show heading.where(level: 1): i => {
set align(left)
set align(left + horizon)
let title = smallcaps(i.body)
set block(above: 1em)
set text(weight: "light", size: 0.9em, fill: color, font: "New Computer Modern")
stack(
dir: ttb,
spacing: 1.5mm,
title,
line(length: 100%, stroke: color + 0.4pt)
let colored_line(header_text) = style(styles => {
let size = measure(header_text, styles)
// 100% - spacing - width of text
line(
length: 100% - HEADING_LINE_GAP - size.width,
stroke: (paint: color, thickness: 2pt, cap: "round"),
)
})
set block(above: 0.9em, below: 0.75em)
set text(size: HEADING_FONT_SIZE, fill: color, font: HEADING_FONT)
stack(
dir: ltr,
spacing: HEADING_LINE_GAP,
title,
box(height: 2pt, fill: color, colored_line(title)),
)
}
doc
}