1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
|
#import "template.typ": CV, active_job, iconlink, field, experience, info, skillbar, skillbubble, smartlink, fa
#let URLS = (
gsm: "tel:+38640521816",
email: "mailto:him@urbanprah.xyz",
website: "https://urbanprah.xyz",
flapper: "https://flapperclimbing.com",
kanjonfest: "https://www.instagram.com/kanjonfest/?hl=en",
leis: "https://www.leis.um.si",
feri: "https://feri.um.si/en",
skylabs: "https://www.skylabs.si",
feri_cs: "https://cs.feri.um.si",
pcsb: "https://pcsb.si",
sara: "https://www.skylabs.si/sara",
urv: "https://www.urv.cat/en",
aksb: "https://alphut.net",
des: "https://desclimbing.com",
pk6b: "https://pk6b.si",
klajmber: "https://klajmber.si",
dgm: "https://www.druga.si",
avl: "https://www.avl.com",
ksp: "https://ksp.pzs.si",
bachelor: "https://dk.um.si/IzpisGradiva.php?id=82587&lang=eng",
trisat: "https://trisat.um.si/trisat-r.html",
trisat_artice: "https://feri.um.si/novice/trisat-r-majhen-po-tehnologiji-in-velik-po-inovativnosti",
esa_article: "https://www.esa.int/ESA_Multimedia/Images/2023/11/Earth_through_a_2-mm_lens",
blockchain_article: "https://feri.um.si/novice/znani-zmagovalci-tretje-feri-jesenske-sole-razvoja-blockchain-aplikacij-in-decentraliziranih-resitev",
upm_results: "https://tekmovanja.acm.si/?q=rezultati-2019",
upm: "https://tekmovanja.acm.si/?q=upm",
boulder_video: "https://www.instagram.com/reel/C5VWiTDN_-r/",
"8a": "https://www.8a.nu/user/urban-prah",
mooc: "https://en.wikipedia.org/wiki/Massive_open_online_course",
eggplant: "https://www.eggplantsoftware.com",
)
#CV(
author: "Urban Prah",
active_jobs: (
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")),
),
links: (
iconlink("", "Poljčane"),
iconlink("", smartlink(URLS.at("feri"), "FERI")),
iconlink("", smartlink(URLS.at("gsm"), "+386 40 521 816")),
iconlink("", smartlink(URLS.at("email"), "him@urbanprah.xyz")),
iconlink("", smartlink(URLS.at("website"), "urbanprah.xyz")),
iconlink("", smartlink(URLS.at("8a"), "8a.nu")),
// iconlink("", smartlink("", "git.urbanprah.xyz")),
// iconlink("", smartlink("", "blog.urbanprah.xyz")),
),
about: "Master’s degree candidate at the University of Maribor with a strong focus on precision, organization, and methodical problem-solving. Committed to clean, efficient, and modular work, with a preference for minimalism in both programming and broader workflows. Comfortable in collaborative environments and often take initiative in leadership roles when opportunities arise. Outside of academics, actively involved in sport climbing—initially as a personal pursuit, now expanded to include coaching and routesetting.",
skills: (
skillbar("C/C++", 80%),
skillbar("Python", 90%),
skillbar("Linux", 95%),
skillbar("Docker", 70%),
skillbar("FreeRTOS", 60%),
skillbar("ROS 2", 45%),
skillbar("Yocto", 30%),
skillbar("Java", 40%),
skillbar("AI", 60%),
),
fields: (
field(
"Software development",
experiences: (
experience(
"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: (
"ROS2",
"Yocto",
"IsaacSim",
"IsaacLab",
"PPO",
"RL",
"pinocciho",
"Inverse kinematics",
"PID",
"Gazebo sim",
"CAN",
"RISC-V",
"Python",
"C++",
),
),
experience(
"2021 - 2022",
"Embedded development - " + smartlink(URLS.at("trisat"), "TRISAT-R"),
smartlink(URLS.at("leis"), "LEIS"),
"Writing and testing firmware for the ADCS and OBC subsystems. Processing on-board sensor data (gyroscopes, sun sensors, magnetometer, GPS) to perform satellite detumbling and reorientation using its magentorquer actuators. Implementing image capture, logging and task scheduling functionality. "
+ smartlink(
URLS.at("trisat_artice"),
"Article",
)
+ ".",
skills: (
"FreeRTOS",
"C",
"Python",
"CAN",
"UART",
"SPI",
),
),
experience(
"2020 - 2021",
"Java development",
"IntechCORE GmbH",
"Remote work during the pandemic. Project maintenance and refactoring, java-like programming language development. Language self-testing and unit testing.",
skills: (
"ANTLR",
"Java",
"Testing",
"Visitor pattern",
),
),
experience(
"17. 9. - 15. 10. 2019",
tag: "competition",
"Block chain summer school winner",
"FERI",
"Developed a practical solution to a problem of implementing blockchain into a hypothetical "
+ smartlink(URLS.at("mooc"), "MOOC")
+ " service. Product was a multi-platform mobile app that used blockchain tokens to provide an incentive in form of rewards for users to use the company's online services. "
+ smartlink(
URLS.at("blockchain_article"),
"Article",
)
+ ".",
skills: (
"Blockchain",
"MySQL",
"NodeJS",
"REST",
"React native",
),
),
experience(
"2019",
tag: "competition",
smartlink(URLS.at("upm"), "</upm"),
"ACM",
"Finished 21st in the national programming marathon competition with a team two schoolmates. "
+ smartlink(URLS.at("upm_results"), "Results")
+ ".",
skills: ("C++",),
),
experience(
"2018 - 2019",
"Python development",
smartlink(URLS.at("avl"), "AVL List GmbH"),
"Mixed software testing (GUI and unit). Design and implementation of a generic testing tool that reads a given project, recreates it and compares it with the original. Prototyping, creating an OOP model that reflects the project structure, using software's API manipulator functions to simulate a user behavior, error handling, result analysis.",
skills: (
"Python",
"OOP",
"Jira",
"Confluence",
),
),
experience(
"2017 - 2018",
"Software testing",
smartlink(URLS.at("avl"), "AVL List GmbH"),
"Automating unit tests with "
+ smartlink(URLS.at("eggplant"), "Eggplant")
+ " scripts. Test running meta-framework, logging system, model creator utility, automated result reporting (CSV log parser), testing work flow, weekly progress reports, meetings, software prototyping, etc.",
skills: (
"Eggplant",
"Jira",
"Confluence",
),
),
experience(
"2015",
tag: "part-time",
"Documentation maintenance",
smartlink(URLS.at("avl"), "AVL List GmbH"),
"My first work experience. Writing and revising existing documentation for the company's GUI software AVL Boost and AVL Fire.",
skills: (
"Microsoft Word",
),
),
),
education: (
experience(
"2022 - Present",
"Postgraduate studies",
"University of Maribor",
"Continuing studies in the same field, I chose a study module focused on artificial intelligence. This is where I study currently in pursuit of a Master's degree which is a part of my current work on the SARA project, regarding autonomous locomotion based on reinforcement learning.",
),
experience(
"H1 2025",
"Erazmus+ exchange",
smartlink(URLS.at("urv"), "Universitat Rovira i Virgili"),
"Attended a 6 month exchange in Tarragona, Spain where I worked on my thesis and completed a Spanish lesson. I met new people and worked remotely.",
),
experience(
"8. 9. 2022",
"Graduated with a bachelor's degree",
smartlink(URLS.at("feri_cs"), "University of Maribor"),
"Finished undergraduate studies at University of Maribor with a bachelor's thesis titled "
+ smartlink(
URLS.at("bachelor"),
"On-board data capture and compression on TRISAT-R nanosatellite",
)
+ ". About a year later an "
+ smartlink(URLS.at("esa_article"), "image")
+ " of the Earth was successfully captured and transmitted from the satellite.",
),
experience(
"2018 - 2022",
"Undergraduate studies",
smartlink(URLS.at("feri_cs"), "University of Maribor"),
"Took classes in Computer Science and Information Technologies.",
),
experience(
"2014 - 2018",
"Grammar school",
smartlink(URLS.at("dgm"), "II. gimnazija Maribor"),
"Attended II. gimnazija Maribor, built a desktop computer from parts and set up a hackintosh system. I was very busy, participating in many extracurricular activities.",
),
),
other: (
info(
fa("") + h(0.5em) + "Languages",
stack(
dir: ttb,
spacing: 0.5em,
[#strong("Slovenian") - native],
[#strong("English") - C1],
[#strong("Spanish") - A2],
),
),
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 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 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.",
),
),
),
field(
"Climbing",
bubbles: (
skillbubble("Routesetting", 90%),
skillbubble("Instructing beginners", 50%),
skillbubble("Coaching", 70%),
skillbubble("Working with children", 30%),
skillbubble("Outdoors", 100%),
),
experiences: (
experience(
"August 2025",
"Volunteered at " + smartlink(URLS.at("kanjonfest"), "kanjonfest"),
"Jurgovo",
"Helped building an artificial wall for a climbing festival organized by "
+ smartlink(URLS.at("flapper"), "Flapper climbing")
+ ".",
),
experience(
"2024 - 2025",
"Commercial routesetting",
smartlink(URLS.at("pcsb"), "PCSB") + ", " + smartlink(URLS.at("klajmber"), "Klajmber"),
"Introductory and intermediate experience at setting, leading and organization (chief role), setting extremes. "
+ smartlink(URLS.at("boulder_video"), "One of my boulders")
+ ".",
skills: ("Bouldering", "Comp-style", "Creativity", "Safety", "Movement"),
),
experience(
"2022 - 2024",
"Coaching",
smartlink(URLS.at("aksb"), "AKSB"),
"Training a group of teen climbers three times per week at " + smartlink(URLS.at("pcsb"), "PCSB") + ".",
skills: ("Routesetting", "Exercise", "Health", "Pedagogy"),
),
experience(
"2021 - Present",
"Trips",
"Around the world",
"Climbing trips became a core component of my climbing, enabling new experiences in unique environments, meeting new people, aspiring to reach new goals, getting inspired for routesetting, etc. My first was Briançon in 2021, after that many followed, including returning visits to Prilep, Fontainebleau, Magic Wood, Paklenica, Maltatal, Oltre Finale, Arco, Siurana, Margalef, ...",
),
experience(
"4. 4. 2024",
"First 8a route",
"Kotečnik",
"After getting injured on the route I managed to finish it a year later, excited for more 'difficult' rock climbing.",
),
experience(
"Summer 2023",
"Outdoor climbing camps",
smartlink(URLS.at("des"), "DEŠ") + ", " + smartlink(URLS.at("aksb"), "AKSB"),
"Hosted two rock climbing summer camps for children. Three days in Kotečnik and another 5 days in Osp.",
skills: ("Safety", "Lead climbing", "Entertainment", "Camping", "Pedagogy"),
),
experience(
"30. 4. 2023",
"Hardest boulder grade",
"Prilep",
"I experimented with semi-planned specific training for the first time. It paid off. The week before the trip to Prilep I ascended my first 7c in Lukanja, followed by another during the trip.",
),
experience(
"11. 8. 2022",
"First 7c route",
"Boč",
"A proud moment, supported by newly made friends.",
),
experience(
"11. 4. 2022",
"Independent sport climber",
smartlink(URLS.at("pk6b"), "PK6B Ptuj"),
"I briefly joined a club in Ptuj, where I fell in love with the spray wall. During my membership I became recognized as an independent sport climber by KŠP, the same day I climbed my first and second 7b route.",
),
experience(
"11. 4. 2021",
"First 7a route",
"Buncove skale",
"After about a year of climbing and 2 lock-downs due to Covid-19, I manged to climb a short technical route called Yosemite at the local crag. This represented a mental shift, when I realized the sport might evolve into something more than just a hobby.",
),
experience(
"January 2020",
"Started climbing",
smartlink(URLS.at("klajmber"), "Klajmber"),
"I wanted to try something new with a friend. We both quickly became obsessed with the sport, chasing rapid improvement, new techniques, harder climbs, all while having a great time.",
),
),
education: (
experience(
"4. 9. 2023",
tag: "workshop",
"National routesetting workshop",
smartlink(URLS.at("ksp"), "KŠP"),
"Finished a 3-day routesetting workshop about commercial setting for indoor bouldering.",
),
experience(
"10. 4. 2023",
"Certified climbing coach",
smartlink(URLS.at("ksp"), "KŠP"),
"Finished training for VŠP, acquiring theoretical and practical knowledge of teaching movement, training, physical exercise, basics of medicine and anatomy, sport psychology, pedagogy, history of climbing, ethics, rope maneuvers, etc.",
),
),
),
),
)
|