FR EN
Open to opportunities & missions

> SRE / DevOps Engineer

From design to deployment, I handle it all.

SRE by trade, full-stack developer by training: I build your application and the infrastructure that keeps it reliably available. Development, testing, security, deployment, automation: the full chain, handled end to end.

Maxence Labbé, SRE / DevOps Engineer
Maxence Labbé Bordeaux, FR · remote OK
Download CV ↓
Banking platform run in production
Autonomous · Resilient · Proactive
Tech (EPITECH) + business (IAE) trained
Bordeaux · Remote

// What I do

Four jobs, one goal: reliability

01

Run

Your applications stay online, even when a server goes down.

+ Technical detail − Hide detail

Docker / Compose container orchestration, Kubernetes, high availability.

02

Watch

I catch problems before your users do.

+ Technical detail − Hide detail

End-to-end observability with Grafana, Prometheus and Loki: metrics, logs, tuned alerts.

03

Automate

Every update ships by itself, with no human error.

+ Technical detail − Hide detail

GitLab CI pipelines, Ansible, Bash: from commit to production, hands-free.

04

Secure

Your passwords and access keys never lie around.

+ Technical detail − Hide detail

Secret centralisation, servers locked down end-to-end, CI best practices.

// A concrete example

From code to production, with no human intervention

What happens between a developer finishing a change and it going live. On my platforms, everything is automatic: fewer errors, more frequent updates, and a rollback in seconds if needed.

  1. Commit Code is pushed
  2. Tests Automatic checks
  3. Build The app is assembled
  4. Security Vulnerability scan
  5. Deploy Progressive rollout
  6. Live Monitored 24/7

// Career

Experience & education

From business management to running production infrastructure. A hybrid tech ↔ business path.

Experience

Kéria

Sep 2023 – Present
Full-time · SRE & DevOps ◦ Bordeaux

Owner of the infrastructure and deployment chain for a banking & real-estate platform in production.

+ Technical detail − Hide detail
Orchestration: containerised production infra running on Docker.
Observability: end-to-end monitoring with Grafana and Prometheus (logs, metrics, alerts).
Security & IaC: Ansible optimisation and secret centralisation via Infisical.
CI/CD: design and tuning of GitLab CI pipelines.
DockerAnsibleGitLab CIGrafanaPrometheusInfisicalPostgreSQLMongoDBLinux

Lexo

Sep 2025 – Jun 2026
Co-founder & CTO ◦ South-West France

Sovereign B2B AI suite for legal and finance professionals.

+ Technical detail − Hide detail
Document workflow: email triage, assisted drafting, contract analysis (risky clauses, deadlines).
End-to-end architecture: AI pipeline, sovereign EU infra (ISO 27001, GDPR), AES-256 encryption.
Semantic search and a legal chat sourced on case law.
Native Gmail / Outlook integrations, per-client isolation. B2B SaaS in a regulated sector.
TypeScriptAI / RAGSemantic searchSovereign infraAES-256Gmail / Outlook

Extencia

www.extencia.fr Apr 2023 – Sep 2023
Internship · IT Assistant ◦ Bordeaux

Internal tooling and process automation for business teams.

+ Technical detail − Hide detail
Recurring task automation via VBA / OLE on the Office suite.
Power BI dashboards built from heterogeneous data sources.
SharePoint integration to centralise business data access.
Excel / VBAPower BISharePoint

VetCare

Sep 2022 – Apr 2023
Co-founder · SRE / DevOps ◦ Bordeaux

SaaS platform for the veterinary sector: design, deployment and operation.

+ Technical detail − Hide detail
Production service orchestration via Docker Compose.
Full-stack development: ReactJS front-end, Ruby back-end, MongoDB database.
Set up and ran the infrastructure end-to-end.
Docker ComposeReactJSRubyMongoDB

Groupe Rhinos

Sep 2021 – Dec 2021
Internship · Full-stack ◦ La Rochelle

Cybersecurity and network visualisation tooling.

