Update styling

This commit is contained in:
Bastian Gruber 2026-01-20 18:53:54 -04:00
parent 1df95e7ab6
commit 6f9bb23cef
Signed by: gruberb
GPG key ID: 426AF1CBA0530691
8 changed files with 97 additions and 50 deletions

View file

@ -1,4 +1,4 @@
.PHONY: html pdf clean .PHONY: html pdf clean deploy all
html: index.html html: index.html
@ -11,6 +11,24 @@ index.html: resume.tex res.cls resume.cfg style.css
sed -i 's|github.com/gruberb|<a href="https://github.com/gruberb">github.com/gruberb</a>|g' resume.html sed -i 's|github.com/gruberb|<a href="https://github.com/gruberb">github.com/gruberb</a>|g' resume.html
sed -i 's|code.novanexus.ca|<a href="https://code.novanexus.ca">code.novanexus.ca</a>|g' resume.html sed -i 's|code.novanexus.ca|<a href="https://code.novanexus.ca">code.novanexus.ca</a>|g' resume.html
sed -i 's|bastiangruber.ca|<a href="https://bastiangruber.ca">bastiangruber.ca</a>|g' resume.html sed -i 's|bastiangruber.ca|<a href="https://bastiangruber.ca">bastiangruber.ca</a>|g' resume.html
sed -i 's|Mozilla, Remote|<span class="company">Mozilla</span>, Remote|g' resume.html
sed -i 's|Toposware, Remote|<span class="company">Toposware</span>, Remote|g' resume.html
sed -i 's|Centrifuge, Remote|<span class="company">Centrifuge</span>, Remote|g' resume.html
sed -i 's|Manning Publications, Remote|<span class="company">Manning Publications</span>, Remote|g' resume.html
sed -i 's|Twilio Inc., Remote|<span class="company">Twilio Inc.</span>, Remote|g' resume.html
sed -i 's|Kraken Digital Currency Exchange, Remote|<span class="company">Kraken Digital Currency Exchange</span>, Remote|g' resume.html
sed -i 's|Self Employed, Berlin/Toronto|<span class="company">Self Employed</span>, Berlin/Toronto|g' resume.html
sed -i 's|smartB Energy Management GmbH, Berlin|<span class="company">smartB Energy Management GmbH</span>, Berlin|g' resume.html
sed -i 's|blogfoster GmbH, Berlin|<span class="company">blogfoster GmbH</span>, Berlin|g' resume.html
sed -i 's|Dalia Research, Berlin|<span class="company">Dalia Research</span>, Berlin|g' resume.html
sed -i 's|TH Ingolstadt|<span class="company">TH Ingolstadt</span>|g' resume.html
sed -i 's|OSRAM|<span class="company">OSRAM</span>|g' resume.html
sed -i 's|Körber Digital|<span class="company">Körber Digital</span>|g' resume.html
sed -i 's|Avenga|<span class="company">Avenga</span>|g' resume.html
sed -i 's|ERGO Group|<span class="company">ERGO Group</span>|g' resume.html
sed -i 's|GIATA|<span class="company">GIATA</span>|g' resume.html
sed -i 's|PaperHive|<span class="company">PaperHive</span>|g' resume.html
sed -i 's|Glispa|<span class="company">Glispa</span>|g' resume.html
mv resume.html index.html mv resume.html index.html
pdf: resume.pdf pdf: resume.pdf
@ -21,4 +39,8 @@ resume.pdf: resume.tex res.cls
clean: clean:
rm -f index.html resume.aux resume.log resume.dvi resume.html resume.css resume.4ct resume.4tc resume.idv resume.lg resume.tmp resume.xref rm -f index.html resume.aux resume.log resume.dvi resume.html resume.css resume.4ct resume.4tc resume.idv resume.lg resume.tmp resume.xref
all: html pdf deploy: html
mkdir -p ~/CodingIsFun/personal/bastiangruber.ca/src/cv
cp index.html style.css resume.css ~/CodingIsFun/personal/bastiangruber.ca/src/cv/
all: deploy pdf

View file

