Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
143 changes: 143 additions & 0 deletions assets/sass/_custom.sass
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,146 @@
video
max-width: 100%
height: auto

// ---------------------------------------------------------------------------
// Portfolio (about page) — all classes prefixed pf-, colors via theme vars
// ---------------------------------------------------------------------------
.pf-hero
display: flex
align-items: flex-start
flex-wrap: wrap
gap: 2rem
margin: 2rem 0

&_photo
flex: none
width: 180px
height: 180px
margin: 0
padding: 0
border-radius: 50%
object-fit: cover
box-shadow: 0 4px 14px var(--shadow)

&_intro
flex: 1
min-width: 260px

&_name
margin: 0 0 0.35rem
padding: 0
font-size: 1.9rem
font-weight: 700
line-height: 1.15
color: var(--header-text)

&_tagline
margin: 0 0 1rem
color: var(--theme)
font-weight: 600

&_social
display: flex
gap: 0.75rem
margin-top: 0.75rem
a
svg
width: 1.5rem
height: 1.5rem
fill: var(--text)
transition: fill 0.2s var(--ease)
a:hover
svg
fill: var(--theme)

.pf-cards
display: grid
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr))
gap: 1rem
margin: 1.5rem 0

.pf-card
display: block
padding: 1.25rem
background: var(--post-bg)
border: 1px solid var(--table-border)
border-top: 3px solid var(--theme)
border-radius: 8px
transition: transform 0.2s var(--ease), box-shadow 0.2s var(--ease)

&:hover
transform: translateY(-3px)
box-shadow: 0 6px 18px var(--shadow)

&_title
margin: 0 0 0.25rem
font-size: 1.05rem

&_subtitle
color: var(--theme)
font-size: 0.85rem
font-weight: 600

&_body
color: var(--text)
font-size: 0.9rem
p
margin: 0.5rem 0 0

.pf-talks
list-style: none
padding: 0
margin: 1.5rem 0

.pf-talk
display: flex
align-items: baseline
gap: 1rem
padding: 0.6rem 0
border-bottom: 1px dashed var(--table-border)

&_year
flex: 0 0 3.2rem
color: var(--theme)
font-weight: 700

&_title
font-weight: 600

&_event
display: block
color: var(--text)
font-size: 0.85rem

.pf-timeline
list-style: none
padding: 0
margin: 1.5rem 0 1.5rem 0.5rem
border-left: 2px solid var(--theme)

.pf-item
position: relative
padding: 0 0 1.1rem 1.5rem

&::before
content: ''
position: absolute
left: -0.38rem
top: 0.35rem
width: 0.65rem
height: 0.65rem
border-radius: 50%
background: var(--theme)

&_period
display: inline-block
min-width: 7rem
font-weight: 700

&_role
font-weight: 600

&_company
color: var(--text)
&::before
content: ' · '
2 changes: 1 addition & 1 deletion config/_default/menus/menu.fr.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ name = "Liens"
weight = -108
[[main]]
name = "LinkedIn"
parent = "Liens"
parent = "Links"
url = "https://www.linkedin.com/in/sma%C3%AFne-kahlouch-44374110/"
[[main]]
name = "Bluesky"
Expand Down
19 changes: 0 additions & 19 deletions content/en/about.md

This file was deleted.

Binary file removed content/en/about/about.png
Binary file not shown.
80 changes: 80 additions & 0 deletions content/en/about/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
+++
title = "About"
summary = "Who's behind this blog?"
date = "2026-07-18"
author = "Smana"
sidebar = false
singleColumn = true
comments = false
showdate = false
showreadtime = false
showshare = false
+++

{{< pf-hero image="profile_2024.jpg" name="Smaïne Kahlouch" tagline="Platform Engineer · Cloud Native community builder" >}}
I'm a **senior system / SRE engineer** with a particular interest in Linux containers, Cloud Native technologies, and more recently in **artificial intelligence applied to software engineering** — especially AI-assisted coding using agent-based systems. Throughout my career I've worked with a wide range of companies, from dynamic startups to large organizations, helping improve platform reliability and availability while enhancing the developer experience. My journey includes supporting several companies through their transition to the Cloud, and I've also **led SRE/DevOps teams** made up of diverse profiles — developers and SRE engineers alike — all driving towards common objectives.

This blog is where I share it all: hands-on posts about Kubernetes, GitOps, security, [observability](/series/observability/)… and more recently AI.
{{< /pf-hero >}}

## Community

