Outiref

Code source de l'URL : http://www.hugoschroder.dev/

<!DOCTYPE html><html  lang="fr"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Hugo Schroder - Ingénieur logiciel | Hugo Schroder</title><style>.menu-enter-active[data-v-933fccec],.menu-leave-active[data-v-933fccec]{transition:opacity .2s ease,transform .2s ease}.menu-enter-from[data-v-933fccec],.menu-leave-to[data-v-933fccec]{opacity:0;transform:translateY(-6px)}</style><style>.orb[data-v-0dc0c3e4]{animation:drift-0dc0c3e4 14s ease-in-out infinite alternate}.orb-slow[data-v-0dc0c3e4]{animation:drift-0dc0c3e4 18s ease-in-out infinite alternate-reverse}@keyframes drift-0dc0c3e4{0%{transform:translate(0)}to{transform:translate(40px,-30px)}}</style><link rel="stylesheet" href="/_nuxt/entry.CB5T6nq_.css" crossorigin><link rel="preload" as="fetch" crossorigin="anonymous" href="/_payload.json?2669c158-7c2a-4bca-a241-1a50724680c8"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DSC9RuHS.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/DKYbFnb9.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/wjjq8FOQ.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/C0PEUl3B.js"><link rel="modulepreload" as="script" crossorigin href="/_nuxt/XKChmyVw.js"><script type="module" src="/_nuxt/DSC9RuHS.js" crossorigin></script><link rel="apple-touch-icon" href="/apple-touch-icon.png" type="image/png" sizes="180x180"><meta name="description" content="Ingénieur logiciel - applications mobiles, SaaS, IoT et systèmes embarqués. Conception et développement de produits logiciels de bout en bout."><meta name="theme-color" content="#0D1117"><meta property="og:type" content="website"><meta property="og:site_name" content="Hugo Schroder"><meta property="og:image" content="https://hugoschroder.dev/og-image.png"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:alt" content="Hugo Schroder — Ingénieur logiciel"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:image" content="https://hugoschroder.dev/og-image.png"><meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1"><meta property="og:title" content="Hugo Schroder - Ingénieur logiciel"><meta property="og:description" content="Ingénieur logiciel - applications mobiles, SaaS, IoT et systèmes embarqués. Conception et développement de produits logiciels de bout en bout."><link rel="canonical" href="https://hugoschroder.dev/"><meta property="og:url" content="https://hugoschroder.dev/"></head><body><div id="__nuxt"><div class="flex min-h-screen flex-col bg-bg text-ink"><span></span><header class="fixed inset-x-0 top-0 z-40 border-b border-line/60 bg-bg/75 backdrop-blur-md" data-v-933fccec><nav class="mx-auto flex h-16 max-w-6xl items-center justify-between px-6" data-v-933fccec><a aria-current="page" href="/" class="router-link-active router-link-exact-active group flex items-center gap-3" aria-label="Accueil" data-v-933fccec><span class="block size-3.5 rotate-45 bg-gradient-signature transition-transform duration-300 group-hover:rotate-[225deg]" data-v-933fccec></span><span class="font-mono text-sm tracking-tight text-ink" data-v-933fccec>hugo<span class="text-muted" data-v-933fccec>.</span>schroder</span></a><ul class="hidden items-center gap-8 font-mono text-[0.8rem] tracking-wide md:flex" data-v-933fccec><!--[--><li data-v-933fccec><a href="/projects" class="text-muted transition-colors duration-200 hover:text-ink" data-v-933fccec><span class="text-primary/70" data-v-933fccec>/</span>projets</a></li><li data-v-933fccec><a href="/about" class="text-muted transition-colors duration-200 hover:text-ink" data-v-933fccec><span class="text-primary/70" data-v-933fccec>/</span>a-propos</a></li><li data-v-933fccec><a href="/contact" class="text-muted transition-colors duration-200 hover:text-ink" data-v-933fccec><span class="text-primary/70" data-v-933fccec>/</span>contact</a></li><!--]--></ul><button class="flex flex-col gap-1.5 p-2 md:hidden" aria-expanded="false" aria-label="Menu" data-v-933fccec><span class="block h-px w-6 bg-ink transition-transform duration-300" data-v-933fccec></span><span class="block h-px w-6 bg-ink transition-transform duration-300" data-v-933fccec></span></button></nav><!----></header><main class="flex-1"><div><section class="relative flex min-h-svh items-center overflow-hidden" data-v-0dc0c3e4><div data-hero-bg class="absolute inset-0" data-v-0dc0c3e4><div class="absolute inset-0 bg-blueprint mask-fade-edges" data-v-0dc0c3e4></div><div class="orb absolute -left-32 top-1/4 size-96 rounded-full bg-primary/20 blur-[120px]" data-v-0dc0c3e4></div><div class="orb-slow absolute -right-24 bottom-1/4 size-80 rounded-full bg-secondary/20 blur-[120px]" data-v-0dc0c3e4></div></div><div class="relative mx-auto w-full max-w-6xl px-6 pt-16" data-v-0dc0c3e4><p data-hero-kicker class="mb-6 font-mono text-xs tracking-[0.25em] text-primary uppercase" data-v-0dc0c3e4> hugoschroder.dev </p><h1 aria-label="Je construis des apps. Du mobile au web." class="font-display text-4xl font-bold leading-[1.08] tracking-tight sm:text-6xl lg:text-7xl" data-v-0dc0c3e4><span aria-hidden="true" class="block overflow-hidden" data-v-0dc0c3e4><!--[--><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>J</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>e</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4> </span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>c</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>o</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>n</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>s</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>t</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>r</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>u</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>i</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>s</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4> </span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>d</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>e</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>s</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4> </span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>a</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>p</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>p</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>s</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>.</span><!--]--></span><span aria-hidden="true" class="block overflow-hidden" data-v-0dc0c3e4><!--[--><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>D</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4>u</span><span data-hero-char class="inline-block whitespace-pre" data-v-0dc0c3e4> </span><span data-hero-char class="text-gradient inline-block whitespace-pre" data-v-0dc0c3e4>m</span><span data-hero-char class="text-gradient inline-block whitespace-pre" data-v-0dc0c3e4>o</span><span data-hero-char class="text-gradient inline-block whitespace-pre" data-v-0dc0c3e4>b</span><span data-hero-char class="text-gradient inline-block whitespace-pre" data-v-0dc0c3e4>i</span><span data-hero-char class="text-gradient inline-block whitespace-pre" data-v-0dc0c3e4>l</span><span data-hero-char class="text-gradient inline-block whitespace-pre" data-v-0dc0c3e4>e</span><span data-hero-char class="text-gradient inline-block whitespace-pre" data-v-0dc0c3e4> </span><span data-hero-char class="text-gradient inline-block whitespace-pre" data-v-0dc0c3e4>a</span><span data-hero-char class="text-gradient inline-block whitespace-pre" data-v-0dc0c3e4>u</span><span data-hero-char class="text-gradient inline-block whitespace-pre" data-v-0dc0c3e4> </span><span data-hero-char class="text-gradient inline-block whitespace-pre" data-v-0dc0c3e4>w</span><span data-hero-char class="text-gradient inline-block whitespace-pre" data-v-0dc0c3e4>e</span><span data-hero-char class="text-gradient inline-block whitespace-pre" data-v-0dc0c3e4>b</span><span data-hero-char class="text-gradient inline-block whitespace-pre" data-v-0dc0c3e4>.</span><!--]--></span></h1><p data-hero-sub class="mt-8 max-w-xl text-lg text-muted" data-v-0dc0c3e4> Ingénieur logiciel - Applications mobiles · SaaS · IoT </p><div data-hero-cta class="mt-10 flex flex-wrap items-center gap-4" data-v-0dc0c3e4><a href="/projects" class="group inline-flex items-center gap-2 rounded-lg bg-gradient-signature px-6 py-3 font-display text-sm font-semibold text-white transition-shadow duration-300 hover:shadow-glow" data-v-0dc0c3e4> Voir mes projets <svg class="size-4 transition-transform duration-300 group-hover:translate-x-1" viewbox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" data-v-0dc0c3e4><path d="M2 8h11M9 4l4 4-4 4" stroke-linecap="round" stroke-linejoin="round" data-v-0dc0c3e4></path></svg></a><a href="/contact" class="inline-flex items-center rounded-lg border border-line px-6 py-3 font-display text-sm font-semibold text-ink transition-colors duration-300 hover:border-primary/60 hover:text-primary" data-v-0dc0c3e4> Me contacter </a></div></div><div data-hero-scroll class="absolute bottom-8 left-1/2 -translate-x-1/2" data-v-0dc0c3e4><div class="h-10 w-px bg-gradient-to-b from-muted/0 via-muted/60 to-muted/0" data-v-0dc0c3e4></div></div></section><section class="mx-auto max-w-6xl px-6 py-24"><p data-reveal class="font-mono text-xs tracking-[0.25em] text-primary uppercase"> // domaines </p><h2 data-reveal class="mt-3 font-display text-3xl font-bold tracking-tight sm:text-4xl"> Ce que je construis </h2><div class="mt-12 grid gap-5 sm:grid-cols-2 lg:grid-cols-4"><!--[--><article data-reveal class="group rounded-xl border border-line bg-surface p-6 transition-colors duration-300 hover:border-primary/40"><div class="flex size-11 items-center justify-center rounded-lg border border-line text-primary transition-colors duration-300 group-hover:border-primary/40"><svg class="size-5" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="7" y="2.5" width="10" height="19" rx="2.5"/><path d="M10.5 5h3M12 18.5h.01"/></svg></div><h3 class="mt-5 font-display text-lg font-semibold">Applications mobiles</h3><p class="mt-2 text-sm leading-relaxed text-muted">iOS natif en SwiftUI et Android en Java. Du prototype à la publication sur les stores.</p></article><article data-reveal class="group rounded-xl border border-line bg-surface p-6 transition-colors duration-300 hover:border-primary/40"><div class="flex size-11 items-center justify-center rounded-lg border border-line text-primary transition-colors duration-300 group-hover:border-primary/40"><svg class="size-5" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="2.5" y="4" width="19" height="16" rx="2"/><path d="M2.5 9h19M6 6.5h.01M8.5 6.5h.01"/></svg></div><h3 class="mt-5 font-display text-lg font-semibold">SaaS &amp; Web Apps</h3><p class="mt-2 text-sm leading-relaxed text-muted">Applications web métier avec Vue.js, Nuxt et Symfony. Architecture API-first, données PostgreSQL.</p></article><article data-reveal class="group rounded-xl border border-line bg-surface p-6 transition-colors duration-300 hover:border-primary/40"><div class="flex size-11 items-center justify-center rounded-lg border border-line text-primary transition-colors duration-300 group-hover:border-primary/40"><svg class="size-5" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="6" y="6" width="12" height="12" rx="2"/><path d="M9 2.5V6M15 2.5V6M9 18v3.5M15 18v3.5M2.5 9H6M2.5 15H6M18 9h3.5M18 15h3.5"/></svg></div><h3 class="mt-5 font-display text-lg font-semibold">IoT &amp; Systèmes embarqués</h3><p class="mt-2 text-sm leading-relaxed text-muted">Capteurs, Raspberry Pi, Arduino et réseaux Zigbee. Supervision et automatisation Home Assistant.</p></article><article data-reveal class="group rounded-xl border border-line bg-surface p-6 transition-colors duration-300 hover:border-primary/40"><div class="flex size-11 items-center justify-center rounded-lg border border-line text-primary transition-colors duration-300 group-hover:border-primary/40"><svg class="size-5" viewbox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M4 17l5-5-5-5M11 19h9"/></svg></div><h3 class="mt-5 font-display text-lg font-semibold">DevOps &amp; Infrastructure</h3><p class="mt-2 text-sm leading-relaxed text-muted">Conteneurisation Docker, pipelines CI/CD, déploiements.</p></article><!--]--></div></section><section class="mx-auto max-w-6xl px-6 py-24"><p data-reveal class="font-mono text-xs tracking-[0.25em] text-primary uppercase"> // sélection </p><div data-reveal class="mt-3 flex flex-wrap items-end justify-between gap-4"><h2 class="font-display text-3xl font-bold tracking-tight sm:text-4xl"> Projets en vedette </h2><a href="/projects" class="group font-mono text-xs text-muted transition-colors hover:text-ink"> tous les projets <span class="inline-block transition-transform group-hover:translate-x-1">→</span></a></div><div class="mt-14 flex flex-col gap-20"><!--[--><article data-reveal class="grid items-center gap-8 lg:grid-cols-12"><a href="/projects/lenspot" class="group relative block w-full overflow-hidden rounded-xl border border-line bg-surface text-left aspect-[4/3] lg:col-span-7 lg:transition-transform lg:duration-500 lg:hover:-translate-y-1"><!--[--><img data-nuxt-img srcset="/_vercel/image?url=%2Fprojects%2Flenspot%2Faccueil.png&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fprojects%2Flenspot%2Faccueil.png&amp;w=1536&amp;q=100 2x" onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt aria-hidden="true" loading="lazy" class="absolute inset-0 size-full scale-110 object-cover opacity-25 blur-2xl" src="/_vercel/image?url=%2Fprojects%2Flenspot%2Faccueil.png&amp;w=1536&amp;q=100"><img data-nuxt-img srcset="/_vercel/image?url=%2Fprojects%2Flenspot%2Faccueil.png&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fprojects%2Flenspot%2Faccueil.png&amp;w=1536&amp;q=100 2x" onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="Écran d&#39;accueil de Lenspot" loading="lazy" class="relative z-10 size-full object-contain transition-transform duration-500 group-hover:scale-[1.02]" src="/_vercel/image?url=%2Fprojects%2Flenspot%2Faccueil.png&amp;w=1536&amp;q=100"><!----><!--]--></a><div class="lg:col-span-5"><div class="flex items-center gap-3 font-mono text-xs text-muted"><span class="text-primary">01</span><span>Mobile</span><span aria-hidden="true">·</span><span>30 jours</span></div><h3 class="mt-3 font-display text-2xl font-bold tracking-tight">Lenspot</h3><p class="mt-4 text-sm leading-relaxed text-muted">Lenspot est née d&#39;un défi simple: sortir une app iOS sur l&#39;App Store en 30 jours, seul, en partant de zéro en développement iOS. L&#39;idée : enregistrer un spot photo avec sa géolocalisation, des tags et une note, puis le retrouver sur une carte ou le partager. App 100% native en SwiftUI et SwiftData, avec des widgets WidgetKit sur l&#39;écran d&#39;accueil et une monétisation via StoreKit 2.</p><ul class="mt-5 flex flex-col gap-2"><!--[--><li class="flex items-start gap-2.5 text-sm text-ink/90"><span class="mt-[7px] block size-1.5 shrink-0 rotate-45 bg-gradient-signature"></span> Sortie sur l&#39;App Store en 30 jours, seul, de zéro</li><li class="flex items-start gap-2.5 text-sm text-ink/90"><span class="mt-[7px] block size-1.5 shrink-0 rotate-45 bg-gradient-signature"></span> Documenté jour par jour en &quot;build in public&quot;</li><li class="flex items-start gap-2.5 text-sm text-ink/90"><span class="mt-[7px] block size-1.5 shrink-0 rotate-45 bg-gradient-signature"></span> Stack 100% native : SwiftUI, SwiftData, WidgetKit, StoreKit 2</li><!--]--></ul><div class="mt-6 flex flex-wrap gap-2"><!--[--><span class="badge">SwiftUI</span><span class="badge">SwiftData</span><span class="badge">WidgetKit</span><span class="badge">StoreKit 2</span><span class="badge">App Store</span><!--]--></div><a href="/projects/lenspot" class="group/link mt-6 inline-flex items-center gap-2 font-mono text-xs text-muted transition-colors hover:text-ink"> voir le projet <span class="inline-block transition-transform group-hover/link:translate-x-1">→</span></a></div></article><article data-reveal class="grid items-center gap-8 lg:grid-cols-12"><a href="/projects/gfaim" class="group relative block w-full overflow-hidden rounded-xl border border-line bg-surface text-left aspect-[4/3] lg:col-span-7 lg:transition-transform lg:duration-500 lg:hover:-translate-y-1 lg:order-2"><!--[--><img data-nuxt-img srcset="/_vercel/image?url=%2Fprojects%2Fgfaim%2Fgfaim.png&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fprojects%2Fgfaim%2Fgfaim.png&amp;w=1536&amp;q=100 2x" onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt aria-hidden="true" loading="lazy" class="absolute inset-0 size-full scale-110 object-cover opacity-25 blur-2xl" src="/_vercel/image?url=%2Fprojects%2Fgfaim%2Fgfaim.png&amp;w=1536&amp;q=100"><img data-nuxt-img srcset="/_vercel/image?url=%2Fprojects%2Fgfaim%2Fgfaim.png&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fprojects%2Fgfaim%2Fgfaim.png&amp;w=1536&amp;q=100 2x" onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="Page d&#39;accueil de l&#39;application mobile GFaim" loading="lazy" class="relative z-10 size-full object-contain transition-transform duration-500 group-hover:scale-[1.02]" src="/_vercel/image?url=%2Fprojects%2Fgfaim%2Fgfaim.png&amp;w=1536&amp;q=100"><!----><!--]--></a><div class="lg:order-1 lg:col-span-5"><div class="flex items-center gap-3 font-mono text-xs text-muted"><span class="text-primary">02</span><span>Mobile</span><span aria-hidden="true">·</span><span>3 mois</span></div><h3 class="mt-3 font-display text-2xl font-bold tracking-tight">GFaim</h3><p class="mt-4 text-sm leading-relaxed text-muted">Projet de fin d&#39;études, réalisé en groupe de 4 : application Android permettant de gérer ses repas, son frigo, ses recettes et ses courses. L&#39;équipe était divisée en deux binômes, front Android et API. J&#39;étais sur la partie API : conception du modèle de données, contrat d&#39;API REST en Quarkus (imposé par le cadre du projet), authentification JWT et base PostgreSQL, consommés ensuite par le client Android natif en Java.</p><ul class="mt-5 flex flex-col gap-2"><!--[--><li class="flex items-start gap-2.5 text-sm text-ink/90"><span class="mt-[7px] block size-1.5 shrink-0 rotate-45 bg-gradient-signature"></span> Conception du modèle de données et du contrat d&#39;API REST</li><li class="flex items-start gap-2.5 text-sm text-ink/90"><span class="mt-[7px] block size-1.5 shrink-0 rotate-45 bg-gradient-signature"></span> API Quarkus sécurisée par JWT, consommée par le client Android</li><li class="flex items-start gap-2.5 text-sm text-ink/90"><span class="mt-[7px] block size-1.5 shrink-0 rotate-45 bg-gradient-signature"></span> Projet de fin d&#39;études, en groupe de 4 (2 API / 2 mobile)</li><!--]--></ul><div class="mt-6 flex flex-wrap gap-2"><!--[--><span class="badge">Quarkus</span><span class="badge">Java</span><span class="badge">PostgreSQL</span><span class="badge">JWT</span><span class="badge">API REST</span><span class="badge">Android</span><!--]--></div><a href="/projects/gfaim" class="group/link mt-6 inline-flex items-center gap-2 font-mono text-xs text-muted transition-colors hover:text-ink"> voir le projet <span class="inline-block transition-transform group-hover/link:translate-x-1">→</span></a></div></article><article data-reveal class="grid items-center gap-8 lg:grid-cols-12"><a href="/projects/gestion-interne-alternance" class="group relative block w-full overflow-hidden rounded-xl border border-line bg-surface text-left aspect-[4/3] lg:col-span-7 lg:transition-transform lg:duration-500 lg:hover:-translate-y-1"><!--[--><img data-nuxt-img srcset="/_vercel/image?url=%2Fprojects%2Fgestion-interne-alternance%2Fprojet-caf.png&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fprojects%2Fgestion-interne-alternance%2Fprojet-caf.png&amp;w=1536&amp;q=100 2x" onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt aria-hidden="true" loading="lazy" class="absolute inset-0 size-full scale-110 object-cover opacity-25 blur-2xl" src="/_vercel/image?url=%2Fprojects%2Fgestion-interne-alternance%2Fprojet-caf.png&amp;w=1536&amp;q=100"><img data-nuxt-img srcset="/_vercel/image?url=%2Fprojects%2Fgestion-interne-alternance%2Fprojet-caf.png&amp;w=1536&amp;q=100 1x, /_vercel/image?url=%2Fprojects%2Fgestion-interne-alternance%2Fprojet-caf.png&amp;w=1536&amp;q=100 2x" onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="Application de gestion interne" loading="lazy" class="relative z-10 size-full object-contain transition-transform duration-500 group-hover:scale-[1.02]" src="/_vercel/image?url=%2Fprojects%2Fgestion-interne-alternance%2Fprojet-caf.png&amp;w=1536&amp;q=100"><!----><!--]--></a><div class="lg:col-span-5"><div class="flex items-center gap-3 font-mono text-xs text-muted"><span class="text-primary">03</span><span>Web &amp; SaaS</span><span aria-hidden="true">·</span><span>1 an</span></div><h3 class="mt-3 font-display text-2xl font-bold tracking-tight">Refonte d&#39;une application de gestion interne</h3><p class="mt-4 text-sm leading-relaxed text-muted">Une application interne de gestion des temps et de génération de rapports existait déjà, mais était trop peu utilisée. On m&#39;a confié sa refonte complète, en autonomie : recueil des besoins auprès des utilisateurs, conception UX/UI, développement front (Vue.js/Quasar) et back (Symfony, PostgreSQL), puis dockerisation et mise en place d&#39;une pipeline CI/CD avec GitLab CI, deux aspects qui n&#39;existaient pas et que j&#39;ai ajoutés de ma propre initiative.</p><ul class="mt-5 flex flex-col gap-2"><!--[--><li class="flex items-start gap-2.5 text-sm text-ink/90"><span class="mt-[7px] block size-1.5 shrink-0 rotate-45 bg-gradient-signature"></span> Adoption quotidienne après la refonte, contre un usage très irrégulier avant (parfois plusieurs mois sans connexion)</li><li class="flex items-start gap-2.5 text-sm text-ink/90"><span class="mt-[7px] block size-1.5 shrink-0 rotate-45 bg-gradient-signature"></span> Refonte complète en solo: recueil de besoin, design, dev full-stack et infra</li><li class="flex items-start gap-2.5 text-sm text-ink/90"><span class="mt-[7px] block size-1.5 shrink-0 rotate-45 bg-gradient-signature"></span> Dockerisation et pipeline CI/CD ajoutées de ma propre initiative</li><!--]--></ul><div class="mt-6 flex flex-wrap gap-2"><!--[--><span class="badge">Symfony</span><span class="badge">Vue.js</span><span class="badge">Quasar</span><span class="badge">PostgreSQL</span><span class="badge">Docker</span><span class="badge">GitLab CI</span><!--]--></div><a href="/projects/gestion-interne-alternance" class="group/link mt-6 inline-flex items-center gap-2 font-mono text-xs text-muted transition-colors hover:text-ink"> voir le projet <span class="inline-block transition-transform group-hover/link:translate-x-1">→</span></a></div></article><!--]--></div></section><section class="mx-auto max-w-6xl px-6 py-24"><div data-reveal class="grid items-center gap-10 rounded-2xl border border-line bg-surface p-8 sm:p-12 md:grid-cols-[auto_1fr]"><div class="relative mx-auto size-40 shrink-0 md:size-48"><div class="absolute -inset-1.5 rounded-2xl bg-gradient-signature opacity-40 blur-lg"></div><div class="relative flex size-full items-center justify-center overflow-hidden rounded-2xl border border-line bg-surface-raised"><span class="font-display text-4xl font-bold text-gradient">HS</span><img data-nuxt-img sizes="(max-width: 768px) 160px, 192px" srcset="/_vercel/image?url=%2Fhugo.webp&amp;w=640&amp;q=100 160w, /_vercel/image?url=%2Fhugo.webp&amp;w=640&amp;q=100 192w, /_vercel/image?url=%2Fhugo.webp&amp;w=640&amp;q=100 320w, /_vercel/image?url=%2Fhugo.webp&amp;w=640&amp;q=100 384w" onerror="this.setAttribute(&#39;data-error&#39;, 1)" alt="Hugo Schroder" class="absolute inset-0 size-full object-cover object-center" src="/_vercel/image?url=%2Fhugo.webp&amp;w=640&amp;q=100"></div></div><div><p class="font-mono text-xs tracking-[0.25em] text-primary uppercase"> // à propos </p><p class="mt-4 max-w-2xl text-base leading-relaxed text-ink/90"> Master en ingénierie logicielle pour l&#39;internet, deux ans d&#39;alternance dans une administration publique, en autonomie sur plusieurs projets, dont une refonte complète de zéro. Curieux autant en informatique qu&#39;en dehors: du natif iOS à la domotique, et un peu de trail entre les deux. </p><a href="/about" class="group mt-6 inline-flex items-center gap-2 font-mono text-xs text-muted transition-colors hover:text-ink"> parcours complet <span class="inline-block transition-transform group-hover:translate-x-1">→</span></a></div></div></section></div></main><footer class="border-t border-line/60"><div class="mx-auto flex max-w-6xl flex-col gap-6 px-6 py-10 md:flex-row md:items-center md:justify-between"><div class="flex flex-wrap items-center gap-x-4 gap-y-2"><div class="flex items-center gap-3"><span class="block size-3 rotate-45 bg-gradient-signature"></span><p class="font-mono text-xs text-muted"> © 2026 Hugo Schroder - Ingénieur logiciel </p></div><span class="hidden text-muted/50 sm:inline" aria-hidden="true">·</span><a href="/mentions-legales" class="font-mono text-xs text-muted transition-colors hover:text-ink"> Mentions légales </a></div><ul class="flex items-center gap-6 font-mono text-xs"><li><a href="mailto:contact@hugoschroder.dev" class="text-muted transition-colors hover:text-ink">contact@hugoschroder.dev</a></li><li><a href="https://github.com/HijackCs" target="_blank" rel="noopener" class="text-muted transition-colors hover:text-ink">GitHub</a></li><li><a href="https://www.linkedin.com/in/hugo-schroder" target="_blank" rel="noopener" class="text-muted transition-colors hover:text-ink">LinkedIn</a></li><li><a href="https://www.youtube.com/@HijackDev" target="_blank" rel="noopener" class="text-muted transition-colors hover:text-ink">Youtube</a></li><li><a href="https://www.instagram.com/hijack_dev" target="_blank" rel="noopener" class="text-muted transition-colors hover:text-ink">Instagram</a></li><li><a href="https://www.tiktok.com/@hijack_dev" target="_blank" rel="noopener" class="text-muted transition-colors hover:text-ink">TikTok</a></li></ul></div></footer></div></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-seo-utils-version":"8.3.1","seo-utils":{canonicalQueryWhitelist:["page","sort","filter","search","q","category","tag"],canonicalLowercase:true,tagPriority:"low",separator:"",titleSeparator:""},"nuxt-robots":{version:"6.1.1",isNuxtContentV2:false,debug:false,credits:true,groups:[{comment:[],disallow:[""],allow:[],userAgent:["*"],contentUsage:[],contentSignal:[],_indexable:true,_rules:[],_normalized:true}],sitemap:["/sitemap.xml"],header:true,robotsEnabledValue:"index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1",robotsDisabledValue:"noindex, nofollow",cacheControl:"max-age=14400, must-revalidate",botDetection:true,pageMetaRobots:{}}},app:{baseURL:"/",buildId:"2669c158-7c2a-4bca-a241-1a50724680c8",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/ld+json" data-nuxt-schema-org="true" data-hid="schema-org-graph">{"@context":"https://schema.org","@graph":[{"@id":"https://hugoschroder.dev/#website","@type":"WebSite","description":"Ingénieur logiciel - applications mobiles, SaaS, IoT et systèmes embarqués. Conception et développement de produits logiciels de bout en bout.","inLanguage":"fr","name":"Hugo Schroder","url":"https://hugoschroder.dev/","publisher":{"@id":"https://hugoschroder.dev/#identity"}},{"@id":"https://hugoschroder.dev/#webpage","description":"Ingénieur logiciel - applications mobiles, SaaS, IoT et systèmes embarqués. Conception et développement de produits logiciels de bout en bout.","name":"Hugo Schroder - Ingénieur logiciel","url":"https://hugoschroder.dev/","@type":["WebPage","ProfilePage"],"about":{"@id":"https://hugoschroder.dev/#identity"},"isPartOf":{"@id":"https://hugoschroder.dev/#website"},"potentialAction":[{"@type":"ReadAction","target":["https://hugoschroder.dev/"]}]},{"@id":"https://hugoschroder.dev/#identity","@type":"Person","description":"Ingénieur logiciel indépendant - applications mobiles, SaaS, IoT et systèmes embarqués.","jobTitle":"Ingénieur logiciel","name":"Hugo Schroder","url":"https://hugoschroder.dev","image":{"@id":"https://hugoschroder.dev/#/schema/image/1"},"sameAs":["https://github.com/HijackCs","https://www.linkedin.com/in/hugo-schroder"]},{"@id":"https://hugoschroder.dev/#/schema/image/1","@type":"ImageObject","contentUrl":"https://hugoschroder.dev/hugo.jpg","inLanguage":"fr","url":"https://hugoschroder.dev/hugo.jpg"}]}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="true" id="__NUXT_DATA__" data-src="/_payload.json?2669c158-7c2a-4bca-a241-1a50724680c8">[{"state":1,"once":13,"_errors":14,"serverRendered":16,"path":17,"prerenderedAt":18},["Reactive",2],{"$snuxt-seo-utils:routeRules":3,"$ssite-config":4},{"head":-1,"seoMeta":-1},{"_priority":5,"defaultLocale":8,"description":9,"env":10,"name":11,"url":12},{"env":6,"url":7,"name":7,"description":7,"defaultLocale":7},-15,-3,"fr","Ingénieur logiciel - applications mobiles, SaaS, IoT et systèmes embarqués. Conception et développement de produits logiciels de bout en bout.","production","Hugo Schroder","https://hugoschroder.dev",["Set"],["ShallowReactive",15],{},true,"/",1782122630607]</script></body></html>