@ -11,23 +11,24 @@
</tr><tr id='TBL-1-3-' style='vertical-align:baseline;'><td class='td00' id='TBL-1-3-1' style='white-space:nowrap; text-align:left;'>  </td></tr></table> </div> </tr><tr id='TBL-1-3-' style='vertical-align:baseline;'><td class='td00' id='TBL-1-3-1' style='white-space:nowrap; text-align:left;'>  </td></tr></table> </div>
<table class='center-addresses'><tr><td class='first-address'><!-- tex4ht:inline --><div class='tabular'> <table class='tabular' id='TBL-2'><colgroup id='TBL-2-1g'><col id='TBL-2-1' /></colgroup><tr id='TBL-2-1-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-1-1' style='white-space:nowrap; text-align:left;'><span class='cmbx-10'>Professional </span> </td> <table class='center-addresses'><tr><td class='first-address'><!-- tex4ht:inline --><div class='tabular'> <table class='tabular' id='TBL-2'><colgroup id='TBL-2-1g'><col id='TBL-2-1' /></colgroup><tr id='TBL-2-1-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-1-1' style='white-space:nowrap; text-align:left;'><span class='cmbx-10'>Professional </span> </td>
</tr><tr id='TBL-2-2-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-2-1' style='white-space:nowrap; text-align:left;'>LinkedIn: <a href="https://linkedin.com/in/bastiangruber">linkedin.com/in/bastiangruber</a> </td> </tr><tr id='TBL-2-2-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-2-1' style='white-space:nowrap; text-align:left;'>LinkedIn: <a href="https://linkedin.com/in/bastiangruber">linkedin.com/in/bastiangruber</a> </td>
</tr><tr id='TBL-2-3-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-3-1' style='white-space:nowrap; text-align:left;'>Project: <a href="https://rustwebdevelopment.com">rustwebdevelopment.com</a>  </td> </tr><tr id='TBL-2-3-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-3-1' style='white-space:nowrap; text-align:left;'>Book: <a href="https://rustwebdevelopment.com">rustwebdevelopment.com</a>  </td>
</tr><tr id='TBL-2-4-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-4-1' style='white-space:nowrap; text-align:left;'>E-Mail: <a href="mailto:gruberbastian@me.com">gruberbastian@me.com</a>  </td></tr></table> </div></td><td class='second-address'><!-- tex4ht:inline --><div class='tabular'> <table class='tabular' id='TBL-3'><colgroup id='TBL-3-1g'><col id='TBL-3-1' /></colgroup><tr id='TBL-3-1-' style='vertical-align:baseline;'><td class='td00' id='TBL-3-1-1' style='white-space:nowrap; text-align:left;'><span class='cmbx-10'>Code </span> </td> </tr><tr id='TBL-2-4-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-4-1' style='white-space:nowrap; text-align:left;'>E-Mail: <a href="mailto:gruberbastian@me.com">gruberbastian@me.com</a>  </td>
</tr><tr id='TBL-2-5-' style='vertical-align:baseline;'><td class='td00' id='TBL-2-5-1' style='white-space:nowrap; text-align:left;'>Website: <a href="https://bastiangruber.ca">bastiangruber.ca</a>  </td></tr></table> </div></td><td class='second-address'><!-- tex4ht:inline --><div class='tabular'> <table class='tabular' id='TBL-3'><colgroup id='TBL-3-1g'><col id='TBL-3-1' /></colgroup><tr id='TBL-3-1-' style='vertical-align:baseline;'><td class='td00' id='TBL-3-1-1' style='white-space:nowrap; text-align:left;'><span class='cmbx-10'>Code </span> </td>
</tr><tr id='TBL-3-2-' style='vertical-align:baseline;'><td class='td00' id='TBL-3-2-1' style='white-space:nowrap; text-align:left;'>GitHub: <a href="https://github.com/gruberb">github.com/gruberb</a> </td> </tr><tr id='TBL-3-2-' style='vertical-align:baseline;'><td class='td00' id='TBL-3-2-1' style='white-space:nowrap; text-align:left;'>GitHub: <a href="https://github.com/gruberb">github.com/gruberb</a> </td>
</tr><tr id='TBL-3-3-' style='vertical-align:baseline;'><td class='td00' id='TBL-3-3-1' style='white-space:nowrap; text-align:left;'>Code: <a href="https://code.novanexus.ca">code.novanexus.ca</a>  </td></tr><tr id='TBL-3-4-' style='vertical-align:baseline;'><td class='td00' id='TBL-3-4-1' style='white-space:nowrap; text-align:left;'>Website: <a href="https://bastiangruber.ca">bastiangruber.ca</a>  </td> </tr><tr id='TBL-3-3-' style='vertical-align:baseline;'><td class='td00' id='TBL-3-3-1' style='white-space:nowrap; text-align:left;'>Git: <a href="https://code.novanexus.ca">code.novanexus.ca</a>  </td></tr></table> </div></td></tr></table>
</tr></table> </div></td></tr></table>
<h4 class='sectionHead' id='summary'><a id='x1-10000'></a><div class='centerline'> SUMMARY </div></h4><div class='section'> <h4 class='sectionHead' id='summary'><a id='x1-10000'></a><div class='centerline'> SUMMARY </div></h4><div class='section'>
<!-- l. 55 --><p class='noindent'>Staff Software Engineer and published author (”Rust Web Development” - Manning) with 15+ years building <!-- l. 55 --><p class='noindent'>Staff Software Engineer and published author (”Rust Web Development” - Manning) with 15+ years building
scalable backend systems. Currently contributing to Firefox at Mozilla, shipping code to hundreds of millions of scalable backend systems. Currently contributing to Firefox at Mozilla, shipping code to hundreds of millions of
users. Founded Rust&amp;Tell Berlin, the largest Rust meetup globally. users. Founded Rust&amp;Tell Berlin, the largest Rust meetup globally.
</p> </p>
</div><h4 class='sectionHead' id='skills'><a id='x1-20000'></a><div class='centerline'> SKILLS </div></h4><div class='section'> </div><h4 class='sectionHead' id='skills'><a id='x1-20000'></a><div class='centerline'> SKILLS </div></h4><div class='section'>
<!-- l. 68 --><p class='noindent'><span class='cmbx-10'>Languages: </span>Rust, Python, TypeScript, JavaScript, Go <br class='newline' /><span class='cmbx-10'>Frontend: </span>React, Angular, Vue.js <br class='newline' /><span class='cmbx-10'>Backend: </span>Rust (Actix, Warp, Axum), Python (FastAPI), Node.js, Go <br class='newline' /><span class='cmbx-10'>Patterns: </span>REST, GraphQL, gRPC, async Rust, distributed systems (P2P) <br class='newline' /><span class='cmbx-10'>Infrastructure: </span>AWS, Google Cloud, Docker, Kubernetes, CI/CD, Grafana <br class='newline' /><span class='cmbx-10'>Domains: </span>Systems programming, Firefox, FFI, protocol implementation, IoT, blockchain <!-- l. 68 --><p class='noindent'><span class='cmbx-10'>Languages: </span>Rust, Python, TypeScript, JavaScript, Go <br class='newline' /><span class='cmbx-10'>Frontend: </span>React, Angular, Vue.js <br class='newline' /><span class='cmbx-10'>Backend: </span>Rust (Actix, Warp, Axum), Python (FastAPI), Node.js, Go <br class='newline' /><span class='cmbx-10'>Patterns: </span>REST, GraphQL, gRPC, async Rust, distributed systems (P2P) <br class='newline' /><span class='cmbx-10'>Infrastructure: </span>AWS, Google Cloud, Docker, Kubernetes, CI/CD, Grafana <br class='newline' /><span class='cmbx-10'>Domains: </span>Systems Programming, FFI, Distributed Systems, Web Services, Micro Services, IoT, Blockchain,
Firefox
</p> </p>
</div><h4 class='sectionHead' id='professional-experience'><a id='x1-30000'></a><div class='centerline'> PROFESSIONAL EXPERIENCE </div></h4><div class='section'> </div><h4 class='sectionHead' id='professional-experience'><a id='x1-30000'></a><div class='centerline'> PROFESSIONAL EXPERIENCE </div></h4><div class='section'>
<!-- l. 87 --><p class='noindent'><span class='cmsl-10'>Staff Software Engineer - Full-time </span>February 2026 - Now <!-- l. 87 --><p class='noindent'><span class='cmsl-10'>Staff Software Engineer - Full-time </span>February 2026 - Now
<br class='newline' /><span class='cmsl-10'>Senior Software Engineer - Full-time </span>July 2024 - February 2026 <br class='newline' /><span class='cmsl-10'>Senior Software Engineer - Full-time </span>July 2024 - February 2026
<br class='newline' />Mozilla, Remote <br class='newline' />Contributing to Firefox (desktop and mobile) shipped to hundreds of millions of users. All work is open source. <br class='newline' /><span class="company">Mozilla</span>, Remote <br class='newline' />Contributing to Firefox (desktop and mobile) shipped to hundreds of millions of users. All work is open source.
</p> </p>
<ul class='itemize1'> <ul class='itemize1'>
<li class='itemize'>Leading the Image Service project: designing and implementing a cross-team service to provide favicons <li class='itemize'>Leading the Image Service project: designing and implementing a cross-team service to provide favicons
@ -39,8 +40,8 @@ users. Founded Rust&amp;Tell Berlin, the largest Rust meetup globally.
<li class='itemize'>Implemented OHTTP (Oblivious HTTP) support in application-services, enabling privacy-preserving <li class='itemize'>Implemented OHTTP (Oblivious HTTP) support in application-services, enabling privacy-preserving
API requests across Firefox Desktop, Android, and iOS API requests across Firefox Desktop, Android, and iOS
</li> </li>
<li class='itemize'>Building and maintaining the Push notification service for Firefox (async Rust backend handling
<li class='itemize'>Building and maintaining the Push notification service for Firefox (async Rust backend handling
millions of concurrent connections) millions of concurrent connections)
</li> </li>
<li class='itemize'>Contributing directly to Firefox (mozilla-central): shipping Rust and C++ code to Desktop <li class='itemize'>Contributing directly to Firefox (mozilla-central): shipping Rust and C++ code to Desktop
@ -49,7 +50,7 @@ users. Founded Rust&amp;Tell Berlin, the largest Rust meetup globally.
</li> </li>
<li class='itemize'>Creating internal Rust learning resources and leading ”Rusty Fridays” sessions for engineers</li></ul> <li class='itemize'>Creating internal Rust learning resources and leading ”Rusty Fridays” sessions for engineers</li></ul>
<!-- l. 101 --><p class='noindent'><span class='cmsl-10'>Senior Systems Engineer, Team Lead - Full-time </span>April 2023 - June 2024 <!-- l. 101 --><p class='noindent'><span class='cmsl-10'>Senior Systems Engineer, Team Lead - Full-time </span>April 2023 - June 2024
<br class='newline' />Toposware, Remote <br class='newline' />Developing a Peer-to-Peer distributed network, with high throughput and low latency. Part of the core team, <br class='newline' /><span class="company">Toposware</span>, Remote <br class='newline' />Developing a Peer-to-Peer distributed network, with high throughput and low latency. Part of the core team,
consisting out of 4 people. Implementing the protocol and the services in-house. Debugging of production issues, consisting out of 4 people. Implementing the protocol and the services in-house. Debugging of production issues,
implementing the core protocol, re-wrote the CLI, led benchmark initiatives, set up part of the CI/CD flow and implementing the core protocol, re-wrote the CLI, led benchmark initiatives, set up part of the CI/CD flow and
Grafana dashboards. </p> Grafana dashboards. </p>
@ -64,7 +65,7 @@ Grafana dashboards. </p>
</li> </li>
<li class='itemize'>Connected external EVM chains to the core network</li></ul> <li class='itemize'>Connected external EVM chains to the core network</li></ul>
<!-- l. 112 --><p class='noindent'><span class='cmsl-10'>Senior Software Engineer - Full-time </span>August 2022 - February 2023 <!-- l. 112 --><p class='noindent'><span class='cmsl-10'>Senior Software Engineer - Full-time </span>August 2022 - February 2023
<br class='newline' />Centrifuge, Remote <br class='newline' />Part of the protocol team implementing the DeFi application on top of Substrate. Working in a self-governed <br class='newline' /><span class="company">Centrifuge</span>, Remote <br class='newline' />Part of the protocol team implementing the DeFi application on top of Substrate. Working in a self-governed
organization, leading the documentation efforts around Rust and the protocol implementation. </p> organization, leading the documentation efforts around Rust and the protocol implementation. </p>
<ul class='itemize1'> <ul class='itemize1'>
<li class='itemize'>Implemented the auto-generation of the online documentation with every PR <li class='itemize'>Implemented the auto-generation of the online documentation with every PR
@ -72,11 +73,11 @@ organization, leading the documentation efforts around Rust and the protocol imp
<li class='itemize'>Enabled mutating of money pools in the protocol <li class='itemize'>Enabled mutating of money pools in the protocol
</li> </li>
<li class='itemize'>Implemented client facing APIs on top of the money fund pools <li class='itemize'>Implemented client facing APIs on top of the money fund pools
</li> </li>
<li class='itemize'>Co-authored RFCs to enhance the protocol</li></ul> <li class='itemize'>Co-authored RFCs to enhance the protocol</li></ul>
<!-- l. 122 --><p class='noindent'><span class='cmsl-10'>Author of ”Rust Web Development” </span>October 2020 - December 2022 <!-- l. 122 --><p class='noindent'><span class='cmsl-10'>Author of ”Rust Web Development” </span>October 2020 - December 2022
<br class='newline' />Manning Publications, Remote <br class='newline' />Writing the book ”Rust Web Development”. Research, writing and marketing the book in partnership with <br class='newline' /><span class="company">Manning Publications</span>, Remote <br class='newline' />Writing the book ”Rust Web Development”. Research, writing and marketing the book in partnership with
Manning. </p> Manning. </p>
<ul class='itemize1'> <ul class='itemize1'>
<li class='itemize'>Published technical book on building web services with Rust <li class='itemize'>Published technical book on building web services with Rust
@ -86,7 +87,7 @@ Manning. </p>
<li class='itemize'>Book available worldwide through Manning Publications</li></ul> <li class='itemize'>Book available worldwide through Manning Publications</li></ul>
<!-- l. 131 --><p class='noindent'><span class='cmsl-10'>Sr. Solutions Architect (Professional Services) - Full-time </span>May 2021 - July 2022 <!-- l. 131 --><p class='noindent'><span class='cmsl-10'>Sr. Solutions Architect (Professional Services) - Full-time </span>May 2021 - July 2022
<br class='newline' /><span class='cmsl-10'>Solutions Architect (Professional Services) - Full-time </span>June 2020 - May 2021 <br class='newline' /><span class='cmsl-10'>Solutions Architect (Professional Services) - Full-time </span>June 2020 - May 2021
<br class='newline' />Twilio Inc., Remote <br class='newline' />Second Solutions Architect hired for the new EMEA Professional Services team. Enabled enterprise customers to <br class='newline' /><span class="company">Twilio Inc.</span>, Remote <br class='newline' />Second Solutions Architect hired for the new EMEA Professional Services team. Enabled enterprise customers to
integrate Twilio APIs through architecture design, code reviews, and hands-on implementation support. integrate Twilio APIs through architecture design, code reviews, and hands-on implementation support.
</p> </p>
<ul class='itemize1'> <ul class='itemize1'>
@ -98,18 +99,18 @@ integrate Twilio APIs through architecture design, code reviews, and hands-on im
</li> </li>
<li class='itemize'>Involved in hiring, onboarding, and scaling the Professional Services team</li></ul> <li class='itemize'>Involved in hiring, onboarding, and scaling the Professional Services team</li></ul>
<!-- l. 142 --><p class='noindent'><span class='cmsl-10'>Systems Engineer - Contract </span>August 2019 - May 2020 <!-- l. 142 --><p class='noindent'><span class='cmsl-10'>Systems Engineer - Contract </span>August 2019 - May 2020
<br class='newline' />Kraken Digital Currency Exchange, Remote (San Francisco)<br class='newline' />Part of the first Rust team of the company, replacing the core trading engine with Rust. Worked alongside 12 highly <br class='newline' /><span class="company">Kraken Digital Currency Exchange</span>, Remote (San Francisco)<br class='newline' />Part of the first Rust team of the company, replacing the core trading engine with Rust. Worked alongside 12 highly
experienced Software Developers from all over the world. Refactor code from PHP to Rust, wrote new features in experienced Software Developers from all over the world. Refactor code from PHP to Rust, wrote new features in
Rust in a well-tested highly secure manner. </p> Rust in a well-tested highly secure manner. </p>
<ul class='itemize1'> <ul class='itemize1'>
<li class='itemize'>Re-wrote several PHP services in Rust to increase the throughput 100fold <li class='itemize'>Re-wrote several PHP services in Rust to increase the throughput 100fold
</li> </li>
<li class='itemize'>Wrote new services in Rust from the ground up <li class='itemize'>Wrote new services in Rust from the ground up
</li> </li>
<li class='itemize'>Cross-communication with different teams and the CTO</li></ul> <li class='itemize'>Cross-communication with different teams and the CTO</li></ul>
<!-- l. 151 --><p class='noindent'><span class='cmsl-10'>Rust Developer - Freelance </span>March 2019 - July 2019 <!-- l. 151 --><p class='noindent'><span class='cmsl-10'>Rust Developer - Freelance </span>March 2019 - July 2019
<br class='newline' />Self Employed, Berlin/Toronto <br class='newline' />Took time to deep-dive into Rust, founded the Rust&amp;Tell Berlin MeetUp, contributed to Rust core and created <br class='newline' /><span class="company">Self Employed</span>, Berlin/Toronto <br class='newline' />Took time to deep-dive into Rust, founded the Rust&amp;Tell Berlin MeetUp, contributed to Rust core and created
learning paths for NodeJS developers transitioning to Rust. </p> learning paths for NodeJS developers transitioning to Rust. </p>
<ul class='itemize1'> <ul class='itemize1'>
<li class='itemize'>Founded and organized the monthly ”Rust &amp; Tell Berlin” meetup (now largest Rust meetup globally) <li class='itemize'>Founded and organized the monthly ”Rust &amp; Tell Berlin” meetup (now largest Rust meetup globally)
@ -118,43 +119,43 @@ learning paths for NodeJS developers transitioning to Rust. </p>
</li> </li>
<li class='itemize'>Created Rust learning resources for NodeJS developers</li></ul> <li class='itemize'>Created Rust learning resources for NodeJS developers</li></ul>
<!-- l. 160 --><p class='noindent'><span class='cmsl-10'>Sr. Software Engineer - Freelance </span>March 2016 - February 2019 <!-- l. 160 --><p class='noindent'><span class='cmsl-10'>Sr. Software Engineer - Freelance </span>March 2016 - February 2019
<br class='newline' />OSRAM, Körber Digital, Avenga, ERGO Group, GIATA, PaperHive, Glispa (Berlin) <br class='newline' />Freelance consultant for enterprise clients. Focus on microservices architecture, IoT platforms, and frontend <br class='newline' /><span class="company">OSRAM</span>, <span class="company">Körber Digital</span>, <span class="company">Avenga</span>, <span class="company">ERGO Group</span>, <span class="company">GIATA</span>, <span class="company">PaperHive</span>, <span class="company">Glispa</span> (Berlin) <br class='newline' />Freelance consultant for enterprise clients. Focus on microservices architecture, IoT platforms, and frontend
development. </p> development. </p>
<ul class='itemize1'> <ul class='itemize1'>
<li class='itemize'>Built authentication infrastructure for OSRAMs large-scale IoT platform (Node.js, Go, Lua) <li class='itemize'>Built authentication infrastructure for <span class="company">OSRAM</span>s large-scale IoT platform (Node.js, Go, Lua)
</li> </li>
<li class='itemize'>First engineering hire at Körber Digital; established tech stack and real-time data pipelines on AWS <li class='itemize'>First engineering hire at <span class="company">Körber Digital</span>; established tech stack and real-time data pipelines on AWS
</li> </li>
<li class='itemize'>Tech Lead at Avenga; enabled Scrum processes and refactored codebase into microservices <li class='itemize'>Tech Lead at <span class="company">Avenga</span>; enabled Scrum processes and refactored codebase into microservices
</li> </li>
<li class='itemize'>Migrated legacy PHP systems to Node.js microservices with Docker at GIATA <li class='itemize'>Migrated legacy PHP systems to Node.js microservices with Docker at <span class="company">GIATA</span>
</li> </li>
<li class='itemize'>Built in-house analytics dashboards and ad platforms at Glispa with AngularJS <li class='itemize'>Built in-house analytics dashboards and ad platforms at <span class="company">Glispa</span> with AngularJS
</li> </li>
<li class='itemize'>Mentored teams on Scrum adoption and modern JavaScript practices</li></ul> <li class='itemize'>Mentored teams on Scrum adoption and modern JavaScript practices</li></ul>
<!-- l. 172 --><p class='noindent'><span class='cmsl-10'>Software Engineer - Full-time </span>August 2015 - February 2016 <!-- l. 172 --><p class='noindent'><span class='cmsl-10'>Software Engineer - Full-time </span>August 2015 - February 2016
<br class='newline' />smartB Energy Management GmbH, Berlin <br class='newline' />Worked in a small agile team creating an application for business owners to monitor energy consumption. <br class='newline' /><span class="company">smartB Energy Management GmbH</span>, Berlin <br class='newline' />Worked in a small agile team creating an application for business owners to monitor energy consumption.
</p> </p>
<ul class='itemize1'> <ul class='itemize1'>
<li class='itemize'>Full-stack development with JavaScript and Python <li class='itemize'>Full-stack development with JavaScript and Python
</li> </li>
<li class='itemize'>Heavy use of pair programming and TDD practices</li></ul> <li class='itemize'>Heavy use of pair programming and TDD practices</li></ul>
<!-- l. 180 --><p class='noindent'><span class='cmsl-10'>Software Engineer - Freelance </span>March 2015 - July 2015 <!-- l. 180 --><p class='noindent'><span class='cmsl-10'>Software Engineer - Freelance </span>March 2015 - July 2015
<br class='newline' />blogfoster GmbH, Berlin <br class='newline' />First developer hired to rewrite existing PHP/Backbone application using NodeJS and React. </p> <br class='newline' /><span class="company">blogfoster GmbH</span>, Berlin <br class='newline' />First developer hired to rewrite existing PHP/Backbone application using NodeJS and React. </p>
<ul class='itemize1'> <ul class='itemize1'>
<li class='itemize'>Built the first version of the ad marketplace for this young startup <li class='itemize'>Built the first version of the ad marketplace for this young startup
</li> </li>
<li class='itemize'>Mapped out architecture with CTO; implemented TDD practices</li></ul> <li class='itemize'>Mapped out architecture with CTO; implemented TDD practices</li></ul>
<!-- l. 188 --><p class='noindent'><span class='cmsl-10'>Frontend Developer - Full-time </span>February 2014 - March 2015 <!-- l. 188 --><p class='noindent'><span class='cmsl-10'>Frontend Developer - Full-time </span>February 2014 - March 2015
<br class='newline' />Dalia Research, Berlin <br class='newline' />First and sole frontend developer at 8-person startup. </p> <br class='newline' /><span class="company">Dalia Research</span>, Berlin <br class='newline' />First and sole frontend developer at 8-person startup. </p>
<ul class='itemize1'> <ul class='itemize1'>
<li class='itemize'>Built survey platform and analytics dashboards in AngularJS <li class='itemize'>Built survey platform and analytics dashboards in AngularJS
</li> </li>
<li class='itemize'>Translated business requirements into product features across all browsers and devices</li></ul> <li class='itemize'>Translated business requirements into product features across all browsers and devices</li></ul>
</div><h4 class='sectionHead' id='education'><a id='x1-40000'></a><div class='centerline'> EDUCATION </div></h4><div class='section'> </div><h4 class='sectionHead' id='education'><a id='x1-40000'></a><div class='centerline'> EDUCATION </div></h4><div class='section'>
<!-- l. 200 --><p class='noindent'><span class='cmsl-10'>Bachelor of Science, Computer Science </span>September 2010 - February 2014 <!-- l. 200 --><p class='noindent'><span class='cmsl-10'>Bachelor of Science, Computer Science </span>September 2010 - February 2014
<br class='newline' />TH Ingolstadt<br class='newline' />Scholarship from Allianz Deutschland AG to study Computer Science, fully funded and with trainings in Scrum, <br class='newline' /><span class="company">TH Ingolstadt</span><br class='newline' />Scholarship from Allianz Deutschland AG to study Computer Science, fully funded and with trainings in Scrum,
Java, PL/I and mainframe systems on the side. Java, PL/I and mainframe systems on the side.
</p> </p>
</div></div> </div></div>