A long-time advocate for the cloud native ecosystem — I've been organizing meetups and conferences in Paris for a decade.

{{< pf-cards >}}
{{< pf-card title="Cloud Native Paris" subtitle="Lead organizer · 10+ years" link="https://www.meetup.com/cloud-native-computing-paris/" >}}
The Paris CNCF meetup: talks, demos and hallway discussions about the cloud native ecosystem.
{{< /pf-card >}}
{{< pf-card title="Kubernetes Community Days France" subtitle="Co-organizer" link="https://www.kcdfrance.fr/" >}}
The French community-driven Kubernetes conference.
{{< /pf-card >}}
{{< pf-card title="Cloud Native Days France" subtitle="Co-organizer" link="https://cloudnativedays.fr/" >}}
KCD France's successor: the cloud native conference for the French ecosystem.
{{< /pf-card >}}
{{< /pf-cards >}}

## Open source

Most of what I write about is backed by working code, published on [GitHub](https://github.com/Smana). Two projects I'm particularly invested in:

{{< pf-cards >}}
{{< pf-card title="cloud-native-ref" subtitle="Reference platform" link="https://github.com/Smana/cloud-native-ref" >}}
An opinionated cloud native reference platform — EKS, GitOps, Crossplane, security, observability. The backbone of many posts on this blog.
{{< /pf-card >}}
{{< pf-card title="RunLore" subtitle="AI-powered SRE agent" link="https://github.com/Smana/runlore" >}}
An open source SRE buddy that investigates incidents, points at the likely root cause fast, and turns every resolution into reusable knowledge.
{{< /pf-card >}}
{{< /pf-cards >}}

## Talks

{{< pf-talks >}}
{{< pf-talk year="2024" event="Cloud Native Paris meetup" title="eTF1: évolutions techniques et écoresponsabilité" url="https://www.youtube.com/watch?v=w7au2ZIBSXU" >}}
{{< pf-talk year="2022" event="Cloud Native Paris meetup" title="Crossplane: one step further in our GitOps journey" url="https://www.youtube.com/watch?v=TsmlSMsLXAA" >}}
{{< pf-talk year="2021" event="Cloud Native Paris meetup" title="Building a smooth CI/CD pipeline with GitOps and Flux v2" url="https://www.youtube.com/watch?v=R0BA2QMPWTE" >}}
{{< pf-talk year="2019" event="Google Cloud Summit" title="Cross cloud / on-premises: introduction to Anthos" url="https://www.youtube.com/watch?v=YdZn5o7pbXw" >}}
{{< pf-talk year="2018" event="Open R&Day" title="Our on-premises journey with Kubernetes" url="https://www.youtube.com/watch?v=TMZaUoWFucM" >}}
{{< pf-talk year="2018" event="CNCF meetup London" title="Dailymotion, from a French monolith to a worldwide platform" url="https://web.archive.org/web/20210312215049/https://skillsmatter.com/skillscasts/11465-dailymotion-from-a-french-monolith-to-a-worldwide-platform-a-human-story" >}}
{{< pf-talk year="2016" event="KubeCon Europe" title="From Heroku to Kubernetes" url="https://kubeconeurope2016.sched.com/event/6BYh" >}}
{{< /pf-talks >}}

## Career at a glance

Details on [LinkedIn](https://www.linkedin.com/in/sma%C3%AFne-kahlouch-44374110/).

{{< pf-timeline >}}
{{< pf-item period="2025 – now" role="Staff Platform Engineer" company="Aqemia" >}}
{{< pf-item period="2022 – 2025" role="SRE/Cloud & DevEx Team Leader" company="eTF1" >}}
{{< pf-item period="2021 – 2022" role="SRE/Cloud Team Leader" company="KMTX" >}}
{{< pf-item period="2021" role="Senior Site Reliability Engineer" company="Mirakl" >}}
{{< pf-item period="2017 – 2021" role="DevOps Engineering Manager" company="Dailymotion" >}}
{{< pf-item period="2016 – 2017" role="Technical Lead" company="Claranet" >}}
{{< pf-item period="2013 – 2016" role="Technical Lead, CDN R&D" company="Arkena" >}}
{{< pf-item period="2006 – 2013" role="System Engineer / NOC Coordinator" company="British Telecom" >}}
{{< /pf-timeline >}}

## Beyond the terminal

Kickboxing, running, surfing, longboarding and inline skating. When sitting still: science-fiction and fantasy books, or out riding my motorbike.

_The thumbnails for each article were generated with DALL-E and [Nano Banana](https://gemini.google/lu/overview/image-generation) (Google)._
Binary file added content/en/about/profile_2024.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
19 changes: 0 additions & 19 deletions content/fr/about.md

This file was deleted.

Binary file removed content/fr/about/about.png
Binary file not shown.
80 changes: 80 additions & 0 deletions content/fr/about/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
+++
title = "About"
summary = "Qui est derrière ce blog?"
date = "2026-07-18"
author = "Smana"
sidebar = false
singleColumn = true
comments = false
showdate = false
showreadtime = false
showshare = false
+++

{{< pf-hero image="profile_2024.jpg" name="Smaïne Kahlouch" tagline="Platform Engineer · Acteur de la communauté Cloud Native" >}}
Je suis un **ingénieur système / SRE senior**, avec un intérêt particulier pour les conteneurs Linux, les technologies dites "Cloud Native" et, plus récemment, l'**intelligence artificielle appliquée à l'ingénierie logicielle** — notamment le coding assisté par agents IA. Au fil de ma carrière, j'ai collaboré avec une grande variété d'entreprises, des startups dynamiques aux grandes structures, où j'ai contribué à optimiser la fiabilité et la disponibilité des plateformes tout en améliorant l'expérience des développeurs. Mon parcours inclut l'accompagnement de plusieurs sociétés dans leur migration vers le Cloud, et j'ai également pu **diriger des équipes SRE/DevOps** composées de profils variés — développeurs comme ingénieurs SRE — tous engagés vers des objectifs communs.

Ce blog est l'endroit où je partage tout cela : des articles pratiques sur Kubernetes, GitOps, la sécurité, [l'observabilité](/fr/series/observability/)… et plus récemment l'IA.
{{< /pf-hero >}}

## Communauté

Engagé de longue date dans l'écosystème cloud native — j'organise des meetups et conférences à Paris depuis une décennie.

{{< pf-cards >}}
{{< pf-card title="Cloud Native Paris" subtitle="Organisateur principal · 10+ ans" link="https://www.meetup.com/cloud-native-computing-paris/" >}}
Le meetup CNCF parisien : talks, démos et échanges autour de l'écosystème cloud native.
{{< /pf-card >}}
{{< pf-card title="Kubernetes Community Days France" subtitle="Co-organisateur" link="https://www.kcdfrance.fr/" >}}
La conférence Kubernetes communautaire française.
{{< /pf-card >}}
{{< pf-card title="Cloud Native Days France" subtitle="Co-organisateur" link="https://cloudnativedays.fr/" >}}
Le successeur des KCD France : la conférence cloud native de l'écosystème français.
{{< /pf-card >}}
{{< /pf-cards >}}

## Open source

La plupart de mes articles s'appuient sur du code fonctionnel, publié sur [GitHub](https://github.com/Smana). Deux projets me tiennent particulièrement à cœur :

{{< pf-cards >}}
{{< pf-card title="cloud-native-ref" subtitle="Plateforme de référence" link="https://github.com/Smana/cloud-native-ref" >}}
Une plateforme cloud native de référence — EKS, GitOps, Crossplane, sécurité, observabilité. La colonne vertébrale de nombreux articles de ce blog.
{{< /pf-card >}}
{{< pf-card title="RunLore" subtitle="Agent SRE dopé à l'IA" link="https://github.com/Smana/runlore" >}}
Un compagnon SRE open source qui investigue les incidents, pointe rapidement la cause racine probable et transforme chaque résolution en connaissance réutilisable.
{{< /pf-card >}}
{{< /pf-cards >}}

## Talks

{{< pf-talks >}}
{{< pf-talk year="2024" event="Meetup Cloud Native Paris" title="eTF1 : évolutions techniques et écoresponsabilité" url="https://www.youtube.com/watch?v=w7au2ZIBSXU" >}}
{{< pf-talk year="2022" event="Meetup Cloud Native Paris" title="Crossplane : one step further in our GitOps journey" url="https://www.youtube.com/watch?v=TsmlSMsLXAA" >}}
{{< pf-talk year="2021" event="Meetup Cloud Native Paris" title="Building a smooth CI/CD pipeline with GitOps and Flux v2" url="https://www.youtube.com/watch?v=R0BA2QMPWTE" >}}
{{< pf-talk year="2019" event="Google Cloud Summit" title="Cross cloud / on-premises : introduction to Anthos" url="https://www.youtube.com/watch?v=YdZn5o7pbXw" >}}
{{< pf-talk year="2018" event="Open R&Day" title="Our on-premises journey with Kubernetes" url="https://www.youtube.com/watch?v=TMZaUoWFucM" >}}
{{< pf-talk year="2018" event="Meetup CNCF Londres" title="Dailymotion, from a French monolith to a worldwide platform" url="https://web.archive.org/web/20210312215049/https://skillsmatter.com/skillscasts/11465-dailymotion-from-a-french-monolith-to-a-worldwide-platform-a-human-story" >}}
{{< pf-talk year="2016" event="KubeCon Europe" title="From Heroku to Kubernetes" url="https://kubeconeurope2016.sched.com/event/6BYh" >}}
{{< /pf-talks >}}

## Parcours en bref

Le détail est sur [LinkedIn](https://www.linkedin.com/in/sma%C3%AFne-kahlouch-44374110/).

{{< pf-timeline >}}
{{< pf-item period="2025 – auj." role="Staff Platform Engineer" company="Aqemia" >}}
{{< pf-item period="2022 – 2025" role="SRE/Cloud & DevEx Team Leader" company="eTF1" >}}
{{< pf-item period="2021 – 2022" role="SRE/Cloud Team Leader" company="KMTX" >}}
{{< pf-item period="2021" role="Senior Site Reliability Engineer" company="Mirakl" >}}
{{< pf-item period="2017 – 2021" role="DevOps Engineering Manager" company="Dailymotion" >}}
{{< pf-item period="2016 – 2017" role="Technical Lead" company="Claranet" >}}
{{< pf-item period="2013 – 2016" role="Technical Lead, CDN R&D" company="Arkena" >}}
{{< pf-item period="2006 – 2013" role="Ingénieur système / Coordinateur NOC" company="British Telecom" >}}
{{< /pf-timeline >}}

## Au-delà du terminal

Kickboxing, course à pied, surf, longboard et rollers. Et quand je ne bouge pas : romans de science-fiction et de fantasy, ou des virées à moto.

_Les miniatures de chaque article ont été générées avec DALL-E et [Nano Banana](https://gemini.google/lu/overview/image-generation) (Google)._
Binary file added content/fr/about/profile_2024.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions layouts/shortcodes/pf-card.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<a class="pf-card" href="{{ .Get "link" }}"{{ if hasPrefix (.Get "link") "http" }} target="_blank" rel="noopener"{{ end }}>
<h3 class="pf-card_title">{{ .Get "title" }}</h3>
{{- with .Get "subtitle" }}<span class="pf-card_subtitle">{{ . }}</span>{{ end }}
<div class="pf-card_body">{{ .Inner | markdownify }}</div>
</a>
1 change: 1 addition & 0 deletions layouts/shortcodes/pf-cards.html
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<div class="pf-cards">{{ .Inner | safeHTML }}</div>
29 changes: 29 additions & 0 deletions layouts/shortcodes/pf-hero.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{{- $img := .Page.Resources.GetMatch (.Get "image") -}}
{{- $src := .Get "image" -}}
{{- with $img -}}
{{- $r := .Resize "360x" -}}
{{- $webp := try ($r.Process "webp q90") -}}
{{- if $webp.Err -}}
{{- $src = $r.RelPermalink -}}
{{- else -}}
{{- $src = $webp.Value.RelPermalink -}}
{{- end -}}
{{- end -}}
<section class="pf-hero">
{{- /* title=" " opts out of the theme's AltImage caption JS (index.js), which
otherwise removes the image's next sibling (our intro) and captions the alt. */ -}}
<img class="pf-hero_photo" src="{{ $src }}" alt="{{ .Get "name" }}" title=" " width="180" height="180" loading="eager" decoding="async">
<div class="pf-hero_intro">
<h2 class="pf-hero_name">{{ .Get "name" }}</h2>
<p class="pf-hero_tagline">{{ .Get "tagline" }}</p>
<div class="pf-hero_bio">{{ .Inner | markdownify }}</div>
<div class="pf-hero_social">
{{- range .Page.Site.Menus.social }}
{{- $label := lower .Name }}
<a href="{{ .URL }}" title="{{ .Name }}" aria-label="{{ .Name }}" class="{{ $label }}" target="_blank" rel="noopener">
{{- partial "sprite" (dict "icon" $label) -}}
</a>
{{- end }}
</div>
</div>
</section>
Loading
Loading