Skip to content

Commit fadd245

Browse files
clickworthy-resume:1.0.1 (#2736)
1 parent cd84e9e commit fadd245

File tree

11 files changed

+1363
-0
lines changed

11 files changed

+1363
-0
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
MIT License
2+
3+
Copyright (c) 2024 Abdullah Hendy
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is furnished
10+
to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Lines changed: 356 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,356 @@
1+
<div align="center">
2+
3+
# clickworthy-resume
4+
5+
**A simple, flexible, responsive, ATS-friendly, and click-worthy resume. Extra cover letter and extendable to a CV**
6+
</div>
7+
8+
## 🙋‍♂️ Introduction
9+
This **Typst** Resume template allows for writing resumes, CVs, and cover letters fast. The core is borrowed from the [**guided-resume-starter-cgc**](https://github.com/typst/packages/tree/main/packages/preview/guided-resume-starter-cgc/2.0.0) template with extra features, more flexibility, and formatting improvements.
10+
11+
For advice on writing an effective resume, this [small write-up](https://github.com/typst/packages/blob/main/packages/preview/guided-resume-starter-cgc/2.0.0/template/starter.typ) by the [**guided-resume-starter-cgc**](https://github.com/typst/packages/tree/main/packages/preview/guided-resume-starter-cgc/2.0.0) template author is quite helpful.
12+
13+
For advice on writing an effective cover letter, this [guide](https://career.engin.umich.edu/sample-cover-letter/) by [UMich ECRC](https://career.engin.umich.edu/) is quite helpful.
14+
15+
> **NOTE**: See more information on the [**project's main repository**](https://github.com/AbdullahHendy/clickworthy-resume)
16+
17+
## 🏃 Getting Started
18+
### [**Typst Web App**](https://typst.app/)
19+
1. Open the [Typst App](https://typst.app/) on any supported platform
20+
2. In the *Dashboard*, select *Start from template*
21+
3. Search for ***clickworthy-resume*** and select it
22+
4. Name the project and *Create*
23+
5. The default editor will show the `resume.typ` template. To work with the `cv.typ` and `cover-letter.typ` templates, click the *Explore files* from the top left of the view.
24+
6. Edit the desired template and export it to download your version.
25+
26+
27+
### **Local**
28+
1. [Install Typst](https://github.com/typst/typst?tab=readme-ov-file#installation)
29+
2. Create a workspace in the location of choice and run `typst init @preview/clickworthy-resume` to create a template.
30+
3. Edit the desired template, including `resume`, `cv`, or `cover-letter` and run `typst compile <template>.typ` **to generate a pdf** version or see the [**Typst** guide](https://github.com/typst/typst?tab=readme-ov-file#usage) for more options.
31+
> **NOTE**: See more information on the [**project's main repository**](https://github.com/AbdullahHendy/clickworthy-resume)
32+
33+
## 📝 Example Resume
34+
<a href="https://github.com/AbdullahHendy/clickworthy-resume/blob/main/tests/resume/ref/1.png?raw=true" target="_blank">
35+
<picture>
36+
<source media="(prefers-color-scheme: dark)" srcset="https://github.com/AbdullahHendy/clickworthy-resume/blob/main/tests/resume/ref/1.png?raw=true">
37+
<img alt="Example Resume" src="https://github.com/AbdullahHendy/clickworthy-resume/blob/main/tests/resume/ref/1.png?raw=true">
38+
</picture>
39+
</a>
40+
41+
## 📓 Example CV
42+
43+
<div align="center">
44+
<table>
45+
<tr>
46+
<td>
47+
<a href="https://github.com/AbdullahHendy/clickworthy-resume/blob/main/tests/cv/ref/1.png?raw=true" target="_blank">
48+
<picture>
49+
<source media="(prefers-color-scheme: dark)" srcset="https://github.com/AbdullahHendy/clickworthy-resume/blob/main/tests/cv/ref/1.png?raw=true">
50+
<img alt="Example CV-1" src="https://github.com/AbdullahHendy/clickworthy-resume/blob/main/tests/cv/ref/1.png?raw=true">
51+
</picture>
52+
</a>
53+
</td>
54+
<td>
55+
<td>
56+
<a href="https://github.com/AbdullahHendy/clickworthy-resume/blob/main/tests/cv/ref/2.png?raw=true" target="_blank">
57+
<picture>
58+
<source media="(prefers-color-scheme: dark)" srcset="https://github.com/AbdullahHendy/clickworthy-resume/blob/main/tests/cv/ref/2.png?raw=true">
59+
<img alt="Example CV-2" src="https://github.com/AbdullahHendy/clickworthy-resume/blob/main/tests/cv/ref/2.png?raw=true">
60+
</picture>
61+
</a>
62+
</td>
63+
</tr>
64+
</table>
65+
</div>
66+
67+
## ✉️ Example Cover Letter
68+
<a href="https://github.com/AbdullahHendy/clickworthy-resume/blob/main/tests/cover-letter/ref/1.png?raw=true" target="_blank">
69+
<picture>
70+
<source media="(prefers-color-scheme: dark)" srcset="https://github.com/AbdullahHendy/clickworthy-resume/blob/main/tests/cover-letter/ref/1.png?raw=true">
71+
<img alt="Example Cover Letter" src="https://github.com/AbdullahHendy/clickworthy-resume/blob/main/tests/cover-letter/ref/1.png?raw=true">
72+
</picture>
73+
</a>
74+
75+
## ✏️ How to Edit
76+
The provided templates show all functions that the package supports with their respective parameters, the following ***documentation*** is provided for completeness.
77+
78+
**All function parameters are technically optional for better customization**
79+
80+
### **Resume/CV**
81+
**Most functions provide a `hide` flag to make a clean `*.typ` file including all information in one place without having to comment-out unwanted entries for a specific resume version**
82+
83+
#### Resume headers and Configs
84+
The resume is generated using a customizable `resume` function that accepts various parameters for layout, theme, and content. It defines the document’s formatting, header, and professional summary section, followed by the main content body.
85+
86+
##### Parameters
87+
- `author`: Your full name
88+
- `location`: City, state/province, and country
89+
- `contacts`: A list of links or contact info
90+
- `summary`: A short professional summary
91+
- `theme-color`: Accent color for headings (default: `#26428b`)
92+
- `font`: Font family used throughout the resume (default: `"New Computer Modern"`)
93+
- `font-size`: Base font size (default: `11pt`)
94+
- `lang`: Document language (default: `"en"`)
95+
- `margin`: Page margins (default: `(top: 1cm, bottom: 0cm, left: 1cm, right: 1cm)`)
96+
97+
##### Example
98+
```typ
99+
#show: resume.with(
100+
author: "Dr. Alex Morgan",
101+
location: "San Francisco, CA",
102+
contacts: (
103+
[#link("mailto:[email protected]")[#"[email protected]"]],
104+
[#link("https://github.com/alexm-dev")[#"github.com/alexm-dev"]],
105+
[#link("https://linkedin.com/in/alex-morgan")[#"linkedin.com/in/alex-morgan"]],
106+
),
107+
summary: "Senior systems engineer with 20+ years of experience in embedded systems, real-time pipelines, and fault-tolerant platforms. Proven leader in innovation, mentorship, and research-to-production delivery.",
108+
theme-color: rgb("#cc0000"),
109+
font: "New Computer Modern",
110+
font-size: 11pt,
111+
lang: "en",
112+
margin: (
113+
top: 1cm,
114+
bottom: 0cm,
115+
left: 1cm,
116+
right: 1cm,
117+
),
118+
)
119+
```
120+
121+
---
122+
123+
#### Education
124+
The `edu` function formats a single educational entry, including institution name, degrees, GPA, and additional notes. You can list multiple degrees per institution, and control visibility with the `hide` flag.
125+
126+
##### Parameters
127+
- `institution`: The name of the school or university
128+
- `date`: The graduation date or duration
129+
- `degrees`: A list of degree-level and field tuples, e.g. `("BSc", "Computer Science")`
130+
- `gpa`: GPA string
131+
- `location`: City/state/country of institution
132+
- `extra`: Any extra info (e.g. "Thesis with distinction")
133+
- `hide`: Boolean flag to skip rendering this entry (default: `false`)
134+
135+
##### Example
136+
```typ
137+
#show: edu(
138+
institution: "University of California, Berkeley",
139+
date: "2011–2015",
140+
degrees: (
141+
("BSc", "Electrical Engineering & Computer Science"),
142+
("Minor", "Philosophy"),
143+
),
144+
gpa: "3.92",
145+
location: "Berkeley, CA",
146+
extra: "Thesis with distinction",
147+
hide: false,
148+
)
149+
```
150+
151+
---
152+
153+
#### Experience
154+
The `exp` function formats a professional experience entry, showing the role title, organization, date, location, and descriptive bullet points or details. You can control visibility using the `hide` flag.
155+
156+
##### Parameters
157+
- `title`: Job title or role
158+
- `organization`: Company or institution name
159+
- `date`: Time period for the role
160+
- `location`: Location of the job
161+
- `details`: A block or list of content to describe your work
162+
- `hide`: Boolean flag to skip rendering this entry (default: `false`)
163+
164+
##### Example
165+
```typ
166+
#exp(
167+
title: "Embedded Software Engineer",
168+
organization: "MicroNova Inc.",
169+
date: "2001 - 2006",
170+
location: "Austin, TX",
171+
details: [
172+
- Delivered firmware for low-latency DSP filters used in medical and automotive devices.
173+
- Ported real-time schedulers to custom embedded targets using bare-metal C.
174+
],
175+
hide: true,
176+
)
177+
```
178+
179+
---
180+
181+
#### Publication Entry
182+
The `pub` function formats a publication citation entry using a simple yet common style. It supports highlighting a specific author, linking the title via DOI, and adding extra notes. Use the `hide` flag to skip rendering.
183+
> **NOTE**: the style used for publication references appears to be the most widely used format. For more standarized/advanced citation styles see [the Publication List section]()
184+
185+
##### Parameters
186+
- `authors`: A list of author names
187+
- `bold-author`: One name to emphasize in bold
188+
- `title`: Title of the publication
189+
- `venue`: Conference, journal, or publisher name
190+
- `year`: Year of publication
191+
- `doi-link`: DOI string without the https:// prefix (e.g. `"doi.org/..."`)
192+
- `extra`: Any additional note or status (e.g. "Best Paper Award")
193+
- `hide`: Boolean flag to skip rendering this entry (default: `false`)
194+
195+
##### Example
196+
```typ
197+
#pub(
198+
authors: (
199+
"Alex Morgan",
200+
"Jordan Michaels",
201+
"Taylor Chen",
202+
),
203+
bold-author: "Jordan Michaels",
204+
title: "Cross-Domain Feature Alignment in Multilingual Speech Systems",
205+
venue: "ACL",
206+
year: "2023",
207+
doi-link: "doi.org/10.18653/v1/2023.acl-long.123",
208+
extra: "Best Paper Award",
209+
hide: false,
210+
)
211+
```
212+
213+
---
214+
215+
#### Publication List
216+
The `pub-list` function displays a styled list of publications using a `.bib` or `.yml` file.
217+
It uses Typst’s native bibliography rendering engine and supports multiple citation `styles` such as IEEE, APA, and MLA. See the [](https://typst.app/docs/reference/model/bibliography/) for more info about `.bib` or `.yml` bibliography definition files or different available `styles`.
218+
219+
##### Parameters
220+
- `bib`: A reference to `bibliography` function with a path to a `.bib` or `.yml` files (e.g., `bibliography("publications.bib")`)
221+
- `style` (optional): Citation formatting style. Accepts styles like `"ieee"`, `"apa"`, `"mla"`, and more (default: `ieee`)
222+
223+
##### Example
224+
```typ
225+
#pub-list(
226+
bib: bibliography("assets/publications.bib"),
227+
style: "ieee"
228+
)
229+
```
230+
231+
---
232+
233+
#### Skills
234+
The `skills` function displays categorized lists of skills or technologies. Each entry consists of a label (e.g. "Expertise", "Software") and a list of items shown inline and separated by commas. Each category is rendered on its own line.
235+
236+
##### Parameters
237+
- `areas`: A list of tuples, each containing:
238+
- a category label (e.g. "Languages", "Tools")
239+
- a list of individual skills (each as a string or inline element)
240+
241+
##### Example
242+
```typ
243+
#show: skills((
244+
("Expertise", (
245+
[Distributed Systems],
246+
[Embedded Security],
247+
[FPGA Architectures],
248+
[Technical Leadership],
249+
)),
250+
("Software", (
251+
[C/C++],
252+
[Rust],
253+
[SystemVerilog],
254+
[Docker],
255+
[Git],
256+
)),
257+
("Languages", (
258+
[Python],
259+
[C/C++],
260+
[Rust],
261+
[Shell],
262+
)),
263+
))
264+
```
265+
266+
---
267+
268+
#### Multi-page Support
269+
For CVs with more than one page, use `#pagebreak()` where appropriate for page-splitting if the value for `bottom` of the `margin` field in [#show: resume.with()](#resume-headers-and-configs) is too small to make a clean split between items.
270+
271+
##### Example
272+
```typ
273+
#pub(
274+
authors: (
275+
"Jordan Michaels",
276+
"Alex Morgan",
277+
"Taylor Chen",
278+
"Emily Zhang",
279+
),
280+
bold-author: "Jordan Michaels",
281+
title: "Robust Distributed Scheduling in Adversarial Edge Environments",
282+
venue: "ACM MobiCom",
283+
year: "2025",
284+
doi-link: "doi.org/10.1145/9999999.9999999",
285+
extra: "To appear",
286+
)
287+
288+
// Page break for readability
289+
#pagebreak()
290+
291+
#pub(
292+
authors: (
293+
"Taylor Chen",
294+
"Emily Zhang",
295+
"Jordan Michaels",
296+
"Alex Morgan",
297+
),
298+
bold-author: "Jordan Michaels",
299+
title: "Resource-Conscious Model Compression for Embedded Speech Translation",
300+
venue: "NeurIPS",
301+
year: "2024",
302+
doi-link: "doi.org/10.48550/arXiv.2406.00123",
303+
)
304+
```
305+
306+
### **Cover Letter**
307+
#### Resume headers and Configs
308+
The cover letter is generated using a customizable `cover-letter` function that accepts various parameters for layout, and content. It defines the document’s formatting, header, followed by the main content body, then finally it automatically provides a `Sign-Off`.
309+
310+
##### Parameters
311+
- `author`: Your full name
312+
- `location`: City, state/province, and country
313+
- `contacts`: List of links or contact info
314+
- `date`: Date to display in the header (default: today’s date)
315+
- `addressee-name`: Recipient’s full name
316+
- `addressee-institution`: Organization/Company name
317+
- `addressee-address`: Street address
318+
- `addressee-city`: City
319+
- `addressee-state`: State/Province
320+
- `addressee-country`: Country
321+
- `addressee-zip`: Postal code
322+
- `font`: Font family used (default: `"New Computer Modern"`)
323+
- `font-size`: Base font size (default: `11pt`)
324+
- `lang`: Document language (default: `"en"`)
325+
- `margin`: Page margins (default: `(top: 1cm, bottom: 1cm, left: 1cm, right: 1cm)`)
326+
327+
##### Example
328+
```typ
329+
#show: cover-letter.with(
330+
author: "Dr. Alex Morgan",
331+
location: "San Francisco, CA",
332+
contacts: (
333+
[#link("mailto:[email protected]")[#"[email protected]"]],
334+
[#link("https://github.com/alexm-dev")[#"github.com/alexm-dev"]],
335+
[#link("https://linkedin.com/in/alex-morgan")[#"linkedin.com/in/alex-morgan"]],
336+
),
337+
date: datetime.today().display(),
338+
addressee-name: "Dr. Jane Smith",
339+
addressee-institution: "Embedded Innovations Inc.",
340+
addressee-address: "123 Innovation Drive",
341+
addressee-city: "Tech City",
342+
addressee-state: "CA",
343+
addressee-country: "",
344+
addressee-zip: "90210",
345+
font: "New Computer Modern",
346+
font-size: 11pt,
347+
lang: "en",
348+
margin: (
349+
top: 1cm,
350+
bottom: 1cm,
351+
left: 1cm,
352+
right: 1cm,
353+
),
354+
)
355+
```
356+

0 commit comments

Comments
 (0)