From 486db3f463000d455ab423ae241f77baa857bbb6 Mon Sep 17 00:00:00 2001 From: Urban Prah Date: Wed, 8 Oct 2025 19:02:18 +0200 Subject: First job --- .gitignore | 5 --- Makefile | 10 ++++++ README.md | 2 +- template.pdf | Bin 0 -> 2193 bytes template.typ | 97 ++++++++++++++++++++++++++++++++----------------------- urbanprah_cv.pdf | Bin 63768 -> 64289 bytes urbanprah_cv.typ | 24 +++++++++----- 7 files changed, 84 insertions(+), 54 deletions(-) create mode 100644 Makefile create mode 100644 template.pdf diff --git a/.gitignore b/.gitignore index 70012de..d2de9f8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,2 @@ -*.aux -*.fdb_latexmk -*.fls *.log -*.out -*.synctex.gz .SRCINFO diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b3b0c33 --- /dev/null +++ b/Makefile @@ -0,0 +1,10 @@ +all: clean build + +clean: + rm -f urbanprah_cv.pdf + +build: + typst compile --font-path ./font urbanprah_cv.typ + +watch: + typst watch --font-path ./font urbanprah_cv.typ diff --git a/README.md b/README.md index 8d51dbf..83191ce 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Urban Prah - CV -This repository contains the source to my cv. It's been rewritten in Typst and can be compiled using `typst compile --font-path ./font urbanprah.typ`. For the most part it's a modification of a LaTex template whose authors are credited below. +This repository contains the source to my cv. It's been rewritten in Typst and can be compiled using `make`. For the most part it's a modification of a LaTex template whose authors are credited below. ##### Credits: * jan@vorisek.me diff --git a/template.pdf b/template.pdf new file mode 100644 index 0000000..f66d94a Binary files /dev/null and b/template.pdf differ diff --git a/template.typ b/template.typ index 8bc210d..8f2beee 100644 --- a/template.typ +++ b/template.typ @@ -2,18 +2,23 @@ #let icon_font = "Font Awesome 7 Free Solid" #let icon_size = 10pt +/* Building blocks */ +/********************************************************************/ +/* Font awesome icon */ #let fa(txt, size: 7pt) = text( font: icon_font, size: size, txt, ) +/* Underlined link or content if no url provided */ #let smartlink(url, content) = if url != none { link(url, underline(offset: 1.5pt, content)) } else { content } +/* Inverted box */ #let inv_box(content, size: 10pt, bold: true, capital: true) = box( fill: black, inset: 3pt, @@ -25,13 +30,24 @@ ), ) -#let job(title, location) = stack( +/* Date subtext in experience */ +#let date_tag(tag) = if tag != "" { + v(-0.2em) + text(size: 8pt)[#raw(tag)] +} + + +/* Document parts */ +/********************************************************************/ +/* Active jobs under author name */ +#let active_job(title, location) = stack( dir: ttb, spacing: 0.5em, strong(title), location, ) +/* Icons in top right */ #let iconlink(icon, label) = grid( columns: (auto, auto), column-gutter: 0.5em, @@ -52,17 +68,56 @@ text(size: 9pt, label) ) +/* Labeled percent bar */ #let skillbar(title, percent) = ( // Use array so alignment can be determined in parrent inv_box(title, size: 9pt, bold: false, capital: false), line(length: percent, stroke: 10pt), ) +/* Labeled percent circles */ #let skillbubble(title, percent) = ( circle(fill: black, radius: percent * 2.5em), text(title), ) +/* Experience entry */ +#let experience(date, title, location, description, skills: (), tag: "") = block( + breakable: false, + grid( + columns: (8em, auto), + rows: (auto, auto), + row-gutter: 0.7em, + column-gutter: 1em, + date, + stack( + dir: ltr, + spacing: 1fr, + strong(title), + text(size: 8pt, weight: "bold", location), + ), + date_tag(tag), // + par(justify: true, description), + none, + skills + .map(raw) + .join({ + h(1em) + raw("/") + h(1em) + }), + ), +) + +/* Extra titled paragraphs */ +#let info(title, content) = { + inv_box(title, size: 8pt) + set par(justify: true) + set text(size: 8pt) + content +} + +/* Work field containing experiences, education, etc. */ #let field(name, bubbles: (), experiences: (), education: (), other: ()) = { /* Title */ heading(name) @@ -100,45 +155,7 @@ ) } -#let date_tag(tag) = if tag != "" { - v(-0.2em) - text(size: 8pt, tag) -} - -#let experience(date, title, location, description, skills: (), tag: "") = block( - breakable: false, - grid( - columns: (8em, auto), - rows: (auto, auto), - row-gutter: 0.7em, - column-gutter: 1em, - date, - stack( - dir: ltr, - spacing: 1fr, - strong(title), - text(size: 8pt, weight: "bold", location), - ), - date_tag(tag), // - par(justify: true, description), - none, - skills - .map(raw) - .join({ - h(1em) - raw("/") - h(1em) - }), - ), -) - -#let info(title, content) = { - inv_box(title, size: 8pt) - set par(justify: true) - set text(size: 8pt) - content -} - +/* Main document template */ #let CV( author: "Janez Novak", active_jobs: (), diff --git a/urbanprah_cv.pdf b/urbanprah_cv.pdf index a92ca81..60d3342 100644 Binary files a/urbanprah_cv.pdf and b/urbanprah_cv.pdf differ diff --git a/urbanprah_cv.typ b/urbanprah_cv.typ index 1657ba8..f087243 100644 --- a/urbanprah_cv.typ +++ b/urbanprah_cv.typ @@ -1,4 +1,4 @@ -#import "template.typ": CV, job, iconlink, field, experience, info, skillbar, skillbubble, smartlink, fa +#import "template.typ": CV, active_job, iconlink, field, experience, info, skillbar, skillbubble, smartlink, fa #let URLS = ( gsm: "tel:+38640521816", @@ -36,9 +36,9 @@ #CV( author: "Urban Prah", active_jobs: ( - job( - "Embedded Software Developer", - smartlink(URLS.at("leis"), "Laboratory of Electronic and Information systems, University of Maribor"), + active_job( + "Ground segment software developer", + smartlink(URLS.at("skylabs"), "Skylabs d.o.o"), ), // job("Routesetter and Coach", smartlink(URLS.at("pcsb"), "Plezalni center Slovenska Bistrica")), ), @@ -69,8 +69,15 @@ "Software development", experiences: ( experience( - "2023 - Present", - "Embedded development - " + smartlink(URLS.at("sara"), "SARA"), + "2025 - Present", + tag: "full-time", + "Ground segment software development", + smartlink(URLS.at("skylabs"), "Skylabs d.o.o"), + "Continuing the work on the SARA project in addition to other ground-segment related tasks for TRISAT and other systems.", + ), + experience( + "2023 - 2025", + "Robotic systems development - " + smartlink(URLS.at("sara"), "SARA"), smartlink(URLS.at("skylabs"), "Skylabs d.o.o"), "R&D for an unmanned arachnid-shaped space vehicle based on ROS2. Developing the software responsible for remote control and autonomous locomotion. Work includes simulation, system architecture design, RISC-V embedded firmware implementation, reinforcement learning with PPO, etc.", skills: ( @@ -84,6 +91,7 @@ "Inverse kinematics", "PID", "Gazebo sim", + "CAN", "RISC-V", "Python", "C++", @@ -239,11 +247,11 @@ ), info( fa("") + h(0.5em) + "Other skills", - "Apart from programming I also have intermediate knowledge of creative software for photo and video editing. I am an amateur photographer, can touch type and am an avid Neovim user with an eternal chase for a perfect workflow. Currently using NixOS to set-up a secure interconnected distributed system of personal computers and a VPS for a unified user experience. I have some experience with reverse-engineering and beginner CTF challenges.", + "Apart from programming I also have intermediate knowledge of creative software for photo and video editing. I am an amateur photographer, can touch type and am an avid Neovim user with an eternal chase for the perfect workflow. Currently using NixOS to set-up a secure interconnected distributed system of personal computers and a VPS for a unified user experience. I have some experience with reverse-engineering and beginner CTF challenges. I'm familiar with LaTeX and Typst, the former of which was used to generate this document.", ), info( fa("") + h(0.5em) + "Hobbies", - "In my limited free time I like to tinker with microelectronics and tackle random DIY projects like setting up a Raspberry Pi based home entertainment system, a custom smart watch. I like photography, HiFi audio, reading, open source software and philosophy. I used to also help with the local firefighter team. I always wanted to get better at 3D printing and chess.", + "In my limited free time I like to tinker with microelectronics and tackle random DIY projects like setting up a Raspberry Pi based home entertainment system or a custom smart watch. I like photography, HiFi audio, reading, open source software and philosophy. I also used to help with the local firefighter team. I always wanted to get better at 3D printing and chess.", ), ), ), -- cgit v1.3.1