Binary file not shown.

Binary file not shown.

View file

@ -1,4 +1,4 @@
This is pdfTeX, Version 3.141592653-2.6-1.40.27 (TeX Live 2026/dev/Arch Linux) (preloaded format=latex 2026.1.20) 20 JAN 2026 18:11 This is pdfTeX, Version 3.141592653-2.6-1.40.27 (TeX Live 2026/dev/Arch Linux) (preloaded format=latex 2026.1.20) 20 JAN 2026 18:52
entering extended mode entering extended mode
restricted \write18 enabled. restricted \write18 enabled.
%&-line parsing enabled. %&-line parsing enabled.
@ -385,10 +385,10 @@ L3 programming layer <2025-01-18>
Here is how much of TeX's memory you used: Here is how much of TeX's memory you used:
4466 strings out of 475172 4466 strings out of 475172
56029 string characters out of 5767121 56029 string characters out of 5767121
579455 words of memory out of 5000000 578455 words of memory out of 5000000
27423 multiletter control sequences out of 15000+600000 27423 multiletter control sequences out of 15000+600000
560606 words of font info for 42 fonts, out of 8000000 for 9000 560606 words of font info for 42 fonts, out of 8000000 for 9000
14 hyphenation exceptions out of 8191 14 hyphenation exceptions out of 8191
51i,8n,60p,834b,464s stack positions out of 10000i,1000n,20000p,200000b,200000s 51i,8n,60p,834b,464s stack positions out of 10000i,1000n,20000p,200000b,200000s
Output written on resume.dvi (5 pages, 33040 bytes). Output written on resume.dvi (5 pages, 33068 bytes).