+ Technical detail − Hide detail
Built a real-time interactive map of cyber-attacks.
Deployed web environments via Docker-compose and Django.
Python network surveillance scripts · Root Me score: 1350.
PythonDjangoDocker-composeCybersecurity

Education

2020 – 2025 · Bordeaux

Epitech Bordeaux

Master of Science · IS Architect

IT Expertise

Data & AI option

2018 – 2020 · Bordeaux

Pôle Universitaire des Sciences de Gestion

Business management degree (DUT GEA)

Finance, management, strategy

Accounting & Financial Management option

2017 – 2018 · La Rochelle

Lycée René-Josué Valin

Scientific Baccalaureate

Mathematics option

Spoken

French Native
English Intermediate · pro
Spanish Beginner

// Skills

The everyday stack

The tools I run in production, what they deliver, and what they add up to on a real project.

Languages

→ Build & script
  • TypeScript / JS
  • C
  • C++
  • Python
  • Bash
  • HTML
  • CSS

Infrastructure & Cloud

→ Host & orchestrate
  • Docker
  • Kubernetes
  • Linux
  • Traefik
  • Nginx
  • Scaleway
  • OVH
  • IONOS

Automation

→ Deploy without human error
  • GitLab CI/CD
  • Ansible
  • Terraform
  • Cron

Full-stack

→ Build the application
  • ReactJS
  • NestJS
  • NextJS
  • Astro
  • Hooks
  • TanStack
  • Tailwind
  • FastAPI
  • RabbitMQ

AI

→ Integrate intelligence
  • LLM
  • OCR
  • RAG
  • NER
  • On-premise
  • Harness
  • Models
  • Gateway
  • Sovereignty
  • Frugal

Security & Authentication

→ Security-first mindset
  • SOC
  • Audit
  • Security-first
  • SSO
  • JWT
  • OAuth 2.0
  • RBAC

Data & Storage

→ Store & analyse
  • PostgreSQL
  • MongoDB
  • Redis
  • S3 Storage
  • Power BI

Observability

→ Measure & understand
  • Grafana
  • OpenTelemetry
  • Prometheus
  • Loki
  • Promtail

Tools

→ Code day to day
  • Antigravity
  • Cursor
  • Claude
  • Gemini
  • Git
  • Linear

In practice

Those tools, assembled. For each topic: the problem it poses in production, the approach I take, then the concrete steps. Click one to unfold it.

Technical foundation

01
Deployment automation
A GitLab CI pipeline that tests, scans, builds and ships with no manual step.

A deployment done by hand is a deployment the team dreads, so it gets postponed. It eventually goes out on a Friday evening carrying three weeks of accumulated change, and nobody can tell which one broke production.

I build a chain that turns a release back into a non-event: a merge, a green pipeline, it's live. The image validated on staging is the one that ships, and the rollback is ready before anyone needs it.

How I build it
  1. The pipeline split into short, readable stages: lint, unit and integration tests, image build, vulnerability scan (Trivy) on the final image, publication to the registry.
  2. Separate environments and explicit promotion: the image validated on staging is exactly the one that reaches production, never a fresh build.
  3. Automated deployment to the target at hand, Ansible on VMs, Helm or kubectl on a cluster, with secrets read at runtime from the vault and never written into the repository.
  4. A rollback prepared and rehearsed: previous image identified, switch-back procedure known, and a pipeline that fails before it breaks things rather than after.
  5. A runbook handed to the team: how to read a red pipeline, what to re-run, who to tell.
02
Infrastructure tuning & scalability
Bottlenecks found under real load, scaling driven by the metric that matters, the bill brought back down.

An infrastructure that is slow and expensive rarely has a single culprit. The reflex is to add machines, which treats the symptom at full price and hides the real bottleneck until the next spike.

I measure under realistic load first, then touch only what actually weighs. Elasticity is then wired to the metric that genuinely describes load, and sizing comes back down on everything that was idling.

