diff --git a/packages/preview/basic-resume/0.2.9/CHANGELOG.md b/packages/preview/basic-resume/0.2.9/CHANGELOG.md new file mode 100644 index 0000000000..467d93c486 --- /dev/null +++ b/packages/preview/basic-resume/0.2.9/CHANGELOG.md @@ -0,0 +1,61 @@ +# Basic Resume Changelog + +## [v0.2.9](hhttps://github.com/stuxf/basic-typst-resume-template/releases/tags/v0.2.9) + +Make `lang` parameter configurable + +## [v0.2.8](hhttps://github.com/stuxf/basic-typst-resume-template/releases/tags/v0.2.8) + +Add `font-size` and `author-font-size` configuration options + +## [v0.2.7](hhttps://github.com/stuxf/basic-typst-resume-template/releases/tags/v0.2.7) + +Embarassing version bump + +## [v0.2.6](hhttps://github.com/stuxf/basic-typst-resume-template/releases/tags/v0.2.6) + +Bump typst version to 0.13.0 and above + +## [v0.2.5](hhttps://github.com/stuxf/basic-typst-resume-template/releases/tags/v0.2.5) + +Bump scienceicon dep to fix #21 + +## [v0.2.4](hhttps://github.com/stuxf/basic-typst-resume-template/releases/tags/v0.2.4) + +Add option for consistent style of dates on upper right of components. + +## [v0.2.3](hhttps://github.com/stuxf/basic-typst-resume-template/releases/tags/v0.2.3) + +User can set posistion of author and personal info. + +## [v0.2.2](hhttps://github.com/stuxf/basic-typst-resume-template/releases/tags/v0.2.2) + +Allow changing of page sizes from us-letter to other sizes, such as A4, for Non-US folks + +## [v0.2.1](hhttps://github.com/stuxf/basic-typst-resume-template/releases/tags/v0.2.1) + +Support orcid as a social link. Also fix contact-item's prefix argument. + +## [v0.2.0](hhttps://github.com/stuxf/basic-typst-resume-template/releases/tags/v0.2.0) + +Modify to work with Typst version 0.12. Also extend projects function to be more robust. + +## [v0.1.4](hhttps://github.com/stuxf/basic-typst-resume-template/releases/tags/v0.1.4) + +Make more resume fields optional (links in projects and certs) + +## [v0.1.3](hhttps://github.com/stuxf/basic-typst-resume-template/releases/tags/v0.1.3) + +Allow for changing of fonts via initial configuration + +## [v0.1.2](hhttps://github.com/stuxf/basic-typst-resume-template/releases/tags/v0.1.2) + +Version bump because I'm stupid🐛 + +## [v0.1.1](hhttps://github.com/stuxf/basic-typst-resume-template/releases/tags/v0.1.1) + +Make resume fields optional + +## [v0.1.0](hhttps://github.com/stuxf/basic-typst-resume-template/releases/tags/v0.1.0) + +Initial Release diff --git a/packages/preview/basic-resume/0.2.9/LICENSE b/packages/preview/basic-resume/0.2.9/LICENSE new file mode 100644 index 0000000000..68a49daad8 --- /dev/null +++ b/packages/preview/basic-resume/0.2.9/LICENSE @@ -0,0 +1,24 @@ +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/packages/preview/basic-resume/0.2.9/README.md b/packages/preview/basic-resume/0.2.9/README.md new file mode 100644 index 0000000000..76e8125f00 --- /dev/null +++ b/packages/preview/basic-resume/0.2.9/README.md @@ -0,0 +1,79 @@ +# Basic Resume + +
Version 0.2.9
+ +This is a template for a simple resume. It is intended to be used as a good starting point for quickly crafting a standard resume that will properly be parsed by ATS systems. Inspiration is taken from [Jake's Resume](https://github.com/jakegut/resume) and [guided-resume-starter-cgc](https://typst.app/universe/package/guided-resume-starter-cgc/). I'm currently a college student and was unable to find a Typst resume template that fit my needs, so I wrote my own. I hope this template can be useful to others as well. + +## Sample Resume + +![example resume](https://raw.githubusercontent.com/stuxf/basic-typst-resume-template/main/example-resume.png) + +## Quick Start + +A barebones resume looks like this, which you can use to get started. + +```typst +#import "@preview/basic-resume:0.2.9": * + +// Put your personal information here, replacing mine +#let name = "Stephen Xu" +#let location = "San Diego, CA" +#let email = "stxu@hmc.edu" +#let github = "github.com/stuxf" +#let linkedin = "linkedin.com/in/stuxf" +#let phone = "+1 (xxx) xxx-xxxx" +#let personal-site = "stuxf.dev" + +#show: resume.with( + author: name, + // All the lines below are optional. + // For example, if you want to to hide your phone number: + // feel free to comment those lines out and they will not show. + location: location, + email: email, + github: github, + linkedin: linkedin, + phone: phone, + personal-site: personal-site, + accent-color: "#26428b", + font: "New Computer Modern", + paper: "us-letter", + author-position: left, + personal-info-position: left, +) + +/* +* Lines that start with == are formatted into section headings +* You can use the specific formatting functions if needed +* The following formatting functions are listed below +* #edu(dates: "", degree: "", gpa: "", institution: "", location: "") +* #work(company: "", dates: "", location: "", title: "") +* #project(dates: "", name: "", role: "", url: "") +* #extracurriculars(activity: "", dates: "") +* There are also the following generic functions that don't apply any formatting +* #generic-two-by-two(top-left: "", top-right: "", bottom-left: "", bottom-right: "") +* #generic-one-by-two(left: "", right: "") +*/ +== Education + +#edu( + institution: "Harvey Mudd College", + location: "Claremont, CA", + dates: dates-helper(start-date: "Aug 2023", end-date: "May 2027"), + degree: "Bachelor's of Science, Computer Science and Mathematics", +) +- Cumulative GPA: 4.0\/4.0 | Dean's List, Harvey S. Mudd Merit Scholarship, National Merit Scholarship +- Relevant Coursework: Data Structures, Program Development, Microprocessors, Abstract Algebra I: Groups and Rings, Linear Algebra, Discrete Mathematics, Multivariable & Single Variable Calculus, Principles and Practice of Comp Sci + +== Work Experience + +#work( + title: "Subatomic Shepherd and Caffeine Connoisseur", + location: "Atomville, CA", + company: "Microscopic Circus, Schrodinger's University", + dates: dates-helper(start-date: "May 2024", end-date: "Present"), +) +- more bullet points go here + +// ... more headers and stuff below +``` diff --git a/packages/preview/basic-resume/0.2.9/src/lib.typ b/packages/preview/basic-resume/0.2.9/src/lib.typ new file mode 100644 index 0000000000..e6127db42f --- /dev/null +++ b/packages/preview/basic-resume/0.2.9/src/lib.typ @@ -0,0 +1,6 @@ +/* +* Package Entrypoint, links only to resume.typ for now +* May add more later if I decide to also add cover letter support +*/ + +#import "./resume.typ": * \ No newline at end of file diff --git a/packages/preview/basic-resume/0.2.9/src/resume.typ b/packages/preview/basic-resume/0.2.9/src/resume.typ new file mode 100644 index 0000000000..21106e9abe --- /dev/null +++ b/packages/preview/basic-resume/0.2.9/src/resume.typ @@ -0,0 +1,233 @@ +#import "@preview/scienceicons:0.1.0": orcid-icon + +#let resume( + author: "", + author-position: left, + personal-info-position: left, + pronouns: "", + location: "", + email: "", + github: "", + linkedin: "", + phone: "", + personal-site: "", + orcid: "", + accent-color: "#000000", + font: "New Computer Modern", + paper: "us-letter", + author-font-size: 20pt, + font-size: 10pt, + lang: "en", + body, +) = { + + // Sets document metadata + set document(author: author, title: author) + + // Document-wide formatting, including font and margins + set text( + // LaTeX style font + font: font, + size: font-size, + lang: lang, + // Disable ligatures so ATS systems do not get confused when parsing fonts. + ligatures: false + ) + + // Reccomended to have 0.5in margin on all sides + set page( + margin: (0.5in), + paper: paper, + ) + + // Link styles + show link: underline + + + // Small caps for section titles + show heading.where(level: 2): it => [ + #pad(top: 0pt, bottom: -10pt, [#smallcaps(it.body)]) + #line(length: 100%, stroke: 1pt) + ] + + // Accent Color Styling + show heading: set text( + fill: rgb(accent-color), + ) + + show link: set text( + fill: rgb(accent-color), + ) + + // Name will be aligned left, bold and big + show heading.where(level: 1): it => [ + #set align(author-position) + #set text( + weight: 700, + size: author-font-size, + ) + #pad(it.body) + ] + + // Level 1 Heading + [= #(author)] + + // Personal Info Helper + let contact-item(value, prefix: "", link-type: "") = { + if value != "" { + if link-type != "" { + link(link-type + value)[#(prefix + value)] + } else { + value + } + } + } + + // Personal Info + pad( + top: 0.25em, + align(personal-info-position)[ + #{ + let items = ( + contact-item(pronouns), + contact-item(phone), + contact-item(location), + contact-item(email, link-type: "mailto:"), + contact-item(github, link-type: "https://"), + contact-item(linkedin, link-type: "https://"), + contact-item(personal-site, link-type: "https://"), + contact-item(orcid, prefix: [#orcid-icon(color: rgb("#AECD54"))orcid.org/], link-type: "https://orcid.org/"), + ) + items.filter(x => x != none).join(" | ") + } + ], + ) + + // Main body. + set par(justify: true) + + body +} + +// Generic two by two component for resume +#let generic-two-by-two( + top-left: "", + top-right: "", + bottom-left: "", + bottom-right: "", +) = { + [ + #top-left #h(1fr) #top-right \ + #bottom-left #h(1fr) #bottom-right + ] +} + +// Generic one by two component for resume +#let generic-one-by-two( + left: "", + right: "", +) = { + [ + #left #h(1fr) #right + ] +} + +// Cannot just use normal --- ligature becuase ligatures are disabled for good reasons +#let dates-helper( + start-date: "", + end-date: "", +) = { + start-date + " " + $dash.em$ + " " + end-date +} + +// Section components below +#let edu( + institution: "", + dates: "", + degree: "", + gpa: "", + location: "", + // Makes dates on upper right like rest of components + consistent: false, +) = { + if consistent { + // edu-constant style (dates top-right, location bottom-right) + generic-two-by-two( + top-left: strong(institution), + top-right: dates, + bottom-left: emph(degree), + bottom-right: emph(location), + ) + } else { + // original edu style (location top-right, dates bottom-right) + generic-two-by-two( + top-left: strong(institution), + top-right: location, + bottom-left: emph(degree), + bottom-right: emph(dates), + ) + } +} + +#let work( + title: "", + dates: "", + company: "", + location: "", +) = { + generic-two-by-two( + top-left: strong(title), + top-right: dates, + bottom-left: company, + bottom-right: emph(location), + ) +} + +#let project( + role: "", + name: "", + url: "", + dates: "", +) = { + generic-one-by-two( + left: { + if role == "" { + [*#name* #if url != "" and dates != "" [ (#link("https://" + url)[#url])]] + } else { + [*#role*, #name #if url != "" and dates != "" [ (#link("https://" + url)[#url])]] + } + }, + right: { + if dates == "" and url != "" { + link("https://" + url)[#url] + } else { + dates + } + }, + ) +} + +#let certificates( + name: "", + issuer: "", + url: "", + date: "", +) = { + [ + *#name*, #issuer + #if url != "" { + [ (#link("https://" + url)[#url])] + } + #h(1fr) #date + ] +} + +#let extracurriculars( + activity: "", + dates: "", +) = { + generic-one-by-two( + left: strong(activity), + right: dates, + ) +} diff --git a/packages/preview/basic-resume/0.2.9/template/main.typ b/packages/preview/basic-resume/0.2.9/template/main.typ new file mode 100644 index 0000000000..dc6054e85c --- /dev/null +++ b/packages/preview/basic-resume/0.2.9/template/main.typ @@ -0,0 +1,140 @@ +#import "@preview/basic-resume:0.2.9": * + +// Put your personal information here, replacing mine +#let name = "Stephen Xu" +#let location = "San Diego, CA" +#let email = "stxu@hmc.edu" +#let github = "github.com/stuxf" +#let linkedin = "linkedin.com/in/stuxf" +#let phone = "+1 (xxx) xxx-xxxx" +#let personal-site = "stuxf.dev" + +#show: resume.with( + author: name, + // All the lines below are optional. + // For example, if you want to to hide your phone number: + // feel free to comment those lines out and they will not show. + location: location, + email: email, + github: github, + linkedin: linkedin, + phone: phone, + personal-site: personal-site, + accent-color: "#26428b", + font: "New Computer Modern", + paper: "us-letter", + author-position: left, + personal-info-position: left, +) + +/* +* Lines that start with == are formatted into section headings +* You can use the specific formatting functions if needed +* The following formatting functions are listed below +* #edu(dates: "", degree: "", gpa: "", institution: "", location: "", consistent: false) +* #work(company: "", dates: "", location: "", title: "") +* #project(dates: "", name: "", role: "", url: "") +* certificates(name: "", issuer: "", url: "", date: "") +* #extracurriculars(activity: "", dates: "") +* There are also the following generic functions that don't apply any formatting +* #generic-two-by-two(top-left: "", top-right: "", bottom-left: "", bottom-right: "") +* #generic-one-by-two(left: "", right: "") +*/ +== Education + +#edu( + institution: "Harvey Mudd College", + location: "Claremont, CA", + dates: dates-helper(start-date: "Aug 2023", end-date: "May 2027"), + degree: "Bachelor's of Science, Computer Science and Mathematics", + + // Uncomment the line below if you want edu formatting to be consistent with everything else + // consistent: true +) +- Cumulative GPA: 4.0\/4.0 | Dean's List, Harvey S. Mudd Merit Scholarship, National Merit Scholarship +- Relevant Coursework: Data Structures, Program Development, Microprocessors, Abstract Algebra I: Groups and Rings, Linear Algebra, Discrete Mathematics, Multivariable & Single Variable Calculus, Principles and Practice of Comp Sci + +== Work Experience + +#work( + title: "Subatomic Shepherd and Caffeine Connoisseur", + location: "Atomville, CA", + company: "Microscopic Circus, Schrodinger's University", + dates: dates-helper(start-date: "May 2024", end-date: "Present"), +) +- Played God with tiny molecules, making them dance to uncover the secrets of the universe +- Convinced high-performance computers to work overtime without unions, reducing simulation time by 50% +- Wowed a room full of nerds with pretty pictures of invisible things and imaginary findings + +#work( + title: "AI Wrangler and Code Ninja", + location: "Silicon Mirage, CA", + company: "Organic Stupidity Startup", + dates: dates-helper(start-date: "Dec 2023", end-date: "Mar 2024"), +) +- Taught robots to predict when (and how much!) humans will empty their wallets at the doctor's office +- Developed HIPAA-compliant digital signatures, because doctors' handwriting wasn't illegible enough already +- Turned spaghetti code into a gourmet dish, making other interns drool with envy + +#work( + title: "Digital Playground Architect", + location: "The Cloud", + company: "Pixels & Profit Interactive", + dates: dates-helper(start-date: "Jun 2020", end-date: "May 2023"), +) +- Scaled user base from 10 to 2000+, accidentally becoming a small wealthy nation in the process +- Crafted Bash scripts so clever they occasionally made other engineers weep with joy +- Automated support responses, reducing human interaction to a level that would make introverts proud +- Built a documentation site that actually got read, breaking the ancient RTFM curse + +#work( + title: "Code Conjurer Intern", + location: "Silicon Suburb, CA", + company: "Bits & Bytes Consulting", + dates: dates-helper(start-date: "Jun 2022", end-date: "Aug 2022"), +) +- Developed a cross-platform mobile app that turned every user into a potential paparazzi +- Led a security overhaul, heroically saving the company from the menace of "password123" + +== Projects + +#project( + name: "Hyperschedule", + // Role is optional + role: "Maintainer", + // Dates is optional + dates: dates-helper(start-date: "Nov 2023", end-date: "Present"), + // URL is also optional + url: "hyperschedule.io", +) +- Maintain open-source scheduler used by 7000+ users at the Claremont Consortium with TypeScript, React and MongoDB + - Manage PR reviews, bug fixes, and coordinate with college for releasing scheduling data and over \$1500 of yearly funding +- Ensure 99.99% uptime during peak loads of 1M daily requests during course registration through redundant servers + +== Extracurricular Activities + +#extracurriculars( + activity: "Capture The Flag Competitions", + dates: dates-helper(start-date: "Jan 2021", end-date: "Present"), +) +- Founder of Les Amateurs (#link("https://amateurs.team")[amateurs.team]), currently ranked \#4 US, \#33 global on CTFTime (2023: \#4 US, \#42 global) +- Organized AmateursCTF 2023 and 2024, with 1000+ teams solving at least one challenge and \$2000+ in cash prizes + - Scaled infrastructure using GCP, Digital Ocean with Kubernetes and Docker; deployed custom software on fly.io +- Qualified for DEFCON CTF 32 and CSAW CTF 2023, two of the most prestigious cybersecurity competitions globally + +// #extracurriculars( +// activity: "Science Olympiad Volunteering", +// dates: "Sep 2023 --- Present" +// ) +// - Volunteer and write tests for tournaments, including LA Regionals and SoCal State \@ Caltech + +// #certificates( +// name: "OSCP", +// issuer: "Offensive Security", +// // url: "", +// date: "Oct 2024", +// ) + +== Skills +- *Programming Languages*: JavaScript, Python, C/C++, HTML/CSS, Java, Bash, R, Flutter, Dart +- *Technologies*: React, Astro, Svelte, Tailwind CSS, Git, UNIX, Docker, Caddy, NGINX, Google Cloud Platform diff --git a/packages/preview/basic-resume/0.2.9/thumbnail.png b/packages/preview/basic-resume/0.2.9/thumbnail.png new file mode 100644 index 0000000000..f6e27dd29e Binary files /dev/null and b/packages/preview/basic-resume/0.2.9/thumbnail.png differ diff --git a/packages/preview/basic-resume/0.2.9/typst.toml b/packages/preview/basic-resume/0.2.9/typst.toml new file mode 100644 index 0000000000..9795f618d1 --- /dev/null +++ b/packages/preview/basic-resume/0.2.9/typst.toml @@ -0,0 +1,25 @@ +# for a description of available keys, see https://github.com/typst/packages/?tab=readme-ov-file#package-format + +[package] +name = "basic-resume" +version = "0.2.9" +entrypoint = "src/lib.typ" +authors = ["Stephen Xu "] +license = "Unlicense" +description = "A simple, standard resume, designed to work well with ATS." +repository = "https://github.com/stuxf/basic-typst-resume-template" +keywords = ["cv", "resume", "ATS"] +categories = ["cv"] +exclude = [ + ".github", + "docs", + "scripts", + "tests", + ".typstignore", + "Justfile", +] + +[template] +path = "template" +entrypoint = "main.typ" +thumbnail = "thumbnail.png"