Binary file not shown.

View file

@ -37,9 +37,9 @@
% If you don't want one of the addresses, simply remove all the text in the first or second \address{} bracket % If you don't want one of the addresses, simply remove all the text in the first or second \address{} bracket
\address{{\bf Professional} \\ LinkedIn: linkedin.com/in/bastiangruber \\ Project: rustwebdevelopment.com \\ E-Mail: gruberbastian@me.com} \address{{\bf Professional} \\ LinkedIn: linkedin.com/in/bastiangruber \\ Book: rustwebdevelopment.com \\ E-Mail: gruberbastian@me.com \\ Website: bastiangruber.ca}
\address{{\bf Code} \\ GitHub: github.com/gruberb \\ Code: code.novanexus.ca \\ Website: bastiangruber.ca} % Your address 2 \address{{\bf Code} \\ GitHub: github.com/gruberb \\ Git: code.novanexus.ca} % Your address 2
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------
@ -70,7 +70,7 @@ Staff Software Engineer and published author ("Rust Web Development" - Manning)
{\bf Backend:} Rust (Actix, Warp, Axum), Python (FastAPI), Node.js, Go \\ {\bf Backend:} Rust (Actix, Warp, Axum), Python (FastAPI), Node.js, Go \\
{\bf Patterns:} REST, GraphQL, gRPC, async Rust, distributed systems (P2P) \\ {\bf Patterns:} REST, GraphQL, gRPC, async Rust, distributed systems (P2P) \\
{\bf Infrastructure:} AWS, Google Cloud, Docker, Kubernetes, CI/CD, Grafana \\ {\bf Infrastructure:} AWS, Google Cloud, Docker, Kubernetes, CI/CD, Grafana \\
{\bf Domains:} Systems programming, Firefox, FFI, protocol implementation, IoT, blockchain {\bf Domains:} Systems Programming, FFI, Distributed Systems, Web Services, Micro Services, IoT, Blockchain, Firefox
%---------------------------------------------------------------------------------------- %----------------------------------------------------------------------------------------