How I build it
  1. Traffic mapped and hot paths instrumented, then put under realistic load to see where the time actually goes: database, network, serialisation, queue wait.
  2. Bottlenecks fixed in order of impact: missing indexes, N+1 queries, synchronous calls moved to asynchronous, caching where the computation is stable.
  3. Autoscaling wired to the metric that genuinely describes load, RabbitMQ queue depth for a worker pool, rather than CPU, which rises too late and falls too early.
  4. Sizing brought back down on whatever was idling: requests and limits fitted to the measurements, orphaned resources removed, non-production environments switched off overnight.
  5. Hardening along the way (exposed surface reduced, named access, secrets taken out of plain environment variables) and an impact / effort roadmap for what comes next.
03
End-to-end observability
OpenTelemetry instrumentation, central collection, Grafana dashboards, and alerts that wake nobody for nothing.

A system nobody measures is a system whose outage gets reported by its users. And when probes finally go in under pressure, they arrive piecemeal: every service its own format, every team its own tool, and nobody able to tie a slow page back to its cause.

I lay the whole chain, traces, metrics and logs, across the services that matter, behind one collection point that keeps applications independent of the storage. The work stops when an incident shows up on a screen before a user writes in.

How I build it
  1. Instrumentation of the services worth watching, APIs, workers, RabbitMQ brokers, Linux hosts, with the OpenTelemetry SDKs on the application side and exporters on the system side.
  2. An OpenTelemetry Collector deployed on a dedicated host: it receives traces, metrics and logs, enriches them (service, environment, version) and routes them to Prometheus and Loki, without coupling the applications to the storage backend.
  3. Grafana wired to both sources, with two families of dashboards: a business view (volumes processed, perceived latency, failure rate) and a developer view (per service: requests, errors, saturation, queue depth).
  4. Alert rules on the critical points only, calibrated against real history to avoid alert fatigue, routed where the team actually is: a Discord or Slack webhook, email, on-call.
  5. Documentation: what each dashboard is saying, what each alert means, and the first-response runbook.
04
Containerisation & orchestration
Reproducible images, Kubernetes orchestration, probes and resources set from measurements.

"It works on my machine" is the symptom of an environment nobody ever wrote down. While it lives in one person's head and in a server's shell history, every new machine and every new joiner restarts the same investigation.

Containerising writes that environment down once and for all; orchestrating decides in advance what happens when an instance dies at three in the morning. I do both, with the cutover documented.

How I build it
  1. Multi-stage Dockerfiles: the build chain stays in the intermediate image, the final image carries only the runtime and the artifact, run by a non-root user.
  2. docker-compose for developer machines and for staging: the same service topology, database and broker included, brought up with one command.
  3. Configuration taken out of the image: environment variables, secrets mounted at start-up, and healthchecks that answer the real question, whether the service can handle a request rather than merely whether the process is alive.
  4. Moving to the cluster: Kubernetes manifests (Deployment, Service, Ingress) or a Helm chart where configuration varies between environments, liveness and readiness kept distinct, requests and limits set from measurements, Traefik as the ingress.
  5. A documented cutover: start-up order, rollback procedure, and what to watch during the first few hours.
05
Secrets management
A central vault, rotation, injection in CI and at runtime, secrets out of the repository.

Secrets almost never leak through a sophisticated attack. They leak through a committed .env, a password pasted into a Slack channel, a former colleague who left six months ago and still has access.

I close those paths one by one. Secrets leave the repository and the images to live in a vault, services read them at start-up, and revoking access becomes a one-minute job.

How I build it
  1. An inventory of what exists: what is lying where, who can reach it, what has already been exposed in the Git history, with immediate revocation of whatever has.
  2. A central vault (Infisical or Vault) organised by project and environment, with per-team rights rather than one shared login.
  3. Reading at runtime: the pipeline and the services query the vault at start-up, so no secret remains in the repository, in an image, or in project variables.
  4. Rotation set up on what matters, and a written joiner / leaver procedure so revoking access takes a minute rather than a meeting.
06
Authentication & authorisation
OIDC, short-lived tokens, rotating refresh, and rights checked server-side resource by resource.

An application online with no barrier is a public database with a user interface. And a barrier placed only in the front end gives the same result while suggesting the opposite: calling the API directly walks straight past it.

