diff --git a/assets/sass/_custom.sass b/assets/sass/_custom.sass index 109be8f8..d33e4aee 100644 --- a/assets/sass/_custom.sass +++ b/assets/sass/_custom.sass @@ -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: ' · ' diff --git a/config/_default/menus/menu.fr.toml b/config/_default/menus/menu.fr.toml index 1cb457c5..efdc08be 100644 --- a/config/_default/menus/menu.fr.toml +++ b/config/_default/menus/menu.fr.toml @@ -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" diff --git a/content/en/about.md b/content/en/about.md deleted file mode 100644 index 55b20635..00000000 --- a/content/en/about.md +++ /dev/null @@ -1,19 +0,0 @@ -+++ -title = "About" -summary = "Who's behind this blog?" -date = "2022-07-18" -author = "Smana" -+++ - -## Who am I? - -I'm a **senior system / SRE engineer**. I have 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 had the opportunity to work with a variety of companies, from dynamic startups to large organizations, where I've helped improve platform reliability and availability while enhancing the developer experience. My journey includes supporting several companies in their transition to Cloud solutions. I've also **led SRE/DevOps teams** made up of diverse profiles, including developers and SRE engineers, with the shared goal of driving towards common objectives. - -Beyond my professional work, I'm involved in organizing the Cloud Native Computing meetup in Paris, the [Kubernetes Community Days France](https://www.kcdfrance.fr/) and the [Cloud Native Days France](https://cloudnativedays.fr/), reflecting my ongoing commitment to the Cloud ecosystem. - -Hobbies: Reading SF books, Kickboxing, Surfing, Longboarding and Inline Skating. - - -
- -_The cool thumbnails for each article were generated with DALL-E and [Nano Banana](https://gemini.google/lu/overview/image-generation) (Google)_ diff --git a/content/en/about/about.png b/content/en/about/about.png deleted file mode 100644 index 58d63e3d..00000000 Binary files a/content/en/about/about.png and /dev/null differ diff --git a/content/en/about/index.md b/content/en/about/index.md new file mode 100644 index 00000000..7f1284e0 --- /dev/null +++ b/content/en/about/index.md @@ -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)._ diff --git a/content/en/about/profile_2024.jpg b/content/en/about/profile_2024.jpg new file mode 100644 index 00000000..e30fd413 Binary files /dev/null and b/content/en/about/profile_2024.jpg differ diff --git a/content/fr/about.md b/content/fr/about.md deleted file mode 100644 index 4a5d5d3d..00000000 --- a/content/fr/about.md +++ /dev/null @@ -1,19 +0,0 @@ -+++ -title = "About" -summary = "Qui est derrière ce blog?" -date = "2022-07-18" -author = "Smana" -+++ - -## Qui suis-je? - -Je suis un **ingénieur système / SRE senior**. Je porte un intérêt particulier aux conteneurs Linux, les technologies dîtes "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 eu l'occasion de collaborer avec une 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 des solutions Cloud. J'ai également pu **diriger des équipes SRE/DevOps** composées de profils variés, incluant développeurs et ingénieurs SRE, avec pour objectif un engagement collectif vers des objectifs communs. - -En parallèle de mon parcours professionnel, je m'investis dans l'organisation du meetup Cloud Native Computing à Paris, les [Kubernetes Community Days France](https://www.kcdfrance.fr/) ainsi que les [Cloud Native Days France](https://cloudnativedays.fr/), reflétant mon engagement continu dans l'écosystème du Cloud. - -Autres centre d'intéret : Lecture de romans de science-fiction, Kickboxing, Surf, Longboard et Rollers.. - - -
- -_Les images sympas (miniatures) de chaque article ont été générées avec DALL-E et [Nano Banana](https://gemini.google/lu/overview/image-generation) diff --git a/content/fr/about/about.png b/content/fr/about/about.png deleted file mode 100644 index b094557e..00000000 Binary files a/content/fr/about/about.png and /dev/null differ diff --git a/content/fr/about/index.md b/content/fr/about/index.md new file mode 100644 index 00000000..d0ce38d7 --- /dev/null +++ b/content/fr/about/index.md @@ -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)._ diff --git a/content/fr/about/profile_2024.jpg b/content/fr/about/profile_2024.jpg new file mode 100644 index 00000000..e30fd413 Binary files /dev/null and b/content/fr/about/profile_2024.jpg differ diff --git a/layouts/shortcodes/pf-card.html b/layouts/shortcodes/pf-card.html new file mode 100644 index 00000000..d050c2f6 --- /dev/null +++ b/layouts/shortcodes/pf-card.html @@ -0,0 +1,5 @@ + +

{{ .Get "title" }}

+ {{- with .Get "subtitle" }}{{ . }}{{ end }} +
{{ .Inner | markdownify }}
+
diff --git a/layouts/shortcodes/pf-cards.html b/layouts/shortcodes/pf-cards.html new file mode 100644 index 00000000..10d596de --- /dev/null +++ b/layouts/shortcodes/pf-cards.html @@ -0,0 +1 @@ +
{{ .Inner | safeHTML }}
diff --git a/layouts/shortcodes/pf-hero.html b/layouts/shortcodes/pf-hero.html new file mode 100644 index 00000000..263f0a83 --- /dev/null +++ b/layouts/shortcodes/pf-hero.html @@ -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 -}} +
+ {{- /* 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. */ -}} + {{ .Get +
+

{{ .Get "name" }}

+

{{ .Get "tagline" }}

+
{{ .Inner | markdownify }}
+
+ {{- range .Page.Site.Menus.social }} + {{- $label := lower .Name }} + + {{- partial "sprite" (dict "icon" $label) -}} + + {{- end }} +
+
+
diff --git a/layouts/shortcodes/pf-item.html b/layouts/shortcodes/pf-item.html new file mode 100644 index 00000000..0e46f9ea --- /dev/null +++ b/layouts/shortcodes/pf-item.html @@ -0,0 +1,5 @@ +
  • + {{ .Get "period" }} + {{ .Get "role" }} + {{ .Get "company" }} +
  • diff --git a/layouts/shortcodes/pf-talk.html b/layouts/shortcodes/pf-talk.html new file mode 100644 index 00000000..5e901471 --- /dev/null +++ b/layouts/shortcodes/pf-talk.html @@ -0,0 +1,11 @@ +
  • + {{ .Get "year" }} +
    + {{- with .Get "url" }} + {{ $.Get "title" }} + {{- else }} + {{ .Get "title" }} + {{- end }} + {{ .Get "event" }} +
    +
  • diff --git a/layouts/shortcodes/pf-talks.html b/layouts/shortcodes/pf-talks.html new file mode 100644 index 00000000..af86fdb2 --- /dev/null +++ b/layouts/shortcodes/pf-talks.html @@ -0,0 +1 @@ + diff --git a/layouts/shortcodes/pf-timeline.html b/layouts/shortcodes/pf-timeline.html new file mode 100644 index 00000000..f7db9112 --- /dev/null +++ b/layouts/shortcodes/pf-timeline.html @@ -0,0 +1 @@ +