View file

@ -1,25 +1,29 @@
/* CV Styles - Dark Theme matching bastiangruber.ca */ /* CV Styles - Dark Theme matching bastiangruber.ca */
/* Inter - modern, highly readable font for CVs */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
* { box-sizing: border-box; } * { box-sizing: border-box; }
html { html {
color: #e2e8f0; color: #f1f5f9;
background-color: #1a1f29; background-color: #1a1f29;
} }
body { body {
margin: 0 auto; margin: 0 auto;
max-width: 850px; max-width: 900px;
padding: 40px 50px; padding: 40px 50px;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif; font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
font-size: 15px; font-size: 17px;
line-height: 1.6; line-height: 1.65;
background-color: #1a1f29; background-color: #1a1f29;
color: #e2e8f0; color: #f1f5f9;
color-scheme: dark; color-scheme: dark;
} }
@media (max-width: 600px) { @media (max-width: 600px) {
body { font-size: 14px; padding: 20px; } body { font-size: 16px; padding: 20px; }
} }
@media print { @media print {
@ -28,7 +32,7 @@ body {
/* Name header */ /* Name header */
.cmbx-12 { .cmbx-12 {
font-size: 28px; font-size: 32px;
font-weight: 600; font-weight: 600;
display: block; display: block;
text-align: center; text-align: center;
@ -44,15 +48,15 @@ body {
/* Contact info */ /* Contact info */
.center-addresses { .center-addresses {
width: 100%; width: 100%;
margin: 15px 0 30px 0; margin: 10px 0 15px 0;
border-collapse: collapse; border-collapse: collapse;
} }
.center-addresses td { .center-addresses td {
padding: 0 20px; padding: 0 20px;
vertical-align: top; vertical-align: top;
font-size: 14px; font-size: 16px;
line-height: 1.8; line-height: 1.5;
} }
.first-address { .first-address {
@ -89,13 +93,13 @@ body {
/* Section headers */ /* Section headers */
.sectionHead { .sectionHead {
margin: 35px 0 15px 0; margin: 20px 0 10px 0;
padding-bottom: 8px; padding-bottom: 6px;
border-bottom: 2px solid #fbbf24; border-bottom: 2px solid #fbbf24;
} }
.sectionHead .centerline { .sectionHead .centerline {
font-size: 12px; font-size: 14px;
font-weight: 600; font-weight: 600;
letter-spacing: 2px; letter-spacing: 2px;
color: #fbbf24; color: #fbbf24;
@ -110,7 +114,27 @@ div.section {
.cmsl-10 { .cmsl-10 {
font-weight: 600; font-weight: 600;
font-style: normal; font-style: normal;
color: #e2e8f0; color: #fbbf24;
font-size: 1.05em;
}
/* Company names */
.company {
font-weight: 600;
color: #f8fafc;
}
/* Position blocks - add spacing between jobs */
div.section > p.noindent {
margin-top: 20px;
padding-top: 15px;
border-top: 1px solid #2d3748;
}
div.section > p.noindent:first-of-type {
margin-top: 0;
padding-top: 0;
border-top: none;
} }
/* Bold text */ /* Bold text */
@ -126,7 +150,7 @@ ul.itemize1 {
li.itemize { li.itemize {
margin-bottom: 5px; margin-bottom: 5px;
color: #94a3b8; color: #cbd5e1;
} }
/* Paragraphs */ /* Paragraphs */