I put the check where it holds, on the server, on every request. Credentials go through the identity provider already in place, sessions stay short and revocable, and every sensitive access leaves a trace.

How I build it
  1. Accounts and their lifecycle: sign-up, sign-in, forgotten password, address verification, passwords hashed with a memory-hard algorithm (Argon2, bcrypt), never encrypted, never in the clear.
  2. Sign-in through an existing identity provider (Google, Microsoft) over OAuth 2.0 / OIDC, with the local and federated accounts tied to one identity.
  3. Sessions: a short-lived access token, a rotating and revocable refresh token, immediate invalidation on sign-out and on password change.
  4. Authorisation by role and by resource, checked on the server at every call, since the interface hides but does not protect, with sensitive access logged.
07
Solid databases
A schema thought through, versioned migrations run in CI, backups whose restore has been tested.

A database thrown together holds up until the day it has to change or be restored. Both days always come, often in the same month, and that is when the nightly backup turns out never to have been read back.

I put the schema back in order, make changes replayable by versioning the migrations, and verify the backup by actually restoring it.

How I build it
  1. Engine chosen from the real access patterns (PostgreSQL, MySQL, MongoDB, Redis alongside), not from habit.
  2. Modelling: integrity constraints placed in the database rather than in application code, indexes derived from the queries actually run and checked against the execution plan.
  3. Versioned, reversible migrations kept in the repository and run automatically in CI against a copy before they touch production.
  4. Migration of the existing data, with the cutover rehearsed in full before the real one.
  5. Automatic backups with point-in-time recovery, and above all a restore actually replayed, because a backup never restored is not a backup.

Artificial intelligence

08
Self-hosted open-source models
GPU sized properly, models served by vLLM or Ollama, a private API, data that never leaves.

As soon as volumes become regular or the data is sensitive, sending every request to an external provider gets expensive and questionable. The price tracks usage with no ceiling, and the documents end up with a third party.

I run an open model on hardware we control, sized honestly for the real load, behind a private API. The data never leaves the perimeter, the whole thing is hostable in France, and the cost becomes predictable again.

How I build it
  1. Sizing from the target model and the expected load: VRAM required at a given quantization, throughput in tokens per second, number of concurrent requests to sustain.
  2. The model served by vLLM or Ollama depending on the need, throughput and batching on one side, operational simplicity on the other, with quantization picked for the right quality / memory trade-off.
  3. A private API exposed to the applications behind authentication, in the OpenAI format so application code stays portable from one model to the next.
  4. Hosting in France where data sovereignty matters, and GPU monitoring wired into the same Grafana stack as the rest of the infrastructure.
09
AI built into a product
Serverless calls billed per token, a model sized to each task, costs capped and traced.

An AI feature is judged on what it produces, not on the size of the model behind it. Always reaching for the biggest available model means a bill that climbs for quality that is often identical, and with no test set nobody can say whether a change improved anything.

I split the need into tasks and give each one the smallest model that holds it. Calls stay serverless while the volume does not warrant infrastructure, spending is capped, and every change is measured against real cases.

How I build it
  1. The need split into tasks, and one model chosen per task: a small fast model to classify or extract, a large one only where the reasoning warrants it.
  2. Serverless integration billed on usage: no dedicated infrastructure to operate until the volume justifies it.
  3. Guardrails: outputs constrained by schema, bounded length, retry on failure, and spending caps per key and per period.
  4. An evaluation set built from the product's real cases and replayed on every model or prompt change, so "it works better" is a measurement and not an impression.
  5. Usage and cost tracked per feature and surfaced in the same dashboards as everything else.
10
Unified gateway
One address in front of every model: per-team quotas, failover, and costs broken down.

Past two providers, every application starts carrying its own keys, its own call format and its own error handling. Switching model then takes a redeployment, and nobody can say which team is consuming what.

I bring all of it back to a single point. Applications speak one format, routing lives in configuration, and each team gets its own key, quota and cost line.

