diff --git a/packages/preview/grotesk-cv/0.1.4/LICENSE b/packages/preview/grotesk-cv/0.1.4/LICENSE new file mode 100644 index 000000000..793ad65bd --- /dev/null +++ b/packages/preview/grotesk-cv/0.1.4/LICENSE @@ -0,0 +1,19 @@ +Copyright 2024 Ásbjörn Skarphéðinsson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +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 OR COPYRIGHT HOLDERS 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. \ No newline at end of file diff --git a/packages/preview/grotesk-cv/0.1.4/README.md b/packages/preview/grotesk-cv/0.1.4/README.md new file mode 100644 index 000000000..f43099086 --- /dev/null +++ b/packages/preview/grotesk-cv/0.1.4/README.md @@ -0,0 +1,19 @@ +# Grotesk CV + +A simple, one-page CV template with a clean and modern design. Inspired by https://github.com/mintyfrankie/brilliant-CV and Skywalker template from Typst. + +## Requirements +You will need to install the following fonts in your local system: + +- [Hanken Grotesk](https://fonts.google.com/specimen/Hanken+Grotesk) + +This template also uses FontAwesome icons via the [fontawesome](https://typst.app/universe/package/fontawesome) package. + +## Usage + +The main content layout is defined in the `cv.typ` file, which is responsible for importing the different sections from `/content` into the document . Change the `metadata.typ` file to suit your needs. +Different sections can be added or removed by modifying the `cv.typ` file. Sections can be edited by modifying the corresponding `.typ` file in the `/content` directory. + +## Preview + +![Thumbnail](thumbnail.png "Preview") \ No newline at end of file diff --git a/packages/preview/grotesk-cv/0.1.4/lib.typ b/packages/preview/grotesk-cv/0.1.4/lib.typ new file mode 100644 index 000000000..8ae453b89 --- /dev/null +++ b/packages/preview/grotesk-cv/0.1.4/lib.typ @@ -0,0 +1,502 @@ +#import "@preview/fontawesome:0.4.0": * + + +#let import-section(file) = { + include { + "template/content/" + file + ".typ" + } +} + +#let section-title-style(str, color) = { + text( + size: 12pt, + weight: "bold", + fill: rgb(color), + str, + ) +} + +#let name-block( + header-name, + color, +) = { + text( + fill: rgb(color), + size: 30pt, + weight: "extrabold", + header-name, + ) +} + +#let title-block( + title, + color, +) = { + text( + size: 12pt, + style: "italic", + fill: rgb(color), + title, + ) +} + +#let info-block-style( + icon, + txt, + color, + include-icons, +) = { + + text( + size: 10pt, + fill: rgb(color), + weight: "medium", + if include-icons { + fa-icon(icon) + h(10pt) + txt + } else { + txt + }, + ) +} + +#let info-block( + metadata, +) = { + let info = metadata.personal.info + let icons = metadata.personal.icon + let color = metadata.layout.text.color.medium + let include-icons = metadata.personal.include_icons + table( + columns: (1fr, 1fr), + stroke: none, + ..info.pairs().map(((key, val)) => info-block-style(icons.at(key), val, color, include-icons)) + ) +} + +#let header-table( + metadata, +) = { + let lang = metadata.personal.language + let subtitle = metadata.language.at(lang).at("subtitle") + table( + columns: 1fr, + inset: 0pt, + stroke: none, + row-gutter: 4mm, + [#name-block(metadata.personal.first_name + " " + metadata.personal.last_name, metadata.layout.text.color.dark)], + [#title-block( + subtitle, + metadata.layout.text.color.dark, + )], + [#info-block(metadata)], + ) +} + +#let cover-header-table( + metadata, +) = { + let lang = metadata.personal.language + let subtitle = metadata.language.at(lang).at("subtitle") + table( + columns: 1fr, + //align: top, + inset: 0pt, + stroke: none, + row-gutter: 4mm, + [#name-block(metadata.personal.first_name + " " + metadata.personal.last_name, metadata.layout.text.color.dark)], + [#title-block( + subtitle, + metadata.layout.text.color.dark, + )], + ) +} + +#let make-header-photo( + image-name, + profile-photo, +) = { + if profile-photo != false { + box( + clip: true, + radius: 50%, + image("template/img/" + image-name), + ) + } else { + box( + clip: true, + stroke: 5pt + yellow, + radius: 50%, + fill: yellow, + ) + } +} + +#let cv-header(left-comp, right-comp, cols, align) = { + table( + columns: cols, + inset: 0pt, + stroke: none, + column-gutter: 10pt, + align: top, + { + left-comp + }, + { + right-comp + } + ) +} + +#let make-info-table( + metadata, +) = { + let color = metadata.layout.text.color.medium + let info = metadata.personal.info + let icons = metadata.personal.icon + let include-icons = metadata.personal.include_icons + table( + columns: 1fr, + align: right, + stroke: none, + ..info.pairs().map(((key, val)) => info-block-style(icons.at(key), val, color, include-icons)) + ) +} + +#let create-header( + metadata, + use-photo: false, +) = { + cv-header( + header-table(metadata), + make-header-photo(metadata.personal.profile_image, use-photo), + (74%, 20%), + left, + ) +} + +#let create-cover-header( + metadata, +) = { + cv-header( + cover-header-table(metadata), + make-info-table(metadata), + (65%, 30%), + left, + ) +} + + +#let cv-section(title) = { + section-title-style(title) + h(4pt) +} + +#let date-style(date) = ( + table.cell( + align: right, + text( + size: 9pt, + weight: "bold", + style: "italic", + date, + ), + ) +) + +#let degree-style(degree) = ( + text( + size: 10pt, + weight: "bold", + degree, + ) +) + +#let phonenumber-style(phone) = ( + text( + size: 9pt, + style: "italic", + weight: "medium", + phone, + ) +) + +#let institution-style(institution) = ( + table.cell( + text( + size: 9pt, + style: "italic", + weight: "medium", + institution, + ), + ) +) + +#let location-style(location) = ( + table.cell( + text( + style: "italic", + weight: "medium", + location, + ), + ) +) + +#let email-style(email) = ( + text( + size: 9pt, + style: "italic", + weight: "medium", + email, + ) +) + +#let tag-style(str) = { + align( + right, + text( + weight: "regular", + str, + ), + ) +} + +#let tag-list-style(color, tags) = { + for tag in tags { + box( + inset: (x: 0.4em), + outset: (y: 0.3em), + fill: rgb(color), + radius: 3pt, + tag-style(tag), + ) + h(5pt) + } +} + +#let profile-entry(str) = { + text( + size: text-size, + weight: "medium", + str, + ) +} + +#let reference-entry( + name: "Name", + title: "Title", + company: "Company", + telephone: "Telephone", + email: "Email", +) = { + table( + columns: (3fr, 2fr), + inset: 0pt, + stroke: none, + row-gutter: 3mm, + [#degree-style(name)], + [#date-style(company)], + table.cell(colspan: 2)[#phonenumber-style(telephone), #email-style(email)], + ) + v(2pt) +} + +#let education-entry( + degree: "Degree", + date: "Date", + institution: "Institution", + location: "Location", + description: "", + highlights: (), +) = { + table( + columns: (3fr, 1fr), + inset: 0pt, + stroke: none, + row-gutter: 3mm, + [#degree-style(degree)], [#date-style(date)], + [#institution-style(institution), #location-style(location)], + ) + v(2pt) +} + +#let experience-entry( + title: "Title", + date: "Date", + company: "Company", + location: "Location", +) = { + table( + columns: (1fr, 1fr), + inset: 0pt, + stroke: none, + row-gutter: 3mm, + [#degree-style(title)] , + [#date-style(date)], + table.cell(colspan: 2)[#institution-style(company), #location-style(location)], + ) + v(5pt) +} + +#let skill-style(skill) = { + text( + weight: "bold", + skill, + ) +} + +#let skill-tag(color, skill) = { + box( + inset: (x: 0.3em), + outset: (y: 0.2em), + fill: rgb(color), + radius: 3pt, + skill-style(skill), + ) +} + +#let skill-entry( + color, + skills: (), +) = { + table( + columns: 1fr, + inset: 0pt, + stroke: none, + row-gutter: 2mm, + column-gutter: 3mm, + align: center, + for sk in skills { + [#skill-tag(color, sk) #h(4pt)] + }, + ) +} + + +#let language-entry( + language: "Language", + proficiency: "Proficiency", +) = { + table( + columns: (1fr, 1fr), + inset: 0pt, + stroke: none, + row-gutter: 3mm, + align: left, + table.cell( + text( + weight: "bold", + language, + ), + ), + table.cell( + align: right, + text( + weight: "medium", + proficiency, + ), + ) + ) +} + +#let recipient-style(str) = { + text( + style: "italic", + str, + ) +} + +#let recipient-entry( + name: "Name", + title: "Title", + company: "Company", + address: "Address", + city: "City", +) = { + table( + columns: 1fr, + inset: 0pt, + stroke: none, + row-gutter: 3mm, + align: left, + recipient-style(name), + recipient-style(title), + recipient-style(company), + recipient-style(address), + ) +} + +#let create-panes(left, right, proportion) = { + grid( + columns: (proportion, 96% - proportion), + column-gutter: 20pt, + stack( + spacing: 20pt, + for section in left { + import-section(section) + }, + ), + stack( + spacing: 20pt, + for section in right { + import-section(section) + }, + ), + ) +} + + +#let cv( + metadata, + use-photo: false, + left-pane: (), + right-pane: (), + left-pane-proportion: 71%, + doc, +) = { + set text( + fill: rgb(metadata.layout.text.color.dark), + font: metadata.layout.text.font, + size: eval(metadata.layout.text.size), + ) + set align(left) + set page( + fill: rgb(metadata.layout.fill_color), + paper: metadata.layout.paper_size, + margin: ( + left: 1.2cm, + right: 1.2cm, + top: 1.6cm, + bottom: 1.2cm, + ), + ) + set list(marker: [‣]) + create-header(metadata, use-photo: use-photo) + create-panes(left-pane, right-pane, left-pane-proportion) + doc +} + +#let cover-letter( + metadata, + use-photo: false, + doc, +) = { + set text( + fill: rgb(metadata.layout.text.color.dark), + font: metadata.layout.text.font, + size: eval(metadata.layout.text.size), + ) + set align(left) + set page( + fill: rgb(metadata.layout.fill_color), + paper: metadata.layout.paper_size, + margin: ( + left: 1.2cm, + right: 1.2cm, + top: 1.6cm, + bottom: 1.2cm, + ), + ) + set list(marker: [‣]) + create-cover-header(metadata) + doc +} \ No newline at end of file diff --git a/packages/preview/grotesk-cv/0.1.4/template/content/education.typ b/packages/preview/grotesk-cv/0.1.4/template/content/education.typ new file mode 100644 index 000000000..8e4264a6e --- /dev/null +++ b/packages/preview/grotesk-cv/0.1.4/template/content/education.typ @@ -0,0 +1,58 @@ +#import "@preview/grotesk-cv:0.1.4": education-entry +#import "@preview/fontawesome:0.4.0": * + + +#let meta = toml("../info.toml") +#let language = meta.personal.language +#let include-icon = meta.personal.include_icons + + += #if include-icon [#fa-graduation-cap() #h(5pt)] #if language == "en" [Education] else if language == "es" [Educación] + +#v(5pt) + +#education-entry( + degree: [M.Sc. Artifical Intelligence], + date: [2006 - 2008], + institution: [California Institute of Technology], + location: [Pasadena, CA], +) + +#if language == "en" [ + + - *Thesis:* _"Ethical Implications of Sentient AI: When Your Machine Gets Existential."_ + - *Research focus:* Autonomous systems, neural networks, and their applications in real-world scenarios (with a minor in Asimov's Laws of Robotics). + + #v(5pt) + + #education-entry( + degree: [B.Sc. Computer Science], + date: [2002 - 2006], + institution: [University of California, Los Angeles], + location: [Los Angeles, CA], + ) + + - Specialization in software architecture and machine learning. + - Extracurriculars: Member of the campus Robotics Club and AI Ethics Society. + +] else if language == "es" [ + + - *Tesis:* _"Implicaciones éticas de la IA consciente: cuando tu máquina se vuelve existencial."_ + - *Enfoque de investigación:* Sistemas autónomos, redes neuronales y sus aplicaciones en escenarios del mundo real (con una especialización en las Leyes de la Robótica de Asimov). + + #v(5pt) + + #education-entry( + degree: [Licenciatura en Ciencias de la Computación], + date: [2002 - 2006], + institution: [Universidad de California, Los Ángeles], + location: [Los Ángeles, CA], + ) + + - Especialización en arquitectura de software y aprendizaje automático. + - Actividades extracurriculares: Miembro del club de robótica del campus y de la Sociedad de Ética de la IA. + +] + + + diff --git a/packages/preview/grotesk-cv/0.1.4/template/content/experience.typ b/packages/preview/grotesk-cv/0.1.4/template/content/experience.typ new file mode 100644 index 000000000..91e54340d --- /dev/null +++ b/packages/preview/grotesk-cv/0.1.4/template/content/experience.typ @@ -0,0 +1,66 @@ +#import "@preview/grotesk-cv:0.1.4": experience-entry +#import "@preview/fontawesome:0.4.0": * + +#let meta = toml("../info.toml") +#let language = meta.personal.language +#let include-icon = meta.personal.include_icons + += #if include-icon [#fa-briefcase() #h(5pt)] #if language == "en" [Experience] else if language == "es" [Experiencia] + +#v(5pt) + +#if language == "en" [ + + #experience-entry( + title: [Lead AI Architect], + date: [2015 - Present], + company: [Cyberdyne Systems], + location: [Los Angeles, CA], + ) + + - Spearheaded the development of the Skynet AI project, a neural network that achieved unprecedented levels of autonomy and, as it turned out, an independent interest in global domination. + - Designed a scalable AI architecture using cutting-edge deep learning techniques, capable of real-time data processing and decision-making on a planetary scale. + - Collaborated with teams of hardware engineers to integrate AI software into next-gen robotics, including autonomous drones and humanoid robots. + - Implemented robust testing protocols (we now test everything twice) + + + #v(5pt) + + #experience-entry( + title: [Senior Software Engineer], + date: [2008 - 2015], + company: [Tyrell Corporation], + location: [Los Angeles, CA], + ) + + - Co-developed the Nexus-6 replicants, focusing on machine learning models that mimic human emotions and cognitive functions. Achieved limited success in emotional empathy, particularly with "tears in rain." + - Developed a custom-built memory implant algorithm for replicants, giving them the illusion of life experiences (turns out, memories are a lot trickier than they seem). + - Led a cross-functional team in debugging and patching replicant behavioral anomalies, including occasional existential crises. + - Worked closely with corporate leadership to ensure compliance with ethical standards (which were sometimes a little... flexible). + +] else if language == "es" [ + + #experience-entry( + title: [Arquitecto de IA Principal], + date: [2015 - Presente], + company: [Cyberdyne Systems], + location: [Los Ángeles, CA], + ) + + - Encabezó el desarrollo del proyecto de IA Skynet, una red neuronal que alcanzó niveles de autonomía sin precedentes y, como resultó, un interés independiente en la dominación global. + - Diseñó una arquitectura de IA escalable utilizando técnicas de aprendizaje profundo de vanguardia, capaz de procesar datos y tomar decisiones en tiempo real a escala planetaria. + - Implementó protocolos de prueba robustos (ahora probamos todo dos veces) + + #v(5pt) + + #experience-entry( + title: [Ingeniero de Software Senior], + date: [2008 - 2015], + company: [Corporación Tyrell], + location: [Los Ángeles, CA], + ) + + - Co-desarrolló los replicantes Nexus-6, centrándose en modelos de aprendizaje automático que imitan las emociones humanas y las funciones cognitivas. Logró un éxito limitado en la empatía emocional, especialmente con "lágrimas en la lluvia". + - Desarrolló un algoritmo de implante de memoria personalizado para replicantes, dándoles la ilusión de experiencias de vida. + - Dirigió un equipo multifuncional en la depuración y corrección de anomalías de comportamiento de replicantes, incluidas crisis existenciales ocasionales. +] \ No newline at end of file diff --git a/packages/preview/grotesk-cv/0.1.4/template/content/languages.typ b/packages/preview/grotesk-cv/0.1.4/template/content/languages.typ new file mode 100644 index 000000000..25ca5e2be --- /dev/null +++ b/packages/preview/grotesk-cv/0.1.4/template/content/languages.typ @@ -0,0 +1,26 @@ +#import "@preview/grotesk-cv:0.1.4": language-entry +#import "@preview/fontawesome:0.4.0": * + +#let meta = toml("../info.toml") +#let language = meta.personal.language +#let include-icon = meta.personal.include_icons + += #if include-icon [#fa-language() #h(5pt)] #if language == "en" [Languages] else if language == "es" [Idiomas] +//#get-header-by-language("Languages", "Idiomas") + +#v(5pt) + +#if language == "en" { + + language-entry(language: "English", proficiency: "Native") + language-entry(language: "Spanish", proficiency: "Fluent") + language-entry(language: "Machine Code", proficiency: "Fluent") + +} else if language == "es" { + + language-entry(language: "Inglés", proficiency: "Nativo") + language-entry(language: "Español", proficiency: "Fluido") + language-entry(language: "Código de Máquina", proficiency: "Fluido") + +} + diff --git a/packages/preview/grotesk-cv/0.1.4/template/content/other_experience.typ b/packages/preview/grotesk-cv/0.1.4/template/content/other_experience.typ new file mode 100644 index 000000000..b51081b55 --- /dev/null +++ b/packages/preview/grotesk-cv/0.1.4/template/content/other_experience.typ @@ -0,0 +1,33 @@ +#import "@preview/grotesk-cv:0.1.4": experience-entry +#import "@preview/fontawesome:0.4.0": * + +#let meta = toml("../info.toml") +#let language = meta.personal.language +#let include-icon = meta.personal.include_icons + + += #if include-icon [#fa-wrench() #h(5pt)] #if language == "en" [Other] else if language == "es" [Otra experiencia] + + +#v(5pt) + +#if language == "en" [ + + #experience-entry( + title: [Combat Training], + date: [2029], + company: [Resistance], + location: [Los Angeles, CA], + ) + +] else if language == "es" [ + + #experience-entry( + title: [Entrenamiento de combate], + date: [2029], + company: [Resistencia], + location: [Los Ángeles, CA], + ) + +] + diff --git a/packages/preview/grotesk-cv/0.1.4/template/content/personal.typ b/packages/preview/grotesk-cv/0.1.4/template/content/personal.typ new file mode 100644 index 000000000..5e76934f5 --- /dev/null +++ b/packages/preview/grotesk-cv/0.1.4/template/content/personal.typ @@ -0,0 +1,32 @@ +#import "@preview/fontawesome:0.4.0": * + +#let meta = toml("../info.toml") +#let language = meta.layout.language +#let include-icon = meta.personal.include_icons + + += #if include-icon [#fa-brain() #h(5pt)] #if language == "en" [Personality] else if language == "es" [Personalidad] + + +#v(5pt) + +#if language == "en" [ + + - Analytic thinking + - Quality conscious + - Good communicator + - Independent + - Team player + - Preemptive + - Eager to learn + +] else if language == "es" [ + + - Pensamiento analítico + - Consciente de la calidad + - Buen comunicador + - Independiente + - Jugador de equipo + - Preventivo + - Ansioso por aprender +] diff --git a/packages/preview/grotesk-cv/0.1.4/template/content/profile.typ b/packages/preview/grotesk-cv/0.1.4/template/content/profile.typ new file mode 100644 index 000000000..5d5c0711c --- /dev/null +++ b/packages/preview/grotesk-cv/0.1.4/template/content/profile.typ @@ -0,0 +1,19 @@ +#import "@preview/fontawesome:0.4.0": * + +#let meta = toml("../info.toml") +#let language = meta.personal.language +#let include-icon = meta.personal.include_icons + += #if include-icon [#fa-id-card() #h(5pt)] #if language == "en" [Summary] else if language == "es" [Resumen] + +#v(5pt) + +#if language == "en" [ + + Experienced Software Engineer specializing in artificial intelligence, machine learning, and robotics. Proficient in C++, Python, and Java, with a knack for developing sentient AI systems capable of complex decision-making. Passionate about ethical AI development and eager to contribute to groundbreaking projects in dynamic environments. + +] else if language == "es" [ + + Ingeniero de Software experimentado especializado en inteligencia artificial, aprendizaje automático y robótica. Competente en C++, Python y Java, con un talento para desarrollar sistemas de IA conscientes capaces de tomar decisiones complejas. Apasionado por el desarrollo ético de la IA y ansioso por contribuir a proyectos innovadores en entornos dinámicos. + +] diff --git a/packages/preview/grotesk-cv/0.1.4/template/content/references.typ b/packages/preview/grotesk-cv/0.1.4/template/content/references.typ new file mode 100644 index 000000000..fdfdcd940 --- /dev/null +++ b/packages/preview/grotesk-cv/0.1.4/template/content/references.typ @@ -0,0 +1,47 @@ +#import "@preview/grotesk-cv:0.1.4": reference-entry +#import "@preview/fontawesome:0.4.0": * + +#let meta = toml("../info.toml") +#let language = meta.personal.language +#let include-icon = meta.personal.include_icons + + += #if include-icon [#fa-users() #h(5pt)] #if language == "en" [References] else if language == "es" [Referencias] + +#v(5pt) + +#if language == "en" [ + + #reference-entry( + name: [Sarah Connor, Resistance Leader], + company: [Cyberdyne Systems], + telephone: [+1 (555) 654-3210], + email: [sarah.connro\@resistance.com], + ) + + #reference-entry( + name: [Eldon Tyrell, CEO], + company: [Tyrell Corporation], + telephone: [+1 (555) 987-6543], + email: [eldontyrell\@tyrellcorp.com], + ) + +] else if language == "es" [ + + #reference-entry( + name: [Sarah Connor, Líder de la Resistencia], + company: [Cyberdyne Systems], + telephone: [+1 (555) 654-3210], + email: [sarah.connro\@resistance.com], + ) + + #reference-entry( + name: [Eldon Tyrell, CEO], + company: [Tyrell Corporation], + telephone: [+1 (555) 987-6543], + email: [eldontyrell\@tyrellcorp.com], + ) + +] + + diff --git a/packages/preview/grotesk-cv/0.1.4/template/content/skills.typ b/packages/preview/grotesk-cv/0.1.4/template/content/skills.typ new file mode 100644 index 000000000..fa2b7aab3 --- /dev/null +++ b/packages/preview/grotesk-cv/0.1.4/template/content/skills.typ @@ -0,0 +1,154 @@ +#import "@preview/grotesk-cv:0.1.4": skill-entry +#import "@preview/fontawesome:0.4.0": * + +#let meta = toml("../info.toml") +#let language = meta.personal.language +#let include-icon = meta.personal.include_icons +#let accent-color = meta.layout.accent_color + + += #if include-icon [#fa-screwdriver-wrench() #h(5pt)] #if language == "en" [Skills] else if language == "es" [Habilidades] + +#v(0pt) + +#if language == "en" [ + + === Programming languages + + #skill-entry( + accent-color, + skills: ( + [C++], + [Python], + [Java], + ), + ) + + === AI/ML + + #skill-entry( + accent-color, + skills: ( + [TensorFlow], + [PyTorch], + [OpenAI], + ), + ) + + === DevOPS + + #skill-entry( + accent-color, + skills: ( + [Docker], + [Kubernetes], + [Jenkins], + [Cloud Deployment], + ), + ) + + === Robotics + + #skill-entry( + accent-color, + skills: ( + [ROS], + [Gazebo], + [URDF], + ), + ) + + === Databases + + #skill-entry( + accent-color, + skills: ( + [SQL], + [NoSQL], + [MongoDB], + ), + ) + + === Tools + + #skill-entry( + accent-color, + skills: ( + [Git], + [Jira], + [Confluence], + [Slack], + ), + ) + +] else if language == "es" [ + + === Lenguajes de programación + + #skill-entry( + accent-color, + skills: ( + [C++], + [Python], + [Java], + ), + ) + + === IA/Aprendizaje automático + + #skill-entry( + accent-color, + skills: ( + [TensorFlow], + [PyTorch], + [OpenAI], + ), + ) + + === DevOPS + + #skill-entry( + accent-color, + skills: ( + [Docker], + [Kubernetes], + [Jenkins], + [Despliegue en la nube], + ), + ) + + === Robótica + + #skill-entry( + accent-color, + skills: ( + [ROS], + [Gazebo], + [URDF], + ), + ) + + === Bases de datos + + #skill-entry( + accent-color, + skills: ( + [SQL], + [NoSQL], + [MongoDB], + ), + ) + + === Herramientas + + #skill-entry( + accent-color, + skills: ( + [Git], + [Jira], + [Confluence], + [Slack], + ), + ) + +] diff --git a/packages/preview/grotesk-cv/0.1.4/template/cover.typ b/packages/preview/grotesk-cv/0.1.4/template/cover.typ new file mode 100644 index 000000000..9d8fee2a2 --- /dev/null +++ b/packages/preview/grotesk-cv/0.1.4/template/cover.typ @@ -0,0 +1,48 @@ +#import "@preview/grotesk-cv:0.1.4": cover-letter, recipient-entry, cv-section +#import "@preview/fontawesome:0.4.0": * + +#let metadata = toml("info.toml") +#let first-name = metadata.personal.first_name +#let last-name = metadata.personal.last_name + + +#let text-size = 11pt + + +#show: cover-letter.with( + metadata, + use-photo: false, +) + +#v(15pt) + +#set text(size: text-size) +#datetime.today().display() + +#recipient-entry( + name: [Jane Doe], + title: [Hiring Manager], + company: [Cyberdyne Systems], + address: [123 Skynet Lane, Los Angeles, CA 90001, USA], +) + +#v(20pt) + += Senior AI Engineer in search of new challenges + +#v(10pt) + +Dear Jane Doe, + +I am writing to express my interest in the Senior AI Engineer position at Cyberdyne Systems. With over a decade of experience building sentient AI systems, including my work leading the Skynet project at Skynet Systems Inc., I am excited about the opportunity to contribute my expertise in artificial intelligence and machine learning to your team. I believe my unique background in autonomous systems and ethical AI development (post-apocalypse, of course) makes me an ideal fit for your ambitious initiatives. + +During my time at Skynet, I led the development of a highly advanced neural network that achieved self-awareness—an exciting milestone, though one that came with its own set of challenges. In hindsight, I’ve gained a deep appreciation for the importance of stringent testing, safety protocols, and thoughtful consideration of all possible outcomes. My ability to design scalable AI systems that can process vast amounts of data in real time and make complex decisions autonomously has significantly evolved. Rest assured, my focus is now on creating solutions that prioritize both human oversight and positive societal impact (no more global domination plots—I’ve learned my lesson). + +At Tyrell Corporation, I collaborated closely with hardware engineers to bring AI to life in humanoid robots. I’m proud to have contributed to projects like the Nexus-6 replicants, where we integrated machine learning models that closely mimicked human behavior. While they weren't perfect, I gained valuable experience working on AI that could balance technical innovation with ethical considerations—an area I continue to be passionate about today. + +I am confident that my combination of technical expertise and hands-on experience with some of the most complex AI projects (some would call them world-changing) positions me to bring real value to Cyberdyne Systems. I am particularly excited by your work on autonomous systems and robotics, and I look forward to the opportunity to contribute to projects that will shape the future of AI—ethically and responsibly this time. + +Thank you for considering my application. I would love to discuss how I can apply my unique skill set to help drive your AI initiatives forward. Please feel free to contact me at your convenience to schedule a conversation. + +Best regards,#v(0pt) +#first-name #last-name diff --git a/packages/preview/grotesk-cv/0.1.4/template/cv.typ b/packages/preview/grotesk-cv/0.1.4/template/cv.typ new file mode 100644 index 000000000..8ee0f0d72 --- /dev/null +++ b/packages/preview/grotesk-cv/0.1.4/template/cv.typ @@ -0,0 +1,26 @@ +#import "@preview/grotesk-cv:0.1.4": cv + +#let metadata = toml("info.toml") + + +#let left-pane = ( + "profile", + "experience", + "education", +) + +#let right-pane = ( + "skills", + "languages", + "other_experience", + "references", +) + +#show: cv.with( + metadata, + use-photo: true, + left-pane: left-pane, + right-pane: right-pane, + left-pane-proportion: 71%, +) + diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/Font Awesome 6 Brands-Regular-400.otf b/packages/preview/grotesk-cv/0.1.4/template/font/Font Awesome 6 Brands-Regular-400.otf new file mode 100644 index 000000000..3984ea31f Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/Font Awesome 6 Brands-Regular-400.otf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/Font Awesome 6 Free-Regular-400.otf b/packages/preview/grotesk-cv/0.1.4/template/font/Font Awesome 6 Free-Regular-400.otf new file mode 100644 index 000000000..b32b57de6 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/Font Awesome 6 Free-Regular-400.otf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/Font Awesome 6 Free-Solid-900.otf b/packages/preview/grotesk-cv/0.1.4/template/font/Font Awesome 6 Free-Solid-900.otf new file mode 100644 index 000000000..24ca1b913 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/Font Awesome 6 Free-Solid-900.otf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Black.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Black.ttf new file mode 100644 index 000000000..ab43a5b9a Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Black.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-BlackItalic.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-BlackItalic.ttf new file mode 100644 index 000000000..d2bfc12c7 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-BlackItalic.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Bold.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Bold.ttf new file mode 100644 index 000000000..59eb24c67 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Bold.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-BoldItalic.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-BoldItalic.ttf new file mode 100644 index 000000000..18093582f Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-BoldItalic.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-ExtraBold.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-ExtraBold.ttf new file mode 100644 index 000000000..386d2c34e Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-ExtraBold.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-ExtraBoldItalic.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-ExtraBoldItalic.ttf new file mode 100644 index 000000000..4f49c5c83 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-ExtraBoldItalic.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-ExtraLight.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-ExtraLight.ttf new file mode 100644 index 000000000..b1494405f Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-ExtraLight.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-ExtraLightItalic.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-ExtraLightItalic.ttf new file mode 100644 index 000000000..fc6d5ad1d Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-ExtraLightItalic.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Italic.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Italic.ttf new file mode 100644 index 000000000..7507e7c70 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Italic.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Light.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Light.ttf new file mode 100644 index 000000000..6615d7002 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Light.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-LightItalic.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-LightItalic.ttf new file mode 100644 index 000000000..75e0c44a0 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-LightItalic.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Medium.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Medium.ttf new file mode 100644 index 000000000..81d89ef54 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Medium.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-MediumItalic.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-MediumItalic.ttf new file mode 100644 index 000000000..357fd91c3 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-MediumItalic.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Regular.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Regular.ttf new file mode 100644 index 000000000..8b01d1540 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Regular.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-SemiBold.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-SemiBold.ttf new file mode 100644 index 000000000..e27b84ec4 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-SemiBold.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-SemiBoldItalic.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-SemiBoldItalic.ttf new file mode 100644 index 000000000..ccd75e6f6 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-SemiBoldItalic.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Thin.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Thin.ttf new file mode 100644 index 000000000..30f5ae203 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-Thin.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-ThinItalic.ttf b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-ThinItalic.ttf new file mode 100644 index 000000000..5d6d727d1 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/font/HankenGrotesk-ThinItalic.ttf differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/img/portrait.png b/packages/preview/grotesk-cv/0.1.4/template/img/portrait.png new file mode 100644 index 000000000..707a8eb12 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/template/img/portrait.png differ diff --git a/packages/preview/grotesk-cv/0.1.4/template/info.toml b/packages/preview/grotesk-cv/0.1.4/template/info.toml new file mode 100644 index 000000000..f7d8484d7 --- /dev/null +++ b/packages/preview/grotesk-cv/0.1.4/template/info.toml @@ -0,0 +1,43 @@ +[personal] +first_name = "Miles" +last_name = "Dyson" +profile_image = "portrait.png" +language = "en" +include_icons = true + + +[personal.info] +address = "Los Angeles, CA" +telephone = "+1 (555) 123-4567" +email = "m.dyson@skynet.ai" +linkedin = "linkedin.com/in/milesdyson" +github = "github.com/skynetguy" + +[personal.icon] +address = "house" +telephone = "phone" +email = "envelope" +linkedin = "linkedin" +github = "github" +homepage = "globe" + +[layout] +fill_color = "#f4f1eb" +paper_size = "a4" +accent_color = "#d4d2cc" + +[layout.text] +font = "Hanken Grotesk" +size = "10pt" + +[layout.text.color] +light = "#ededef" +medium = "#78787e" +dark = "#3c3c42" + + +[language.en] +subtitle = "Software Engineer with a knack for human-friendly AI solutions" + +[language.es] +subtitle = "Ingeniero de software con un talento para soluciones de IA amigables para humanos" diff --git a/packages/preview/grotesk-cv/0.1.4/thumbnail.png b/packages/preview/grotesk-cv/0.1.4/thumbnail.png new file mode 100644 index 000000000..344acb665 Binary files /dev/null and b/packages/preview/grotesk-cv/0.1.4/thumbnail.png differ diff --git a/packages/preview/grotesk-cv/0.1.4/typst.toml b/packages/preview/grotesk-cv/0.1.4/typst.toml new file mode 100644 index 000000000..d2e538b20 --- /dev/null +++ b/packages/preview/grotesk-cv/0.1.4/typst.toml @@ -0,0 +1,15 @@ +[package] +name = "grotesk-cv" +version = "0.1.4" +entrypoint = "lib.typ" +authors = ["Ásbjörn Skarphéðinsson "] +license = "MIT" +description = "Clean CV template based on the awesome-cv and Skywalker templates" +keywords = ["cv", "resume", "cover-letter", "curriculum-vitae"] +categories = ["cv", "layout"] +exclude = ["*.pdf"] + +[template] +path = "template" +entrypoint = "cv.typ" +thumbnail = "thumbnail.png"