summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/assets/index.html70
-rw-r--r--app/print.styl4
-rw-r--r--app/stylesheets/print/education.styl1
-rw-r--r--app/stylesheets/print/projects.styl6
-rw-r--r--app/stylesheets/print/skills.styl4
-rw-r--r--app/stylesheets/print/work.styl12
-rw-r--r--app/stylesheets/web/work.styl14
-rw-r--r--app/web.styl7
8 files changed, 93 insertions, 25 deletions
diff --git a/app/assets/index.html b/app/assets/index.html
index 4a9ac2b..466ade0 100644
--- a/app/assets/index.html
+++ b/app/assets/index.html
@@ -15,8 +15,8 @@
<meta name="theme-color" content="#ffffff" />
<meta name="author" content="Ahmed AbdelHalim" />
- <meta name="description" content="A14M · Software Developer/DevOps" />
- <meta name="keywords" content="DevOps, Rust, Ruby, Ansible, Python, CI, CD, TDD, BDD, AWS, RESTful, API" />
+ <meta name="description" content="A14M · Platform Engineer/DevOps" />
+ <meta name="keywords" content="DevOps, go, docker, ansible, python, bash, CI, CD, TDD, BDD, AWS, terraform, GCP, k8s, kubernetes, grafana, prometheus, loki, ELK" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="color-scheme" content="dark light" />
</head>
@@ -25,7 +25,7 @@
<main>
<header class="header">
<h1 class="header__name">Ahmed AbdelHalim</h1>
- <em class="header__job-title">Senior Software Developer &centerdot; DevOps</em>
+ <em class="header__job-title">Platform Engineer &centerdot; DevOps</em>
<address class="header__contact-info">
<div class="header__location">Berlin, Germany</div>
<div class="header__tel"><a href="tel:+491770126386">+49 177 912 6386</a></div>
@@ -43,41 +43,41 @@
<article class="summary">
<h2 class="summary__header section-header">Summary</h2>
<p class="summary__content">
- Senior backend and infrastructure developer with 9+
- years experience in development (backend/API focused), 4+ years in infrastructure automation and DevOps, 1+
- years Security analysis and Red Team exploit testing. An avid fan of automation, sustainability, design
- patterns, and clean code. Always interested in deriving a better problem-solving method for challenging tasks,
- and learning sensible new technologies and tools (if the need arises).
+ Platform engineer at <a href="https://group.springernature.com/gp/group">Springer Nature Group</a> with
+ 10+ years of experience in software development (backend/API focused),
+ 5+ years in infrastructure automation and DevOps,
+ hobbyist security analyst and tester.
+ An avid fan of automation, sustainability, design patterns, and clean code.
+ Always interested in deriving a better problem-solving method for challenging tasks,
+ and learning sensible new technologies and tools (when the need arises).
</p>
</article>
<article class="skills">
<h2 class="skills__header section-header">Skills</h2>
<dl class="skills__content">
<dt class="skills__title">DevOps</dt>
- <dd class="skills__items">Ansible, Terraform, Docker, Vagrant, Makefile, certbot.</dd>
-
- <dt class="skills__title">Back-end</dt>
- <dd class="skills__items">Ruby on Rails, PostgreSQL, Redis, MongoDB, MySQL, Django.</dd>
+ <dd class="skills__items">Kubernetes, Terraform, Docker, Ansible, CloudFoundry, Helm, Fastly, Vault,
+ Concourse, Artifactory, ...
+ </dd>
- <dt class="skills__title">Front-end</dt>
- <dd class="skills__items">ReactJS, HTML5, Next.js, StimulusJS, TypeScript.</dd>
+ <dt class="skills__title">Telemetry</dt>
+ <dd class="skills__items">Grafana, Prometheus, Loki, <abbr title="Elasticsearch Logstash Kibana">ELK</abbr>,
+ Sentry, Tempo.
+ </dd>
<dt class="skills__title">Programming</dt>
- <dd class="skills__items">Ruby, Python, Bash, TypeScript, Rust.</dd>
+ <dd class="skills__items">Go, Ruby, Python, Bash, Rust.</dd>
<dt class="skills__title">Paradigms</dt>
<dd class="skills__items">
Design Patterns, Test Driven Development (<abbr>TDD</abbr>), Behavior Driven Development (<abbr>BDD</abbr>),
- Continuous Integration and Delivery (<abbr>CI/CD</abbr>), RESTful APIs.
+ Continuous Integration and Delivery (<abbr>CI/CD</abbr>), Infrastructure as Code (<abbr>IaC</abbr>),
+ Configuration as Code, RESTful APIs, Micro-Services.
</dd>
<dt class="skills__title">Tools</dt>
<dd class="skills__items">
- Vim, Git, tmux, ssh, Asana, Atlassian, CircleCI, TravisCI, Terminal, bash, Notion, Sidekiq, ...
- </dd>
-
- <dt class="skills__title">Security</dt>
- <dd class="skills__items">
+ vim, git, tmux, ssh, bash, kubectl, kubevela, ansible, helmfile, vagrant, docker, certbot, dig, bosh, vault,
nc, nmap, curl, ffuf, gobuster, sqlmap, xxd, searchsploit, meta-sploit, commix, gdb, ltrace, ...
</dd>
@@ -96,6 +96,34 @@
<h2 class="work__header section-header">Work Experience</h2>
<article class="work__experience">
<div class="job-position">
+ <h2 class="job-position__company">
+ <a href="https://group.springernature.com/gp/group">Springer Nature AG & Co. KGaA</a>
+ </h2>
+ <em class="job-position__title">Platform Engineer</em>
+ <em class="job-position__duration">Feb. 2022 - Present</em>
+ <em class="job-position__location">Berlin, Germany</em>
+ </div>
+ <p class="note">Part of the Engineering Enablement team, that enables product teams to focus on
+ delivering value to the business.<br/>
+ We Provide: <br/>
+ </p>
+ <ul class="tasks">
+ <li>Platform as a Service (<abbr>PaaS</abbr>) with centralised services like
+ logging, metrics, CI/CD and caching.
+ </li>
+ <li>CloudFoundry platform capable of handling an average of 13.000 requests/min.</li>
+ <li>CloudFoundary and Kubernetes clusters with around 2.800 apps (Micro-Services).</li>
+ <li>Concourse pipelines that handle an average of 4.000 deployments/week.</li>
+ <li>Internal tooling around building pipelines for CI/CD on Concourse and GitHub actions.</li>
+ <li>Prometheus as a Service, and pre-configured customizable Grafana dashboards for developers to use.</li>
+ <li>Logging via ELK/Loki and logging metrics.</li>
+ <li>Implementing solutions for cloud services, focusing on high availability, security,
+ disaster recovery, scaling and performance.
+ </li>
+ </ul>
+ </article>
+ <article class="work__experience">
+ <div class="job-position">
<h2 class="job-position__company"><a href="https://sapera.com/">Sapera GmbH.</a></h2>
<em class="job-position__title">Senior Developer/DevOps</em>
<em class="job-position__duration">Apr. 2018 - Nov. 2021</em>
diff --git a/app/print.styl b/app/print.styl
index 7f5cff3..41ca616 100644
--- a/app/print.styl
+++ b/app/print.styl
@@ -8,6 +8,10 @@ body {
line-height: 1.3
}
+a:link, a:visited, a:hover, a:active {
+ text-decoration-thickness: 1px
+}
+
.section-header {
font-size: 18pt
margin-bottom: -0.6em
diff --git a/app/stylesheets/print/education.styl b/app/stylesheets/print/education.styl
index c3d6fd8..ebefd27 100644
--- a/app/stylesheets/print/education.styl
+++ b/app/stylesheets/print/education.styl
@@ -1,6 +1,7 @@
.education {
// avoid page breaks inside the education section
page-break-inside: avoid
+ margin-top: 75px
// remove the extra space added for the website
margin-bottom: 0
}
diff --git a/app/stylesheets/print/projects.styl b/app/stylesheets/print/projects.styl
index 8ab284c..be9dd75 100644
--- a/app/stylesheets/print/projects.styl
+++ b/app/stylesheets/print/projects.styl
@@ -1,3 +1,7 @@
-.project {
+.projects {
+ margin-top: 75px
page-break-inside: avoid
}
+
+.project {
+}
diff --git a/app/stylesheets/print/skills.styl b/app/stylesheets/print/skills.styl
index 57c51fa..e5bba67 100644
--- a/app/stylesheets/print/skills.styl
+++ b/app/stylesheets/print/skills.styl
@@ -1,3 +1,7 @@
+.skills {
+ margin-top: 75px
+}
+
.skills__content {
margin-top: 1.5em
}
diff --git a/app/stylesheets/print/work.styl b/app/stylesheets/print/work.styl
index 4e8a9be..2b57f74 100644
--- a/app/stylesheets/print/work.styl
+++ b/app/stylesheets/print/work.styl
@@ -1,3 +1,15 @@
+.work {
+ margin-top: 75px
+ margin-bottom: 180px
+}
+
.work__experience {
page-break-inside: avoid
}
+
+// Style the Company name links in the PDF with thicker underline
+.job-position__company {
+ a:link, a:visited, a:hover, a:active {
+ text-decoration-thickness: 2px
+ }
+}
diff --git a/app/stylesheets/web/work.styl b/app/stylesheets/web/work.styl
index caa127d..a989349 100644
--- a/app/stylesheets/web/work.styl
+++ b/app/stylesheets/web/work.styl
@@ -7,6 +7,20 @@
.work__experience {
}
+.work__experience {
+ &:after {
+ display: flex
+ content: ""
+ border-bottom: 1px solid
+ margin: auto
+ max-width: 30%
+ }
+ &:last-of-type:after {
+ // remove the extra horizontal line after the last work__experience
+ display: none
+ }
+}
+
.job-position {
display: flex
flex-flow: row wrap
diff --git a/app/web.styl b/app/web.styl
index 34a7f53..2e05848 100644
--- a/app/web.styl
+++ b/app/web.styl
@@ -15,7 +15,7 @@ secondaryColor = #DB0A16
}
body {
- font-family: "PT Sans", Arial, sans-serif
+ font-family: "PT Sans", "Kohinoor Bangla", sans-serif
max-width: 1024px
min-width: 375px
margin: 0 auto
@@ -30,9 +30,10 @@ main {
a:link, a:visited, a:hover, a:active {
- text-decoration: none
+ text-decoration-color: secondaryColor
+ text-decoration-thickness: 2px
+ text-underline-offset: 2px
color: inherit
- border-bottom: 1px solid secondaryColor
}
.section-header {