|
| 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 | + |
| 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 | + |
| 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