How I build it
  1. A gateway (LiteLLM or equivalent) placed in front of every model, open and proprietary alike, with one call format whatever sits behind it.
  2. Virtual keys per application and per team, with quotas and caps, so a runaway key no longer eats everyone else's budget.
  3. Routing and failover declared in configuration, default model, fallback on outage, split across providers, without touching application code.
  4. Usage and costs exported to Prometheus and readable in Grafana, broken down by key, by model and by application.
11
Data hosted and processed in France
The whole chain on French providers, data that never leaves the country.

Data handed to an American service stays subject to foreign law, even when it sits in a European region. And the question never comes alone: there is the hosting, but also the backups, the logs, the tracking tools and the AI models, which often go elsewhere without anyone having decided it.

I stand the whole chain up on French providers, Scaleway, OVH or IONOS, and check that nothing slips out through a side door. It becomes possible to say where every piece of data lives, who can reach it, and to prove it.

How I build it
  1. An inventory of the flows: where data arrives, where it is stored, where it is copied, and which third-party services see it along the way (analytics, transactional email, backups, monitoring).
  2. Hosting with a French provider, compute, object storage and database included, with regions set explicitly rather than left at their default.
  3. Third-party services that exfiltrate replaced: self-hosted monitoring (Grafana, Loki, Prometheus), audience measurement with no transfer outside the EU, email through a European provider.
  4. AI models served on GPUs in France whenever the processing touches sensitive data, rather than through an API sitting elsewhere.
  5. Encryption at rest and in transit, named and logged access, and documentation of where each processing operation happens, ready for an audit.

Product design

12
Websites & application design
Scoping, full-stack development, and a deployment chain stood up from day one.

A product delivered without its deployment chain or its documentation is not finished: it is sitting on a machine. Whoever picks it up next starts from scratch, and the smallest fix begins with working out how the thing went live.

I build the product and its chain at the same time. Deployment, observability and backups exist before go-live, and the code stays legible for whoever picks it up next.

How I build it
  1. Scoping: what the product has to do, in what order, and which technical trade-offs that imposes, written down and argued before the first line.
  2. Full-stack development, front and back, with the data schema settled early because that is what costs the most to change later.
  3. Infrastructure, pipeline and deployment stood up in the first week: shipping continuously from the start rather than discovering production at the end.
  4. Observability and backups in place before go-live, not after the first incident.
  5. Architecture decisions written down, a legible repository, and a walkthrough with the team taking the project on.
13
MVP support
The smallest scope that actually answers the question, online and instrumented from v1.

A badly scoped MVP turns into a full product delivered half-built: too long to make to learn quickly, too incomplete to convince anyone. And with nothing measured once it is live, the test settles nothing.

I start from the hypothesis to validate and cut everything that does not answer it. The rest is written down but not built, v1 ships with its telemetry, and the review comes with numbers.

How I build it
  1. The hypothesis to test stated plainly, and the scope cut to the minimum that answers it, with the rest written down rather than built.
  2. Technical choices sized for that scale: simple, but with no dead end that would force a rewrite if it works.
  3. The MVP deployed and usable by real users, behind a real domain name, with authentication where the context calls for it.
  4. Usage telemetry in place from v1: journeys tracked, drop-offs spotted, without which the test says nothing.
  5. A measured review at the end, and an explicit plan: what we keep, what we drop, what we rebuild properly.

Steering & data

14
Dashboards & BI
Sources connected, indicators defined with the business, refresh scheduled and monitored.

A dashboard is only worth something if somebody changes a decision after looking at it. The hard part isn't drawing curves: it's that two departments compute the same indicator two different ways, and nobody knows which one counts.

I have each number defined by the people who use it, then write that definition next to the number. Views are built by use, and the refresh is monitored so a dashboard never lies quietly.

How I build it
  1. Connection to the sources as they are: production database in read-only, exports, APIs, business spreadsheets.
  2. Indicators defined with the people who will use them, the exact calculation, the period, the exclusions, and those definitions written next to the number.
  3. Views built by use: one short steering view to decide from, detailed views for those who dig.
  4. Refresh scheduled and monitored, with an alert if a source stops feeding, because a dashboard frozen on yesterday's data is worse than no dashboard.
  5. Access by role, and a walkthrough so the team can evolve the views without me.
