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