mirror of
https://github.com/apricote/apricote.de.git
synced 2026-01-13 12:51:00 +00:00
feat: initial content
This commit is contained in:
parent
aba4b1c795
commit
212a1151d5
17 changed files with 550 additions and 3 deletions
0
assets/.gitkeep
Normal file
0
assets/.gitkeep
Normal file
|
|
@ -1,3 +0,0 @@
|
||||||
baseURL = 'http://example.org/'
|
|
||||||
languageCode = 'en-us'
|
|
||||||
title = 'My New Hugo Site'
|
|
||||||
61
config.yaml
Normal file
61
config.yaml
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
title: "Julian Tölle"
|
||||||
|
baseURL: "https://apricote.de/"
|
||||||
|
languageCode: "en-us"
|
||||||
|
|
||||||
|
author:
|
||||||
|
name: Julian Tölle
|
||||||
|
|
||||||
|
module:
|
||||||
|
imports:
|
||||||
|
- path: "github.com/adityatelange/hugo-PaperMod"
|
||||||
|
|
||||||
|
params:
|
||||||
|
DateFormat: "2006-01-02"
|
||||||
|
|
||||||
|
keywords: ["cv", "resume", "julian tölle", "personal site"]
|
||||||
|
|
||||||
|
profileMode:
|
||||||
|
enabled: true
|
||||||
|
title: "Julian Tölle"
|
||||||
|
subtitle: |
|
||||||
|
Cloud Infrastructure / Kubernetes / DevOps
|
||||||
|
|
||||||
|
Working at [Hetzner Cloud](https://hetzner.com/cloud) on [Open Source Integrations](https://github.com/hetznercloud)
|
||||||
|
|
||||||
|
imageUrl: ./profile.jpg
|
||||||
|
imageWidth: 240
|
||||||
|
imageHeight: 240
|
||||||
|
imageTitle: Headshot of myself
|
||||||
|
|
||||||
|
buttons:
|
||||||
|
- name: "About Me"
|
||||||
|
url: "about-me"
|
||||||
|
- name: "Favorite Music"
|
||||||
|
url: listory
|
||||||
|
|
||||||
|
socialIcons:
|
||||||
|
- name: github
|
||||||
|
url: "https://github.com/apricote"
|
||||||
|
- name: linkedin
|
||||||
|
url: "https://www.linkedin.com/in/julian-toelle/"
|
||||||
|
- name: xing
|
||||||
|
url: "https://www.xing.com/profile/Julian_Toelle3/cv"
|
||||||
|
- name: twitch
|
||||||
|
url: "https://twitch.tv/apricote4"
|
||||||
|
- name: mastodon
|
||||||
|
url: "https://hachyderm.io/@apricote"
|
||||||
|
|
||||||
|
menu:
|
||||||
|
main:
|
||||||
|
- identifier: about
|
||||||
|
name: About Me
|
||||||
|
url: about-me
|
||||||
|
- identifier: work
|
||||||
|
name: Work
|
||||||
|
url: work
|
||||||
|
- identifier: projects
|
||||||
|
name: Projects
|
||||||
|
url: projects
|
||||||
|
- identifier: listory
|
||||||
|
name: Favorite Music
|
||||||
|
url: listory
|
||||||
16
content/about-me.md
Normal file
16
content/about-me.md
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
---
|
||||||
|
title: "About Me"
|
||||||
|
---
|
||||||
|
|
||||||
|
## Basic
|
||||||
|
|
||||||
|
- {{< years-till-today "1997-09-08" >}} years old
|
||||||
|
- Living in [Bielefeld, Germany](https://en.wikipedia.org/wiki/Bielefeld)
|
||||||
|
|
||||||
|
## Skills
|
||||||
|
|
||||||
|
{{< about-me-skills >}}
|
||||||
|
|
||||||
|
## Interests
|
||||||
|
|
||||||
|
{{< about-me-interests >}}
|
||||||
6
content/listory.md
Normal file
6
content/listory.md
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
title: "My Favorite Music"
|
||||||
|
type: listory
|
||||||
|
---
|
||||||
|
|
||||||
|
> Work in Progress
|
||||||
5
content/projects.md
Normal file
5
content/projects.md
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: "Projects"
|
||||||
|
---
|
||||||
|
|
||||||
|
{{< projects >}}
|
||||||
5
content/work.md
Normal file
5
content/work.md
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
title: "Work Experiences"
|
||||||
|
---
|
||||||
|
|
||||||
|
{{< work >}}
|
||||||
364
data/resume.yaml
Normal file
364
data/resume.yaml
Normal file
|
|
@ -0,0 +1,364 @@
|
||||||
|
# yaml-language-server: $schema=https://raw.githubusercontent.com/jsonresume/resume-schema/v1.0.0/schema.json
|
||||||
|
basics:
|
||||||
|
name: Julian Tölle
|
||||||
|
label: Infrastructure & Backend
|
||||||
|
image: https://www.gravatar.com/avatar/bd55c8a01a6dd038f86c8e9fd60674b5?s=800
|
||||||
|
email: julian.toelle97@gmail.com
|
||||||
|
location:
|
||||||
|
city: Bielefeld
|
||||||
|
countryCode: Germany
|
||||||
|
profiles:
|
||||||
|
- network: GitHub
|
||||||
|
username: apricote
|
||||||
|
url: https://github.com/apricote
|
||||||
|
- network: LinkedIn
|
||||||
|
username: Julian Tölle
|
||||||
|
url: https://www.linkedin.com/in/julian-toelle/
|
||||||
|
- network: Twitch
|
||||||
|
username: Apricote4
|
||||||
|
url: https://twitch.tv/apricote4
|
||||||
|
- network: XING
|
||||||
|
username: Julian_Toelle3
|
||||||
|
url: https://www.xing.com/profile/Julian_Toelle3/cv
|
||||||
|
|
||||||
|
skills:
|
||||||
|
- name: Kubernetes
|
||||||
|
level: expert
|
||||||
|
keywords:
|
||||||
|
- Cluster API
|
||||||
|
- Operators
|
||||||
|
- GitOps
|
||||||
|
|
||||||
|
- name: Node.js
|
||||||
|
level: expert
|
||||||
|
keywords:
|
||||||
|
- Typescript
|
||||||
|
- Nest.js
|
||||||
|
|
||||||
|
- name: CI/CD
|
||||||
|
level: advanced
|
||||||
|
keywords:
|
||||||
|
- GitLab CI
|
||||||
|
- Jenkins
|
||||||
|
|
||||||
|
- name: Infrastructure as Code
|
||||||
|
level: advanced
|
||||||
|
keywords:
|
||||||
|
- Terraform
|
||||||
|
- Ansible
|
||||||
|
|
||||||
|
- name: Backend Development
|
||||||
|
level: advanced
|
||||||
|
keywords:
|
||||||
|
- REST APIs
|
||||||
|
|
||||||
|
- name: Cloud
|
||||||
|
level: advanced
|
||||||
|
keywords:
|
||||||
|
- AWS
|
||||||
|
- OpenStack
|
||||||
|
- Hetzner Cloud
|
||||||
|
|
||||||
|
- name: Databases
|
||||||
|
level: advanced
|
||||||
|
keywords:
|
||||||
|
- Redis
|
||||||
|
- PostgreSQL
|
||||||
|
- MySQL
|
||||||
|
- etcd
|
||||||
|
|
||||||
|
- name: Go
|
||||||
|
level: intermediate
|
||||||
|
keywords:
|
||||||
|
- kubebuilder
|
||||||
|
|
||||||
|
work:
|
||||||
|
- name: Hetzner Cloud GmbH
|
||||||
|
position: Software Developer Open Source Integrations
|
||||||
|
website: https://hetzner.com/cloud
|
||||||
|
startDate: "2022-11"
|
||||||
|
keywords:
|
||||||
|
- Kubernetes
|
||||||
|
- Terraform
|
||||||
|
- Ansible
|
||||||
|
- Go
|
||||||
|
- Python
|
||||||
|
summary: ""
|
||||||
|
- name: teuto.net Netzdienste GmbH
|
||||||
|
position: Cloud Engineer
|
||||||
|
website: https://teuto.net/
|
||||||
|
startDate: "2021-04"
|
||||||
|
endDate: "2022-09"
|
||||||
|
keywords:
|
||||||
|
- Kubernetes
|
||||||
|
- Cluster API
|
||||||
|
- OpenStack
|
||||||
|
- GitLab CI
|
||||||
|
- GitOps
|
||||||
|
- Prometheus & Alertmanager
|
||||||
|
- Go
|
||||||
|
- kubebuilder
|
||||||
|
- Ansible
|
||||||
|
summary: |-
|
||||||
|
teuto.net provides public and private clouds based on OpenStack,
|
||||||
|
managed Kubernetes on top of these clouds, and additional services like
|
||||||
|
consulting or training. Within teuto.net, I worked on the Kubernetes team,
|
||||||
|
where I was responsible for the next iteration of our managed Kubernetes
|
||||||
|
offering.
|
||||||
|
|
||||||
|
At the beginning of 2021, teuto.net decided to replace the existing custom
|
||||||
|
tooling for managing Kubernetes clusters with Cluster API and Cluster API
|
||||||
|
Provider OpenStack. I authored a proposal for the new implementation and
|
||||||
|
implemented it over the following months. This included GitLab CI
|
||||||
|
pipelines for building VM images, writing templates for clusters, an
|
||||||
|
Ansible playbook to bootstrap new Cluster API Management Cluster,
|
||||||
|
extensive internal documentation and runbooks, Prometheus alerting, an E2E
|
||||||
|
test pipeline, and a custom Kubernetes operator to tie it all together
|
||||||
|
into one coherent API.
|
||||||
|
|
||||||
|
As I always liked to work upstream, and a stable foundation is necessary
|
||||||
|
for this offering, I started contributing to Cluster API Provider and
|
||||||
|
became a reviewer for the project, participating in the office hours and
|
||||||
|
wherever else help was needed.
|
||||||
|
|
||||||
|
When not working on new features, I packaged newly released Kubernetes
|
||||||
|
versions for our platform and rolled out the changes to our managed
|
||||||
|
clusters while communicating with our customers about upcoming changes and
|
||||||
|
maintenance windows.
|
||||||
|
|
||||||
|
For 3 months in 2021, I lead an initiative to improve alert fatigue for
|
||||||
|
our on-call engineers, by analyzing the pains they were experiencing and
|
||||||
|
then applying a consistent labeling strategy on the alerts, as well as
|
||||||
|
filtering unwanted alerts in Alertmanager and Prometheus.
|
||||||
|
|
||||||
|
highlights:
|
||||||
|
- Tech Lead for managed Kubernetes offering
|
||||||
|
- Upstream contributions to Cluster API Provider OpenStack
|
||||||
|
|
||||||
|
- name: narando GmbH
|
||||||
|
position: Lead Developer
|
||||||
|
website: https://about.narando.com/
|
||||||
|
startDate: "2017-07"
|
||||||
|
endDate: "2021-02"
|
||||||
|
keywords:
|
||||||
|
- AWS
|
||||||
|
- Node.js
|
||||||
|
- Gitlab CI
|
||||||
|
- Terraform
|
||||||
|
- Nest.js
|
||||||
|
- Typescript
|
||||||
|
summary: |
|
||||||
|
narando provides a crowd-working platform where texts such as magazine
|
||||||
|
articles and blog posts are recorded by professional narrators and
|
||||||
|
subsequently published to websites and podcast platforms such as Spotify.
|
||||||
|
It is a small company, so I wore many hats, often simultaneously, in the 5
|
||||||
|
years I worked there.
|
||||||
|
|
||||||
|
As the Lead Developer, I was responsible for the 3-person dev team. In
|
||||||
|
that role, I planned the implementation of new features and oversaw our
|
||||||
|
bi-weekly planning sessions. I introduced modern development practices
|
||||||
|
such as merge requests and taught the other engineers to get them to excel
|
||||||
|
at their tasks.
|
||||||
|
|
||||||
|
In my role as a Backend Engineer, I planned and implemented a new version
|
||||||
|
of the production and publishing platforms that power narando, as the
|
||||||
|
previous proof of concept was hitting its limits. This new platform was
|
||||||
|
built using multiple Node.js services for different use-cases such as core
|
||||||
|
production, file handling, post-production, and publishing feeds.
|
||||||
|
|
||||||
|
As the Cloud Infrastructure Engineer, I planned and implemented our
|
||||||
|
infrastructure in AWS. Most of our services were deployed as containers to
|
||||||
|
ECS and were backed by RDS MySQL. I also built an event queue for our
|
||||||
|
services on top of SNS+SQS. Everything was configured by Terraform and by
|
||||||
|
using common templates, new services could be launched in less than a day.
|
||||||
|
|
||||||
|
To improve our development velocity and reduce toil, I build automated
|
||||||
|
pipelines for our services to run tests and linting for each commit
|
||||||
|
merge request and to automatically release and deploy the services once
|
||||||
|
they are merged. During the first year we got started with Jenkins but
|
||||||
|
then switched to GitLab CI because Jenkins needed too much maintenance and
|
||||||
|
we liked the Gitlab CI syntax better.
|
||||||
|
|
||||||
|
highlights:
|
||||||
|
- Built out the infrastructure on AWS using mostly container technology (ECS)
|
||||||
|
- Planned and implemented a Node.js microservice architecture
|
||||||
|
- Introduced code reviews to improve the code quality and learn from each other
|
||||||
|
|
||||||
|
- name: TrackCode GmbH
|
||||||
|
position: Software Engineer Infrastructure & Backend
|
||||||
|
website: https://trackcode.de/
|
||||||
|
startDate: "2016-12"
|
||||||
|
endDate: "2020-04"
|
||||||
|
keywords:
|
||||||
|
- Kubernetes
|
||||||
|
- Backend
|
||||||
|
- CI/CD
|
||||||
|
- Node.js
|
||||||
|
- Jenkins
|
||||||
|
summary: |
|
||||||
|
TrackCode is a Transport Management System for the last-mile delivery
|
||||||
|
logistics companies, importing shipment data directly from the customers'
|
||||||
|
systems and exporting scan events and signatures back to the logistics
|
||||||
|
networks.
|
||||||
|
|
||||||
|
When I joined TrackCode, I initially focused on the Node.js backend
|
||||||
|
software, which was talking to the Web and Android Apps through a JSON
|
||||||
|
API and persisting data in MySQL and MongoDB.
|
||||||
|
|
||||||
|
Later on, my role at TrackCode shifted and I started working more on
|
||||||
|
infrastructure and DevOps topics. I planned and implemented a new
|
||||||
|
development platform for our growing team on top of Kubernetes with
|
||||||
|
Rancher. To sustainably learn from past issues and avoid being waken up by
|
||||||
|
alerts, I established a postmortem culture, which helped us fully
|
||||||
|
explore incidents and solve the root causes.
|
||||||
|
|
||||||
|
To improve our confidence and velocity during development and deployment,
|
||||||
|
I implemented the full CI/CD lifecycle for all of our services, using
|
||||||
|
Jenkins, Unit Tests, and finally an automated release to Kubernetes.
|
||||||
|
|
||||||
|
To help us debug any incidents and investigate for customer support
|
||||||
|
tickets, we used Splunk, but this proved to be too expensive in the long
|
||||||
|
run. I developed our alternative monitoring and observability stack using
|
||||||
|
Graylog, Grafana, and Prometheus. Using these, I also established SLOs for
|
||||||
|
one of our core metrics, "time to export events".
|
||||||
|
|
||||||
|
highlights:
|
||||||
|
- Planned and implemented a new development platform on top of Kubernetes
|
||||||
|
- Established a structured process to analyze incidents (postmortems)
|
||||||
|
- Implemented a full CI/CD lifecycle for all services (Jenkins, Tests, Release to Kubernetes)
|
||||||
|
|
||||||
|
- name: narando GmbH
|
||||||
|
position: Working student
|
||||||
|
website: https://about.narando.com/
|
||||||
|
startDate: "2016-04"
|
||||||
|
endDate: "2017-06"
|
||||||
|
keywords:
|
||||||
|
- Ruby on Rails
|
||||||
|
- Android
|
||||||
|
summary: |-
|
||||||
|
While finishing my Abitur I started working at narando and started
|
||||||
|
maintaining the initial proof of concept that was built using Rails.
|
||||||
|
I was also responsible for our Android app and added offline support to it.
|
||||||
|
|
||||||
|
languages:
|
||||||
|
- language: German
|
||||||
|
fluency: Native speaker
|
||||||
|
- language: English
|
||||||
|
fluency: Fluent (C2)
|
||||||
|
|
||||||
|
interests:
|
||||||
|
- name: Video Games
|
||||||
|
keywords:
|
||||||
|
- RPG
|
||||||
|
- Strategy
|
||||||
|
- name: Pen & Paper RPGs
|
||||||
|
keywords:
|
||||||
|
- Fantasy
|
||||||
|
- DnD 5e
|
||||||
|
- name: Music
|
||||||
|
keywords:
|
||||||
|
- Rock
|
||||||
|
- Metal
|
||||||
|
- Techno
|
||||||
|
- Festivals & Concerts
|
||||||
|
|
||||||
|
references: []
|
||||||
|
|
||||||
|
education:
|
||||||
|
- institution: Paderborn University
|
||||||
|
studyType: Computer Science
|
||||||
|
startDate: "2016-10"
|
||||||
|
endDate: "2016-11"
|
||||||
|
summary: |
|
||||||
|
As a child and teenager, I always knew that I wanted to study Computer
|
||||||
|
Science. But once I started my studies, I realized that the actual
|
||||||
|
real-life work as a software engineer was far more interesting to me. I
|
||||||
|
dropped out after one month and instead started working at a second
|
||||||
|
startup.
|
||||||
|
|
||||||
|
- institution: Ev. Gymnasium Werther
|
||||||
|
studyType: Abitur
|
||||||
|
startDate: "2008"
|
||||||
|
endDate: "2016-07-01"
|
||||||
|
gpa: "2.2"
|
||||||
|
courses:
|
||||||
|
- LK Mathematik
|
||||||
|
- LK Physik
|
||||||
|
|
||||||
|
projects:
|
||||||
|
- name: Listory
|
||||||
|
summary: |
|
||||||
|
Self-hosted app to track all your Spotify listens and show interesting
|
||||||
|
insights that I develop to fill my own needs.
|
||||||
|
startDate: 2020-01
|
||||||
|
url: https://github.com/apricote/Listory
|
||||||
|
type: application
|
||||||
|
keywords:
|
||||||
|
- Node.js
|
||||||
|
- Nest.js
|
||||||
|
- Helm
|
||||||
|
- React
|
||||||
|
|
||||||
|
- name: Streaming on Twitch
|
||||||
|
summary: |
|
||||||
|
When I still have creative energy left at the end of the week, I like to
|
||||||
|
stream software development on Twitch. I mostly stream my work on Listory,
|
||||||
|
but in December 2021 I streamed my Advent of Code attempts every day.
|
||||||
|
startDate: 2020-10
|
||||||
|
url: https://twitch.tv/apricote4
|
||||||
|
type: presentation
|
||||||
|
keywords:
|
||||||
|
- Go
|
||||||
|
- Node.js
|
||||||
|
- AV production
|
||||||
|
- Public Talking
|
||||||
|
|
||||||
|
- name: cluster-api-provider-openstack
|
||||||
|
summary: |
|
||||||
|
I am a reviewer of the project and actively contribute new features.
|
||||||
|
startDate: 2022-03
|
||||||
|
endDate: 2022-09
|
||||||
|
url: https://sigs.k8s.io/cluster-api-provider-openstack
|
||||||
|
type: application
|
||||||
|
keywords:
|
||||||
|
- Cluster API
|
||||||
|
- OpenStack
|
||||||
|
- Go
|
||||||
|
- Kubernetes
|
||||||
|
|
||||||
|
- name: "@narando/nest-xray"
|
||||||
|
summary: |
|
||||||
|
A package that integrates AWS X-Ray tracing with the Nest.js framework.
|
||||||
|
Initially developed by me while I was working at narando.
|
||||||
|
startDate: 2019-10
|
||||||
|
endDate: 2020-10
|
||||||
|
url: https://github.com/narando/nest-xray
|
||||||
|
keywords:
|
||||||
|
- Node.js
|
||||||
|
- Nest.js
|
||||||
|
- Tracing
|
||||||
|
- AWS
|
||||||
|
|
||||||
|
- name: hcloud-csi-driver
|
||||||
|
summary: |
|
||||||
|
Kubernetes CSI Driver to integrate with Hetzner Cloud Volumes.
|
||||||
|
Based on the DigitalOcean CSI driver. Archived since Hetzner Cloud
|
||||||
|
released an official driver.
|
||||||
|
startDate: 2018-10
|
||||||
|
endDate: 2019-09
|
||||||
|
url: https://github.com/apricote/hcloud-csi-driver
|
||||||
|
type: application
|
||||||
|
keywords:
|
||||||
|
- Go
|
||||||
|
- Kubernetes
|
||||||
|
|
||||||
|
volunteer: []
|
||||||
|
awards: []
|
||||||
|
publications:
|
||||||
|
- name: Various Presentations
|
||||||
|
website: https://apricote.github.io/presentations/
|
||||||
|
summary: |
|
||||||
|
Multiple presentations at local meetups from 2017 to 2019.
|
||||||
|
|
||||||
|
Topics included: Kubebuilder, CI/CD practices at my employer,
|
||||||
|
JavaScript/Node.js patterns and practices
|
||||||
5
go.mod
Normal file
5
go.mod
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
module github.com/apricote/apricote.de
|
||||||
|
|
||||||
|
go 1.20
|
||||||
|
|
||||||
|
require github.com/adityatelange/hugo-PaperMod v0.0.0-20230218071112-e6b697f36512 // indirect
|
||||||
2
go.sum
Normal file
2
go.sum
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
github.com/adityatelange/hugo-PaperMod v0.0.0-20230218071112-e6b697f36512 h1:G1oNdjwZCYC0D0C5PddChC4mKBjfCyDvj4i+/rrO3MY=
|
||||||
|
github.com/adityatelange/hugo-PaperMod v0.0.0-20230218071112-e6b697f36512/go.mod h1:HCHxNMKYdGafUYjVV3ICiAqznZK2yH0iI53jqcDFDdQ=
|
||||||
0
layouts/.gitkeep
Normal file
0
layouts/.gitkeep
Normal file
12
layouts/shortcodes/about-me-interests.html
Normal file
12
layouts/shortcodes/about-me-interests.html
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
<ul>
|
||||||
|
{{ $interests := $.Site.Data.resume.interests }} {{ range $interests }}
|
||||||
|
<li>
|
||||||
|
<span style="font-weight: 600">{{ .name }}</span>
|
||||||
|
<span style="font-size: 0.8em">
|
||||||
|
{{ range .keywords}}
|
||||||
|
<code>{{.}}</code>
|
||||||
|
{{ end}}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
{{end}}
|
||||||
|
</ul>
|
||||||
12
layouts/shortcodes/about-me-skills.html
Normal file
12
layouts/shortcodes/about-me-skills.html
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
<ul>
|
||||||
|
{{ $skills := $.Site.Data.resume.skills }} {{ range $skills }}
|
||||||
|
<li>
|
||||||
|
<span style="font-weight: 600">{{ .name }}</span>
|
||||||
|
<span style="font-size: 0.8em">
|
||||||
|
{{ range .keywords}}
|
||||||
|
<code>{{.}}</code>
|
||||||
|
{{ end}}
|
||||||
|
</span>
|
||||||
|
</li>
|
||||||
|
{{end}}
|
||||||
|
</ul>
|
||||||
29
layouts/shortcodes/projects.html
Normal file
29
layouts/shortcodes/projects.html
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
{{ $projects := $.Site.Data.resume.projects }} {{ range $projects }}
|
||||||
|
|
||||||
|
<div style="margin-bottom: 2em">
|
||||||
|
<div style="font-weight: 200">
|
||||||
|
{{ if not (isset . "endDate")}} {{ .startDate }} - Current {{ else }} {{
|
||||||
|
.startDate }} - {{ .endDate }} {{end}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<a href="{{.url}}" target="_blank" style="font-weight: 600">{{ .name }}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="font-size: 0.8em">
|
||||||
|
{{ range .keywords}}
|
||||||
|
<code>{{.}}</code>
|
||||||
|
{{ end}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>{{.summary | markdownify}}</div>
|
||||||
|
|
||||||
|
{{ if (isset . "highlights") }}
|
||||||
|
<ul>
|
||||||
|
{{ range .highlights }}
|
||||||
|
<li>{{.}}</li>
|
||||||
|
{{end}}
|
||||||
|
</ul>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
31
layouts/shortcodes/work.html
Normal file
31
layouts/shortcodes/work.html
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
{{ $jobs := $.Site.Data.resume.work }} {{ range $jobs }}
|
||||||
|
|
||||||
|
<div style="margin-bottom: 2em">
|
||||||
|
<div style="font-weight: 200">
|
||||||
|
{{ if not (isset . "endDate")}} {{ .startDate }} - Current {{ else }} {{
|
||||||
|
.startDate }} - {{ .endDate }} {{end}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<span style="font-weight: 600">{{ .position }}</span>
|
||||||
|
at
|
||||||
|
<a href="{{.website}}" target="_blank">{{ .name }}</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="font-size: 0.8em">
|
||||||
|
{{ range .keywords}}
|
||||||
|
<code>{{.}}</code>
|
||||||
|
{{ end}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>{{.summary | markdownify}}</div>
|
||||||
|
|
||||||
|
{{ if (isset . "highlights") }}
|
||||||
|
<ul>
|
||||||
|
{{ range .highlights }}
|
||||||
|
<li>{{.}}</li>
|
||||||
|
{{end}}
|
||||||
|
</ul>
|
||||||
|
{{end}}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
2
layouts/shortcodes/years-till-today.html
Normal file
2
layouts/shortcodes/years-till-today.html
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
{{ $diff := now.Sub (time (.Get 0)) }} {{ $years := div (div $diff.Hours 24) 365
|
||||||
|
}} {{ math.Floor $years }}
|
||||||
BIN
static/profile.jpg
Normal file
BIN
static/profile.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 213 KiB |
Loading…
Add table
Add a link
Reference in a new issue