15
FinOps
Cloud costs collected, broken down per service, tracked in Grafana, alerted on overrun.

A cloud bill that climbs without explanation is nearly always a bill nobody can break down. Until every euro is attached to a service, no optimisation can be arbitrated and the discussion ends in impressions.

I tag the resources so the breakdown becomes possible, then surface cost in the same dashboards as load. Every optimisation is then comparable, and verifiable on the following month's bill.

How I build it
  1. Costs collected per provider and resources tagged systematically (project, environment, team), without which no breakdown is possible.
  2. Tracking dashboards in Grafana, next to the technical metrics: the cost of a service becomes a metric like any other, comparable to the load it serves.
  3. The main line items analysed: resources oversized against the measurements, non-production environments left running, storage and backups never pruned, avoidable egress traffic.
  4. Optimisations applied and then verified, with the effect measured on the following month's bill.
  5. Overrun alerts per scope, so the surprise lands while there is still time to act rather than at closing.

Beyond the tech

A way of working that matters as much as the technical skills, day to day.

Incident handling

When production breaks, panicking has never fixed anything. I isolate, restore the service, document, then come back to the root cause with a clear head.

Business analysis

I studied business before tech, and it serves me daily: an SLO isn't just a curve, it's also costs and customers left waiting.

Technical curiosity

I like trying new tools, even breaking them on my home lab. That way, whatever reaches production I've already put through its paces elsewhere.

Rigour & organisation

I'd rather keep the docs current and the tasks tracked than rely on a good memory. It spares the nasty surprises, mine and the next person's.

// Interests

Away from the keyboard

What fills my evenings and weekends, away from the screen.

Sport

Strength · Calisthenics · Running

Strength training, calisthenics and running, several times a week. It's what helps me switch off and keep a decent balance.

Finance & Economics

Markets · Analysis · Investing

I follow the markets and economic news closely, and manage my own investments. A leftover from my business studies that never wore off.

DIY & Robotics

ESP32 · 3D modelling · Woodwork

ESP32 boards, 3D modelling, woodworking. After days spent inside abstract systems, it feels good to build something you can hold.

Photography

Travel · Everyday

Travelling or just down my own street: I enjoy looking for the right frame and the right light, nothing more pretentious than that.

// Projects

What I'm building

Ongoing client work, open-source experiments and capabilities ready to plug into a mission.

LabbTech

labbtech.fr
Consulting & design studio

My independent consulting & design studio. A single point of contact who designs, codes and operates, from the first line to production.

The technical foundation (deployments, infra, security, data), useful and frugal AI that can be hosted in France, bespoke product design, steering by the numbers, and taking over projects already under way.

Around me, a network of developers, designers and specialists I bring in as the project demands, while you deal with one contact only.

  • Bespoke apps
  • Websites & SaaS
  • Infrastructure & Cloud
  • CI/CD & Automation
  • Observability
  • Security
  • Hosted in France
  • Advisory & audit
  • MVP & prototypes
P01 Mission

Gallisa

In development

Mobile web app to streamline screening tests in pharmacies.

  • NextJS
  • Medical
  • RAG
P02 Mission

Domaine du Marensin

Showcase site · rental

Design of a showcase website for renting out a villa.

  • Showcase site
  • Web design
  • Rental
P03 Mission

Grecromavia

Decision support · medical

App that quickly assesses the immunological risk when a transplant is proposed.

  • Medical
  • Transplant
  • Immunology
P04 Mission

VetCare

Pet health records

Digital health records for better animal follow-up, between vets and owners.

  • Medical
  • Tracking
  • Reliability
P05 Mission

Network Analyser

Audit

Python tool for open-port analysis and flaw detection, built for fast audits.

  • Python
  • Security
  • Nmap
P06 Mission

Cyberattack Visualiser

Real-time · replay

Live visualisation of cyberattacks, with a replay feature to rewind and analyse incidents.

  • Python
  • Security
  • Real-time
  • Replay

// Contact

Let's talk.

Recruiter or future client: tell me about your need and let's take 30 minutes to talk it through. Reply within 24-48 business hours.